diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
deleted file mode 100644
index 72334791..00000000
--- a/.github/workflows/pre-commit.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-name: pre-commit
-
-on:
- pull_request:
- push:
- branches: [master]
-
-jobs:
- pre-commit:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-python@v2
- - uses: pre-commit/action@v2.0.0
diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml
index cb7120fa..bd4f7e10 100644
--- a/.github/workflows/python-package.yml
+++ b/.github/workflows/python-package.yml
@@ -14,23 +14,27 @@ jobs:
runs-on: ubuntu-latest
strategy:
+ fail-fast: false
matrix:
- python-version: [3.8]
+ python-version: [ "3.12", "3.13", "3.14" ]
steps:
- - uses: actions/checkout@v2
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
- with:
- python-version: ${{ matrix.python-version }}
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- python -m pip install pytest
-
- pip install leidenalg
- if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- pip install louvain
- - name: Test with pytest
- run: |
- pytest
+ - uses: actions/checkout@v6
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v6
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -e .[dev,test]
+ - name: Check style
+ run: |
+ black stlearn tests
+ ruff check stlearn tests
+ - name: Check types
+ run: |
+ mypy stlearn tests
+ - name: Test with pytest
+ run: |
+ pytest
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index c5ab06d4..fcd9e498 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,21 +1,71 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
*.pyc
-.ipynb_checkpoints
-*/.ipynb_checkpoints/*
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
build/
+docs/api/
+docs/_build/
+docs/generated/
+data/samples
+develop-eggs/
dist/
-*.egg-info
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# Unit tests / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+*/.ipynb_checkpoints/*
/*.ipynb
+
+# Data files
/*.csv
-output/
+
+# MacOS caching
.DS_Store
*/.DS_Store
+
+# PyCharm etc
.idea/
-docs/_build
+
+# Sphinx documentation
+docs.bk/_build
+
+# Distribution/package/temporary files
data/
tiling/
-.pytest_cache
figures/
*.h5ad
-inferCNV/
-stlearn/tools/microenv/cci/junk_code.py
-stlearn/tools/microenv/cci/.Rhistory
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 6a8f1a14..132ae893 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,4 +1,28 @@
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+# Set the OS, Python version, and other tools you might need
build:
- image: latest
+ os: ubuntu-24.04
+ tools:
+ python: "3.12"
+ apt_packages:
+ - cmake
+ - build-essential
+
+# Build documentation in the "docs/" directory with Sphinx
+sphinx:
+ configuration: docs/conf.py
+
+# Optionally, but recommended,
+# declare the Python requirements required to build your documentation
+# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
- version: 3.8
+ install:
+ - method: pip
+ path: .
+ extra_requirements:
+ - dev
\ No newline at end of file
diff --git a/AUTHORS.rst b/AUTHORS.rst
index d30eaa6e..a024f3f5 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -5,9 +5,12 @@ Credits
Development Lead
----------------
-* Genomics and Machine Learning lab
+* Genomics and Machine Learning Lab
Contributors
------------
-None yet. Why not be the first?
+* Brad Balderson
+* Andrew Newman
+* Duy Pham
+* Xiao Tan
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index aa232892..bd1e8434 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -15,7 +15,7 @@ Types of Contributions
Report Bugs
~~~~~~~~~~~
-Report bugs at https://github.com/duypham2108/stlearn/issues.
+Report bugs at https://github.com/BiomedicalMachineLearning/stLearn/issues
If you are reporting a bug, please include:
@@ -64,11 +64,23 @@ Ready to contribute? Here's how to set up `stlearn` for local development.
$ git clone git@github.com:your_name_here/stlearn.git
-3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development::
+3. Install your local copy into a virtualenv. This is how you set up your fork for local development::
- $ mkvirtualenv stlearn
+ Run the following:
+ $ conda create -n stlearn-dev python=3.12 --y
+ $ conda activate stlearn-dev
$ cd stlearn/
- $ python setup.py develop
+ $ pip install -e ".[dev,test]"
+
+ You can also use conda to install these dependencies (after creating the environment):
+ $ conda install -c conda-forge leidenalg python-igraph
+
+ Or if you prefer pip/virtualenv::
+
+ $ python -m venv stlearn-env
+ $ source stlearn-env/bin/activate # On Windows: stlearn-env\Scripts\activate
+ $ cd stlearn/
+ $ pip install -e ".[dev,test]"
4. Create a branch for local development::
@@ -76,14 +88,16 @@ Ready to contribute? Here's how to set up `stlearn` for local development.
Now you can make your changes locally.
-5. When you're done making changes, check that your changes pass flake8 and the
- tests, including testing other Python versions with tox::
+5. When you're done making changes, check that your changes pass linters and tests::
- $ flake8 stlearn tests
- $ python setup.py test or pytest
- $ tox
+ $ black stlearn tests
+ $ ruff check stlearn tests
+ $ mypy stlearn tests
+ $ pytest
+
+Or run everything with tox::
- To get flake8 and tox, just pip install them into your virtualenv.
+ $ tox
6. Commit your changes and push your branch to GitHub::
@@ -102,9 +116,7 @@ Before you submit a pull request, check that it meets these guidelines:
2. If the pull request adds functionality, the docs should be updated. Put
your new functionality into a function with a docstring, and add the
feature to the list in README.rst.
-3. The pull request should work for Python 3.5, 3.6, 3.7 and 3.8, and for PyPy. Check
- https://travis-ci.org/duypham2108/stlearn/pull_requests
- and make sure that the tests pass for all supported Python versions.
+3. The pull request should work for Python 3.12 and above.
Tips
----
@@ -124,5 +136,3 @@ Then run::
$ bump2version patch # possible: major / minor / patch
$ git push
$ git push --tags
-
-Travis will then deploy to PyPI if tests pass.
diff --git a/HISTORY.rst b/HISTORY.rst
index 635c3fac..88a0b97a 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -2,22 +2,87 @@
History
=======
+1.4.0 (2026-05-01)
+------------------
+* Removed tensorflow and keras and replaced with torch and torchvision.
+* The CCI implementation removed string comparisons for LR pairs lists and replaced it with one set of two
+ packed 32 bit integers. Removed deduplication pass (m^2) with a hash lookup (O(n)).
+* Upgrade libraries: numpy >=2.4.0, scanpy >= 1.12.0, scipy >= 1.17.0, added spatialdata, shapely, geopandas.
+
+API and Bug Fixes:
+* Added row and polygon annotations.
+* Fixed exception handling to catch previous exceptions when rethrown.
+
+1.3.0 (2026-02-24)
+------------------
+* Removed interactive stLearn/embedded web application.
+* Removed louvain clustering - replaced with leiden.
+
+API and Bug Fixes:
+* Fix import on MutableVertexPartition to use leidenalg.VertexPartition.
+* Switch default flavour in leiden to use igraph (and its required parameters).
+* Renamed methods and classes to follow lowercase standard.
+
+1.2.2 (2025-10-20)
+------------------
+* Added support for Python 3.11 and 3.12.
+* Upgraded scanpy to 1.11 - clustering will be different.
+* Added more CCI tests.
+
+API and Bug Fixes:
+* Fixed copy-paste error in louvain.py file.
+
+1.1.5 (2025-09-17)
+------------------
+* Add Leiden clustering wrapper.
+* Fix documentation, refactor code in spatial.SME.
+
+1.1.1 (2025-07-07)
+------------------
+* Support Python 3.10.x
+* Added quality checks black, ruff and mypy and fixed appropriate source code.
+* Copy parameters now work with the same semantics as scanpy.
+* Library upgrades for leidenalg, louvain, numba, numpy, scanpy, and tensorflow.
+* datasets.xenium_sge - loads Xenium data (and caches it) similar to scanpy.visium_sge.
+
+API and Bug Fixes:
+
+* Xenium TIFF and cell positions are now aligned.
+* Consistent with type annotations - mainly missing None annotations.
+* pl.cluster_plot - Does not keep colours from previous runs when clustering.
+* pl.trajectory.pseudotime_plot - Fix typing of cluster values in .uns["split_node"].
+* Removed datasets.example_bcba - Replaced with wrapper for scanpy.visium_sge.
+* Moved spatials directory to spatial, cleaned up pl and tl packages.
+
+0.4.11 (2022-11-25)
+------------------
+
0.4.10 (2022-11-22)
------------------
+
0.4.8 (2022-06-15)
------------------
+
0.4.7 (2022-03-28)
------------------
+
0.4.6 (2022-03-09)
------------------
+
0.4.5 (2022-03-02)
------------------
+
0.4.0 (2022-02-03)
------------------
+
0.3.2 (2021-03-29)
------------------
+
0.3.1 (2020-12-24)
------------------
+
0.2.7 (2020-09-12)
------------------
+
0.2.6 (2020-08-04)
+------------------
diff --git a/LICENSE b/LICENSE
index 626beb6e..725e1df3 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,8 +1,6 @@
-
-
BSD License
-Copyright (c) 2020, Genomics and Machine Learning lab
+Copyright (c) 2020-2026, Genomics and Machine Learning lab
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
diff --git a/README.md b/README.md
index 1a4c1727..bd006a48 100644
--- a/README.md
+++ b/README.md
@@ -16,12 +16,6 @@
-
-
-
-
-
-
@@ -39,7 +33,7 @@
Paper
-
@@ -69,6 +63,6 @@
If you have used stLearn in your research, please consider citing us:
-> Pham _et al._, (2020). stLearn: integrating spatial location, tissue morphology and gene expression to find cell types, cell-cell interactions and spatial trajectories within undissociated tissues
-> _biorxiv_
-> https://doi.org/10.1101/2020.05.31.125658
+> Pham, Duy, et al. "Robust mapping of spatiotemporal trajectories and cell–cell interactions in healthy and diseased tissues."
+> Nature Communications 14.1 (2023): 7739.
+> [https://doi.org/10.1101/2020.05.31.125658](https://doi.org/10.1038/s41467-023-43120-6)
diff --git a/docs/Makefile b/docs/Makefile
index 96688bf3..d4bb2cbb 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -1,10 +1,10 @@
# Minimal makefile for Sphinx documentation
#
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = python -msphinx
-SPHINXPROJ = stlearn
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css
new file mode 100644
index 00000000..fafe36f1
--- /dev/null
+++ b/docs/_static/css/custom.css
@@ -0,0 +1,5 @@
+/* Custom styling for stLearn documentation */
+
+p img {
+ vertical-align: middle
+}
diff --git a/docs/_static/images/any.png b/docs/_static/images/any.png
new file mode 100644
index 00000000..4b010dc1
Binary files /dev/null and b/docs/_static/images/any.png differ
diff --git a/docs/_static/images/scanpy.png b/docs/_static/images/scanpy.png
new file mode 100644
index 00000000..088802d9
Binary files /dev/null and b/docs/_static/images/scanpy.png differ
diff --git a/docs/_temp/example_cci.py b/docs/_temp/example_cci.py
deleted file mode 100644
index 15fe9a84..00000000
--- a/docs/_temp/example_cci.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# """ Example code for running CCI analysis using new interface/approach.
-
-# Tested: * Within-spot mode
-# * Between-spot mode
-
-# TODO tests: * Above with cell heterogeneity information
-# """
-
-################################################################################
-# Environment setup #
-################################################################################
-import stlearn as st
-import matplotlib.pyplot as plt
-
-################################################################################
-# Load your data #
-################################################################################
-# TODO - load as an AnnData & perform usual pre-processing.
-data = None # replace with your code
-
-# """ # Adding cell heterogeneity information if you have it.
-# st.add.labels(data, 'tutorials/label_transfer_bc.csv', sep='\t')
-# st.pl.cluster_plot(data, use_label="predictions")
-# """
-
-################################################################################
-# Performing cci_rank analysis #
-################################################################################
-# Load the NATMI literature-curated database of LR pairs, data formatted #
-lrs = st.tl.cci.load_lrs(["connectomeDB2020_lit"])
-
-st.tl.cci.run(
- data,
- lrs,
- use_label=None, # Need to add the label transfer results to object first, above code puts into 'label_transfer'
- use_het="cell_het", # Slot for cell het. results in adata.obsm, only if use_label specified
- min_spots=6, # Filter out any LR pairs with no scores for less than 6 spots
- distance=None, # distance=0 for within-spot mode, None to auto-select distance to nearest neighbourhood.
- n_pairs=1000, # Number of random pairs to generate
- adj_method="fdr_bh", # MHT correction method
- min_expr=0, # min expression for gene to be considered expressed.
- pval_adj_cutoff=0.05,
-)
-# """
-# Example output:
-
-# Calculating neighbours...
-# 0 spots with no neighbours, 6 median spot neighbours.
-# Spot neighbour indices stored in adata.uns['spot_neighbours']
-# Altogether 1393 valid L-R pairs
-# Generating random gene pairs...
-# Generating the background...
-# Calculating p-values for each LR pair in each spot...: 100%|██████████ [ time left: 00:00 ]
-
-# Storing results:
-
-# lr_scores stored in adata.obsm['lr_scores'].
-# p_vals stored in adata.obsm['p_vals'].
-# p_adjs stored in adata.obsm['p_adjs'].
-# -log10(p_adjs) stored in adata.obsm['-log10(p_adjs)'].
-# lr_sig_scores stored in adata.obsm['lr_sig_scores'].
-
-# Per-spot results in adata.obsm have columns in same order as rows in adata.uns['lr_summary'].
-# Summary of LR results in adata.uns['lr_summary'].
-# """
-
-################################################################################
-# Visualising results #
-################################################################################
-# Plotting the -log10(p_adjs) for the lr with the highest number of spots.
-# Set use_lr to any listed in data.uns['lr_summary'] to visualise alternate lrs.
-st.pl.lr_result_plot(
- data,
- use_lr=None, # Which LR to use, if None then uses top resuls from data.uns['lr_results']
- use_result="-log10(p_adjs)", # Which result to visualise, must be one of
- # p_vals, p_adjs, -log10(p_adjs), lr_sig_scores
-)
-plt.show()
-
-################################################################################
-# Extra diagnostic plots for results #
-################################################################################
-# TODO:
-# Below needs to be updated with new way of storing results.
-
-# Looking at which LR pairs were significant across the most spots #
-print(data.uns["lr_summary"]) # Rank-ordered by pairs with most significant spots
-
-# Now looking at the LR pair with the highest number of sig. spots #
-best_lr = data.uns["lr_summary"].index.values[0]
-
-# Binary LR coexpression plot for all spots #
-st.pl.lr_plot(
- data,
- best_lr,
- inner_size_prop=0.1,
- outer_mode="binary",
- pt_scale=10,
- use_label=None,
- show_image=True,
- sig_spots=False,
-)
-plt.show()
-
-# Significance scores for all spots #
-st.pl.lr_plot(
- data,
- best_lr,
- inner_size_prop=1,
- outer_mode=None,
- pt_scale=20,
- use_label="lr_scores",
- show_image=True,
- sig_spots=False,
-)
-plt.show()
-
-# Binary LR coexpression plot for significant spots #
-st.pl.lr_plot(
- data,
- best_lr,
- outter_size_prop=1,
- outer_mode="binary",
- pt_scale=20,
- use_label=None,
- show_image=True,
- sig_spots=True,
-)
-plt.show()
-
-# Continuous LR coexpression for signficant spots #
-st.pl.lr_plot(
- data,
- best_lr,
- inner_size_prop=0.1,
- middle_size_prop=0.2,
- outter_size_prop=0.4,
- outer_mode="continuous",
- pt_scale=150,
- use_label=None,
- show_image=True,
- sig_spots=True,
-)
-plt.show()
-
-# Continous LR coexpression for significant spots with tissue_type information #
-st.pl.lr_plot(
- data,
- best_lr,
- inner_size_prop=0.08,
- middle_size_prop=0.3,
- outter_size_prop=0.5,
- outer_mode="continuous",
- pt_scale=150,
- use_label="tissue_type",
- show_image=True,
- sig_spots=True,
-)
-plt.show()
-
-
-# # Old version of visualisation #
-# """
-# # LR enrichment scores
-# data.obsm[f'{best_lr}_scores'] = data.uns['per_lr_results'][best_lr].loc[:,
-# 'lr_scores'].values
-# # -log10(p_adj) of LR enrichment scores
-# data.obsm[f'{best_lr}_log-p_adj'] = data.uns['per_lr_results'][best_lr].loc[:,
-# '-log10(p_adj)'].values
-# # Significant LR enrichment scores
-# data.obsm[f'{best_lr}_sig-scores'] = data.uns['per_lr_results'][best_lr].loc[:,
-# 'lr_sig_scores'].values
-
-# # Visualising these results #
-# st.pl.het_plot(data, use_het=f'{best_lr}_scores', cell_alpha=0.7)
-# plt.show()
-
-# st.pl.het_plot(data, use_het=f'{best_lr}_sig-scores', cell_alpha=0.7)
-# plt.show()
-# """
diff --git a/docs/_templates/autosummary/base.rst b/docs/_templates/autosummary/base.rst
deleted file mode 100644
index 7a780868..00000000
--- a/docs/_templates/autosummary/base.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-
-{% extends "!autosummary/base.rst" %}
-
-.. http://www.sphinx-doc.org/en/stable/ext/autosummary.html#customizing-templates
diff --git a/docs/_templates/autosummary/class.rst b/docs/_templates/autosummary/class.rst
deleted file mode 100644
index 42c37f16..00000000
--- a/docs/_templates/autosummary/class.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-{{ fullname | escape | underline}}
-
-.. currentmodule:: {{ module }}
-
-.. add toctree option to make autodoc generate the pages
diff --git a/docs/api.rst b/docs/api.rst
index 19568d0a..1d3cd5b0 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -13,29 +13,28 @@ Import stLearn as::
Wrapper functions: `wrapper`
------------------------------
-.. module:: stlearn.wrapper
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
-
- Read10X
- ReadOldST
- ReadSlideSeq
- ReadMERFISH
- ReadSeqFish
- convert_scanpy
+ :toctree: api/
+
+ read_10x
+ read_old_st
+ read_slide_seq
+ read_merfish
+ read_seq_fish
+ read_xenium
create_stlearn
+ convert_scanpy
Add: `add`
-------------------
-.. module:: stlearn.add
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
add.image
add.positions
@@ -56,7 +55,7 @@ Preprocessing: `pp`
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
pp.filter_genes
pp.log1p
@@ -75,7 +74,7 @@ Embedding: `em`
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
em.run_pca
em.run_umap
@@ -91,7 +90,7 @@ Spatial: `spatial`
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
spatial.clustering.localization
@@ -99,7 +98,7 @@ Spatial: `spatial`
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
spatial.trajectory.pseudotime
spatial.trajectory.pseudotimespace_global
@@ -113,39 +112,30 @@ Spatial: `spatial`
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
spatial.morphology.adjust
-.. module:: stlearn.spatial.SME
+.. module:: stlearn.spatial.sme
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
- spatial.SME.SME_impute0
- spatial.SME.pseudo_spot
- spatial.SME.SME_normalize
+ spatial.sme.sme_impute0
+ spatial.sme.pseudo_spot
+ spatial.sme.sme_normalize
Tools: `tl`
-------------------
-.. module:: stlearn.tl.clustering
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
tl.clustering.kmeans
- tl.clustering.louvain
-
-
-.. module:: stlearn.tl.cci
-.. currentmodule:: stlearn
-
-.. autosummary::
- :toctree: .
-
+ tl.clustering.leiden
tl.cci.load_lrs
tl.cci.grid
tl.cci.run
@@ -156,19 +146,17 @@ Tools: `tl`
Plot: `pl`
-------------------
-.. module:: stlearn.pl
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
- pl.QC_plot
+ pl.qc_plot
pl.gene_plot
pl.gene_plot_interactive
pl.cluster_plot
pl.cluster_plot_interactive
pl.subcluster_plot
- pl.subcluster_plot
pl.non_spatial_plot
pl.deconvolution_plot
pl.plot_mask
@@ -186,25 +174,24 @@ Plot: `pl`
pl.lr_plot_interactive
pl.spatialcci_plot_interactive
-.. module:: stlearn.pl.trajectory
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
pl.trajectory.pseudotime_plot
pl.trajectory.local_plot
pl.trajectory.tree_plot
pl.trajectory.transition_markers_plot
- pl.trajectory.DE_transition_plot
+ pl.trajectory.de_transition_plot
-Tools: `datasets`
--------------------
+Datasets: `datasets`
+---------------------------
-.. module:: stlearn.datasets
.. currentmodule:: stlearn
.. autosummary::
- :toctree: .
+ :toctree: api/
- datasets.example_bcba()
+ datasets.visium_sge
+ datasets.xenium_sge
diff --git a/docs/conf.py b/docs/conf.py
index 0b6f4461..3ed026ac 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,216 +1,77 @@
-#!/usr/bin/env python
-#
-# stlearn documentation build configuration file, created by
-# sphinx-quickstart on Fri Jun 9 13:47:02 2017.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another
-# directory, add these directories to sys.path here. If the directory is
-# relative to the documentation root, use os.path.abspath to make it
-# absolute, like shown here.
-#
import os
-import sys
-
-sys.path.insert(0, os.path.abspath(".."))
-import stlearn
-
-# Setup files
-import os
-
-if not os.path.isdir("./_static"):
- url = "https://www.dropbox.com/s/akhl2mr9kn0e0lh/download.zip?dl=1"
- os.system("wget " + url)
- os.system("mv download.zip?dl=1 download.zip")
- os.system("unzip download.zip")
+import zipfile
+import urllib.request
-# -- General configuration ---------------------------------------------
+# -- Project information -----------------------------------------------------
+project = 'stLearn'
+copyright = '2022-2026, Genomics and Machine Learning Lab'
+author = 'Genomics and Machine Learning Lab'
+html_logo = "images/logo.png"
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+# -- General configuration ---------------------------------------------------
extensions = [
- "sphinx.ext.autodoc",
- "sphinx.ext.viewcode",
- "recommonmark",
- "sphinx.ext.napoleon",
- "sphinx.ext.autosummary",
- "nbsphinx",
- "jupyter_sphinx",
- "sphinx_gallery.load_style",
+ 'sphinx.ext.autodoc',
+ 'sphinx.ext.autosummary',
+ 'sphinx.ext.viewcode',
+ 'sphinx.ext.napoleon',
+ 'nbsphinx',
]
-# Generate the API documentation when building
-autosummary_generate = True
-autodoc_member_order = "bysource"
-# autodoc_default_flags = ['members']
-napoleon_google_docstring = False
-napoleon_numpy_docstring = True
-napoleon_include_init_with_doc = False
-napoleon_use_rtype = True # having a separate entry generally helps readability
-napoleon_use_param = True
-napoleon_custom_sections = [("Params", "Parameters")]
-todo_include_todos = False
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-# source_suffix = ['.rst', '.md']
-source_suffix = ".rst"
-
-# The master toctree document.
-master_doc = "index"
+templates_path = ['_templates']
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-# General information about the project.
-project = "stLearn"
-copyright = "2022, Genomics and Machine Learning lab"
-author = "Genomics and Machine Learning lab"
+TUTORIALS_URL = (
+ "https://github.com/GenomicsMachineLearning/stLearn-tutorials/releases/download/V1.4.0/tutorials.zip"
+)
-# The version info for the project you're documenting, acts as replacement
-# for |version| and |release|, also used in various other places throughout
-# the built documents.
-#
-# The short X.Y version.
-version = stlearn.__version__
-# The full version, including alpha/beta/rc tags.
-release = stlearn.__version__
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints"]
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-
-# -- Options for HTML output -------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
+def download_tutorials(url, filename):
+ """Download tutorials zip from GitHub Releases."""
+ print(f"Downloading {url} -> {filename}")
+ urllib.request.urlretrieve(url, filename)
def setup(app):
- app.add_stylesheet("css/theme_override.css")
-
-
-html_theme = "sphinx_rtd_theme"
-html_css_files = [
- "css/custom.css",
-]
-# Theme options are theme-specific and customize the look and feel of a
-# theme further. For a list of options available for each theme, see the
-# documentation.
-#
-# html_theme_options = {}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
-
-
-# -- Options for HTMLHelp output ---------------------------------------
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "stlearndoc"
-
-
-# -- Options for LaTeX output ------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- # 'papersize': 'letterpaper',
- # The font size ('10pt', '11pt' or '12pt').
- #
- # 'pointsize': '10pt',
- # Additional stuff for the LaTeX preamble.
- #
- # 'preamble': '',
- # Latex figure (float) alignment
- #
- # 'figure_align': 'htbp',
+ if not os.path.isdir("./tutorials"):
+ zip_path = "tutorials.zip"
+ if not os.path.exists(zip_path):
+ download_tutorials(TUTORIALS_URL, zip_path)
+ with zipfile.ZipFile(zip_path) as z:
+ z.extractall(".")
+ return
+
+
+# -- Options for HTML output -------------------------------------------------
+html_theme = 'furo'
+html_static_path = ['_static']
+html_css_files = ['css/custom.css']
+html_theme_options = {
+ "source_repository": "https://github.com/BiomedicalMachineLearning/stLearn/",
+ "source_branch": "master",
+ "source_directory": "docs/",
+ "footer_icons": [
+ {
+ "name": "GitHub",
+ "url": "https://github.com/BiomedicalMachineLearning/stLearn/",
+ "html": """
+
+
+
+ """,
+ "class": "",
+ },
+ ],
}
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass
-# [howto, manual, or own class]).
-latex_documents = [
- (
- master_doc,
- "stlearn.tex",
- "stLearn Documentation",
- "Genomics and Machine Learning lab",
- "manual",
- ),
-]
-
-
-# -- Options for manual page output ------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [(master_doc, "stlearn", "stLearn Documentation", [author], 1)]
-
-
-# -- Options for Texinfo output ----------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (
- master_doc,
- "stlearn",
- "stLearn Documentation",
- author,
- "stlearn",
- "One line description of project.",
- "Miscellaneous",
- ),
-]
-
+# nbsphinx
+nbsphinx_execute = 'never'
+nbsphinx_allow_errors = True
nbsphinx_thumbnails = {
- "tutorials/stSME_clustering": "_static/img/thumbnail/sme.png",
- "tutorials/stSME_comparison": "_static/img/thumbnail/com.png",
- "tutorials/Pseudo-time-space-tutorial": "_static/img/thumbnail/psts.png",
- "tutorials/stLearn-CCI": "_static/img/thumbnail/cci.png",
- "tutorials/Read_MERFISH": "_static/img/thumbnail/mer.png",
- "tutorials/Read_seqfish": "_static/img/thumbnail/seq.png",
- "tutorials/Working-with-Old-Spatial-Transcriptomics-data": "_static/img/thumbnail/legacy.png",
- "tutorials/Read_slideseq": "_static/img/thumbnail/slide.png",
- "tutorials/ST_deconvolution_visualization": "_static/img/thumbnail/decon.png",
- "tutorials/Interactive_plot": "_static/img/thumbnail/bokeh.gif",
- "tutorials/Working_with_scanpy": "_static/img/thumbnail/scanpy.png",
- "tutorials/Core_plots": "_static/img/thumbnail/core_plots.png",
- "tutorials/Read_any_data": "_static/img/thumbnail/any.png",
- "tutorials/Integration_multiple_datasets": "_static/img/thumbnail/integrate.png",
- "tutorials/Xenium_PSTS": "_static/img/thumbnail/xenium_psts.png",
- "tutorials/Xenium_CCI": "_static/img/thumbnail/xenium_cci.png",
+ "tutorials/working_with_scanpy": "_static/images/scanpy.png",
}
+
+# Autosummary
+autosummary_generate = True
+autosummary_imported_members = True
+autosummary_generate_overwrite = True
diff --git a/docs/images/logo.png b/docs/images/logo.png
new file mode 100644
index 00000000..23808d91
Binary files /dev/null and b/docs/images/logo.png differ
diff --git a/docs/index.rst b/docs/index.rst
index 827ec038..c27acfb9 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,44 +1,52 @@
-stLearn - a downstream analysis toolkit for Spatial Transcriptomics data
+stLearn - A Spatial Transcriptomics Toolkit
============================================================================
|PyPI| |PyPIDownloads| |Docs|
.. |PyPI| image:: https://img.shields.io/pypi/v/stlearn?logo=PyPI
:target: https://pypi.org/project/stlearn
+
.. |PyPIDownloads| image:: https://pepy.tech/badge/stlearn
+
.. |Docs| image:: https://readthedocs.org/projects/stlearn/badge/?version=latest
:target: https://stlearn.readthedocs.io
-.. image:: https://i.imgur.com/yfXlCYO.png
+.. image:: images/logo.png
:width: 300px
:align: left
-stLearn is designed to comprehensively analyse Spatial Transcriptomics (ST) data to investigate complex biological processes within an undissociated tissue. ST is emerging as the “next generation” of single-cell RNA sequencing because it adds spatial and morphological context to the transcriptional profile of cells in an intact tissue section. However, existing ST analysis methods typically use the captured spatial and/or morphological data as a visualisation tool rather than as informative features for model development. We have developed an analysis method that exploits all three data types: Spatial distance, tissue Morphology, and gene Expression measurements (SME) from ST data. This combinatorial approach allows us to more accurately model underlying tissue biology, and allows researchers to address key questions in three major research areas: cell type identification, cell trajectory reconstruction, and the study of cell-cell interactions within an undissociated tissue sample.
-
-We also published stLearn-interactive which is a python-based interactive website for working with all the functions from stLearn and upgrade with some bokeh-based plots.
-
-To run the stlearn interaction webapp in your local, run:
-::
-
- stlearn launch
-
-
-New features
-**********************
+stLearn is designed to comprehensively analyse Spatial Transcriptomics (ST)
+data to investigate complex biological processes within an undissociated
+tissue. ST is emerging as the “next generation” of single-cell RNA sequencing
+because it adds spatial and morphological context to the transcriptional
+profile of cells in an intact tissue section. However, existing ST analysis
+methods typically use the captured spatial and/or morphological data as a
+visualisation tool rather than as informative features for model development.
+We have developed an analysis method that exploits all three data types:
+Spatial distance, tissue Morphology, and gene Expression measurements (SME)
+from ST data. This combinatorial approach allows us to more accurately model
+underlying tissue biology, and allows researchers to address key questions in
+three major research areas: cell type identification, cell trajectory
+reconstruction, and the study of cell-cell interactions within an
+undissociated tissue sample.
+
+
+Latest Additions
+----------------
-In the new release, we provide the interactive plots:
+.. include:: release_notes/1.4.0.rst
-.. image:: https://media.giphy.com/media/hUHAZcbVMm5pdUKMq4/giphy.gif
- :width: 600px
+.. include:: release_notes/1.3.0.rst
+.. include:: release_notes/1.2.2.rst
+.. include:: release_notes/1.1.5.rst
-Latest additions
-----------------
+.. include:: release_notes/1.1.1.rst
.. include:: release_notes/0.4.6.rst
@@ -53,9 +61,9 @@ Latest additions
installation
- interactive
- tutorials
api
+ tutorials
+ interactive
release_notes/index
authors
references
diff --git a/docs/installation.rst b/docs/installation.rst
index 26ac7387..93f8beda 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -5,24 +5,6 @@ Installation
============
-Install by Anaconda
----------------
-
-**Step 1:**
-
-Prepare conda environment for stLearn
-::
-
- conda create -n stlearn python=3.8
- conda activate stlearn
-
-**Step 2:**
-
-You can directly install stlearn in the anaconda by:
-::
-
- conda install -c conda-forge stlearn
-
Install by PyPi
---------------
@@ -31,31 +13,12 @@ Install by PyPi
Prepare conda environment for stLearn
::
- conda create -n stlearn python=3.8
- conda activate stlearn
+ conda create -n stlearn python=3.12 --y
+ conda activate stlearn
**Step 2:**
Install stlearn using `pip`
::
- pip install -U stlearn
-
-
-
-Popular bugs
----------------
-
-- `DLL load failed while importing utilsextension: The specified module could not be found.`
-
-You need to uninstall package `tables` and install it again
-::
-
- pip uninstall tables
- conda install pytables
-
-If conda version does not work, you can access to this site and download the .whl file: `https://www.lfd.uci.edu/~gohlke/pythonlibs/#pytables`
-
-::
-
- pip install tables-3.7.0-cp38-cp38-win_amd64.whl
+ pip install -U stlearn
diff --git a/docs/interactive.rst b/docs/interactive.rst
deleted file mode 100644
index 459d213d..00000000
--- a/docs/interactive.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-.. highlight:: shell
-
-============
-Interactive web application
-============
-
-
-Launch stlearn in your local
----------------
-
-Run the launch command in the terminal:
-::
-
- stlearn launch
-
-After that, you can access `https://:5000` in your web browser.
-
-Check the detail tutorial in this pdf file: `Link `_
diff --git a/docs/list_tutorial.txt b/docs/list_tutorial.txt
deleted file mode 100644
index 53badb09..00000000
--- a/docs/list_tutorial.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Pseudo-time-space-tutorial.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Read_MERFISH.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Read_seqfish.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Read_slideseq.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/ST_deconvolution_visualization.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Working-with-Old-Spatial-Transcriptomics-data.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/stLearn-CCI.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/stSME_clustering.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/stSME_comparison.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Xenium_PSTS.ipynb
-https://raw.githubusercontent.com/BiomedicalMachineLearning/stLearn/master/tutorials/Xenium_CCI.ipynb
diff --git a/docs/make.bat b/docs/make.bat
index 2afd47f0..954237b9 100644
--- a/docs/make.bat
+++ b/docs/make.bat
@@ -5,32 +5,31 @@ pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=python -msphinx
+ set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
-set SPHINXPROJ=stlearn
-
-if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
- echo.The Sphinx module was not found. Make sure you have Sphinx installed,
- echo.then set the SPHINXBUILD environment variable to point to the full
- echo.path of the 'sphinx-build' executable. Alternatively you may add the
- echo.Sphinx directory to PATH.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
- echo.http://sphinx-doc.org/
+ echo.https://www.sphinx-doc.org/
exit /b 1
)
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd
diff --git a/docs/references.rst b/docs/references.rst
index a6720aa1..c8323da4 100644
--- a/docs/references.rst
+++ b/docs/references.rst
@@ -24,7 +24,7 @@ References
*UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction*,
`arXiv `__.
-.. [Weinreb16] Weinreb *et al.* (2016),
+.. [Weinreb17] Weinreb *et al.* (2017),
*SPRING: a kinetic interface for visualizing high dimensional single-cell expression data*,
`bioRxiv `__.
@@ -36,10 +36,6 @@ References
*Massively parallel digital transcriptional profiling of single cells*,
`Nature Communications `__.
-.. [Weinreb17] Weinreb *et al.* (2016),
- *SPRING: a kinetic interface for visualizing high dimensional single-cell expression data*,
- `bioRxiv `__.
-
.. [Blondel08] Blondel *et al.* (2008),
*Fast unfolding of communities in large networks*,
`J. Stat. Mech. `__.
diff --git a/docs/release_notes/0.3.2.rst b/docs/release_notes/0.3.2.rst
index 9b141ff5..d8e459c7 100644
--- a/docs/release_notes/0.3.2.rst
+++ b/docs/release_notes/0.3.2.rst
@@ -1,7 +1,7 @@
0.3.2 `2021-03-29`
~~~~~~~~~~~~~~~~~~~~~~~~~
-.. rubric:: Feature
+.. rubric:: Features
- Add interactive plotting functions: :func:`~stlearn.pl.gene_plot_interactive`, :func:`~stlearn.pl.cluster_plot_interactive`, :func:`~stlearn.pl.het_plot_interactive`
- Add basic unittest (will add more in the future).
diff --git a/docs/release_notes/0.4.6.rst b/docs/release_notes/0.4.6.rst
index b2f08dd6..b8ee0324 100644
--- a/docs/release_notes/0.4.6.rst
+++ b/docs/release_notes/0.4.6.rst
@@ -1,7 +1,7 @@
0.4.0 `2022-02-03`
~~~~~~~~~~~~~~~~~~~~~~~~~
-.. rubric:: Feature
+.. rubric:: Features
- Upgrade stSME, PSTS and CCI analysis methods.
diff --git a/docs/release_notes/1.1.1.rst b/docs/release_notes/1.1.1.rst
new file mode 100644
index 00000000..3df3044a
--- /dev/null
+++ b/docs/release_notes/1.1.1.rst
@@ -0,0 +1,19 @@
+1.1.1 `2025-07-07`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. rubric:: Features
+
+* Support Python 3.10.x
+* Added quality checks black, ruff and mypy and fixed appropriate source code.
+* Copy parameters now work with the same semantics as scanpy.
+* Library upgrades for leidenalg, louvain, numba, numpy, scanpy, and tensorflow.
+* datasets.xenium_sge - loads Xenium data (and caches it) similar to scanpy.visium_sge.
+
+.. rubric:: Bug fixes
+
+* Xenium TIFF and cell positions are now aligned.
+* Consistent with type annotations - mainly missing None annotations.
+* pl.cluster_plot - Does not keep colours from previous runs when clustering.
+* pl.trajectory.pseudotime_plot - Fix typing of cluster values in .uns["split_node"].
+* Removed datasets.example_bcba - Replaced with wrapper for scanpy.visium_sge.
+* Moved spatials directory to spatial, cleaned up pl and tl packages.
\ No newline at end of file
diff --git a/docs/release_notes/1.1.5.rst b/docs/release_notes/1.1.5.rst
new file mode 100644
index 00000000..eb57927d
--- /dev/null
+++ b/docs/release_notes/1.1.5.rst
@@ -0,0 +1,7 @@
+1.1.5 `2025-09-17`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. rubric:: Features
+
+* Add Leiden clustering wrapper.
+* Fix documentation, refactor code in spatial.SME.
diff --git a/docs/release_notes/1.2.2.rst b/docs/release_notes/1.2.2.rst
new file mode 100644
index 00000000..fa250503
--- /dev/null
+++ b/docs/release_notes/1.2.2.rst
@@ -0,0 +1,12 @@
+1.2.2 `2025-10-20`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. rubric:: Features
+
+* Added support for Python 3.11 and 3.12.
+* Upgraded scanpy to 1.11 - clustering will be different.
+* Added more CCI tests.
+
+.. rubric:: Bugs
+
+* Fixed copy-paste error in louvain.py file.
diff --git a/docs/release_notes/1.3.0.rst b/docs/release_notes/1.3.0.rst
new file mode 100644
index 00000000..fc55a9ee
--- /dev/null
+++ b/docs/release_notes/1.3.0.rst
@@ -0,0 +1,10 @@
+1.3.0 `2026-02-24`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. rubric:: Features
+
+* Removed interactive stLearn/embedded web application.
+* Removed louvain clustering.
+* Renamed methods and classes to follow lowercase standard.
+
+
diff --git a/docs/release_notes/1.4.0.rst b/docs/release_notes/1.4.0.rst
new file mode 100644
index 00000000..79067376
--- /dev/null
+++ b/docs/release_notes/1.4.0.rst
@@ -0,0 +1,14 @@
+1.4.0 `2026-05-01`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. rubric:: Features
+
+* Removed tensorflow and keras and replaced with torch and torchvision.
+* The CCI implementation removed string comparisons for LR pairs lists and replaced it with one set of two
+ packed 32 bit integers. Removed deduplication pass (m^2) with a hash lookup (O(n)).
+* Added row and polygon annotations.
+* Upgrade libraries: numpy >=2.4.0, scanpy >= 1.12.0, scipy >= 1.17.0, added spatialdata, shapely, geopandas.
+
+.. rubric:: Bugs
+
+* Fixed exception handling to catch previous exceptions when rethrown.
\ No newline at end of file
diff --git a/docs/release_notes/index.rst b/docs/release_notes/index.rst
index 48c9c3be..cd332bca 100644
--- a/docs/release_notes/index.rst
+++ b/docs/release_notes/index.rst
@@ -1,10 +1,15 @@
-Release notes
+Release Notes
===================================================
-Version 0.4.9
----------------------------
+.. include:: 1.4.0.rst
-.. include:: 0.4.10.rst
+.. include:: 1.3.0.rst
+
+.. include:: 1.2.2.rst
+
+.. include:: 1.1.5.rst
+
+.. include:: 1.1.1.rst
.. include:: 0.4.6.rst
diff --git a/docs/requirements.txt b/docs/requirements.txt
deleted file mode 100644
index a2c20d28..00000000
--- a/docs/requirements.txt
+++ /dev/null
@@ -1,15 +0,0 @@
--r ../requirements.txt
-ipyvolume
-ipywebrtc
-ipywidgets
-jupyter_sphinx
-nbclean
-nbformat
-nbsphinx
-pygments
-recommonmark
-sphinx
-sphinx-autodoc-typehints
-sphinx_gallery==0.10.1
-sphinx_rtd_theme
-typing_extensions
diff --git a/docs/tutorials.rst b/docs/tutorials.rst
index 0c0ecf16..83889f22 100644
--- a/docs/tutorials.rst
+++ b/docs/tutorials.rst
@@ -4,33 +4,24 @@ Tutorials
.. nbgallery::
:caption: Main features:
- tutorials/stSME_clustering
- tutorials/stSME_comparison
- tutorials/Pseudo-time-space-tutorial
- tutorials/stLearn-CCI
- tutorials/Xenium_PSTS
- tutorials/Xenium_CCI
+ tutorials/cell_cell_interaction
+ tutorials/cell_cell_interaction_xenium
+ tutorials/pseudotime_space
+ tutorials/pseudotime_space_xenium
+ tutorials/stsme_clustering
+ tutorials/stsme_comparison
+
.. nbgallery::
:caption: Visualisation and additional functionalities:
- tutorials/Interactive_plot
- tutorials/Core_plots
- tutorials/ST_deconvolution_visualization
- tutorials/Integration_multiple_datasets
-
+ tutorials/core_plots
+ tutorials/integrate_multiple_datasets
.. nbgallery::
:caption: Supporting platforms:
-
- tutorials/Read_MERFISH
- tutorials/Read_seqfish
- tutorials/Working-with-Old-Spatial-Transcriptomics-data
- tutorials/Read_slideseq
-
.. nbgallery::
:caption: Integration with other spatial tools:
- tutorials/Read_any_data
- tutorials/Working_with_scanpy
+ tutorials/working_with_scanpy
diff --git a/mypy.ini b/mypy.ini
new file mode 100644
index 00000000..5d8b6f99
--- /dev/null
+++ b/mypy.ini
@@ -0,0 +1,4 @@
+[mypy]
+follow_untyped_imports = True
+no_site_packages = True
+ignore_missing_imports = True
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 00000000..21bb1e26
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,131 @@
+[build-system]
+requires = ["setuptools>=61.0", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "stlearn"
+version = "1.4.0"
+authors = [
+ { name = "Genomics and Machine Learning Lab", email = "andrew.newman@uq.edu.au" },
+]
+description = "A downstream analysis toolkit for Spatial Transcriptomic data"
+readme = { file = "README.md", content-type = "text/markdown" }
+license = { text = "BSD license" }
+requires-python = ">=3.12"
+dependencies = [
+ "anndata>=0.12.0",
+ "bokeh>=3.7.0,<4.0",
+ "click>=8.2.0,<9.0",
+ "igraph>=1.0.0",
+ "leidenalg>=0.11.0",
+ "numba>=0.58.1",
+ "numpy>=2.4.0",
+ "pillow>=11.0.0,<12.0",
+ "scanpy>=1.12.0",
+ "scikit-image>=0.22.0",
+ "pandas>=2.3.0",
+ "imageio>=2.37.0,<3.0",
+ "scipy>=1.17.0,<2.0",
+ "scikit-learn>=1.8.0,<2.0",
+ "zarr>=3.1",
+ "dask>=2024.11.2",
+ "spatialdata>=0.7.0",
+ "spatialdata-io>=0.6.0",
+ "spatialdata-plot>=0.3.0",
+ "torch>=2.0",
+ "torchvision>=0.15",
+ "geopandas>=1.0.0,<2.0",
+ "shapely>=2.0.0,<3.0",
+]
+keywords = ["stlearn"]
+classifiers = [
+ "Development Status :: 5 - Production/Stable",
+ "Environment :: Console",
+ "Framework :: Jupyter",
+ "Intended Audience :: Developers",
+ "Intended Audience :: Science/Research",
+ "License :: OSI Approved :: BSD License",
+ "Natural Language :: English",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
+ "Topic :: Scientific/Engineering :: Bio-Informatics",
+ "Topic :: Scientific/Engineering :: Visualization",
+]
+[project.optional-dependencies]
+dev = [
+ "black>=23.0",
+ "ruff>=0.1.0",
+ "mypy>=1.16",
+ "pytest>=7.0",
+ "tox>=4.0",
+ "ghp-import>=2.1.0",
+ "sphinx>=4.0",
+ "furo==2024.8.6",
+ "myst-parser>=0.18",
+ "nbsphinx>=0.9.0",
+ "types-tensorflow>=2.8.0",
+ "sphinx-autodoc-typehints>=1.24.0",
+ "sphinx-autosummary-accessors>=2023.4.0",
+]
+test = [
+ "pytest",
+ "pytest-cov",
+]
+jupyter = [
+ "jupyter>=1.0.0",
+ "jupyterlab>=3.0.0",
+ "ipywidgets>=8.0.0",
+ "plotly>=5.0.0",
+ "bokeh>=3.7.0,<4.0",
+ "rpy2>=3.4.0",
+]
+
+[project.urls]
+Homepage = "https://github.com/BiomedicalMachineLearning/stLearn"
+Repository = "https://github.com/BiomedicalMachineLearning/stLearn"
+
+[project.scripts]
+stlearn = "stlearn.app.cli:main"
+
+[tool.setuptools.packages.find]
+include = ["stlearn", "stlearn.*"]
+
+[tool.setuptools.package-data]
+"*" = ["*"]
+
+[tool.ruff]
+target-version = "py312"
+line-length = 88
+exclude = [".git", "__pycache__", "build", "dist", "docs/_build"]
+
+[tool.ruff.lint]
+select = [
+ "E", "F", "W", # pycodestyle + pyflakes
+ "I", # isort
+ "N", # pep8-naming
+ "UP", # pyupgrade
+ "NPY", # numpy-specific (NPY001, NPY002, NPY003, NPY201)
+ "PD", # pandas-vet
+ "B", # flake8-bugbear (catches real bugs)
+ "SIM", # flake8-simplify
+ "RUF", # ruff-specific rules
+]
+ignore = [
+ "E722", # bare except — you've already accepted these
+ "F811", # redefinition — accepted
+ "N803", "N806", # naming: lowercase args/vars — too invasive to fix
+ "N818", # exception naming
+ "PD011", # .values vs .to_numpy() — too noisy, mostly false positives
+ "B008", # function calls in default args — used by typer/click
+ "SIM108", # ternary suggestions can hurt readability
+]
+
+[tool.ruff.lint.per-file-ignores]
+"tests/*" = ["B", "N"] # tests can be loose
+"docs/conf.py" = ["E", "F", "UP"] # generated/config file
+"**/__init__.py" = ["F401"] # re-exports
+
+[tool.ruff.format]
+quote-style = "double"
+indent-style = "space"
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index a3c68fc3..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-bokeh>= 2.4.2
-click>=8.0.4
-leidenalg
-louvain
-numpy>=1.18,<1.22
-Pillow>=9.0.1
-scanpy>=1.8.2
-scikit-image>=0.19.2
-tensorflow
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 62d25210..00000000
--- a/setup.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-[bumpversion]
-current_version = 0.4.10
-commit = True
-tag = True
-
-[bumpversion:file:setup.py]
-search = version='{current_version}'
-replace = version='{new_version}'
-
-[bumpversion:file:stlearn/__init__.py]
-search = __version__ = '{current_version}'
-replace = __version__ = '{new_version}'
-
-[bdist_wheel]
-universal = 1
-
-[flake8]
-exclude = docs
-
-[aliases]
-# Define setup.py command aliases here
diff --git a/setup.py b/setup.py
deleted file mode 100644
index e817b2d4..00000000
--- a/setup.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-
-"""The setup script."""
-
-from setuptools import setup, find_packages
-
-with open("README.md", encoding="utf8") as readme_file:
- readme = readme_file.read()
-
-with open("HISTORY.rst") as history_file:
- history = history_file.read()
-
-with open("requirements.txt") as f:
- requirements = f.read().splitlines()
-
-
-setup_requirements = []
-
-test_requirements = []
-
-setup(
- author="Genomics and Machine Learning lab",
- author_email="duy.pham@uq.edu.au",
- python_requires=">=3.7",
- classifiers=[
- "Development Status :: 2 - Pre-Alpha",
- "Intended Audience :: Developers",
- "License :: OSI Approved :: BSD License",
- "Natural Language :: English",
- "Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.7",
- "Programming Language :: Python :: 3.8",
- ],
- description="A downstream analysis toolkit for Spatial Transcriptomic data",
- entry_points={
- "console_scripts": [
- "stlearn=stlearn.app.cli:main",
- ],
- },
- install_requires=requirements,
- license="BSD license",
- long_description=readme + "\n\n" + history,
- long_description_content_type="text/markdown",
- include_package_data=True,
- keywords="stlearn",
- name="stlearn",
- packages=find_packages(include=["stlearn", "stlearn.*"]),
- setup_requires=setup_requirements,
- test_suite="tests",
- tests_require=test_requirements,
- url="https://github.com/BiomedicalMachineLearning/stLearn",
- version="0.4.10",
- zip_safe=False,
-)
diff --git a/stlearn/__init__.py b/stlearn/__init__.py
index 643583dc..d3d34186 100644
--- a/stlearn/__init__.py
+++ b/stlearn/__init__.py
@@ -1,30 +1,43 @@
"""Top-level package for stLearn."""
-__author__ = """Genomics and Machine Learning lab"""
-__email__ = "duy.pham@uq.edu.au"
-__version__ = "0.4.10"
-
-
-from . import add
-from . import pp
-from . import em
-from . import tl
-from . import pl
-from . import spatial
-from . import datasets
-
-# Wrapper
-
-from .wrapper.read import ReadSlideSeq
-from .wrapper.read import Read10X
-from .wrapper.read import ReadOldST
-from .wrapper.read import ReadMERFISH
-from .wrapper.read import ReadSeqFish
-from .wrapper.read import ReadXenium
-from .wrapper.read import create_stlearn
+__author__ = """Genomics and Machine Learning Lab"""
+__email__ = "andrew.newman@uq.edu.au"
+__version__ = "1.4.0"
+from . import add, datasets, em, pl, pp, spatial, tl, types
from ._settings import settings
-from .wrapper.convert_scanpy import convert_scanpy
from .wrapper.concatenate_spatial_adata import concatenate_spatial_adata
+from .wrapper.convert_scanpy import convert_scanpy
+
+# Wrapper
+from .wrapper.read import (
+ create_stlearn,
+ read_10x,
+ read_merfish,
+ read_old_st,
+ read_seq_fish,
+ read_slide_seq,
+ read_xenium,
+)
# from . import cli
+__all__ = [
+ "add",
+ "concatenate_spatial_adata",
+ "convert_scanpy",
+ "create_stlearn",
+ "datasets",
+ "em",
+ "pl",
+ "pp",
+ "read_10x",
+ "read_merfish",
+ "read_old_st",
+ "read_seq_fish",
+ "read_slide_seq",
+ "read_xenium",
+ "settings",
+ "spatial",
+ "tl",
+ "types",
+]
diff --git a/stlearn/__main__.py b/stlearn/__main__.py
deleted file mode 100644
index 981709a2..00000000
--- a/stlearn/__main__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-
-"""Package entry point."""
-
-
-from stlearn.app import main
-
-
-if __name__ == "__main__": # pragma: no cover
- main()
diff --git a/stlearn/_compat.py b/stlearn/_compat.py
index 0ef291a2..e3d16f4d 100644
--- a/stlearn/_compat.py
+++ b/stlearn/_compat.py
@@ -1,15 +1,16 @@
-try:
- from typing import Literal
-except ImportError:
- try:
- from typing_extensions import Literal
- except ImportError:
-
- class LiteralMeta(type):
- def __getitem__(cls, values):
- if not isinstance(values, tuple):
- values = (values,)
- return type("Literal_", (Literal,), dict(__args__=values))
-
- class Literal(metaclass=LiteralMeta):
- pass
+import spatialdata as sd
+from anndata import AnnData
+
+
+def get_adata(data, table_key="table"):
+ """Extract AnnData from either SpatialData or AnnData input."""
+ if isinstance(data, sd.SpatialData):
+ return data.tables[table_key]
+ elif isinstance(data, AnnData):
+ return data
+ else:
+ raise TypeError(f"Expected SpatialData or AnnData, got {type(data)}")
+
+
+def is_spatial_data(data):
+ return isinstance(data, sd.SpatialData)
diff --git a/stlearn/_datasets/_datasets.py b/stlearn/_datasets/_datasets.py
index 19ffb6d5..3c7e38dd 100644
--- a/stlearn/_datasets/_datasets.py
+++ b/stlearn/_datasets/_datasets.py
@@ -1,18 +1,89 @@
+import zipfile as zf
+
import scanpy as sc
-from .._settings import settings
-from pathlib import Path
from anndata import AnnData
+from .._settings import settings
+
+
+# TODO - Add scanpy and covert this over.
+def visium_sge(
+ sample_id="V1_Breast_Cancer_Block_A_Section_1",
+ *,
+ include_hires_tiff: bool = False,
+) -> AnnData:
+ """Processed Visium Spatial Gene Expression data from 10x Genomics' database.
-def example_bcba() -> AnnData:
- """\
- Download processed BCBA data (10X genomics published data).
- Reference: https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Breast_Cancer_Block_A_Section_1
+ The database_ can be browsed online to find the ``sample_id`` you want.
+
+ .. _database: https://support.10xgenomics.com/spatial-gene-expression/datasets
+
+ Parameters
+ ----------
+ sample_id
+ The ID of the data sample in 10x's spatial database.
+ include_hires_tiff
+ Download and include the high-resolution tissue image (tiff) in
+ `adata.uns["spatial"][sample_id]["metadata"]["source_image_path"]`.
+
+ Returns
+ -------
+ Annotated data matrix.
"""
- settings.datasetdir.mkdir(exist_ok=True)
- filename = settings.datasetdir / "example_bcba.h5"
- url = "https://www.dropbox.com/s/u3m2f16mvdom1am/example_bcba.h5ad?dl=1"
- if not filename.is_file():
- sc.readwrite._download(url=url, path=filename)
- adata = sc.read_h5ad(filename)
- return adata
+ sc.settings.datasetdir = settings.datasetdir
+ return sc.datasets.visium_sge(sample_id, include_hires_tiff=include_hires_tiff)
+
+
+def xenium_sge(
+ base_url="https://cf.10xgenomics.com/samples/xenium/1.0.1",
+ image_filename="he_image.ome.tif",
+ alignment_filename="he_imagealignment.csv",
+ zip_filename="outs.zip",
+ library_id="Xenium_FFPE_Human_Breast_Cancer_Rep1",
+ include_hires_tiff: bool = False,
+):
+ """
+ Download and extract Xenium SGE data files. Unlike scanpy this current does not
+ load the data. Data is located in `settings.datasetdir` / `library_id`.
+
+ Args:
+ base_url: Base URL for downloads
+ image_filename: Name of the image file to download
+ alignment_filename: Name of the affine transformation file to download
+ zip_filename: Name of the zip file to download
+ library_id: Identifier for the library
+ include_hires_tiff: Whether to download the high-res TIFF image
+ """
+ sc.settings.datasetdir = settings.datasetdir
+ library_dir = settings.datasetdir / library_id
+ library_dir.mkdir(parents=True, exist_ok=True)
+
+ files_to_extract = ["cell_feature_matrix.h5", "cells.csv.gz", "experiment.xenium"]
+ all_sge_files_exist = all(
+ (library_dir / sge_file).exists() for sge_file in files_to_extract
+ )
+
+ download_filenames = []
+ if not all_sge_files_exist:
+ download_filenames.append(zip_filename)
+ if include_hires_tiff and (
+ not (library_dir / alignment_filename).exists()
+ or not (library_dir / image_filename).exists()
+ ):
+ download_filenames += [alignment_filename, image_filename]
+
+ for file_name in download_filenames:
+ file_path = library_dir / file_name
+ url = f"{base_url}/{library_id}/{library_id}_{file_name}"
+ if not file_path.is_file():
+ sc.readwrite._download(url=url, path=file_path)
+
+ if not all_sge_files_exist:
+ try:
+ zip_file_path = library_dir / zip_filename
+ with zf.ZipFile(zip_file_path, "r") as zip_ref:
+ for zip_filename in files_to_extract:
+ with open(library_dir / zip_filename, "wb") as file_name:
+ file_name.write(zip_ref.read(f"outs/{zip_filename}"))
+ except zf.BadZipFile as b:
+ raise ValueError(f"Invalid zip file: {library_dir / zip_filename}") from b
diff --git a/stlearn/_settings.py b/stlearn/_settings.py
index 30eb017a..45cb0388 100644
--- a/stlearn/_settings.py
+++ b/stlearn/_settings.py
@@ -1,21 +1,21 @@
+import builtins
import inspect
import sys
+from collections.abc import Iterable, Iterator
from contextlib import contextmanager
from enum import IntEnum
+from logging import getLevelName
from pathlib import Path
from time import time
-from logging import getLevelName
-from typing import Any, Union, Optional, Iterable, TextIO
-from typing import Tuple, List, ContextManager
+from typing import Any, Literal, TextIO
from . import logging
-from .logging import _set_log_level, _set_log_file, _RootLogger
-from ._compat import Literal
+from .logging import _RootLogger, _set_log_file, _set_log_level
# All the code here migrated from scanpy
# It help to work with scanpy package
-_VERBOSITY_TO_LOGLEVEL = {
+_VERBOSITY_TO_LOGLEVEL: dict[str | int, str] = {
"error": "ERROR",
"warning": "WARNING",
"info": "INFO",
@@ -40,7 +40,7 @@ def level(self) -> int:
return getLevelName(_VERBOSITY_TO_LOGLEVEL[self])
@contextmanager
- def override(self, verbosity: "Verbosity") -> ContextManager["Verbosity"]:
+ def override(self, verbosity: "Verbosity") -> Iterator["Verbosity"]:
"""\
Temporarily override verbosity
"""
@@ -49,7 +49,7 @@ def override(self, verbosity: "Verbosity") -> ContextManager["Verbosity"]:
settings.verbosity = self
-def _type_check(var: Any, varname: str, types: Union[type, Tuple[type, ...]]):
+def _type_check(var: Any, varname: str, types: type | tuple[type, ...]):
if isinstance(var, types):
return
if isinstance(types, type):
@@ -57,16 +57,21 @@ def _type_check(var: Any, varname: str, types: Union[type, Tuple[type, ...]]):
else:
type_names = [t.__name__ for t in types]
possible_types_str = "{} or {}".format(
- ", ".join(type_names[:-1]), type_names[-1]
+ ", ".join(type_names[:-1]),
+ type_names[-1],
)
raise TypeError(f"{varname} must be of type {possible_types_str}")
-class stLearnConfig:
+class stLearnConfig: # noqa N801
"""\
Config manager for scanpy.
"""
+ _logpath: Path | None
+ _logfile: TextIO
+ _verbosity: Verbosity
+
def __init__(
self,
*,
@@ -76,14 +81,14 @@ def __init__(
file_format_figs: str = "pdf",
autosave: bool = False,
autoshow: bool = True,
- writedir: Union[str, Path] = "./write/",
- cachedir: Union[str, Path] = "./cache/",
- datasetdir: Union[str, Path] = "./data/",
- figdir: Union[str, Path] = "./figures/",
- cache_compression: Union[str, None] = "lzf",
+ writedir: str | Path = "./write/",
+ cachedir: str | Path = "./cache/",
+ datasetdir: str | Path = "./data/",
+ figdir: str | Path = "./figures/",
+ cache_compression: str | None = "lzf",
max_memory=15,
n_jobs=1,
- logfile: Union[str, Path, None] = None,
+ logfile: str | Path | None = None,
categories_to_ignore: Iterable[str] = ("N/A", "dontknow", "no_gate", "?"),
_frameon: bool = True,
_vector_friendly: bool = False,
@@ -139,26 +144,25 @@ def verbosity(self) -> Verbosity:
return self._verbosity
@verbosity.setter
- def verbosity(self, verbosity: Union[Verbosity, int, str]):
+ def verbosity(self, verbosity: Verbosity | int | str):
verbosity_str_options = [
v for v in _VERBOSITY_TO_LOGLEVEL if isinstance(v, str)
]
if isinstance(verbosity, Verbosity):
- self._verbosity = verbosity
+ new_verbosity = verbosity
elif isinstance(verbosity, int):
- self._verbosity = Verbosity(verbosity)
+ new_verbosity = Verbosity(verbosity)
elif isinstance(verbosity, str):
verbosity = verbosity.lower()
if verbosity not in verbosity_str_options:
raise ValueError(
f"Cannot set verbosity to {verbosity}. "
- f"Accepted string values are: {verbosity_str_options}"
+ f"Accepted string values are: {verbosity_str_options}",
)
else:
- self._verbosity = Verbosity(verbosity_str_options.index(verbosity))
- else:
- _type_check(verbosity, "verbosity", (str, int))
- _set_log_level(self, _VERBOSITY_TO_LOGLEVEL[self._verbosity])
+ new_verbosity = Verbosity(verbosity_str_options.index(verbosity))
+ self._verbosity = new_verbosity
+ _set_log_level(self, self._verbosity)
@property
def plot_suffix(self) -> str:
@@ -186,7 +190,7 @@ def file_format_data(self, file_format: str):
if file_format not in file_format_options:
raise ValueError(
f"Cannot set file_format_data to {file_format}. "
- f"Must be one of {file_format_options}"
+ f"Must be one of {file_format_options}",
)
self._file_format_data = file_format
@@ -207,7 +211,8 @@ def file_format_figs(self, figure_format: str):
@property
def autosave(self) -> bool:
"""\
- Automatically save figures in :attr:`~stlearn._settings.stLearnConfig.figdir` (default `False`).
+ Automatically save figures in :attr:`~stlearn._settings.stLearnConfig.figdir`
+ (default `False`).
Do not show plots/figures interactively.
"""
@@ -240,7 +245,7 @@ def writedir(self) -> Path:
return self._writedir
@writedir.setter
- def writedir(self, writedir: Union[str, Path]):
+ def writedir(self, writedir: str | Path):
_type_check(writedir, "writedir", (str, Path))
self._writedir = Path(writedir)
@@ -252,7 +257,7 @@ def cachedir(self) -> Path:
return self._cachedir
@cachedir.setter
- def cachedir(self, cachedir: Union[str, Path]):
+ def cachedir(self, cachedir: str | Path):
_type_check(cachedir, "cachedir", (str, Path))
self._cachedir = Path(cachedir)
@@ -264,7 +269,7 @@ def datasetdir(self) -> Path:
return self._datasetdir
@datasetdir.setter
- def datasetdir(self, datasetdir: Union[str, Path]):
+ def datasetdir(self, datasetdir: str | Path):
_type_check(datasetdir, "datasetdir", (str, Path))
self._datasetdir = Path(datasetdir).resolve()
@@ -276,12 +281,12 @@ def figdir(self) -> Path:
return self._figdir
@figdir.setter
- def figdir(self, figdir: Union[str, Path]):
+ def figdir(self, figdir: str | Path):
_type_check(figdir, "figdir", (str, Path))
self._figdir = Path(figdir)
@property
- def cache_compression(self) -> Optional[str]:
+ def cache_compression(self) -> str | None:
"""\
Compression for `sc.read(..., cache=True)` (default `'lzf'`).
@@ -290,16 +295,16 @@ def cache_compression(self) -> Optional[str]:
return self._cache_compression
@cache_compression.setter
- def cache_compression(self, cache_compression: Optional[str]):
+ def cache_compression(self, cache_compression: str | None):
if cache_compression not in {"lzf", "gzip", None}:
raise ValueError(
f"`cache_compression` ({cache_compression}) "
- "must be in {'lzf', 'gzip', None}"
+ "must be in {'lzf', 'gzip', None}",
)
self._cache_compression = cache_compression
@property
- def max_memory(self) -> Union[int, float]:
+ def max_memory(self) -> int | float:
"""\
Maximal memory usage in Gigabyte.
@@ -308,7 +313,7 @@ def max_memory(self) -> Union[int, float]:
return self._max_memory
@max_memory.setter
- def max_memory(self, max_memory: Union[int, float]):
+ def max_memory(self, max_memory: int | float):
_type_check(max_memory, "max_memory", (int, float))
self._max_memory = max_memory
@@ -325,18 +330,21 @@ def n_jobs(self, n_jobs: int):
self._n_jobs = n_jobs
@property
- def logpath(self) -> Optional[Path]:
+ def logpath(self) -> Path | None:
"""\
The file path `logfile` was set to.
"""
return self._logpath
@logpath.setter
- def logpath(self, logpath: Union[str, Path, None]):
- _type_check(logpath, "logfile", (str, Path))
- # set via “file object” branch of logfile.setter
- self.logfile = Path(logpath).open("a")
- self._logpath = Path(logpath)
+ def logpath(self, logpath: str | Path | None):
+ if logpath is None:
+ self._logpath = None
+ else:
+ _type_check(logpath, "logpath", (str, Path))
+ # set via “file object” branch of logfile.setter
+ self.logfile = Path(logpath).open("a") # noqa: SIM115
+ self._logpath = Path(logpath)
@property
def logfile(self) -> TextIO:
@@ -347,23 +355,27 @@ def logfile(self) -> TextIO:
The default `None` corresponds to :obj:`sys.stdout` in jupyter notebooks
and to :obj:`sys.stderr` otherwise.
- For backwards compatibility, setting it to `''` behaves like setting it to `None`.
+ For backwards compatibility, setting it to `''` behaves like setting it
+ to `None`.
"""
return self._logfile
@logfile.setter
- def logfile(self, logfile: Union[str, Path, TextIO, None]):
- if not hasattr(logfile, "write") and logfile:
- self.logpath = logfile
- else: # file object
- if not logfile: # None or ''
- logfile = sys.stdout if self._is_run_from_ipython() else sys.stderr
+ def logfile(self, logfile: str | Path | TextIO | None):
+ if logfile is None or logfile == "":
+ self._logfile = sys.stdout if self._is_run_from_ipython() else sys.stderr
+ self._logpath = None
+ elif isinstance(logfile, (str | Path)):
+ path = Path(logfile)
+ self._logfile = path.open("a")
+ self._logpath = path
+ elif isinstance(logfile, TextIO):
self._logfile = logfile
self._logpath = None
- _set_log_file(self)
+ _set_log_file(self)
@property
- def categories_to_ignore(self) -> List[str]:
+ def categories_to_ignore(self) -> list[str]:
"""\
Categories that are omitted in plotting etc.
"""
@@ -403,7 +415,7 @@ def set_figure_params(
frameon: bool = True,
vector_friendly: bool = True,
fontsize: int = 14,
- color_map: Optional[str] = None,
+ color_map: str | None = None,
format: _Format = "pdf",
transparent: bool = False,
ipython_format: str = "png2x",
@@ -414,18 +426,21 @@ def set_figure_params(
Parameters
----------
dpi
- Resolution of rendered figures – this influences the size of figures in notebooks.
+ Resolution of rendered figures - this influences the size of figures
+ in notebooks.
dpi_save
Resolution of saved figures. This should typically be higher to achieve
publication quality.
frameon
Add frames and axes labels to scatter plots.
vector_friendly
- Plot scatter plots using `png` backend even when exporting as `pdf` or `svg`.
+ Plot scatter plots using `png` backend even when exporting as
+ `pdf` or `svg`.
fontsize
Set the fontsize for several `rcParams` entries. Ignored if `scanpy=False`.
color_map
- Convenience method for setting the default color map. Ignored if `scanpy=False`.
+ Convenience method for setting the default color map. Ignored if
+ `scanpy=False`.
format
This sets the default format for saving figures: `file_format_figs`.
transparent
@@ -438,9 +453,7 @@ def set_figure_params(
try:
import IPython
- if isinstance(ipython_format, str):
- ipython_format = [ipython_format]
- IPython.display.set_matplotlib_formats(*ipython_format)
+ IPython.display.set_matplotlib_formats(*[ipython_format])
except Exception:
pass
from matplotlib import rcParams
@@ -461,17 +474,13 @@ def _is_run_from_ipython():
Only affects progress bars.
"""
- try:
- __IPYTHON__
- return True
- except NameError:
- return False
+ return getattr(builtins, "__IPYTHON__", False)
def __str__(self) -> str:
return "\n".join(
f"{k} = {v!r}"
for k, v in inspect.getmembers(self)
- if not k.startswith("_") and not k == "getdoc"
+ if not k.startswith("_") and k != "getdoc"
)
diff --git a/stlearn/add.py b/stlearn/add.py
index fde7173d..b225c6cd 100644
--- a/stlearn/add.py
+++ b/stlearn/add.py
@@ -1,10 +1,26 @@
-from .adds.add_image import image
-from .adds.add_positions import positions
-from .adds.parsing import parsing
-from .adds.add_lr import lr
-from .adds.annotation import annotation
-from .adds.add_labels import labels
from .adds.add_deconvolution import add_deconvolution
-from .adds.add_mask import add_mask
-from .adds.add_mask import apply_mask
from .adds.add_loupe_clusters import add_loupe_clusters
+from .adds.add_mask import add_mask, apply_mask
+from .adds.annotation import annotation
+from .adds.image import image
+from .adds.labels import labels
+from .adds.lr import lr
+from .adds.parsing import parsing
+from .adds.polygon_annotations import polygon_annotations
+from .adds.positions import positions
+from .adds.row_annotations import row_annotations
+
+__all__ = [
+ "add_deconvolution",
+ "add_loupe_clusters",
+ "add_mask",
+ "annotation",
+ "apply_mask",
+ "image",
+ "labels",
+ "lr",
+ "parsing",
+ "polygon_annotations",
+ "positions",
+ "row_annotations",
+]
diff --git a/stlearn/adds/add_deconvolution.py b/stlearn/adds/add_deconvolution.py
index 3b5445be..5d892dda 100644
--- a/stlearn/adds/add_deconvolution.py
+++ b/stlearn/adds/add_deconvolution.py
@@ -1,16 +1,14 @@
-from typing import Optional, Union
-from anndata import AnnData
-import pandas as pd
-import numpy as np
from pathlib import Path
+import pandas as pd
+from anndata import AnnData
+
def add_deconvolution(
adata: AnnData,
- annotation_path: Union[Path, str],
+ annotation_path: Path | str,
copy: bool = False,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Adding label transfered from Seurat
@@ -29,7 +27,11 @@ def add_deconvolution(
The annotation of cluster results.
"""
+ adata = adata.copy() if copy else adata
+
label = pd.read_csv(annotation_path, index_col=0)
label = label[adata.obs_names]
adata.obsm["deconvolution"] = label[adata.obs.index].T
+
+ return adata
diff --git a/stlearn/adds/add_loupe_clusters.py b/stlearn/adds/add_loupe_clusters.py
index af614bd8..f257f80f 100644
--- a/stlearn/adds/add_loupe_clusters.py
+++ b/stlearn/adds/add_loupe_clusters.py
@@ -1,19 +1,17 @@
-from typing import Optional, Union
-from anndata import AnnData
-import pandas as pd
-import numpy as np
-import stlearn
from pathlib import Path
+
+import numpy as np
+import pandas as pd
+from anndata import AnnData
from natsort import natsorted
def add_loupe_clusters(
adata: AnnData,
- loupe_path: Union[Path, str],
+ loupe_path: Path | str,
key_add: str = "multiplex",
copy: bool = False,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Adding label transfered from Seurat
@@ -36,9 +34,13 @@ def add_loupe_clusters(
The annotation of cluster results.
"""
+ adata = adata.copy() if copy else adata
+
label = pd.read_csv(loupe_path)
adata.obs[key_add] = pd.Categorical(
values=np.array(label[key_add]).astype("U"),
categories=natsorted(label[key_add].unique().astype("U")),
)
+
+ return adata if copy else None
diff --git a/stlearn/adds/add_mask.py b/stlearn/adds/add_mask.py
index 6608e00f..399807de 100644
--- a/stlearn/adds/add_mask.py
+++ b/stlearn/adds/add_mask.py
@@ -1,19 +1,18 @@
+import os
from pathlib import Path
+
import matplotlib
-from matplotlib import pyplot as plt
import numpy as np
-from typing import Optional, Union
from anndata import AnnData
-import os
-from stlearn._compat import Literal
+from matplotlib import pyplot as plt
def add_mask(
adata: AnnData,
- imgpath: Union[Path, str],
+ imgpath: Path | str,
key: str = "mask",
copy: bool = False,
-) -> Optional[AnnData]:
+) -> AnnData | None:
"""\
Adding binary mask image to the Anndata object
@@ -33,15 +32,15 @@ def add_mask(
**mask_image** : `adata.uns` field
Array format of image, saving by Pillow package.
"""
+ adata = adata.copy() if copy else adata
+
try:
- library_id = list(adata.uns["spatial"].keys())[0]
+ library_id = next(iter(adata.uns["spatial"].keys()))
quality = adata.uns["spatial"][library_id]["use_quality"]
- except:
- raise KeyError(
- f"""\
+ except Exception as e:
+ raise KeyError("""\
Please read ST data first and try again
- """
- )
+ """) from e
if imgpath is not None and os.path.isfile(imgpath):
try:
@@ -59,30 +58,24 @@ def add_mask(
adata.uns["mask_image"][library_id][key][quality] = img
print("Added tissue mask to the object!")
-
- return adata if copy else None
- except:
- raise ValueError(
- f"""\
+ except Exception as e:
+ raise ValueError(f"""\
{imgpath!r} does not end on a valid extension.
- """
- )
+ """) from e
else:
- raise ValueError(
- f"""\
+ raise ValueError(f"""\
{imgpath!r} does not end on a valid extension.
- """
- )
+ """)
return adata if copy else None
def apply_mask(
adata: AnnData,
- masks: Optional[list] = "all",
+ masks: list | str = "all",
select: str = "black",
- cmap: str = "default",
+ cmap_name: str = "default",
copy: bool = False,
-) -> Optional[AnnData]:
+) -> AnnData | None:
"""\
Parsing the old spaital transcriptomics data
@@ -106,19 +99,22 @@ def apply_mask(
Array format of image, saving by Pillow package.
"""
from scanpy.plotting import palettes
- from stlearn.plotting import palettes_st
- if cmap == "vega_10_scanpy":
+ from stlearn.pl import palettes_st
+
+ adata = adata.copy() if copy else adata
+
+ if cmap_name == "vega_10_scanpy":
cmap = palettes.vega_10_scanpy
- elif cmap == "vega_20_scanpy":
+ elif cmap_name == "vega_20_scanpy":
cmap = palettes.vega_20_scanpy
- elif cmap == "default_102":
+ elif cmap_name == "default_102":
cmap = palettes.default_102
- elif cmap == "default_28":
+ elif cmap_name == "default_28":
cmap = palettes.default_28
- elif cmap == "jana_40":
+ elif cmap_name == "jana_40":
cmap = palettes_st.jana_40
- elif cmap == "default":
+ elif cmap_name == "default":
cmap = palettes_st.default
else:
raise ValueError(
@@ -126,18 +122,15 @@ def apply_mask(
)
cmaps = matplotlib.colors.LinearSegmentedColormap.from_list("", cmap)
-
cmap_ = plt.cm.get_cmap(cmaps)
try:
- library_id = list(adata.uns["spatial"].keys())[0]
+ library_id = next(iter(adata.uns["spatial"].keys()))
quality = adata.uns["spatial"][library_id]["use_quality"]
- except:
- raise KeyError(
- f"""\
+ except Exception as e:
+ raise KeyError("""\
Please read ST data first and try again
- """
- )
+ """) from e
if masks == "all":
masks = list(adata.uns["mask_image"][library_id].keys())
@@ -150,29 +143,31 @@ def apply_mask(
for i, mask in enumerate(masks):
try:
mask_image = adata.uns["mask_image"][library_id][mask][quality]
- except:
- raise KeyError(
- f"""\
+ except Exception as e:
+ raise KeyError(f"""\
Please load mask {mask} images first and try again
- """
- )
+ """) from e
+
+ # Normalise to uint8 if the image is float in [0, 1]
+ if mask_image.dtype.kind == "f" and mask_image.max() <= 1.0:
+ mask_image = (mask_image * 255).astype(np.uint8)
if select == "black":
- mask_image = np.where(mask_image > 155, 0, 1)
+ mask_image = np.where(mask_image < 155, 1, 0)
elif select == "white":
- mask_image = np.where(mask_image > 155, 0, 1)
+ mask_image = np.where(mask_image >= 155, 1, 0)
else:
- raise ValueError(
- f"""\
+ raise ValueError("""\
Only support black and white mask yet.
- """
- )
+ """)
mask_image_2d = mask_image.mean(axis=2)
- apply_spot_mask = (
- lambda x: [i, mask]
- if mask_image_2d[int(x["imagerow"]), int(x["imagecol"])] == 1
- else [x[key + "_code"], x[key]]
- )
+
+ def apply_spot_mask(x, _mask=mask, _i=i, _mask_image_2d=mask_image_2d):
+ if _mask_image_2d[int(x["imagerow"]), int(x["imagecol"])] == 1:
+ return [_i, _mask]
+ else:
+ return [x[key + "_code"], x[key]]
+
spot_mask_df = adata.obs.apply(apply_spot_mask, axis=1, result_type="expand")
adata.obs[key + "_code"] = spot_mask_df[0]
adata.obs[key] = spot_mask_df[1]
diff --git a/stlearn/adds/annotation.py b/stlearn/adds/annotation.py
index ca509382..f7f2854d 100644
--- a/stlearn/adds/annotation.py
+++ b/stlearn/adds/annotation.py
@@ -1,17 +1,12 @@
-from typing import Optional, Union
from anndata import AnnData
-from matplotlib import pyplot as plt
-from pathlib import Path
-import os
def annotation(
adata: AnnData,
- label_list: list,
- use_label: str = "louvain",
+ label_list: list[str],
+ use_label: str = "leiden",
copy: bool = False,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Adding annotation for cluster
@@ -31,15 +26,17 @@ def annotation(
**[cluster method name]_anno** : `adata.obs` field
The annotation of cluster results.
"""
-
if label_list is None:
raise ValueError("Please give the label list!")
+ adata = adata.copy() if copy else adata
+
if len(label_list) != len(adata.obs[use_label].unique()):
raise ValueError("Please give the correct number of label list!")
- adata.obs[use_label + "_anno"] = adata.obs[use_label]
- adata.obs[use_label + "_anno"].cat.categories = label_list
+ adata.obs[use_label + "_anno"] = adata.obs[use_label].cat.rename_categories(
+ label_list
+ )
print("The annotation is added to adata.obs['" + use_label + "_anno" + "']")
diff --git a/stlearn/adds/add_image.py b/stlearn/adds/image.py
similarity index 83%
rename from stlearn/adds/add_image.py
rename to stlearn/adds/image.py
index 83c92d6b..1db531a4 100644
--- a/stlearn/adds/add_image.py
+++ b/stlearn/adds/image.py
@@ -1,8 +1,8 @@
-from typing import Optional, Union
+import os
+from pathlib import Path
+
from anndata import AnnData
from matplotlib import pyplot as plt
-from pathlib import Path
-import os
from PIL import Image
Image.MAX_IMAGE_PIXELS = None
@@ -10,15 +10,14 @@
def image(
adata: AnnData,
- imgpath: Union[Path, str],
+ imgpath: Path | str | None,
library_id: str,
quality: str = "hires",
scale: float = 1.0,
visium: bool = False,
spot_diameter_fullres: float = 50,
copy: bool = False,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Adding image data to the Anndata object
@@ -29,11 +28,13 @@ def image(
imgpath
Image path.
library_id
- Identifier for the visium library. Can be modified when concatenating multiple adata objects.
+ Identifier for the visium library. Can be modified when concatenating
+ multiple adata objects.
scale
Set scale factor.
quality
- Set quality that convert to stlearn to use. Store in anndata.obs['imagecol' & 'imagerow'].
+ Set quality that convert to stlearn to use. Store in
+ anndata.obs['imagecol' & 'imagerow'].
visium
Is this anndata read from Visium platform or not.
copy
@@ -44,6 +45,7 @@ def image(
**tissue_img** : `adata.uns` field
Array format of image, saving by Pillow package.
"""
+ adata = adata.copy() if copy else adata
if imgpath is not None and os.path.isfile(imgpath):
try:
@@ -68,18 +70,12 @@ def image(
adata.obs[["imagecol", "imagerow"]] = adata.obsm["spatial"] * scale
print("Added tissue image to the object!")
-
- return adata if copy else None
- except:
- raise ValueError(
- f"""\
+ except Exception as e:
+ raise ValueError(f"""\
{imgpath!r} does not end on a valid extension.
- """
- )
+ """) from e
else:
- raise ValueError(
- f"""\
+ raise ValueError(f"""\
{imgpath!r} does not end on a valid extension.
- """
- )
+ """)
return adata if copy else None
diff --git a/stlearn/adds/add_labels.py b/stlearn/adds/labels.py
similarity index 52%
rename from stlearn/adds/add_labels.py
rename to stlearn/adds/labels.py
index d4a05451..d11cad49 100644
--- a/stlearn/adds/add_labels.py
+++ b/stlearn/adds/labels.py
@@ -1,41 +1,47 @@
-from typing import Optional, Union
-from anndata import AnnData
-from pathlib import Path
-import os
-import pandas as pd
import numpy as np
+import pandas as pd
+from anndata import AnnData
from natsort import natsorted
def labels(
adata: AnnData,
- label_filepath: str = None,
+ label_filepath: str,
index_col: int = 0,
- use_label: str = None,
+ use_label: str | None = None,
sep: str = "\t",
copy: bool = False,
-) -> Optional[AnnData]:
+) -> AnnData | None:
"""\
Add label transfer results into AnnData object
Parameters
----------
- adata: AnnData The data object to add L-R info into
- label_filepath: str The path to the label transfer results file
- use_label: str Where to store the label_transfer results, defaults to 'predictions' in adata.obs & 'label_transfer' in adata.uns.
- sep: str Separator of the csv file
- copy: bool Copy flag indicating copy or direct edit
+ adata: AnnData
+ The data object to add L-R info into
+ label_filepath: str
+ The path to the label transfer results file
+ use_label: str
+ Where to store the label_transfer results, defaults to 'predictions'
+ in adata.obs & 'label_transfer' in adata.uns.
+ sep: str
+ Separator of the csv file
+ copy: bool
+ Copy flag indicating copy or direct edit
Returns
-------
- adata: AnnData The data object that L-R added into
+ adata: AnnData
+ The data object that L-R added into
"""
+ adata = adata.copy() if copy else adata
+
labels = pd.read_csv(label_filepath, index_col=index_col, sep=sep)
- uns_key = "label_transfer" if type(use_label) == type(None) else use_label
+ uns_key = "label_transfer" if use_label is None else use_label
adata.uns[uns_key] = labels.drop(["predicted.id", "prediction.score.max"], axis=1)
- key_add = "predictions" if type(use_label) == type(None) else use_label
+ key_add = "predictions" if use_label is None else use_label
key_source = "predicted.id"
adata.obs[key_add] = pd.Categorical(
values=np.array(labels[key_source]).astype("U"),
diff --git a/stlearn/adds/add_lr.py b/stlearn/adds/lr.py
similarity index 71%
rename from stlearn/adds/add_lr.py
rename to stlearn/adds/lr.py
index 6ed99cde..d40d11a8 100644
--- a/stlearn/adds/add_lr.py
+++ b/stlearn/adds/lr.py
@@ -1,32 +1,35 @@
-from typing import Optional, Union
-from anndata import AnnData
-from pathlib import Path
-import os
import pandas as pd
+from anndata import AnnData
def lr(
adata: AnnData,
- db_filepath: str = None,
+ db_filepath: str,
sep: str = "\t",
source: str = "connectomedb",
copy: bool = False,
-) -> Optional[AnnData]:
+) -> AnnData | None:
"""Add significant Ligand-Receptor pairs into AnnData object
Parameters
----------
- adata: AnnData The data object to add L-R info into
- db_filepath: str The path to the CPDB results file
- sep: str Separator of the CPDB results file
- source: str Source of LR database (default: connectomedb, can also support 'cellphonedb')
- copy: bool Copy flag indicating copy or direct edit
+ adata: AnnData
+ The data object to add L-R info into
+ db_filepath: str
+ The path to the CPDB results file
+ sep: str
+ Separator of the CPDB results file
+ source: str
+ Source of LR database (default: connectomedb, can also support 'cellphonedb')
+ copy: bool
+ Copy flag indicating copy or direct edit
Returns
-------
adata: AnnData The data object that L-R added into
"""
+ adata = adata.copy() if copy else adata
if source == "cellphonedb":
cpdb = pd.read_csv(db_filepath, sep=sep)
diff --git a/stlearn/adds/parsing.py b/stlearn/adds/parsing.py
index d92932cc..0ae6a9f0 100644
--- a/stlearn/adds/parsing.py
+++ b/stlearn/adds/parsing.py
@@ -1,18 +1,14 @@
-from typing import Optional, Union
-from anndata import AnnData
-from matplotlib import pyplot as plt
-from pathlib import Path
-import os
-import sys
+from os import PathLike
+
import numpy as np
+from anndata import AnnData
def parsing(
adata: AnnData,
- coordinates_file: Union[Path, str],
+ coordinates_file: int | str | bytes | PathLike[str] | PathLike[bytes],
copy: bool = True,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Parsing the old spaital transcriptomics data
@@ -33,7 +29,7 @@ def parsing(
# Get a map of the new coordinates
new_coordinates = dict()
- with open(coordinates_file, "r") as filehandler:
+ with open(coordinates_file) as filehandler:
for line in filehandler.readlines():
tokens = line.split()
assert len(tokens) >= 6 or len(tokens) == 4
@@ -52,6 +48,8 @@ def parsing(
"the coordinates file only contains 4 columns\n"
)
+ adata = adata.copy() if copy else adata
+
counts_table = adata.to_df()
new_index_values = list()
@@ -66,7 +64,7 @@ def parsing(
imgcol.append(new_x)
imgrow.append(new_y)
- new_index_values.append("{0}x{1}".format(new_x, new_y))
+ new_index_values.append(f"{new_x}x{new_y}")
except KeyError:
counts_table.drop(index, inplace=True)
@@ -80,7 +78,6 @@ def parsing(
adata.obs["imagecol"] = imgcol
adata.obs["imagerow"] = imgrow
-
adata.obsm["spatial"] = np.c_[[imgcol, imgrow]].reshape(-1, 2)
return adata if copy else None
diff --git a/stlearn/adds/polygon_annotations.py b/stlearn/adds/polygon_annotations.py
new file mode 100644
index 00000000..1a2a32a4
--- /dev/null
+++ b/stlearn/adds/polygon_annotations.py
@@ -0,0 +1,57 @@
+from pathlib import Path
+
+import geopandas as gpd
+import spatialdata.models as models
+
+from stlearn._compat import get_adata, is_spatial_data
+
+
+def polygon_annotations(
+ data,
+ annotations,
+ label_column="label",
+ obs_key="region",
+ spatial_key="spatial",
+ table_key="table",
+ copy=False,
+):
+ """
+ Annotate cells/spots by spatial overlap with polygon regions.
+
+ Parameters
+ ----------
+ data
+ SpatialData or AnnData object with spatial coordinates.
+ annotations
+ GeoDataFrame or path to GeoJSON/shapefile.
+ ...
+ """
+ is_sd = is_spatial_data(data)
+
+ if copy:
+ data = data.copy()
+ adata = get_adata(data, table_key)
+
+ if isinstance(annotations, (str, Path)):
+ annotations = gpd.read_file(annotations)
+
+ coords = adata.obsm[spatial_key]
+ points = gpd.GeoDataFrame(
+ index=adata.obs_names,
+ geometry=gpd.points_from_xy(coords[:, 0], coords[:, 1]),
+ )
+
+ joined = gpd.sjoin(points, annotations, how="left", predicate="within")
+ joined = joined[~joined.index.duplicated(keep="first")]
+ adata.obs[obs_key] = (
+ joined.reindex(adata.obs_names)[label_column].astype("category").values
+ )
+
+ # If SpatialData, also store the polygons as a shapes element
+ if is_sd:
+ parsed = models.ShapesModel.parse(annotations)
+ data.shapes[obs_key] = parsed
+ data.tables[table_key] = adata
+ return data if copy else None
+ else:
+ return adata if copy else None
diff --git a/stlearn/adds/add_positions.py b/stlearn/adds/positions.py
similarity index 92%
rename from stlearn/adds/add_positions.py
rename to stlearn/adds/positions.py
index 52872384..7b4c3cb7 100644
--- a/stlearn/adds/add_positions.py
+++ b/stlearn/adds/positions.py
@@ -1,18 +1,16 @@
-from typing import Optional, Union
-from anndata import AnnData
-import pandas as pd
from pathlib import Path
-import os
+
+import pandas as pd
+from anndata import AnnData
def positions(
adata: AnnData,
- position_filepath: Union[Path, str] = None,
- scale_filepath: Union[Path, str] = None,
+ position_filepath: Path | str,
+ scale_filepath: Path | str,
quality: str = "low",
copy: bool = False,
-) -> Optional[AnnData]:
-
+) -> AnnData | None:
"""\
Adding spatial information into the Anndata object
@@ -35,6 +33,8 @@ def positions(
Spatial information of the tissue image.
"""
+ adata = adata.copy() if copy else adata
+
tissue_positions = pd.read_csv(position_filepath, header=None)
tissue_positions.columns = [
"barcode",
diff --git a/stlearn/adds/row_annotations.py b/stlearn/adds/row_annotations.py
new file mode 100644
index 00000000..47450114
--- /dev/null
+++ b/stlearn/adds/row_annotations.py
@@ -0,0 +1,128 @@
+from pathlib import Path
+
+import pandas as pd
+from anndata import AnnData
+from pandas import DataFrame
+
+
+def row_annotations(
+ adata: AnnData,
+ annotations: pd.DataFrame | str | Path,
+ join_column: str | None = None,
+ columns: list[str] | None = None,
+ copy: bool = False,
+) -> AnnData | None:
+ """\
+ Add annotations to adata.obs by joining on cell/spot identifiers.
+
+ Merges a DataFrame (or CSV file) into adata.obs based on a
+ shared index or column. Useful for adding metadata such as
+ manual labels, clinical annotations, or external classifications.
+
+ Parameters
+ ----------
+ adata
+ Annotated data matrix.
+ annotations
+ DataFrame or path to a CSV/TSV file containing annotations.
+ join_column
+ Column in annotations to join on. If None, uses the
+ DataFrame index. The join is always against adata.obs_names.
+ columns
+ Subset of columns to add. If None, adds all columns
+ (excluding join_column).
+ copy
+ Return a copy instead of writing to adata.
+
+ Returns
+ -------
+ Depending on `copy`, returns or updates `adata` with new
+ columns added to `adata.obs`.
+ """
+ adata = adata.copy() if copy else adata
+
+ annotations = _read_annotations(annotations, columns, join_column)
+ merged = annotations.reindex(adata.obs_names)
+
+ added_cols = list(merged.columns)
+
+ for col in added_cols:
+ adata.obs[col] = merged[col].values
+
+ return adata if copy else None
+
+
+def row_annotations_proportions(
+ adata: AnnData,
+ annotations: pd.DataFrame | str | Path,
+ proportion_column_name: str = "cell_type",
+ join_column: str | None = None,
+ columns: list[str] | None = None,
+ copy: bool = False,
+) -> AnnData | None:
+ """\
+ Add annotations to adata.obs by joining on cell/spot identifiers and then
+ assuming that the values are cell proportions picking the highest proportion.
+
+ Merges a DataFrame (or CSV file) into adata.obs based on a
+ shared index or column. Useful for adding metadata such as
+ manual labels, clinical annotations, or external classifications.
+
+ Parameters
+ ----------
+ adata
+ Annotated data matrix.
+ annotations
+ DataFrame or path to a CSV/TSV file containing annotations.
+ proportion_column_name, default =
+ The column name to use to add the high proprotion value to
+ join_column
+ Column in annotations to join on. If None, uses the
+ DataFrame index. The join is always against adata.obs_names.
+ columns
+ Subset of columns to add. If None, adds all columns
+ (excluding join_column).
+ copy
+ Return a copy instead of writing to adata.
+
+ Returns
+ -------
+ Depending on `copy`, returns or updates `adata` with new
+ columns added to `adata.obs`.
+ """
+ adata = adata.copy() if copy else adata
+
+ annotations = _read_annotations(annotations, columns, join_column)
+ annotations = annotations.astype("float64")
+ labels = annotations.idxmax(axis=1)
+ adata.obs[proportion_column_name] = labels
+
+ return adata if copy else None
+
+
+def _read_annotations(
+ annotations: DataFrame | str | Path,
+ columns: list[str] | None,
+ join_column: str | None,
+) -> DataFrame:
+ if isinstance(annotations, (str, Path)):
+ path = Path(annotations)
+ sep = "\t" if path.suffix in (".tsv", ".txt") else ","
+ annotations = pd.read_csv(path, sep=sep)
+
+ if join_column is None:
+ annotations = annotations.set_index(annotations.columns[0])
+ else:
+ if join_column not in annotations.columns:
+ raise ValueError(
+ f"Column '{join_column}' not found. "
+ f"Available: {list(annotations.columns)}"
+ )
+ annotations = annotations.set_index(join_column)
+
+ if columns is not None:
+ missing = [c for c in columns if c not in annotations.columns]
+ if missing:
+ raise ValueError(f"Columns not found: {missing}")
+ annotations = annotations[columns]
+ return annotations
diff --git a/stlearn/app/app.py b/stlearn/app/app.py
deleted file mode 100644
index 6eb6a5dc..00000000
--- a/stlearn/app/app.py
+++ /dev/null
@@ -1,502 +0,0 @@
-import os, sys, subprocess
-
-sys.path.append(os.path.dirname(__file__))
-
-try:
- import flask
-except ImportError:
- subprocess.call(
- "pip install -r " + os.path.dirname(__file__) + "//requirements.txt", shell=True
- )
-
-from flask import (
- Flask,
- render_template,
- request,
- flash,
- url_for,
- redirect,
- session,
- send_file,
-)
-from bokeh.embed import components
-from bokeh.plotting import figure
-from bokeh.resources import INLINE
-from werkzeug.utils import secure_filename
-import tempfile
-import traceback
-
-import tempfile
-import shutil
-
-import stlearn
-import scanpy
-import numpy
-import numpy as np
-
-import asyncio
-from bokeh.server.server import BaseServer
-from bokeh.server.tornado import BokehTornado
-from tornado.httpserver import HTTPServer
-from tornado.ioloop import IOLoop
-from bokeh.application import Application
-from bokeh.application.handlers import FunctionHandler
-from bokeh.server.server import Server
-from bokeh.embed import server_document
-
-from bokeh.layouts import column, row
-
-# Functions related to processing the forms.
-from source.forms import views # for changing data in response to input
-
-# Global variables.
-
-global adata # Storing the data
-adata = None
-global step_log # Keeps track of what step we're up to (performed preprocessing?)
-step_log = {
- "uploaded": [False, "Upload file"],
- "preprocessed": [False, "Preprocessing"],
- "clustering": [False, "Clustering"],
- "psts": [False, "Spatial trajectory"],
- "dea": [False, "DEA"],
- "lr": [False, "Ligand-receptor analysis"],
- "cci": [False, "CCI"],
- # _params suffix important for templates/progress.html
- "preprocessed_params": {},
- "cci_params": {},
- "cluster_params": {},
- "psts_params": {},
- "dea_params": {},
- "lr_params": {},
-}
-
-# print(stlearn, file=sys.stdout)
-
-app = Flask(__name__)
-app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
-
-UPLOAD_FOLDER = tempfile.mkdtemp()
-print(UPLOAD_FOLDER)
-TEMPLATES_AUTO_RELOAD = True
-app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER
-app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 0
-app.config["TEMPLATES_AUTO_RELOAD"] = TEMPLATES_AUTO_RELOAD
-app.config["SESSION_PERMANENT"] = False
-
-
-@app.route("/", methods=["GET"])
-def index():
- return render_template("index.html", step_log=step_log)
-
-
-@app.route("/upload")
-def upload():
- return render_template("upload.html", step_log=step_log, flash_bool=True)
-
-
-@app.route("/preprocessing", methods=["GET", "POST"])
-def preprocessing():
- global adata, step_log
- updated_page = views.run_preprocessing(request, adata, step_log)
- return updated_page
-
-
-@app.route("/clustering", methods=["GET", "POST"])
-def clustering():
- global adata, step_log
- updated_page = views.run_clustering(request, adata, step_log)
- return updated_page
-
-
-@app.route("/lr", methods=["GET", "POST"])
-def lr():
- global adata, step_log
- updated_page = views.run_lr(request, adata, step_log)
- return updated_page
-
-
-@app.route("/cci", methods=["GET", "POST"])
-def cci():
- global adata, step_log
- updated_page = views.run_cci(request, adata, step_log)
- return updated_page
-
-
-@app.route("/psts", methods=["GET", "POST"])
-def psts():
- global adata, step_log
-
- if "clusters" not in adata.obs.columns:
- return redirect(url_for("choose_cluster"))
- else:
- updated_page = views.run_psts(request, adata, step_log)
- return updated_page
-
-
-@app.route("/dea", methods=["GET", "POST"])
-def dea():
- global adata, step_log
- updated_page = views.run_dea(request, adata, step_log)
- return updated_page
-
-
-allow_files = [
- "filtered_feature_bc_matrix.h5",
- "tissue_hires_image.png",
- "tissue_lowres_image.png",
- "tissue_positions_list.csv",
- "scalefactors_json.json",
-]
-
-
-@app.route("/folder_uploader", methods=["GET", "POST"])
-def folder_uploader():
- if request.method == "POST":
- # Clean uploads folder before upload a new data
- import shutil
-
- shutil.rmtree(app.config["UPLOAD_FOLDER"])
- os.makedirs(app.config["UPLOAD_FOLDER"])
- open(app.config["UPLOAD_FOLDER"] + "/.gitkeep", "a").close()
- # os.mknod()
-
- # Get list of files from selected folder
- files = request.files.getlist("file")
-
- os.mkdir(os.path.join(app.config["UPLOAD_FOLDER"], "spatial"))
-
- # allow_upload_files = list(map(lambda x: x ),allow_files)
-
- uploaded = []
- i = 0
- for file in files:
-
- filename = secure_filename(file.filename)
-
- if allow_files[0] in filename:
- file.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))
- os.rename(
- os.path.join(app.config["UPLOAD_FOLDER"], filename),
- os.path.join(app.config["UPLOAD_FOLDER"], allow_files[0]),
- )
- uploaded.append(allow_files[0])
-
- for allow_file in allow_files[1:]:
- if allow_file in filename:
- file.save(
- os.path.join(app.config["UPLOAD_FOLDER"] + "/spatial", filename)
- )
- os.rename(
- os.path.join(
- app.config["UPLOAD_FOLDER"] + "/spatial", filename
- ),
- os.path.join(
- app.config["UPLOAD_FOLDER"] + "/spatial", allow_file
- ),
- )
-
- uploaded.append(allow_file)
-
- print(i)
- i += 1
- if len(uploaded) == 5:
- flash("File uploaded successfully")
- global adata, step_log
- # step_log = {
- # "uploaded": [False, "Upload file"],
- # "preprocessed": [False, "Preprocessing"],
- # "clustering": [False, "Clustering"],
- # "psts": [False, "Spatial trajectory"],
- # "cci_rank": [False, "Cell-cell interaction"],
- # "dea": [False, "Differential expression analysis"],
- # # _params suffix important for templates/progress.html
- # "preprocessed_params": {},
- # "cci_params": {},
- # "cluster_params": {},
- # "psts_params": {},
- # "dea_params": {},
- # }
- adata = stlearn.Read10X(app.config["UPLOAD_FOLDER"])
- adata.var_names_make_unique() # removing duplicates
- # ensuring compatible format for CCI, since need _ to pair LRs #
- adata.var_names = numpy.array(
- [var_name.replace("_", "-") for var_name in adata.var_names]
- )
-
- shutil.rmtree(app.config["UPLOAD_FOLDER"])
-
- step_log["uploaded"][0] = True
-
- return redirect(url_for("upload"))
-
- if len(uploaded) != 5:
- missing_files = []
- for file in allow_files:
- if file not in uploaded:
- missing_files.append(file)
- shutil.rmtree(app.config["UPLOAD_FOLDER"])
- flash("Upload ERROR: Missing " + ", ".join(missing_files))
- return redirect(url_for("upload"))
-
-
-@app.route("/file_uploader", methods=["GET", "POST"])
-def file_uploader():
- if request.method == "POST":
-
- global adata, step_log
-
- # Clean uploads folder before upload a new data
- import shutil
-
- shutil.rmtree(app.config["UPLOAD_FOLDER"])
- os.makedirs(app.config["UPLOAD_FOLDER"])
- open(app.config["UPLOAD_FOLDER"] + "/.gitkeep", "a").close()
- # os.mknod()
- f = request.files["file"]
- filename = secure_filename(f.filename)
- f.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))
- try:
- adata = scanpy.read_h5ad(app.config["UPLOAD_FOLDER"] + "/" + f.filename)
- except:
- flash("Upload ERROR: Please choose the right AnnData file ")
-
- ### Updating log file with current anndata state ###
- step_log["uploaded"][0] = True
-
- if "n_cells" in adata.var.columns:
- step_log["preprocessed"][0] = True
-
- for col in adata.obs.columns:
- if adata.obs[col].dtype.name == "category":
- if col != "sub_cluster_labels":
- step_log["clustering"][0] = True
-
- if "global_graph" in adata.uns:
- step_log["psts"][0] = True
-
- step_log["lr"][0] = "lr_summary" in adata.uns
- step_log["cci"][0] = np.any(["lr_cci_" in key for key in adata.uns])
-
- return redirect(url_for("upload"))
-
-
-@app.route("/choose_cluster", methods=["GET", "POST"])
-def choose_cluster():
- menu = []
-
- for col in adata.obs.columns:
- if adata.obs[col].dtype.name == "category":
- if col != "sub_cluster_labels":
- menu.append(col)
-
- return render_template(
- "choose_cluster.html",
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- menu=menu,
- )
-
-
-@app.route("/convert_clusters", methods=["GET", "POST"])
-def convert_clusters():
- if request.method == "POST":
- adata.obs["clusters"] = adata.obs[request.form["convert_clusters"]]
- scanpy.tl.paga(adata, groups="clusters")
- stlearn.pl.cluster_plot(adata, use_label="clusters")
-
- return redirect(url_for("psts"))
-
-
-@app.route("/gene_plot")
-def gene_plot():
- script = server_document("http://127.0.0.1:5006/bokeh_gene_plot")
- return render_template(
- "gene_plot.html",
- script=script,
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- )
-
-
-@app.route("/cluster_plot")
-def cluster_plot():
- script = server_document("http://127.0.0.1:5006/bokeh_cluster_plot")
- return render_template(
- "cluster_plot.html",
- script=script,
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- )
-
-
-@app.route("/lr_plot")
-def lr_plot():
- script = server_document("http://127.0.0.1:5006/bokeh_lr_plot")
- return render_template(
- "lr_plot.html",
- script=script,
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- )
-
-
-@app.route("/spatial_cci_plot")
-def spatial_cci_plot():
- script = server_document("http://127.0.0.1:5006/bokeh_spatial_cci_plot")
- return render_template(
- "spatial_cci_plot.html",
- script=script,
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- )
-
-
-@app.route("/annotate_plot")
-def annotate_plot():
- script = server_document("http://127.0.0.1:5006/bokeh_annotate_plot")
- return render_template(
- "annotate_plot.html",
- script=script,
- template="Flask",
- relative_urls=False,
- step_log=step_log,
- )
-
-
-@app.route("/save_adata", methods=["POST"])
-def save_adata():
- if request.method == "POST":
- fd, path = tempfile.mkstemp()
- from datetime import datetime
-
- now = datetime.now()
- date_time = now.strftime("%m-%d-%Y_%H-%M-%S")
-
- adata.write_h5ad(path)
- return send_file(
- path, as_attachment=True, attachment_filename="adata_" + date_time + ".h5ad"
- )
-
-
-def modify_doc_gene_plot(doc):
- from stlearn.plotting.classes_bokeh import BokehGenePlot
-
- gp_object = BokehGenePlot(adata)
- doc.add_root(row(gp_object.layout, width=800))
-
- gp_object.data_alpha.on_change("value", gp_object.update_data)
- gp_object.tissue_alpha.on_change("value", gp_object.update_data)
- gp_object.spot_size.on_change("value", gp_object.update_data)
- gp_object.gene_select.on_change("value", gp_object.update_data)
- gp_object.cmap_select.on_change("value", gp_object.update_data)
-
- if len(gp_object.menu) != 0:
- gp_object.use_label.on_change("value", gp_object.update_data)
- gp_object.output_backend.on_change("value", gp_object.update_data)
-
-
-def modify_doc_cluster_plot(doc):
- from stlearn.plotting.classes_bokeh import BokehClusterPlot
-
- gp_object = BokehClusterPlot(adata)
- doc.add_root(row(gp_object.layout, width=800))
-
- gp_object.use_label.on_change("value", gp_object.update_list)
- gp_object.use_label.on_change("value", gp_object.update_data)
- gp_object.data_alpha.on_change("value", gp_object.update_data)
- gp_object.tissue_alpha.on_change("value", gp_object.update_data)
- gp_object.spot_size.on_change("value", gp_object.update_data)
- gp_object.list_cluster.on_change("active", gp_object.update_data)
- gp_object.checkbox_group.on_change("active", gp_object.update_data)
- gp_object.output_backend.on_change("value", gp_object.update_data)
- if "rank_genes_groups" in adata.uns:
- gp_object.n_top_genes.on_change("value", gp_object.update_data)
- gp_object.cmap_select.on_change("value", gp_object.update_data)
- gp_object.plot_select.on_change("value", gp_object.update_data)
- gp_object.min_logfoldchange.on_change("value", gp_object.update_data)
-
-
-def modify_doc_spatial_cci_plot(doc):
- from stlearn.plotting.classes_bokeh import BokehSpatialCciPlot
-
- gp_object = BokehSpatialCciPlot(adata)
- doc.add_root(row(gp_object.layout, width=800))
-
- gp_object.annot_select.on_change("value", gp_object.update_list)
- gp_object.annot_select.on_change("value", gp_object.update_data)
- gp_object.lr_select.on_change("value", gp_object.update_data)
- gp_object.data_alpha.on_change("value", gp_object.update_data)
- gp_object.tissue_alpha.on_change("value", gp_object.update_data)
- gp_object.spot_size.on_change("value", gp_object.update_data)
- gp_object.list_cluster.on_change("active", gp_object.update_data)
- gp_object.output_backend.on_change("value", gp_object.update_data)
-
-
-def modify_doc_lr_plot(doc):
- from stlearn.plotting.classes_bokeh import BokehLRPlot
-
- gp_object = BokehLRPlot(adata)
- doc.add_root(row(gp_object.layout, width=800))
-
- gp_object.data_alpha.on_change("value", gp_object.update_data)
- gp_object.tissue_alpha.on_change("value", gp_object.update_data)
- gp_object.spot_size.on_change("value", gp_object.update_data)
- # gp_object.het_select.on_change("value", gp_object.update_data)
- gp_object.lr_select.on_change("value", gp_object.update_data)
- gp_object.output_backend.on_change("value", gp_object.update_data)
-
-
-def modify_doc_annotate_plot(doc):
- from stlearn.plotting.classes_bokeh import Annotate
-
- gp_object = Annotate(adata)
- doc.add_root(row(gp_object.layout, width=800))
- gp_object.data_alpha.on_change("value", gp_object.update_data)
- gp_object.tissue_alpha.on_change("value", gp_object.update_data)
- gp_object.spot_size.on_change("value", gp_object.update_data)
-
-
-# App for gene_plot
-bkapp = Application(FunctionHandler(modify_doc_gene_plot))
-
-# App for cluster_plot
-bkapp2 = Application(FunctionHandler(modify_doc_cluster_plot))
-
-# App for lr_plot
-bkapp3 = Application(FunctionHandler(modify_doc_lr_plot))
-
-# App for cci_spatial_plot
-bkapp3_1 = Application(FunctionHandler(modify_doc_spatial_cci_plot))
-
-# App for annotate_plot
-bkapp4 = Application(FunctionHandler(modify_doc_annotate_plot))
-
-
-def bk_worker():
- asyncio.set_event_loop(asyncio.new_event_loop())
-
- server = Server(
- {
- "/bokeh_gene_plot": bkapp,
- "/bokeh_cluster_plot": bkapp2,
- # "/bokeh_cci_plot": bkapp3,
- "/bokeh_lr_plot": bkapp3,
- "/bokeh_spatial_cci_plot": bkapp3_1,
- "/bokeh_annotate_plot": bkapp4,
- },
- io_loop=IOLoop(),
- allow_websocket_origin=["127.0.0.1:5000", "localhost:5000"],
- )
- server.start()
- server.io_loop.start()
-
-
-from threading import Thread
-
-Thread(target=bk_worker).start()
diff --git a/stlearn/app/cli.py b/stlearn/app/cli.py
deleted file mode 100644
index 20154df4..00000000
--- a/stlearn/app/cli.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import click
-from .. import __version__
-
-import os
-
-
-@click.group(
- name="stlearn",
- subcommand_metavar="COMMAND ",
- options_metavar="",
- context_settings=dict(max_content_width=85, help_option_names=["-h", "--help"]),
-)
-@click.help_option("--help", "-h", help="Show this message and exit.")
-@click.version_option(
- version=__version__,
- prog_name="stlearn",
- message="[%(prog)s] Version %(version)s",
- help="Show the software version and exit.",
-)
-def main():
- os._exit
- click.echo("Please run `stlearn launch` to start the web app")
-
-
-@main.command(short_help="Launch the stlearn interactive app")
-def launch():
- from .app import app
-
- try:
- app.run(host="0.0.0.0", port=5000, debug=True, use_reloader=False)
- except OSError as e:
- if e.errno == errno.EADDRINUSE:
- raise click.ClickException(
- "Port is in use, please specify an open port using the --port flag."
- ) from e
- raise
diff --git a/stlearn/app/requirements.txt b/stlearn/app/requirements.txt
deleted file mode 100644
index 4bf914e3..00000000
--- a/stlearn/app/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Flask==2.0.3
-flask_wtf==1.0.0
-markupsafe==2.1.0
-WTForms==3.0.1
diff --git a/stlearn/app/source/forms/form_validators.py b/stlearn/app/source/forms/form_validators.py
deleted file mode 100644
index 3a82f887..00000000
--- a/stlearn/app/source/forms/form_validators.py
+++ /dev/null
@@ -1,19 +0,0 @@
-""" Contains different kinds of form validators.
-"""
-from wtforms.validators import ValidationError
-
-
-class CheckNumberRange(object):
- def __init__(self, lower, upper, hint=""):
- self.lower = lower
- self.upper = upper
- self.hint = hint
-
- def __call__(self, form, field):
-
- if field.data is not None:
- if not (self.lower <= float(field.data) <= self.upper):
- if self.hint:
- raise ValidationError(self.hint)
- else:
- raise ValidationError("Not in correct range")
diff --git a/stlearn/app/source/forms/forms.py b/stlearn/app/source/forms/forms.py
deleted file mode 100644
index 0eef6b1d..00000000
--- a/stlearn/app/source/forms/forms.py
+++ /dev/null
@@ -1,364 +0,0 @@
-"""Purpose of this script is to create general forms that are programmable with
- particular input. Will impliment forms for subsetting the data and
- visualisation options in a general way so can be used with any
- SingleCellAnalysis dataset.
-"""
-
-import sys
-from flask_wtf import FlaskForm
-
-# from flask_wtf.file import FileField
-from wtforms import SelectMultipleField, SelectField
-import wtforms
-
-
-def createSuperForm(elements, element_fields, element_values, validators=None):
- """ Creates a general form; goal is to create a fully programmable form \
- that essentially governs all the options the user will select.
-
- Args:
- elements (list): Element names to be rendered on the page, in \
- order of how they will appear on the page.
-
- element_fields (list): The names of the fields to be rendered. \
- Each field is in same order as 'elements'. \
- Currently supported are: \
- 'Title', 'SelectMultipleField', 'SelectField', \
- 'StringField', 'Text', 'List'.
-
- element_values (list): The information which will be put into \
- the field. Changes depending on field: \
-
- 'Title' and 'Text': 'object' is a string
- containing the title which will be added as \
- a heading when rendered on the page.
-
- 'SelectMultipleField' and 'SelectField':
- 'object' is list of options to select from.
-
- 'StringField':
- The example values to display within the \
- fields text area. The 'placeholder' option.
-
- 'List':
- A list of objects which will be attached \
- to the form.
-
- validators (list): A list of functions which take the \
- form as input, used to construct the form validator. \
- Form validator constructed by calling these \
- sequentially with form 'self' as input.
-
- Args:
- form (list): A WTForm which has attached as variable all the \
- fields mentioned, so then when rendered as input to
- 'SuperDataDisplay.html' shows the form.
- """
-
- class SuperForm(FlaskForm):
- """A base form on which all of the fields will be added."""
-
- if type(validators) == type(None):
- validators = [None] * len(elements)
-
- # Add the information #
- SuperForm.elements = elements
- SuperForm.element_fields = element_fields
-
- multiSelectLeft = True # Places multi-select field to left, alternatives
- # if many multi-selects in row
- for i, element in enumerate(elements):
- fieldName = element_fields[i]
-
- # Adding each element as the appropriate field to the form #
- if fieldName == "SelectMultipleField":
- setattr(
- SuperForm,
- element,
- SelectMultipleField(element, choices=element_values[i]),
- )
- # The point of this number is to give an order for the attributes,
- # so that odd numbers get rendered to right of page, even numbers
- # left.
- setattr(SuperForm, element + "_number", int(multiSelectLeft))
- # inverts, so if left, goes right for the next multiSelectField
- multiSelectLeft = multiSelectLeft == False
-
- else:
- multiSelectLeft = True # Reset the MultiSelectField position
-
- if fieldName in ["Title", "List"]:
- setattr(SuperForm, element, element_values[i])
-
- elif fieldName == "SelectField":
- setattr(
- SuperForm,
- element,
- SelectField(
- element, choices=element_values[i], validators=validators[i]
- ),
- )
-
- # elif fieldName == 'FileField':
- # setattr(SuperForm, element, FileField(validators=validators[i]))
- # setattr(SuperForm, element + '_placeholder', # Setting default
- # element_values[i])
-
- elif fieldName in [
- "StringField",
- "IntegerField",
- "BooleanField",
- "FileField",
- "FloatField",
- ]:
- FieldClass = getattr(wtforms, fieldName)
- setattr(
- SuperForm, element, FieldClass(element, validators=validators[i])
- )
- setattr(
- SuperForm,
- element + "_placeholder", # Setting default
- element_values[i],
- )
-
- return SuperForm
-
-
-def getPreprocessForm():
- """Gets the preprocessing form generated from the superform above.
-
- Returns:
- FlaskForm: With attributes that allow for inputs that are related to
- pre-processing.
- """
- elements = [
- "Spot Quality Control Filtering", # Title
- "Minimum genes per spot",
- "Minimum counts per spot",
- "Gene Quality Control Filtering", # Title
- "Minimum spots per gene",
- "Minimum counts per gene",
- "Normalisation, Log-transform, & Scaling", # Title
- "Normalize total",
- "Log 1P",
- "Scale",
- ]
- element_fields = [
- "Title",
- "IntegerField",
- "IntegerField",
- "Title",
- "IntegerField",
- "IntegerField",
- "Title",
- "BooleanField",
- "BooleanField",
- "BooleanField",
- ]
- element_values = ["", 200, 300, "", 3, 5, "", True, True, True]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getLRForm():
- """Gets the LR form generated from the superform above.
-
- Returns:
- FlaskForm: With attributes that allow for inputs that are \
- related to LR analysis.
- """
- elements = [
- "Species",
- "Spot neighbourhood (-1: smallest neighbourhood, 0: within-spot mode)",
- "Minimum spots with LR scores",
- "N random gene pairs (permutations)",
- "CPUs",
- ]
- element_fields = [
- "SelectField",
- "IntegerField",
- "IntegerField",
- "IntegerField",
- "IntegerField",
- ]
- element_values = [
- [("Human", "Human"), ("Mouse", "Mouse")],
- -1,
- 20,
- 100,
- 2,
- ]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getCCIForm(adata):
- """Gets the CCI form generated from the superform above.
-
- Returns:
- FlaskForm: With attributes that allow for inputs that are
- related to CCI analysis.
- """
- elements = [
- "Cell information (only discrete labels available, unless mixture already in anndata.uns)",
- "Minimum spots for LR to be considered",
- "Spot mixture (only if the 'Cell Information' label selected available in anndata.uns)",
- "Cell proportion cutoff (value above which cell is considered in spot if 'Spot mixture' selected)",
- "Permutations (recommend atleast 1000)",
- ]
- element_fields = [
- "SelectField",
- "IntegerField",
- "BooleanField",
- "FloatField",
- "IntegerField",
- ]
- if type(adata) == type(None):
- fields = []
- mix = False
- else:
- fields = [
- key for key in adata.obs.keys() if type(adata.obs[key].values[0]) == str
- ]
- mix = fields[0] in adata.uns.keys()
- element_values = [fields, 20, mix, 0.2, 100]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getCCIForm_old():
- """Gets the CCI form generated from the superform above.
-
- Returns:
- FlaskForm: With attributes that allow for inputs that are related to
- CCI analysis.
- """
- elements = [
- "* Cell Heterogeneity File",
- "Neighbourhood distance (0 indicates within-spot mode)",
- "** L-R pair input (e.g. L1_R1, L2_R2, ...)",
- "Permutations (0 indicates no permutation testing)",
- ]
- element_fields = ["FileField", "IntegerField", "StringField", "IntegerField"]
- element_values = ["", 25, "", 0]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getClusterForm():
- """Gets the Cluster form generated using superform above.
-
- Returns:
- FlaskForm: With attributes that allow input related to clustering.
- """
- elements = [
- "PCA components",
- "stSME normalisation",
- "Cluster method",
- "K",
- "Resolution",
- "Neighbours (for Louvain/Leiden)",
- ]
- element_fields = [
- "IntegerField",
- "BooleanField",
- "SelectField",
- "IntegerField",
- "FloatField",
- "IntegerField",
- ]
- element_values = [
- 50,
- True,
- [("KMeans", "KMeans"), ("Louvain", "Louvain"), ("Leiden", "Leiden")],
- 10,
- 1.0,
- 15,
- ]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getPSTSForm(trajectory, clusts, options):
- """Gets the psts form generated using superform above.
-
- Args:
- cluster_set (numpy.array): The clusters which can be selected as
- the root for psts analysis.
-
- Returns:
- FlaskForm: With attributes that allow input related to psts.
- """
- elements = [
- "Root cluster",
- "Reverse",
- "eps (max. dist. spot neighbourhood)",
- "Trajectory Select",
- "Select distance-based method",
- ]
- element_fields = [
- "SelectField",
- "BooleanField",
- "IntegerField",
- "SelectField",
- "SelectField",
- ]
-
- element_values = [clusts, False, 50, trajectory, options]
- return createSuperForm(elements, element_fields, element_values)
-
-
-def getDEAForm(list_labels, methods):
- """Gets the psts form generated using superform above.
-
- Args:
- cluster_set (numpy.array): The clusters which can be selected as
- the root for psts analysis.
-
- Returns:
- FlaskForm: With attributes that allow input related to psts.
- """
- elements = ["Use label", "Use method"]
- element_fields = [
- "SelectField",
- "SelectField",
- ]
-
- element_values = [list_labels, methods]
- return createSuperForm(elements, element_fields, element_values)
-
-
-######################## Junk Code #############################################
-# def getCCIForm(step_log):
-# """ Gets the CCI form generated from the superform above.
-#
-# Returns:
-# FlaskForm: With attributes that allow for inputs that are related to
-# CCI analysis.
-# """
-# elements, element_fields, element_values = [], [], []
-# if type(step_log['cci_het']) == type(None):
-# # Analysis type form version #
-# analysis_elements = ['Cell Heterogeneity Information', # Title
-# 'cci_het',
-# 'Permutation Testing', # Title
-# 'cci_perm']
-# analysis_fields = ['Title', 'SelectField', 'Title', 'SelectField']
-# label_transfer_options = ['Upload Cell Label Transfer',
-# 'No Cell Label Transfer']
-# permutation_options = ['With permutation testing',
-# 'Without permutation testing']
-# analysis_values = ['', label_transfer_options, '', permutation_options]
-# elements += analysis_elements
-# element_fields += analysis_fields
-# element_values += analysis_values
-#
-# else:
-# # Core elements regardless of CCI mode #
-# elements += ['Neighbourhood distance',
-# 'L-R pair input (e.g. L1_R1, L2_R2, ...)']
-# element_fields += ['IntegerField', 'StringField']
-# element_values += [5, '']
-#
-# if step_log['cci_perm']:
-# # Including cell heterogeneity information #
-# elements += ['Permutations']
-# element_fields += ['IntegerField']
-# element_values += [200]
-#
-# return createSuperForm(elements, element_fields, element_values, None)
diff --git a/stlearn/app/source/forms/helper_functions.py b/stlearn/app/source/forms/helper_functions.py
deleted file mode 100644
index e9a64e40..00000000
--- a/stlearn/app/source/forms/helper_functions.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Purpose of this script is to write the functions that help facilitate
-# subsetting of the data depending on the users input
-import numpy
-
-
-def printOut(text, fileName="stdout.txt", close=True, file=None):
- """Prints to the specified file name. Used for debugging.
- If close is Fale, returns open file.
- """
-
- if type(file) == type(None):
- file = open(fileName, "w")
-
- print(text, file=file)
-
- if close:
- file.close()
- else:
- return file
-
-
-def filterOptions(metaDataSets, options):
- """Returns options that overlap with keys in metaDataSets dictionary"""
- if type(options) == type(None):
- options = list(metaDataSets.keys())
- else:
- options = [option for option in options if option in metaDataSets.keys()]
-
- return options
-
-
-def addChoices(metaDataSets, options, elementValues):
- """Helper function which generates choices for SelectMultiField"""
- for option in options:
- choices = [(optioni, optioni) for optioni in metaDataSets[option]]
- elementValues.append(choices)
-
-
-# TODO update this so has 'options' as input
-def subsetSCA(sca, subsetForm):
- """Subsets the SCA based on the selected fields and the inputted genes."""
-
- # Getting the attached fields from the form which refer subset options #
- options = filterOptions(sca.metaDataSets, subsetForm.elements)
-
- # Subsetting based on selection #
- conditionSelection = {} # selection dictionary
- for i, option in enumerate(options):
- selected = getattr(subsetForm, option).data
- if len(selected) != 0:
- conditionSelection[option] = selected
-
- # Subsetting based on conditions #
- if len(conditionSelection) != 0:
- sca = sca.createConditionSubset("subset", conditionSelection)
-
- # Subsetting based on inputted genes #
- geneList = getattr(subsetForm, "Select Cells Expressing Gene/s").data.split(",")
- if geneList != [""]:
- # Filter to just the genes which express all of the inputted genes #
- sca = sca.createGeneExprsSubset(
- "subset", genesToFilter=geneList, cutoff=0, keep=True, useOr=False
- )
-
- return sca, conditionSelection, geneList
diff --git a/stlearn/app/source/forms/utils.py b/stlearn/app/source/forms/utils.py
deleted file mode 100644
index 3782c74f..00000000
--- a/stlearn/app/source/forms/utils.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Helper utilities and decorators."""
-from flask import flash
-import matplotlib.pyplot as plt
-
-
-def flash_errors(form, category="warning"):
- """Flash all errors for a form."""
- for field, errors in form.errors.items():
- for error in errors:
- flash(getattr(form, field).label.text + " - " + error + ", category")
-
-
-def get_all_paths(adata):
-
- import networkx as nx
-
- G = nx.from_numpy_array(adata.uns["paga"]["connectivities_tree"].toarray())
- mapping = {int(k): v for k, v in zip(G.nodes, adata.obs.clusters.cat.categories)}
- G = nx.relabel_nodes(G, mapping)
-
- all_paths = []
- for source in G.nodes:
- for target in G.nodes:
- paths = nx.all_simple_paths(G, source=source, target=target)
- for path in paths:
- all_paths.append(path)
-
- import numpy as np
-
- all_paths = list(map(lambda x: " - ".join(np.array(x).astype(str)), all_paths))
-
- return all_paths
diff --git a/stlearn/app/source/forms/view_helpers.py b/stlearn/app/source/forms/view_helpers.py
deleted file mode 100644
index 499edd7e..00000000
--- a/stlearn/app/source/forms/view_helpers.py
+++ /dev/null
@@ -1,41 +0,0 @@
-""" Helper functions for views.py.
-"""
-
-import numpy
-
-
-def getVal(form, element):
- return getattr(form, element).data
-
-
-def getData(form):
- """Retrieves the data from the form and places into dictionary."""
- params = {}
- form_elements = form.elements
- form_fields = form.element_fields
- for i, element in enumerate(form_elements):
- if form_fields[i] != "Title":
- data = getVal(form, element)
- params[element] = data
- return params
-
-
-def getLR(lr_input, gene_names):
- """Returns list of lr_inputs and error message, if any."""
- if lr_input == "":
- return None, "ERROR: LR pairs required input."
-
- try:
- lrs = [lr.strip(" ") for lr in lr_input.split(",")]
- absent_genes = []
- for lr in lrs:
- genes = lr.split("_")
- absent_genes.extend([gene for gene in genes if gene not in gene_names])
-
- if len(absent_genes) != 0:
- return None, f"ERROR: inputted genes not found {absent_genes}."
-
- return lrs, ""
-
- except:
- return None, "ERROR: LR pairs misformatted."
diff --git a/stlearn/app/source/forms/views.py b/stlearn/app/source/forms/views.py
deleted file mode 100644
index 420981a9..00000000
--- a/stlearn/app/source/forms/views.py
+++ /dev/null
@@ -1,399 +0,0 @@
-""" This is more a general views focussed on defining functions which are \
- called by other views for specify pages. This way different pages can be \
- used to display different data, but in a consistent way.
-"""
-
-import sys
-import numpy
-import numpy as np
-from flask import flash
-from source.forms import forms
-
-from source.forms.utils import flash_errors
-import source.forms.view_helpers as vhs
-import traceback
-
-from flask import render_template
-
-import scanpy as sc
-import stlearn as st
-
-from scipy.spatial.distance import cosine
-
-# Creating the forms using a class generator #
-PreprocessForm = forms.getPreprocessForm()
-# CCIForm = forms.getCCIForm() #OLD
-ClusterForm = forms.getClusterForm()
-LRForm = forms.getLRForm()
-
-
-def run_preprocessing(request, adata, step_log):
- """Performs the scanpy pre-processing steps based on the inputted data."""
-
- form = PreprocessForm(request.form)
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- # Logging params used #
- step_log["preprocessed_params"] = vhs.getData(form)
- print(step_log["preprocessed_params"], file=sys.stdout)
-
- # QC filtering #
- sc.pp.filter_cells(adata, min_genes=vhs.getVal(form, "Minimum genes per spot"))
- sc.pp.filter_cells(
- adata, min_counts=vhs.getVal(form, "Minimum counts per spot")
- )
- sc.pp.filter_genes(adata, min_cells=vhs.getVal(form, "Minimum spots per gene"))
- sc.pp.filter_genes(
- adata, min_counts=vhs.getVal(form, "Minimum counts per gene")
- )
-
- # Pre-processing #
- if vhs.getVal(form, "Normalize total"):
- sc.pp.normalize_total(adata, target_sum=1e4)
- if vhs.getVal(form, "Log 1P"):
- sc.pp.log1p(adata)
- adata.raw = adata
- if vhs.getVal(form, "Scale"):
- sc.pp.scale(adata, max_value=10)
-
- # Setting pre-process to true #
- step_log["preprocessed"][0] = True
-
- if step_log["preprocessed"][0]:
- flash("Preprocessing is completed!")
-
- updated_page = render_template(
- "preprocessing.html",
- title=step_log["preprocessed"][1],
- preprocess_form=form,
- flash_bool=step_log["preprocessed"][0],
- step_log=step_log,
- )
-
- return updated_page
-
-
-def run_lr(request, adata, step_log):
- """Runs LR analysis."""
-
- form = LRForm(request.form)
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- step_log["lr_params"] = vhs.getData(form)
- print(step_log["lr_params"], file=sys.stdout)
- elements = numpy.array(list(step_log["lr_params"].keys()))
- # order: Species, Spot neighbourhood, min_spots, n_pairs, CPUs
- element_values = list(step_log["lr_params"].values())
- dist = element_values[1]
- dist = dist if dist != -1 else None
-
- # Loading the LR databases available within stlearn (from NATMI)
- lrs = st.tl.cci.load_lrs(["connectomeDB2020_lit"], species=element_values[0])
-
- # Running the analysis #
- st.tl.cci.run(
- adata,
- lrs,
- min_spots=element_values[2],
- distance=dist,
- n_pairs=element_values[3],
- n_cpus=element_values[-1],
- )
- flash("LR analysis is completed!")
-
- step_log["lr"][0] = "lr_summary" in adata.uns
-
- updated_page = render_template(
- "lr.html",
- title=step_log["lr"][1],
- lr_form=form,
- flash_bool=True,
- step_log=step_log,
- )
- return updated_page
-
-
-def run_cci(request, adata, step_log):
- """Performs CCI analysis."""
-
- CCIForm = forms.getCCIForm(adata)
- form = CCIForm(request.form)
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- step_log["cci_params"] = vhs.getData(form)
- print(step_log["cci_params"], file=sys.stdout)
- elements = numpy.array(list(step_log["cci_params"].keys()))
- # order: cell_type, min_spots, spot_mixtures, cell_prop_cutoff, sig_spots
- # n_perms
- element_values = list(step_log["cci_params"].values())
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- else:
- try:
- # Running the counting of co-occurence of cell types and LR expression #
- st.tl.cci.run_cci(
- adata,
- element_values[0],
- min_spots=element_values[1],
- spot_mixtures=element_values[2],
- cell_prop_cutoff=element_values[3],
- sig_spots=True, # Should make this not optional..
- n_perms=element_values[4],
- )
-
- flash("CCI analysis is completed!")
-
- except Exception as msg:
- traceback.print_exc(file=sys.stdout)
- flash("Analysis ERROR: " + str(msg))
- print(msg)
-
- step_log["cci"][0] = np.any(["lr_cci_" in key for key in adata.uns])
-
- updated_page = render_template(
- "cci.html",
- title=step_log["cci"][1],
- cci_form=form,
- flash_bool=True,
- step_log=step_log,
- )
-
- return updated_page
-
-
-def run_clustering(request, adata, step_log):
- """Performs clustering analysis."""
-
- form = ClusterForm(request.form)
-
- step_log["cluster_params"] = vhs.getData(form)
- print(step_log["cluster_params"], file=sys.stdout)
- elements = list(step_log["cluster_params"].keys())
- # order: pca_comps, SME bool, method, method_param
- element_values = list(step_log["cluster_params"].values())
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- try:
- # Running PCA, performs scaling internally #
- n_comps = element_values[0]
- st.em.run_pca(adata, n_comps=n_comps)
-
- print(element_values[1], file=sys.stdout, flush=True)
- if element_values[1]: # Performing SME clustering #
- # Image feature extraction #
- st.pp.tiling(adata)
- st.pp.extract_feature(adata)
-
- # apply stSME to data (format of data depending on preprocess)
- st.spatial.SME.SME_normalize(adata, use_data="raw")
- adata.X = adata.obsm["raw_SME_normalized"]
- st.em.run_pca(adata, n_comps=n_comps)
-
- # Performing the clustering on the PCA #
- if element_values[2] == "KMeans": # KMeans
- param = int(element_values[3])
- st.tl.clustering.kmeans(adata, n_clusters=param, use_data="X_pca")
-
- st.pp.neighbors(adata, n_neighbors=element_values[5], use_rep="X_pca")
- sc.tl.paga(adata, groups="kmeans")
- st.pl.cluster_plot(adata, use_label="kmeans")
-
- elif element_values[2] == "Louvain": # Louvain
- param = element_values[4]
- st.pp.neighbors(adata, n_neighbors=element_values[5], use_rep="X_pca")
- st.tl.clustering.louvain(adata, resolution=param)
- sc.tl.paga(adata, groups="louvain")
- st.pl.cluster_plot(adata, use_label="louvain")
-
- else: # Leiden
- param = element_values[4]
- st.pp.neighbors(adata, n_neighbors=element_values[5], use_rep="X_pca")
- sc.tl.leiden(adata, resolution=param)
- sc.tl.paga(adata, groups="leiden")
- st.pl.cluster_plot(adata, use_label="leiden")
-
- step_log["clustering"][0] = True
- flash("Clustering is completed!")
-
- except Exception as msg:
- traceback.print_exc(file=sys.stdout)
- flash("Analysis ERROR: " + str(msg))
- print(msg)
-
- updated_page = render_template(
- "clustering.html",
- title=step_log["clustering"][1],
- clustering_form=form,
- flash_bool=True,
- step_log=step_log,
- )
-
- return updated_page
-
-
-def run_psts(request, adata, step_log):
- """Performs psts analysis; must have performed clustering first."""
- # Creating the form with the clustering information #
- cluster_set = numpy.unique(adata.obs["clusters"].values)
- order = numpy.argsort([int(cluster) for cluster in cluster_set])
- cluster_set = cluster_set[order]
-
- options = ["Auto", "Spatial distance only", "Gene expression distance only"]
-
- from .utils import get_all_paths
-
- trajectory_set = get_all_paths(adata)
-
- PSTSForm = forms.getPSTSForm(trajectory_set, cluster_set, options)
- form = PSTSForm(request.form)
-
- step_log["psts_params"] = vhs.getData(form)
- print(step_log["psts_params"], file=sys.stdout)
- elements = list(step_log["psts_params"].keys())
- # order: pca_comps, SME bool, method, method_param
- element_values = list(step_log["psts_params"].values())
-
- if element_values[4] == "Auto":
- w = None
- elif element_values[4] == "Spatial distance only":
- w = 0
- else:
- w = 1
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- try:
- from stlearn.spatials.trajectory import set_root
-
- root_index = set_root(
- adata, use_label="clusters", cluster=str(element_values[0])
- )
-
- adata.uns["iroot"] = root_index
-
- print(root_index, file=sys.stdout, flush=True)
-
- # Performing the TI #
- print(element_values[3], file=sys.stdout, flush=True)
-
- node_order = element_values[3].split(" - ")
-
- st.spatial.trajectory.pseudotime(
- adata,
- eps=element_values[2],
- use_rep="X_pca",
- use_label="clusters",
- reverse=element_values[1],
- )
- print(node_order)
- st.spatial.trajectory.pseudotimespace_global(
- adata, use_label="clusters", list_clusters=node_order, w=w
- )
-
- st.pl.cluster_plot(
- adata,
- use_label="clusters",
- show_trajectories=True,
- list_clusters=node_order,
- show_subcluster=True,
- )
-
- step_log["psts"][0] = True
- flash("Trajectory inference is completed!")
-
- except Exception as msg:
- traceback.print_exc(file=sys.stdout)
- flash("Analysis ERROR: " + str(msg))
- print(msg)
-
- updated_page = render_template(
- "psts.html",
- title=step_log["psts"][1],
- psts_form=form,
- flash_bool=True,
- step_log=step_log,
- )
-
- return updated_page
-
-
-def run_dea(request, adata, step_log):
-
- list_labels = []
-
- for col in adata.obs.columns:
- if adata.obs[col].dtype.name == "category":
- if col != "sub_cluster_labels":
- list_labels.append(col)
-
- list_labels = numpy.array(list_labels)
-
- methods = numpy.array(["t-test", "t-test_overestim_var", "logreg", "wilcoxon"])
-
- DEAForm = forms.getDEAForm(list_labels, methods)
- form = DEAForm(request.form)
-
- step_log["dea_params"] = vhs.getData(form)
- print(step_log["dea_params"], file=sys.stdout)
- elements = list(step_log["dea_params"].keys())
- element_values = list(step_log["dea_params"].values())
-
- if not form.validate_on_submit():
- flash_errors(form)
-
- elif type(adata) == type(None):
- flash("Need to load data first!")
-
- else:
- try:
-
- sc.tl.rank_genes_groups(adata, element_values[0], method=element_values[1])
-
- step_log["dea"][0] = True
- flash("Differential expression analysis is completed!")
-
- except Exception as msg:
- traceback.print_exc(file=sys.stdout)
- flash("Analysis ERROR: " + str(msg))
- print(msg)
-
- updated_page = render_template(
- "dea.html",
- title=step_log["dea"][1],
- dea_form=form,
- flash_bool=True,
- step_log=step_log,
- )
-
- return updated_page
diff --git a/stlearn/app/source/readme.md b/stlearn/app/source/readme.md
deleted file mode 100644
index 1ff1c27c..00000000
--- a/stlearn/app/source/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Pre-processing Form Design Notes
-Flow of data:
-
- app.py/preprocessing()
- -> source/forms/views.py/run_preprocessing(request, adata, step_log)
- -> source/forms/forms.py/getPreprocessForm()
- -> templates/preprocessing.html
- -> templates/superform.html
-
-Notes:
-
- * step_log defined in app.py, keeps track whether pre-processing was run.
- -> If not run, then run_preprocessing shows just the form.
- -> If has run, shows banner that preprocessing complete.
-
- * If attempt to run_preprocessing() when adata not yet loaded, shows banner
- indicating need to upload the data first.
-
- * source/forms/forms.py/getPreprocessForm() generates a WTForm class using a
- general WTForm generator, as defined in:
- source/forms/forms.py/createSuperForm()
-
- * templates/preprocessing.html is the preprocessing page, which also injects
- in a form to display using templates/superform.html.
-
- * templates/superform.html renders a general WTForm that was created using
- the source/forms/forms.py/createSuperForm() function, thereby allowing
- easy generation of new forms if need to add extra information.
diff --git a/stlearn/app/static/css/material-dashboard.min.css b/stlearn/app/static/css/material-dashboard.min.css
deleted file mode 100644
index 11537572..00000000
--- a/stlearn/app/static/css/material-dashboard.min.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
-
- =========================================================
- * Material Dashboard - v2.1.0
- =========================================================
-
- * Product Page: https://www.creative-tim.com/product/material-dashboard
- * Copyright 2020 Creative Tim (http://www.creative-tim.com)
-
- =========================================================
-
- * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- */.card{font-size:.875rem}@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 #999;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}.container,body{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 #ddd!important}}*,: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:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fafafa}[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;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}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{text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0a6ebd;text-decoration:underline}a:not([href]):not([tabindex]),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:monospace,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:not(:root){overflow:hidden}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:400;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:7rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:3.5rem}.display-3{font-size:2.8125rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:2.125rem}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-inline,.list-unstyled{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,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fafafa;border:1px solid #dee2e6;border-radius:.25rem;box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}code{font-size:87.5%;color:#e91e63;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem;box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:500;box-shadow:none}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:flex;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-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.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{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.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{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.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{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.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{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.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%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid rgba(0,0,0,.06)}.table thead th{vertical-align:bottom;border-bottom:2px solid rgba(0,0,0,.06)}.table tbody+tbody{border-top:2px solid rgba(0,0,0,.06)}.table .table{background-color:#fafafa}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid rgba(0,0,0,.06)}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.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:#c1e2fc}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a9d7fb}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.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:#cde9ce}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#bbe1bd}.table-info,.table-info>td,.table-info>th{background-color:#b8ecf3}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#a2e6ef}.table-warning,.table-warning>td,.table-warning>th{background-color:#fff9c8}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fff6af}.table-danger,.table-danger>td,.table-danger>th{background-color:#fccac7}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fbb3af}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.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,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fafafa;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:rgba(0,0,0,.06)}.table-dark{color:#fafafa;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:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.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%;padding:.4375rem 0;font-size:1rem;line-height:1.5;color:#495057;background-color:transparent;background-clip:padding-box;border:1px solid #d2d2d2;box-shadow:none;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:transparent;border-color:#9acffa;outline:0;box-shadow:none,0 0 0 .2rem rgba(33,150,243,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.4375rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:transparent}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.4375rem + 1px);padding-bottom:calc(.4375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5625rem + 1px);padding-bottom:calc(.5625rem + 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:.4375rem;padding-bottom:.4375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.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{padding:.25rem 0;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(2.125rem + 2px)}.form-control-lg,.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{padding:.5625rem 0;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(4.125rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;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:#4caf50}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(76,175,80,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#4caf50}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#4caf50;box-shadow:0 0 0 .2rem rgba(76,175,80,.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-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#4caf50}.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:#4caf50}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#a3d7a5}.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:#6ec071}.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 #fafafa,0 0 0 .2rem rgba(76,175,80,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#4caf50}.custom-file-input.is-valid~.custom-file-label:before,.was-validated .custom-file-input:valid~.custom-file-label:before{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(76,175,80,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f44336}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(244,67,54,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#f44336}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f44336;box-shadow:0 0 0 .2rem rgba(244,67,54,.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-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f44336}.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:#f44336}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#fbb4af}.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:#f77066}.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 #fafafa,0 0 0 .2rem rgba(244,67,54,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f44336}.custom-file-input.is-invalid~.custom-file-label:before,.was-validated .custom-file-input:invalid~.custom-file-label:before{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(244,67,54,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items: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{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.46875rem 1rem;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}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(33,150,243,.25)}.btn.disabled,.btn:disabled{opacity:.65;box-shadow:none}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{box-shadow:0 0 0 .2rem rgba(33,150,243,.25),none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#2196f3;border-color:#2196f3;box-shadow:none}.btn-primary:hover{color:#fff;background-color:#0c83e2;border-color:#0c7cd5}.btn-primary.focus,.btn-primary:focus{box-shadow:none,0 0 0 .2rem rgba(33,150,243,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#2196f3;border-color:#2196f3}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0c7cd5;border-color:#0b75c9}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:none,0 0 0 .2rem rgba(33,150,243,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d;box-shadow:none}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:none,0 0 0 .2rem hsla(208,7%,46%,.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:none,0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-success{color:#fff;background-color:#4caf50;border-color:#4caf50;box-shadow:none}.btn-success:hover{color:#fff;background-color:#409444;border-color:#3d8b40}.btn-success.focus,.btn-success:focus{box-shadow:none,0 0 0 .2rem rgba(76,175,80,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#4caf50;border-color:#4caf50}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#3d8b40;border-color:#39833c}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:none,0 0 0 .2rem rgba(76,175,80,.5)}.btn-info{color:#fff;background-color:#00bcd4;border-color:#00bcd4;box-shadow:none}.btn-info:hover{color:#fff;background-color:#009aae;border-color:#008fa1}.btn-info.focus,.btn-info:focus{box-shadow:none,0 0 0 .2rem rgba(0,188,212,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#00bcd4;border-color:#00bcd4}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#008fa1;border-color:#008394}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:none,0 0 0 .2rem rgba(0,188,212,.5)}.btn-warning{color:#212529;background-color:#ffeb3b;border-color:#ffeb3b;box-shadow:none}.btn-warning:hover{color:#212529;background-color:#ffe715;border-color:#ffe608}.btn-warning.focus,.btn-warning:focus{box-shadow:none,0 0 0 .2rem rgba(255,235,59,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffeb3b;border-color:#ffeb3b}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#ffe608;border-color:#fae100}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:none,0 0 0 .2rem rgba(255,235,59,.5)}.btn-danger{color:#fff;background-color:#f44336;border-color:#f44336;box-shadow:none}.btn-danger:hover{color:#fff;background-color:#f22112;border-color:#ea1c0d}.btn-danger.focus,.btn-danger:focus{box-shadow:none,0 0 0 .2rem rgba(244,67,54,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#f44336;border-color:#f44336}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#ea1c0d;border-color:#de1b0c}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:none,0 0 0 .2rem rgba(244,67,54,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa;box-shadow:none}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:none,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:none,0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40;box-shadow:none}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:none,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:none,0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#2196f3;background-color:transparent;background-image:none;border-color:#2196f3}.btn-outline-primary:hover{color:#fff;background-color:#2196f3;border-color:#2196f3}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(33,150,243,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#2196f3;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:#2196f3;border-color:#2196f3}.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(33,150,243,.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 hsla(208,7%,46%,.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 hsla(208,7%,46%,.5)}.btn-outline-success{color:#4caf50;background-color:transparent;background-image:none;border-color:#4caf50}.btn-outline-success:hover{color:#fff;background-color:#4caf50;border-color:#4caf50}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(76,175,80,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#4caf50;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:#4caf50;border-color:#4caf50}.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(76,175,80,.5)}.btn-outline-info{color:#00bcd4;background-color:transparent;background-image:none;border-color:#00bcd4}.btn-outline-info:hover{color:#fff;background-color:#00bcd4;border-color:#00bcd4}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(0,188,212,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#00bcd4;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:#00bcd4;border-color:#00bcd4}.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(0,188,212,.5)}.btn-outline-warning{color:#ffeb3b;background-color:transparent;background-image:none;border-color:#ffeb3b}.btn-outline-warning:hover{color:#212529;background-color:#ffeb3b;border-color:#ffeb3b}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,235,59,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffeb3b;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:#ffeb3b;border-color:#ffeb3b}.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,235,59,.5)}.btn-outline-danger{color:#f44336;background-color:transparent;background-image:none;border-color:#f44336}.btn-outline-danger:hover{color:#fff;background-color:#f44336;border-color:#f44336}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(244,67,54,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f44336;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:#f44336;border-color:#f44336}.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(244,67,54,.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:#9c27b0;background-color:transparent}.btn-link:hover{color:#0a6ebd;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#999}.btn-group-lg>.btn,.btn-lg{padding:1.125rem 2.25rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.40625rem 1.25rem;font-size:.875rem;line-height:1.5;border-radius:.1875rem}.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{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{height:0;overflow:hidden;transition:height .35s ease}.collapsing,.dropdown,.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;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;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.dropup .dropdown-menu{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{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-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{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";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-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.625rem 1.25rem;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:#2196f3}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.25rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;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:.75rem;padding-left:.75rem}.dropdown-toggle-split:after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.9375rem;padding-left:.9375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.6875rem;padding-left:1.6875rem}.btn-group.show .dropdown-toggle,.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.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-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.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-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:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label:before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{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:flex;align-items:center;padding:.4375rem 0;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:transparent;border:1px solid transparent;border-radius:0}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.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: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:#2196f3;box-shadow:none}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(33,150,243,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#cae6fc;box-shadow:none}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label:before{pointer-events:none;user-select:none;background-color:#dee2e6;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;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:#2196f3}.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='%23ffffff' 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:#2196f3;box-shadow:none}.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='%23ffffff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(33,150,243,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(33,150,243,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#2196f3}.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='%23ffffff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(33,150,243,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.4375rem + 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 #d2d2d2;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#9acffa;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(154,207,250,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:transparent}.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(2.125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(4.125rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.4375rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#9acffa;box-shadow:0 0 0 .2rem rgba(33,150,243,.25)}.custom-file-input:focus~.custom-file-control:before{border-color:#9acffa}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:calc(2.4375rem + 2px);border:0 solid #d2d2d2;border-radius:0;box-shadow:none}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.46875rem 1rem;line-height:1.3;color:#495057;background-color:transparent}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc((2.4375rem + 2px) - 0 * 2);content:"Browse";border-left:0 solid #d2d2d2;border-radius:0 0 0 0}.nav{display:flex;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:#fafafa;border-color:#dee2e6 #dee2e6 #fafafa}.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:#2196f3}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;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:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;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 50%;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{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@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{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@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{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@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{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand,.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,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.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:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.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:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #eee;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{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.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:#fff;border-bottom:1px solid #eee}.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:#fff;border-top:1px solid #eee}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{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:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card: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),.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{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:0;line-height:1.25;color:#2196f3;background-color:transparent;border:0 solid #dee2e6}.page-link:hover{color:#0a6ebd;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(33,150,243,.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:#2196f3;border-color:#2196f3}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:transparent;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 0;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 0;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}.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{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:500}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#114e7e;background-color:#d3eafd;border-color:#c1e2fc}.alert-primary hr{border-top-color:#a9d7fb}.alert-primary .alert-link{color:#0b3251}.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:#285b2a;background-color:#dbefdc;border-color:#cde9ce}.alert-success hr{border-top-color:#bbe1bd}.alert-success .alert-link{color:#18381a}.alert-info{color:#00626e;background-color:#ccf2f6;border-color:#b8ecf3}.alert-info hr{border-top-color:#a2e6ef}.alert-info .alert-link{color:#00353b}.alert-warning{color:#857a1f;background-color:#fffbd8;border-color:#fff9c8}.alert-warning hr{border-top-color:#fff6af}.alert-warning .alert-link{color:#5c5415}.alert-danger{color:#7f231c;background-color:#fdd9d7;border-color:#fccac7}.alert-danger hr{border-top-color:#fbb3af}.alert-danger .alert-link{color:#551713}.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}@keyframes a{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem;box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#2196f3;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:a 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;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:0;background-color:inherit;border:0 solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.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:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#2196f3;border-color:#2196f3}.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:#114e7e;background-color:#c1e2fc}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#114e7e;background-color:#a9d7fb}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#114e7e;border-color:#114e7e}.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:#285b2a;background-color:#cde9ce}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#285b2a;background-color:#bbe1bd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#285b2a;border-color:#285b2a}.list-group-item-info{color:#00626e;background-color:#b8ecf3}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#00626e;background-color:#a2e6ef}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#00626e;border-color:#00626e}.list-group-item-warning{color:#857a1f;background-color:#fff9c8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#857a1f;background-color:#fff6af}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#857a1f;border-color:#857a1f}.list-group-item-danger{color:#7f231c;background-color:#fccac7}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#7f231c;background-color:#fbb3af}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7f231c;border-color:#7f231c}.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:500;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:500;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:#2196f3}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0c7cd5}.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:#4caf50}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#3d8b40}.badge-info{color:#fff;background-color:#00bcd4}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#008fa1}.badge-warning{color:#212529;background-color:#ffeb3b}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#ffe608}.badge-danger{color:#fff;background-color:#f44336}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#ea1c0d}.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}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-25%)}.modal.show .modal-dialog{transform:translate(0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;box-shadow:0 .25rem .5rem rgba(0,0,0,.5);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:.26}.modal-header{display:flex;align-items:flex-start;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;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;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% - 3.5rem)}.modal-content{box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.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:Roboto,Helvetica,Arial,sans-serif;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;word-wrap:break-word}.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:rgba(97,97,97,.9)}.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:rgba(97,97,97,.9)}.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:rgba(97,97,97,.9)}.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:rgba(97,97,97,.9)}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:rgba(97,97,97,.9);border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Roboto,Helvetica,Arial,sans-serif;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;box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{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}.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;align-items:center;width:100%;transition:transform .6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style:preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{transform:translateX(100%)}@supports (transform-style:preserve-3d){.active.carousel-item-right,.carousel-item-next{transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{transform:translateX(-100%)}@supports (transform-style:preserve-3d){.active.carousel-item-left,.carousel-item-prev{transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:flex;align-items: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 50%;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='%23ffffff' 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='%23ffffff' 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:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.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:#2196f3!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0c7cd5!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:#4caf50!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#3d8b40!important}.bg-info{background-color:#00bcd4!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#008fa1!important}.bg-warning{background-color:#ffeb3b!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#ffe608!important}.bg-danger{background-color:#f44336!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#ea1c0d!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:#2196f3!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#4caf50!important}.border-info{border-color:#00bcd4!important}.border-warning{border-color:#ffeb3b!important}.border-danger{border-color:#f44336!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}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-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:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive 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{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{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;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.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-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:500!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#2196f3!important}a.text-primary:focus,a.text-primary:hover{color:#0c7cd5!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}a.text-success:focus,a.text-success:hover{color:#3d8b40!important}a.text-info:focus,a.text-info:hover{color:#008fa1!important}.text-warning{color:#ffeb3b!important}a.text-warning:focus,a.text-warning:hover{color:#ffe608!important}a.text-danger:focus,a.text-danger:hover{color:#ea1c0d!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}.bmd-help,.text-muted{color:#6c757d!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}.btn{position:relative;padding:12px 30px;margin:.3125rem 1px;font-size:.75rem;font-weight:400;line-height:1.428571;text-decoration:none;text-transform:uppercase;letter-spacing:0;cursor:pointer;background-color:transparent;border:0;border-radius:.2rem;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1);will-change:box-shadow,transform}.btn,.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:0}.btn.btn-primary{color:#fff;background-color:#9c27b0;border-color:#9c27b0;box-shadow:0 2px 2px 0 rgba(156,39,176,.14),0 3px 1px -2px rgba(156,39,176,.2),0 1px 5px 0 rgba(156,39,176,.12)}.btn.btn-primary.focus,.btn.btn-primary:focus,.btn.btn-primary:hover{color:#fff;background-color:#9124a3;border-color:#701c7e}.btn.btn-primary.active,.btn.btn-primary:active,.open>.btn.btn-primary.dropdown-toggle,.show>.btn.btn-primary.dropdown-toggle{color:#fff;background-color:#9124a3;border-color:#701c7e;box-shadow:0 2px 2px 0 rgba(156,39,176,.14),0 3px 1px -2px rgba(156,39,176,.2),0 1px 5px 0 rgba(156,39,176,.12)}.btn.btn-primary.active.focus,.btn.btn-primary.active:focus,.btn.btn-primary.active:hover,.btn.btn-primary:active.focus,.btn.btn-primary:active:focus,.btn.btn-primary:active:hover,.open>.btn.btn-primary.dropdown-toggle.focus,.open>.btn.btn-primary.dropdown-toggle:focus,.open>.btn.btn-primary.dropdown-toggle:hover,.show>.btn.btn-primary.dropdown-toggle.focus,.show>.btn.btn-primary.dropdown-toggle:focus,.show>.btn.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#9124a3;border-color:#3f1048}.open>.btn.btn-primary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#9c27b0}.open>.btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover{background-color:#9124a3}.btn.btn-primary.disabled.focus,.btn.btn-primary.disabled:focus,.btn.btn-primary.disabled:hover,.btn.btn-primary:disabled.focus,.btn.btn-primary:disabled:focus,.btn.btn-primary:disabled:hover{background-color:#9c27b0;border-color:#9c27b0}.btn.btn-primary:active,.btn.btn-primary:focus,.btn.btn-primary:hover{box-shadow:0 14px 26px -12px rgba(156,39,176,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(156,39,176,.2)}.btn.btn-primary.btn-link{box-shadow:none}.btn.btn-primary.btn-link,.btn.btn-primary.btn-link:active,.btn.btn-primary.btn-link:focus,.btn.btn-primary.btn-link:hover{background-color:transparent;color:#9c27b0}.btn.btn-secondary{color:#333;background-color:#fafafa;border-color:#ccc;box-shadow:0 2px 2px 0 hsla(0,0%,98%,.14),0 3px 1px -2px hsla(0,0%,98%,.2),0 1px 5px 0 hsla(0,0%,98%,.12)}.btn.btn-secondary.focus,.btn.btn-secondary:focus,.btn.btn-secondary:hover{color:#333;background-color:#f2f2f2;border-color:#adadad}.btn.btn-secondary.active,.btn.btn-secondary:active,.open>.btn.btn-secondary.dropdown-toggle,.show>.btn.btn-secondary.dropdown-toggle{color:#333;background-color:#f2f2f2;border-color:#adadad;box-shadow:0 2px 2px 0 hsla(0,0%,98%,.14),0 3px 1px -2px hsla(0,0%,98%,.2),0 1px 5px 0 hsla(0,0%,98%,.12)}.btn.btn-secondary.active.focus,.btn.btn-secondary.active:focus,.btn.btn-secondary.active:hover,.btn.btn-secondary:active.focus,.btn.btn-secondary:active:focus,.btn.btn-secondary:active:hover,.open>.btn.btn-secondary.dropdown-toggle.focus,.open>.btn.btn-secondary.dropdown-toggle:focus,.open>.btn.btn-secondary.dropdown-toggle:hover,.show>.btn.btn-secondary.dropdown-toggle.focus,.show>.btn.btn-secondary.dropdown-toggle:focus,.show>.btn.btn-secondary.dropdown-toggle:hover{color:#333;background-color:#f2f2f2;border-color:#8c8c8c}.open>.btn.btn-secondary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#fafafa}.open>.btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover{background-color:#f2f2f2}.btn.btn-secondary.disabled.focus,.btn.btn-secondary.disabled:focus,.btn.btn-secondary.disabled:hover,.btn.btn-secondary:disabled.focus,.btn.btn-secondary:disabled:focus,.btn.btn-secondary:disabled:hover{background-color:#fafafa;border-color:#ccc}.btn.btn-secondary:active,.btn.btn-secondary:focus,.btn.btn-secondary:hover{box-shadow:0 14px 26px -12px hsla(0,0%,98%,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px hsla(0,0%,98%,.2)}.btn.btn-secondary.btn-link{box-shadow:none}.btn.btn-secondary.btn-link,.btn.btn-secondary.btn-link:active,.btn.btn-secondary.btn-link:focus,.btn.btn-secondary.btn-link:hover{background-color:transparent;color:#fafafa}.btn.btn-info{color:#fff;background-color:#00bcd4;border-color:#00bcd4;box-shadow:0 2px 2px 0 rgba(0,188,212,.14),0 3px 1px -2px rgba(0,188,212,.2),0 1px 5px 0 rgba(0,188,212,.12)}.btn.btn-info.focus,.btn.btn-info:focus,.btn.btn-info:hover{color:#fff;background-color:#00aec5;border-color:#008697}.btn.btn-info.active,.btn.btn-info:active,.open>.btn.btn-info.dropdown-toggle,.show>.btn.btn-info.dropdown-toggle{color:#fff;background-color:#00aec5;border-color:#008697;box-shadow:0 2px 2px 0 rgba(0,188,212,.14),0 3px 1px -2px rgba(0,188,212,.2),0 1px 5px 0 rgba(0,188,212,.12)}.btn.btn-info.active.focus,.btn.btn-info.active:focus,.btn.btn-info.active:hover,.btn.btn-info:active.focus,.btn.btn-info:active:focus,.btn.btn-info:active:hover,.open>.btn.btn-info.dropdown-toggle.focus,.open>.btn.btn-info.dropdown-toggle:focus,.open>.btn.btn-info.dropdown-toggle:hover,.show>.btn.btn-info.dropdown-toggle.focus,.show>.btn.btn-info.dropdown-toggle:focus,.show>.btn.btn-info.dropdown-toggle:hover{color:#fff;background-color:#00aec5;border-color:#004b55}.open>.btn.btn-info.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#00bcd4}.open>.btn.btn-info.dropdown-toggle.bmd-btn-icon:hover{background-color:#00aec5}.btn.btn-info.disabled.focus,.btn.btn-info.disabled:focus,.btn.btn-info.disabled:hover,.btn.btn-info:disabled.focus,.btn.btn-info:disabled:focus,.btn.btn-info:disabled:hover{background-color:#00bcd4;border-color:#00bcd4}.btn.btn-info:active,.btn.btn-info:focus,.btn.btn-info:hover{box-shadow:0 14px 26px -12px rgba(0,188,212,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,188,212,.2)}.btn.btn-info.btn-link{box-shadow:none}.btn.btn-info.btn-link,.btn.btn-info.btn-link:active,.btn.btn-info.btn-link:focus,.btn.btn-info.btn-link:hover{background-color:transparent;color:#00bcd4}.btn.btn-success{color:#fff;background-color:#4caf50;border-color:#4caf50;box-shadow:0 2px 2px 0 rgba(76,175,80,.14),0 3px 1px -2px rgba(76,175,80,.2),0 1px 5px 0 rgba(76,175,80,.12)}.btn.btn-success.focus,.btn.btn-success:focus,.btn.btn-success:hover{color:#fff;background-color:#47a44b;border-color:#39843c}.btn.btn-success.active,.btn.btn-success:active,.open>.btn.btn-success.dropdown-toggle,.show>.btn.btn-success.dropdown-toggle{color:#fff;background-color:#47a44b;border-color:#39843c;box-shadow:0 2px 2px 0 rgba(76,175,80,.14),0 3px 1px -2px rgba(76,175,80,.2),0 1px 5px 0 rgba(76,175,80,.12)}.btn.btn-success.active.focus,.btn.btn-success.active:focus,.btn.btn-success.active:hover,.btn.btn-success:active.focus,.btn.btn-success:active:focus,.btn.btn-success:active:hover,.open>.btn.btn-success.dropdown-toggle.focus,.open>.btn.btn-success.dropdown-toggle:focus,.open>.btn.btn-success.dropdown-toggle:hover,.show>.btn.btn-success.dropdown-toggle.focus,.show>.btn.btn-success.dropdown-toggle:focus,.show>.btn.btn-success.dropdown-toggle:hover{color:#fff;background-color:#47a44b;border-color:#255627}.open>.btn.btn-success.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#4caf50}.open>.btn.btn-success.dropdown-toggle.bmd-btn-icon:hover{background-color:#47a44b}.btn.btn-success.disabled.focus,.btn.btn-success.disabled:focus,.btn.btn-success.disabled:hover,.btn.btn-success:disabled.focus,.btn.btn-success:disabled:focus,.btn.btn-success:disabled:hover{background-color:#4caf50;border-color:#4caf50}.btn.btn-success:active,.btn.btn-success:focus,.btn.btn-success:hover{box-shadow:0 14px 26px -12px rgba(76,175,80,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(76,175,80,.2)}.btn.btn-success.btn-link{box-shadow:none}.btn.btn-success.btn-link,.btn.btn-success.btn-link:active,.btn.btn-success.btn-link:focus,.btn.btn-success.btn-link:hover{background-color:transparent;color:#4caf50}.btn.btn-warning{color:#fff;background-color:#ff9800;border-color:#ff9800;box-shadow:0 2px 2px 0 rgba(255,152,0,.14),0 3px 1px -2px rgba(255,152,0,.2),0 1px 5px 0 rgba(255,152,0,.12)}.btn.btn-warning.focus,.btn.btn-warning:focus,.btn.btn-warning:hover{color:#fff;background-color:#f08f00;border-color:#c27400}.btn.btn-warning.active,.btn.btn-warning:active,.open>.btn.btn-warning.dropdown-toggle,.show>.btn.btn-warning.dropdown-toggle{color:#fff;background-color:#f08f00;border-color:#c27400;box-shadow:0 2px 2px 0 rgba(255,152,0,.14),0 3px 1px -2px rgba(255,152,0,.2),0 1px 5px 0 rgba(255,152,0,.12)}.btn.btn-warning.active.focus,.btn.btn-warning.active:focus,.btn.btn-warning.active:hover,.btn.btn-warning:active.focus,.btn.btn-warning:active:focus,.btn.btn-warning:active:hover,.open>.btn.btn-warning.dropdown-toggle.focus,.open>.btn.btn-warning.dropdown-toggle:focus,.open>.btn.btn-warning.dropdown-toggle:hover,.show>.btn.btn-warning.dropdown-toggle.focus,.show>.btn.btn-warning.dropdown-toggle:focus,.show>.btn.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#f08f00;border-color:#804c00}.open>.btn.btn-warning.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#ff9800}.open>.btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover{background-color:#f08f00}.btn.btn-warning.disabled.focus,.btn.btn-warning.disabled:focus,.btn.btn-warning.disabled:hover,.btn.btn-warning:disabled.focus,.btn.btn-warning:disabled:focus,.btn.btn-warning:disabled:hover{background-color:#ff9800;border-color:#ff9800}.btn.btn-warning:active,.btn.btn-warning:focus,.btn.btn-warning:hover{box-shadow:0 14px 26px -12px rgba(255,152,0,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(255,152,0,.2)}.btn.btn-warning.btn-link{box-shadow:none}.btn.btn-warning.btn-link,.btn.btn-warning.btn-link:active,.btn.btn-warning.btn-link:focus,.btn.btn-warning.btn-link:hover{background-color:transparent;color:#ff9800}.btn.btn-danger{color:#fff;background-color:#f44336;border-color:#f44336;box-shadow:0 2px 2px 0 rgba(244,67,54,.14),0 3px 1px -2px rgba(244,67,54,.2),0 1px 5px 0 rgba(244,67,54,.12)}.btn.btn-danger.focus,.btn.btn-danger:focus,.btn.btn-danger:hover{color:#fff;background-color:#f33527;border-color:#e11b0c}.btn.btn-danger.active,.btn.btn-danger:active,.open>.btn.btn-danger.dropdown-toggle,.show>.btn.btn-danger.dropdown-toggle{color:#fff;background-color:#f33527;border-color:#e11b0c;box-shadow:0 2px 2px 0 rgba(244,67,54,.14),0 3px 1px -2px rgba(244,67,54,.2),0 1px 5px 0 rgba(244,67,54,.12)}.btn.btn-danger.active.focus,.btn.btn-danger.active:focus,.btn.btn-danger.active:hover,.btn.btn-danger:active.focus,.btn.btn-danger:active:focus,.btn.btn-danger:active:hover,.open>.btn.btn-danger.dropdown-toggle.focus,.open>.btn.btn-danger.dropdown-toggle:focus,.open>.btn.btn-danger.dropdown-toggle:hover,.show>.btn.btn-danger.dropdown-toggle.focus,.show>.btn.btn-danger.dropdown-toggle:focus,.show>.btn.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#f33527;border-color:#a21309}.open>.btn.btn-danger.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#f44336}.open>.btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover{background-color:#f33527}.btn.btn-danger.disabled.focus,.btn.btn-danger.disabled:focus,.btn.btn-danger.disabled:hover,.btn.btn-danger:disabled.focus,.btn.btn-danger:disabled:focus,.btn.btn-danger:disabled:hover{background-color:#f44336;border-color:#f44336}.btn.btn-danger:active,.btn.btn-danger:focus,.btn.btn-danger:hover{box-shadow:0 14px 26px -12px rgba(244,67,54,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(244,67,54,.2)}.btn.btn-danger.btn-link{box-shadow:none}.btn.btn-danger.btn-link,.btn.btn-danger.btn-link:active,.btn.btn-danger.btn-link:focus,.btn.btn-danger.btn-link:hover{background-color:transparent;color:#f44336}.btn.btn-rose{color:#fff;background-color:#e91e63;border-color:#e91e63;box-shadow:0 2px 2px 0 rgba(233,30,99,.14),0 3px 1px -2px rgba(233,30,99,.2),0 1px 5px 0 rgba(233,30,99,.12)}.btn.btn-rose.focus,.btn.btn-rose:focus,.btn.btn-rose:hover{color:#fff;background-color:#ea2c6d;border-color:#b8124a}.btn.btn-rose.active,.btn.btn-rose:active,.open>.btn.btn-rose.dropdown-toggle,.show>.btn.btn-rose.dropdown-toggle{color:#fff;background-color:#ea2c6d;border-color:#b8124a;box-shadow:0 2px 2px 0 rgba(233,30,99,.14),0 3px 1px -2px rgba(233,30,99,.2),0 1px 5px 0 rgba(233,30,99,.12)}.btn.btn-rose.active.focus,.btn.btn-rose.active:focus,.btn.btn-rose.active:hover,.btn.btn-rose:active.focus,.btn.btn-rose:active:focus,.btn.btn-rose:active:hover,.open>.btn.btn-rose.dropdown-toggle.focus,.open>.btn.btn-rose.dropdown-toggle:focus,.open>.btn.btn-rose.dropdown-toggle:hover,.show>.btn.btn-rose.dropdown-toggle.focus,.show>.btn.btn-rose.dropdown-toggle:focus,.show>.btn.btn-rose.dropdown-toggle:hover{color:#fff;background-color:#ea2c6d;border-color:#7b0c32}.open>.btn.btn-rose.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#e91e63}.open>.btn.btn-rose.dropdown-toggle.bmd-btn-icon:hover{background-color:#ea2c6d}.btn.btn-rose.disabled.focus,.btn.btn-rose.disabled:focus,.btn.btn-rose.disabled:hover,.btn.btn-rose:disabled.focus,.btn.btn-rose:disabled:focus,.btn.btn-rose:disabled:hover{background-color:#e91e63;border-color:#e91e63}.btn.btn-rose:active,.btn.btn-rose:focus,.btn.btn-rose:hover{box-shadow:0 14px 26px -12px rgba(233,30,99,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(233,30,99,.2)}.btn.btn-rose.btn-link{box-shadow:none}.btn.btn-rose.btn-link,.btn.btn-rose.btn-link:active,.btn.btn-rose.btn-link:focus,.btn.btn-rose.btn-link:hover{background-color:transparent;color:#e91e63}.btn,.btn.btn-default{color:#fff;background-color:#999;border-color:#999;box-shadow:0 2px 2px 0 hsla(0,0%,60%,.14),0 3px 1px -2px hsla(0,0%,60%,.2),0 1px 5px 0 hsla(0,0%,60%,.12)}.btn.btn-default.focus,.btn.btn-default:focus,.btn.btn-default:hover,.btn.focus,.btn:focus,.btn:hover{color:#fff;background-color:#919191;border-color:#7a7a7a}.btn.active,.btn.btn-default.active,.btn.btn-default:active,.btn:active,.open>.btn.btn-default.dropdown-toggle,.open>.btn.dropdown-toggle,.show>.btn.btn-default.dropdown-toggle,.show>.btn.dropdown-toggle{color:#fff;background-color:#919191;border-color:#7a7a7a;box-shadow:0 2px 2px 0 hsla(0,0%,60%,.14),0 3px 1px -2px hsla(0,0%,60%,.2),0 1px 5px 0 hsla(0,0%,60%,.12)}.btn.active.focus,.btn.active:focus,.btn.active:hover,.btn.btn-default.active.focus,.btn.btn-default.active:focus,.btn.btn-default.active:hover,.btn.btn-default:active.focus,.btn.btn-default:active:focus,.btn.btn-default:active:hover,.btn:active.focus,.btn:active:focus,.btn:active:hover,.open>.btn.btn-default.dropdown-toggle.focus,.open>.btn.btn-default.dropdown-toggle:focus,.open>.btn.btn-default.dropdown-toggle:hover,.open>.btn.dropdown-toggle.focus,.open>.btn.dropdown-toggle:focus,.open>.btn.dropdown-toggle:hover,.show>.btn.btn-default.dropdown-toggle.focus,.show>.btn.btn-default.dropdown-toggle:focus,.show>.btn.btn-default.dropdown-toggle:hover,.show>.btn.dropdown-toggle.focus,.show>.btn.dropdown-toggle:focus,.show>.btn.dropdown-toggle:hover{color:#fff;background-color:#919191;border-color:#595959}.open>.btn.btn-default.dropdown-toggle.bmd-btn-icon,.open>.btn.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#999}.open>.btn.btn-default.dropdown-toggle.bmd-btn-icon:hover,.open>.btn.dropdown-toggle.bmd-btn-icon:hover{background-color:#919191}.btn.btn-default.disabled.focus,.btn.btn-default.disabled:focus,.btn.btn-default.disabled:hover,.btn.btn-default:disabled.focus,.btn.btn-default:disabled:focus,.btn.btn-default:disabled:hover,.btn.disabled.focus,.btn.disabled:focus,.btn.disabled:hover,.btn:disabled.focus,.btn:disabled:focus,.btn:disabled:hover{background-color:#999;border-color:#999}.btn.btn-default:active,.btn.btn-default:focus,.btn.btn-default:hover,.btn:active,.btn:focus,.btn:hover{box-shadow:0 14px 26px -12px hsla(0,0%,60%,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px hsla(0,0%,60%,.2)}.btn.btn-default.btn-link,.btn.btn-link{background-color:transparent;color:#999;box-shadow:none}.btn.btn-default.btn-link:active,.btn.btn-default.btn-link:focus,.btn.btn-default.btn-link:hover,.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{background-color:transparent;color:#999}.btn.btn-white,.btn.btn-white:focus,.btn.btn-white:hover{background-color:#fff;color:#999}.btn.btn-white.btn-link{color:#fff;background:transparent;box-shadow:none}.btn.btn-link:active,.btn.btn-link:focus,.btn.btn-link:hover{text-decoration:none!important}.btn-group-raised .btn.btn-link,.btn-group-raised .btn.btn-link.active,.btn-group-raised .btn.btn-link:active,.btn-group-raised .btn.btn-link:focus,.btn-group-raised .btn.btn-link:hover,.btn-group-raised .btn.disabled,.btn-group-raised .btn:disabled,.btn-group-raised .btn[disabled],.btn.btn-raised.btn-link,.btn.btn-raised.btn-link.active,.btn.btn-raised.btn-link:active,.btn.btn-raised.btn-link:focus,.btn.btn-raised.btn-link:hover,.btn.btn-raised.disabled,.btn.btn-raised:disabled,.btn.btn-raised[disabled],fieldset[disabled][disabled] .btn-group-raised .btn,fieldset[disabled][disabled] .btn.btn-raised{box-shadow:none}.btn.btn-outline,.btn.btn-outline-danger,.btn.btn-outline-info,.btn.btn-outline-primary,.btn.btn-outline-secondary,.btn.btn-outline-success,.btn.btn-outline-warning{border:1px solid currentColor}.btn.btn-outline{color:#333;background-color:transparent;border-color:#333}.btn.btn-outline.focus,.btn.btn-outline:focus,.btn.btn-outline:hover{color:#333;background-color:hsla(0,0%,60%,.2);border-color:#333}.btn.btn-outline.active,.btn.btn-outline:active,.open>.btn.btn-outline.dropdown-toggle,.show>.btn.btn-outline.dropdown-toggle{color:#333;background-color:hsla(0,0%,60%,.2);border-color:#333;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline.active.focus,.btn.btn-outline.active:focus,.btn.btn-outline.active:hover,.btn.btn-outline:active.focus,.btn.btn-outline:active:focus,.btn.btn-outline:active:hover,.open>.btn.btn-outline.dropdown-toggle.focus,.open>.btn.btn-outline.dropdown-toggle:focus,.open>.btn.btn-outline.dropdown-toggle:hover,.show>.btn.btn-outline.dropdown-toggle.focus,.show>.btn.btn-outline.dropdown-toggle:focus,.show>.btn.btn-outline.dropdown-toggle:hover{color:#333;background-color:hsla(0,0%,60%,.4);border-color:#333}.open>.btn.btn-outline.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline,.btn.btn-outline.disabled.focus,.btn.btn-outline.disabled:focus,.btn.btn-outline.disabled:hover,.btn.btn-outline:disabled.focus,.btn.btn-outline:disabled:focus,.btn.btn-outline:disabled:hover{background-color:transparent;border-color:#333}.bg-inverse .btn.btn-outline{color:#333}.bg-inverse .btn.btn-outline.focus,.bg-inverse .btn.btn-outline:focus,.bg-inverse .btn.btn-outline:hover{color:#333;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline.active,.bg-inverse .btn.btn-outline:active,.open>.bg-inverse .btn.btn-outline.dropdown-toggle,.show>.bg-inverse .btn.btn-outline.dropdown-toggle{color:#333;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline.active.focus,.bg-inverse .btn.btn-outline.active:focus,.bg-inverse .btn.btn-outline.active:hover,.bg-inverse .btn.btn-outline:active.focus,.bg-inverse .btn.btn-outline:active:focus,.bg-inverse .btn.btn-outline:active:hover,.open>.bg-inverse .btn.btn-outline.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline.dropdown-toggle:hover{color:#333;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline.disabled.focus,.bg-inverse .btn.btn-outline.disabled:focus,.bg-inverse .btn.btn-outline.disabled:hover,.bg-inverse .btn.btn-outline:disabled.focus,.bg-inverse .btn.btn-outline:disabled:focus,.bg-inverse .btn.btn-outline:disabled:hover{background-color:transparent;border-color:#333}.btn.btn-outline.btn-link{background-color:transparent}.btn.btn-outline-primary{color:#9c27b0;background-color:transparent;border-color:#9c27b0}.btn.btn-outline-primary.focus,.btn.btn-outline-primary:focus,.btn.btn-outline-primary:hover{color:#9c27b0;background-color:hsla(0,0%,60%,.2);border-color:#9c27b0}.btn.btn-outline-primary.active,.btn.btn-outline-primary:active,.open>.btn.btn-outline-primary.dropdown-toggle,.show>.btn.btn-outline-primary.dropdown-toggle{color:#9c27b0;background-color:hsla(0,0%,60%,.2);border-color:#9c27b0;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-primary.active.focus,.btn.btn-outline-primary.active:focus,.btn.btn-outline-primary.active:hover,.btn.btn-outline-primary:active.focus,.btn.btn-outline-primary:active:focus,.btn.btn-outline-primary:active:hover,.open>.btn.btn-outline-primary.dropdown-toggle.focus,.open>.btn.btn-outline-primary.dropdown-toggle:focus,.open>.btn.btn-outline-primary.dropdown-toggle:hover,.show>.btn.btn-outline-primary.dropdown-toggle.focus,.show>.btn.btn-outline-primary.dropdown-toggle:focus,.show>.btn.btn-outline-primary.dropdown-toggle:hover{color:#9c27b0;background-color:hsla(0,0%,60%,.4);border-color:#9c27b0}.open>.btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-primary,.btn.btn-outline-primary.disabled.focus,.btn.btn-outline-primary.disabled:focus,.btn.btn-outline-primary.disabled:hover,.btn.btn-outline-primary:disabled.focus,.btn.btn-outline-primary:disabled:focus,.btn.btn-outline-primary:disabled:hover{background-color:transparent;border-color:#9c27b0}.bg-inverse .btn.btn-outline-primary{color:#9c27b0}.bg-inverse .btn.btn-outline-primary.focus,.bg-inverse .btn.btn-outline-primary:focus,.bg-inverse .btn.btn-outline-primary:hover{color:#9c27b0;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-primary.active,.bg-inverse .btn.btn-outline-primary:active,.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-primary.dropdown-toggle{color:#9c27b0;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-primary.active.focus,.bg-inverse .btn.btn-outline-primary.active:focus,.bg-inverse .btn.btn-outline-primary.active:hover,.bg-inverse .btn.btn-outline-primary:active.focus,.bg-inverse .btn.btn-outline-primary:active:focus,.bg-inverse .btn.btn-outline-primary:active:hover,.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-primary.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-primary.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-primary.dropdown-toggle:hover{color:#9c27b0;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-primary.disabled.focus,.bg-inverse .btn.btn-outline-primary.disabled:focus,.bg-inverse .btn.btn-outline-primary.disabled:hover,.bg-inverse .btn.btn-outline-primary:disabled.focus,.bg-inverse .btn.btn-outline-primary:disabled:focus,.bg-inverse .btn.btn-outline-primary:disabled:hover{background-color:transparent;border-color:#9c27b0}.btn.btn-outline-primary.btn-link{background-color:transparent}.btn.btn-outline-secondary{color:#333;background-color:transparent;border-color:#333}.btn.btn-outline-secondary.focus,.btn.btn-outline-secondary:focus,.btn.btn-outline-secondary:hover{color:#333;background-color:hsla(0,0%,60%,.2);border-color:#333}.btn.btn-outline-secondary.active,.btn.btn-outline-secondary:active,.open>.btn.btn-outline-secondary.dropdown-toggle,.show>.btn.btn-outline-secondary.dropdown-toggle{color:#333;background-color:hsla(0,0%,60%,.2);border-color:#333;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-secondary.active.focus,.btn.btn-outline-secondary.active:focus,.btn.btn-outline-secondary.active:hover,.btn.btn-outline-secondary:active.focus,.btn.btn-outline-secondary:active:focus,.btn.btn-outline-secondary:active:hover,.open>.btn.btn-outline-secondary.dropdown-toggle.focus,.open>.btn.btn-outline-secondary.dropdown-toggle:focus,.open>.btn.btn-outline-secondary.dropdown-toggle:hover,.show>.btn.btn-outline-secondary.dropdown-toggle.focus,.show>.btn.btn-outline-secondary.dropdown-toggle:focus,.show>.btn.btn-outline-secondary.dropdown-toggle:hover{color:#333;background-color:hsla(0,0%,60%,.4);border-color:#333}.open>.btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-secondary,.btn.btn-outline-secondary.disabled.focus,.btn.btn-outline-secondary.disabled:focus,.btn.btn-outline-secondary.disabled:hover,.btn.btn-outline-secondary:disabled.focus,.btn.btn-outline-secondary:disabled:focus,.btn.btn-outline-secondary:disabled:hover{background-color:transparent;border-color:#333}.bg-inverse .btn.btn-outline-secondary{color:#333}.bg-inverse .btn.btn-outline-secondary.focus,.bg-inverse .btn.btn-outline-secondary:focus,.bg-inverse .btn.btn-outline-secondary:hover{color:#333;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-secondary.active,.bg-inverse .btn.btn-outline-secondary:active,.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle{color:#333;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-secondary.active.focus,.bg-inverse .btn.btn-outline-secondary.active:focus,.bg-inverse .btn.btn-outline-secondary.active:hover,.bg-inverse .btn.btn-outline-secondary:active.focus,.bg-inverse .btn.btn-outline-secondary:active:focus,.bg-inverse .btn.btn-outline-secondary:active:hover,.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle:hover{color:#333;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-secondary.disabled.focus,.bg-inverse .btn.btn-outline-secondary.disabled:focus,.bg-inverse .btn.btn-outline-secondary.disabled:hover,.bg-inverse .btn.btn-outline-secondary:disabled.focus,.bg-inverse .btn.btn-outline-secondary:disabled:focus,.bg-inverse .btn.btn-outline-secondary:disabled:hover{background-color:transparent;border-color:#333}.btn.btn-outline-secondary.btn-link{background-color:transparent}.btn.btn-outline-info{color:#00bcd4;background-color:transparent;border-color:#00bcd4}.btn.btn-outline-info.focus,.btn.btn-outline-info:focus,.btn.btn-outline-info:hover{color:#00bcd4;background-color:hsla(0,0%,60%,.2);border-color:#00bcd4}.btn.btn-outline-info.active,.btn.btn-outline-info:active,.open>.btn.btn-outline-info.dropdown-toggle,.show>.btn.btn-outline-info.dropdown-toggle{color:#00bcd4;background-color:hsla(0,0%,60%,.2);border-color:#00bcd4;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-info.active.focus,.btn.btn-outline-info.active:focus,.btn.btn-outline-info.active:hover,.btn.btn-outline-info:active.focus,.btn.btn-outline-info:active:focus,.btn.btn-outline-info:active:hover,.open>.btn.btn-outline-info.dropdown-toggle.focus,.open>.btn.btn-outline-info.dropdown-toggle:focus,.open>.btn.btn-outline-info.dropdown-toggle:hover,.show>.btn.btn-outline-info.dropdown-toggle.focus,.show>.btn.btn-outline-info.dropdown-toggle:focus,.show>.btn.btn-outline-info.dropdown-toggle:hover{color:#00bcd4;background-color:hsla(0,0%,60%,.4);border-color:#00bcd4}.open>.btn.btn-outline-info.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-info,.btn.btn-outline-info.disabled.focus,.btn.btn-outline-info.disabled:focus,.btn.btn-outline-info.disabled:hover,.btn.btn-outline-info:disabled.focus,.btn.btn-outline-info:disabled:focus,.btn.btn-outline-info:disabled:hover{background-color:transparent;border-color:#00bcd4}.bg-inverse .btn.btn-outline-info{color:#00bcd4}.bg-inverse .btn.btn-outline-info.focus,.bg-inverse .btn.btn-outline-info:focus,.bg-inverse .btn.btn-outline-info:hover{color:#00bcd4;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-info.active,.bg-inverse .btn.btn-outline-info:active,.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-info.dropdown-toggle{color:#00bcd4;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-info.active.focus,.bg-inverse .btn.btn-outline-info.active:focus,.bg-inverse .btn.btn-outline-info.active:hover,.bg-inverse .btn.btn-outline-info:active.focus,.bg-inverse .btn.btn-outline-info:active:focus,.bg-inverse .btn.btn-outline-info:active:hover,.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-info.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-info.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-info.dropdown-toggle:hover{color:#00bcd4;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-info.disabled.focus,.bg-inverse .btn.btn-outline-info.disabled:focus,.bg-inverse .btn.btn-outline-info.disabled:hover,.bg-inverse .btn.btn-outline-info:disabled.focus,.bg-inverse .btn.btn-outline-info:disabled:focus,.bg-inverse .btn.btn-outline-info:disabled:hover{background-color:transparent;border-color:#00bcd4}.btn.btn-outline-info.btn-link{background-color:transparent}.btn.btn-outline-success{color:#4caf50;background-color:transparent;border-color:#4caf50}.btn.btn-outline-success.focus,.btn.btn-outline-success:focus,.btn.btn-outline-success:hover{color:#4caf50;background-color:hsla(0,0%,60%,.2);border-color:#4caf50}.btn.btn-outline-success.active,.btn.btn-outline-success:active,.open>.btn.btn-outline-success.dropdown-toggle,.show>.btn.btn-outline-success.dropdown-toggle{color:#4caf50;background-color:hsla(0,0%,60%,.2);border-color:#4caf50;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-success.active.focus,.btn.btn-outline-success.active:focus,.btn.btn-outline-success.active:hover,.btn.btn-outline-success:active.focus,.btn.btn-outline-success:active:focus,.btn.btn-outline-success:active:hover,.open>.btn.btn-outline-success.dropdown-toggle.focus,.open>.btn.btn-outline-success.dropdown-toggle:focus,.open>.btn.btn-outline-success.dropdown-toggle:hover,.show>.btn.btn-outline-success.dropdown-toggle.focus,.show>.btn.btn-outline-success.dropdown-toggle:focus,.show>.btn.btn-outline-success.dropdown-toggle:hover{color:#4caf50;background-color:hsla(0,0%,60%,.4);border-color:#4caf50}.open>.btn.btn-outline-success.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-success,.btn.btn-outline-success.disabled.focus,.btn.btn-outline-success.disabled:focus,.btn.btn-outline-success.disabled:hover,.btn.btn-outline-success:disabled.focus,.btn.btn-outline-success:disabled:focus,.btn.btn-outline-success:disabled:hover{background-color:transparent;border-color:#4caf50}.bg-inverse .btn.btn-outline-success{color:#4caf50}.bg-inverse .btn.btn-outline-success.focus,.bg-inverse .btn.btn-outline-success:focus,.bg-inverse .btn.btn-outline-success:hover{color:#4caf50;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-success.active,.bg-inverse .btn.btn-outline-success:active,.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-success.dropdown-toggle{color:#4caf50;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-success.active.focus,.bg-inverse .btn.btn-outline-success.active:focus,.bg-inverse .btn.btn-outline-success.active:hover,.bg-inverse .btn.btn-outline-success:active.focus,.bg-inverse .btn.btn-outline-success:active:focus,.bg-inverse .btn.btn-outline-success:active:hover,.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-success.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-success.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-success.dropdown-toggle:hover{color:#4caf50;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-success.disabled.focus,.bg-inverse .btn.btn-outline-success.disabled:focus,.bg-inverse .btn.btn-outline-success.disabled:hover,.bg-inverse .btn.btn-outline-success:disabled.focus,.bg-inverse .btn.btn-outline-success:disabled:focus,.bg-inverse .btn.btn-outline-success:disabled:hover{background-color:transparent;border-color:#4caf50}.btn.btn-outline-success.btn-link{background-color:transparent}.btn.btn-outline-warning{color:#ff9800;background-color:transparent;border-color:#ff9800}.btn.btn-outline-warning.focus,.btn.btn-outline-warning:focus,.btn.btn-outline-warning:hover{color:#ff9800;background-color:hsla(0,0%,60%,.2);border-color:#ff9800}.btn.btn-outline-warning.active,.btn.btn-outline-warning:active,.open>.btn.btn-outline-warning.dropdown-toggle,.show>.btn.btn-outline-warning.dropdown-toggle{color:#ff9800;background-color:hsla(0,0%,60%,.2);border-color:#ff9800;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-warning.active.focus,.btn.btn-outline-warning.active:focus,.btn.btn-outline-warning.active:hover,.btn.btn-outline-warning:active.focus,.btn.btn-outline-warning:active:focus,.btn.btn-outline-warning:active:hover,.open>.btn.btn-outline-warning.dropdown-toggle.focus,.open>.btn.btn-outline-warning.dropdown-toggle:focus,.open>.btn.btn-outline-warning.dropdown-toggle:hover,.show>.btn.btn-outline-warning.dropdown-toggle.focus,.show>.btn.btn-outline-warning.dropdown-toggle:focus,.show>.btn.btn-outline-warning.dropdown-toggle:hover{color:#ff9800;background-color:hsla(0,0%,60%,.4);border-color:#ff9800}.open>.btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-warning,.btn.btn-outline-warning.disabled.focus,.btn.btn-outline-warning.disabled:focus,.btn.btn-outline-warning.disabled:hover,.btn.btn-outline-warning:disabled.focus,.btn.btn-outline-warning:disabled:focus,.btn.btn-outline-warning:disabled:hover{background-color:transparent;border-color:#ff9800}.bg-inverse .btn.btn-outline-warning{color:#ff9800}.bg-inverse .btn.btn-outline-warning.focus,.bg-inverse .btn.btn-outline-warning:focus,.bg-inverse .btn.btn-outline-warning:hover{color:#ff9800;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-warning.active,.bg-inverse .btn.btn-outline-warning:active,.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-warning.dropdown-toggle{color:#ff9800;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-warning.active.focus,.bg-inverse .btn.btn-outline-warning.active:focus,.bg-inverse .btn.btn-outline-warning.active:hover,.bg-inverse .btn.btn-outline-warning:active.focus,.bg-inverse .btn.btn-outline-warning:active:focus,.bg-inverse .btn.btn-outline-warning:active:hover,.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-warning.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-warning.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-warning.dropdown-toggle:hover{color:#ff9800;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-warning.disabled.focus,.bg-inverse .btn.btn-outline-warning.disabled:focus,.bg-inverse .btn.btn-outline-warning.disabled:hover,.bg-inverse .btn.btn-outline-warning:disabled.focus,.bg-inverse .btn.btn-outline-warning:disabled:focus,.bg-inverse .btn.btn-outline-warning:disabled:hover{background-color:transparent;border-color:#ff9800}.btn.btn-outline-warning.btn-link{background-color:transparent}.btn.btn-outline-danger{color:#f44336;background-color:transparent;border-color:#f44336}.btn.btn-outline-danger.focus,.btn.btn-outline-danger:focus,.btn.btn-outline-danger:hover{color:#f44336;background-color:hsla(0,0%,60%,.2);border-color:#f44336}.btn.btn-outline-danger.active,.btn.btn-outline-danger:active,.open>.btn.btn-outline-danger.dropdown-toggle,.show>.btn.btn-outline-danger.dropdown-toggle{color:#f44336;background-color:hsla(0,0%,60%,.2);border-color:#f44336;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn.btn-outline-danger.active.focus,.btn.btn-outline-danger.active:focus,.btn.btn-outline-danger.active:hover,.btn.btn-outline-danger:active.focus,.btn.btn-outline-danger:active:focus,.btn.btn-outline-danger:active:hover,.open>.btn.btn-outline-danger.dropdown-toggle.focus,.open>.btn.btn-outline-danger.dropdown-toggle:focus,.open>.btn.btn-outline-danger.dropdown-toggle:hover,.show>.btn.btn-outline-danger.dropdown-toggle.focus,.show>.btn.btn-outline-danger.dropdown-toggle:focus,.show>.btn.btn-outline-danger.dropdown-toggle:hover{color:#f44336;background-color:hsla(0,0%,60%,.4);border-color:#f44336}.open>.btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,60%,.2)}.bg-inverse .btn.btn-outline-danger,.btn.btn-outline-danger.disabled.focus,.btn.btn-outline-danger.disabled:focus,.btn.btn-outline-danger.disabled:hover,.btn.btn-outline-danger:disabled.focus,.btn.btn-outline-danger:disabled:focus,.btn.btn-outline-danger:disabled:hover{background-color:transparent;border-color:#f44336}.bg-inverse .btn.btn-outline-danger{color:#f44336}.bg-inverse .btn.btn-outline-danger.focus,.bg-inverse .btn.btn-outline-danger:focus,.bg-inverse .btn.btn-outline-danger:hover{color:#f44336;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-danger.active,.bg-inverse .btn.btn-outline-danger:active,.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle,.show>.bg-inverse .btn.btn-outline-danger.dropdown-toggle{color:#f44336;background-color:hsla(0,0%,80%,.15);border-color:hsla(0,0%,80%,.15);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.bg-inverse .btn.btn-outline-danger.active.focus,.bg-inverse .btn.btn-outline-danger.active:focus,.bg-inverse .btn.btn-outline-danger.active:hover,.bg-inverse .btn.btn-outline-danger:active.focus,.bg-inverse .btn.btn-outline-danger:active:focus,.bg-inverse .btn.btn-outline-danger:active:hover,.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle.focus,.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle:focus,.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle:hover,.show>.bg-inverse .btn.btn-outline-danger.dropdown-toggle.focus,.show>.bg-inverse .btn.btn-outline-danger.dropdown-toggle:focus,.show>.bg-inverse .btn.btn-outline-danger.dropdown-toggle:hover{color:#f44336;background-color:hsla(0,0%,80%,.25);border-color:hsla(0,0%,80%,.25)}.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:transparent}.open>.bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover{background-color:hsla(0,0%,80%,.15)}.bg-inverse .btn.btn-outline-danger.disabled.focus,.bg-inverse .btn.btn-outline-danger.disabled:focus,.bg-inverse .btn.btn-outline-danger.disabled:hover,.bg-inverse .btn.btn-outline-danger:disabled.focus,.bg-inverse .btn.btn-outline-danger:disabled:focus,.bg-inverse .btn.btn-outline-danger:disabled:hover{background-color:transparent;border-color:#f44336}.btn.btn-outline-danger.btn-link{background-color:transparent}.btn-group-lg .btn,.btn-group-lg>.btn,.btn.btn-lg{padding:1.125rem 2.25rem;font-size:.875rem;line-height:1.333333;border-radius:.2rem}.btn-group-sm .btn,.btn-group-sm>.btn,.btn.btn-sm{padding:.40625rem 1.25rem;font-size:.6875rem;line-height:1.5;border-radius:.2rem}.btn.btn-round{border-radius:30px}.btn.btn-fab,.btn.btn-just-icon{font-size:24px;height:41px;min-width:41px;width:41px;padding:0;overflow:hidden;position:relative;line-height:41px}.btn.btn-fab.btn-round,.btn.btn-just-icon.btn-round{border-radius:50%}.btn-group-sm .btn.btn-fab,.btn-group-sm .btn.btn-just-icon,.btn-group-sm>.btn.btn-fab,.btn-group-sm>.btn.btn-just-icon,.btn.btn-fab.btn-fab-mini,.btn.btn-fab.btn-sm,.btn.btn-just-icon.btn-fab-mini,.btn.btn-just-icon.btn-sm{height:30px;min-width:30px;width:30px}.btn-group-sm .btn.btn-fab .fa,.btn-group-sm .btn.btn-fab .material-icons,.btn-group-sm .btn.btn-just-icon .fa,.btn-group-sm .btn.btn-just-icon .material-icons,.btn-group-sm>.btn.btn-fab .fa,.btn-group-sm>.btn.btn-fab .material-icons,.btn-group-sm>.btn.btn-just-icon .fa,.btn-group-sm>.btn.btn-just-icon .material-icons,.btn.btn-fab.btn-fab-mini .fa,.btn.btn-fab.btn-fab-mini .material-icons,.btn.btn-fab.btn-sm .fa,.btn.btn-fab.btn-sm .material-icons,.btn.btn-just-icon.btn-fab-mini .fa,.btn.btn-just-icon.btn-fab-mini .material-icons,.btn.btn-just-icon.btn-sm .fa,.btn.btn-just-icon.btn-sm .material-icons{font-size:17px;line-height:29px}.btn-group-lg .btn.btn-fab,.btn-group-lg .btn.btn-just-icon,.btn-group-lg>.btn.btn-fab,.btn-group-lg>.btn.btn-just-icon,.btn.btn-fab.btn-lg,.btn.btn-just-icon.btn-lg{height:57px;min-width:57px;width:57px;line-height:56px}.btn-group-lg .btn.btn-fab .fa,.btn-group-lg .btn.btn-fab .material-icons,.btn-group-lg .btn.btn-just-icon .fa,.btn-group-lg .btn.btn-just-icon .material-icons,.btn-group-lg>.btn.btn-fab .fa,.btn-group-lg>.btn.btn-fab .material-icons,.btn-group-lg>.btn.btn-just-icon .fa,.btn-group-lg>.btn.btn-just-icon .material-icons,.btn.btn-fab.btn-lg .fa,.btn.btn-fab.btn-lg .material-icons,.btn.btn-just-icon.btn-lg .fa,.btn.btn-just-icon.btn-lg .material-icons{font-size:32px;line-height:56px}.btn.btn-fab .fa,.btn.btn-fab .material-icons,.btn.btn-just-icon .fa,.btn.btn-just-icon .material-icons{margin-top:0;position:absolute;width:100%;transform:none;left:0;top:0;height:100%;line-height:41px;font-size:20px}.btn-group-lg>.btn-just-icon.btn,.btn-just-icon.btn-lg{font-size:24px;height:41px;min-width:41px;width:41px}.input-group-btn>.btn{border:0}.btn .material-icons,.btn:not(.btn-just-icon):not(.btn-fab) .fa{position:relative;display:inline-block;top:0;margin-top:-1em;margin-bottom:-1em;font-size:1.1rem;vertical-align:middle}.bg-inverse .btn-group-vertical.disabled,.bg-inverse .btn-group-vertical:disabled,.bg-inverse .btn-group-vertical[disabled],.bg-inverse .btn-group.disabled,.bg-inverse .btn-group:disabled,.bg-inverse .btn-group[disabled],.bg-inverse .btn.disabled,.bg-inverse .btn:disabled,.bg-inverse .btn[disabled],.bg-inverse .input-group-btn .btn.disabled,.bg-inverse .input-group-btn .btn:disabled,.bg-inverse .input-group-btn .btn[disabled],.bg-inverse fieldset[disabled][disabled] .btn,.bg-inverse fieldset[disabled][disabled] .btn-group,.bg-inverse fieldset[disabled][disabled] .btn-group-vertical,.bg-inverse fieldset[disabled][disabled] .input-group-btn .btn{color:hsla(0,0%,100%,.3)}.btn-group,.btn-group-vertical{position:relative;margin:10px 1px}.btn-group-vertical .dropdown-menu,.btn-group .dropdown-menu{border-radius:0 0 .25rem .25rem}.btn-group-vertical.btn-group-raised,.btn-group.btn-group-raised{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.btn-group-vertical .btn,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn-group,.btn-group-vertical .btn:active,.btn-group-vertical>.btn-group,.btn-group .btn,.btn-group .btn+.btn,.btn-group .btn-group,.btn-group .btn:active,.btn-group>.btn-group{margin:0}.form-check{margin-bottom:.5rem}.form-check,.form-check .form-check-label{padding-left:0}.form-check .form-check-input{position:absolute;margin:0;z-index:-1;left:0;pointer-events:none}.form-check .form-check-sign:before{display:block;position:absolute;left:0;content:"";background-color:rgba(0,0,0,.84);height:20px;width:20px;border-radius:100%;z-index:1;opacity:0;margin:0;top:0;transform:scale3d(2.3,2.3,1)}.form-check .form-check-sign .check{position:relative;display:inline-block;width:20px;height:20px;border:1px solid rgba(0,0,0,.54);overflow:hidden;z-index:1;border-radius:3px}.form-check .form-check-sign .check:before{position:absolute;content:"";transform:rotate(45deg);display:block;margin-top:-3px;margin-left:7px;width:0;color:#fff;height:0;box-shadow:0 0 0 0,0 0 0 0,0 0 0 0,0 0 0 0,0 0 0 0,0 0 0 0,inset 0 0 0 0;animation:checkboxOff .3s forwards}.form-check .form-check-input:focus+.form-check-sign .check:after{opacity:.2}.form-check .form-check-input:checked~.form-check-sign .check{background:#9c27b0}.form-check .form-check-input:checked~.form-check-sign .check:before{color:#fff;box-shadow:0 0 0 10px,10px -10px 0 10px,32px 0 0 20px,0 32px 0 20px,-5px 5px 0 10px,20px -12px 0 11px;animation:b .3s forwards}.form-check .form-check-input:checked~.form-check-sign:before{animation:c .5s}.form-check .form-check-input:checked~.form-check-sign .check:after{animation:c .5s forwards}.form-check .form-check-input:not(:checked)+.form-check-sign .check:after,.form-check .form-check-input:not(:checked)+.form-check-sign:before{animation:c .5s}.form-check .rtl .form-check .form-check-sign .check:before{margin-right:10px}.form-check .form-check-input[disabled]+.circle,.form-check .form-check-input[disabled]~.form-check-sign .check,fieldset[disabled] .form-check,fieldset[disabled] .form-check .form-check-input{opacity:.5}.form-check .form-check-input[disabled]~.form-check-sign .check{border-color:#000;opacity:.26}.form-check .form-check-input[disabled]+.form-check-sign .check:after{background-color:rgba(0,0,0,.87);transform:rotate(-45deg)}.form-check .form-check-input[disabled][checked]+.form-check-sign .check{background-color:#000}.form-check .form-check-label{cursor:pointer;padding-left:25px;position:relative}.form-group.is-focused .form-check .form-check-label{color:rgba(0,0,0,.26)}.form-group.is-focused .form-check .form-check-label:focus,.form-group.is-focused .form-check .form-check-label:hover{color:rgba(0,0,0,.54)}fieldset[disabled] .form-group.is-focused .form-check .form-check-label{color:rgba(0,0,0,.26)}.form-check .form-check-label span{display:block;position:absolute;left:-1px;top:-1px;transition-duration:.2s}.form-check .form-check-label .circle{border:1px solid rgba(0,0,0,.54);height:15px;width:15px;border-radius:100%;top:1px}.form-check .form-check-label .circle .check{height:15px;width:15px;border-radius:100%;background-color:#9c27b0;transform:scale3d(0,0,0)}.form-check .form-check-input{opacity:0;height:0;width:0;overflow:hidden}.form-check .form-check-input:checked~.check,.form-check .form-check-input:checked~.circle{opacity:1}.form-check .form-check-input:checked~.check{background-color:#9c27b0}.form-check .form-check-input:checked~.circle{border-color:#9c27b0}.form-check .form-check-input:checked .check:before{animation:b .5s forwards}.form-check .form-check-input:checked~.circle .check{transform:scale3d(.65,.65,1)}.form-check .form-check-input[disabled]~.check,.form-check .form-check-input[disabled]~.circle{opacity:.26}.form-check .form-check-input[disabled]~.check{background-color:#000}.form-check .form-check-input[disabled]~.circle{border-color:#000}.form-check .form-check-input[disabled]+.circle .check{background-color:#000}.form-check .form-check-sign{vertical-align:middle;position:relative;top:-2px;float:left;padding-right:10px;display:inline-block}.form-check .form-check-label .circle:before{display:block;position:absolute;left:-1px;content:"";background-color:rgba(0,0,0,.84);height:15px;width:15px;border-radius:100%;z-index:1;opacity:0;margin:0;top:-1px;transform:scale3d(2.3,2.3,1)}.form-check .form-check-label .form-check-input:checked+.circle:before{animation:c .5s}.form-check .form-check-label .form-check-input:checked+.circle .check:before{color:#fff;box-shadow:0 0 0 10px,10px -10px 0 10px,32px 0 0 20px,0 32px 0 20px,-5px 5px 0 10px,20px -12px 0 11px;animation:b .3s forwards}.form-check+.form-check{margin-top:0}@keyframes b{0%{box-shadow:0 0 0 10px,10px -10px 0 10px,32px 0 0 20px,0 32px 0 20px,-5px 5px 0 10px,15px 2px 0 11px}50%{box-shadow:0 0 0 10px,10px -10px 0 10px,32px 0 0 20px,0 32px 0 20px,-5px 5px 0 10px,20px 2px 0 11px}to{box-shadow:0 0 0 10px,10px -10px 0 10px,32px 0 0 20px,0 32px 0 20px,-5px 5px 0 10px,20px -12px 0 11px}}@keyframes c{0%{opacity:0}50%{opacity:.2}to{opacity:0}}form{margin-bottom:1.125rem}.card form{margin:0}.navbar form{margin-bottom:0}.navbar form .bmd-form-group{display:inline-block;padding-top:0}.navbar form .btn{margin-bottom:0}.form-control{background:no-repeat bottom,50% calc(100% - 1px);background-size:0 100%,100% 100%;border:0;height:36px;transition:background 0s ease-out;padding-left:0;padding-right:0;border-radius:0;font-size:14px}.bmd-form-group.is-focused .form-control,.form-control:focus{background-size:100% 100%,100% 100%;transition-duration:.3s;box-shadow:none}.form-control::-moz-placeholder{color:#aaa;font-weight:400;font-size:14px}.form-control:-ms-input-placeholder{color:#aaa;font-weight:400;font-size:14px}.form-control::-webkit-input-placeholder{color:#aaa;font-weight:400;font-size:14px}.has-white .form-control::-moz-placeholder{color:#fff}.has-white .form-control:-ms-input-placeholder{color:#fff}.has-white .form-control::-webkit-input-placeholder{color:#fff}.bmd-help{position:absolute;display:none;font-size:.8rem;font-weight:400}.bmd-form-group.is-focused .bmd-help{display:block}.bmd-help:nth-of-type(2){padding-top:1rem}.bmd-help+.bmd-help{position:relative;margin-bottom:0}.checkbox-inline,.checkbox label,.is-focused .checkbox-inline,.is-focused .checkbox label,.is-focused .radio-inline,.is-focused .radio label,.is-focused .switch label,.radio-inline,.radio label,.switch label{color:#999}.checkbox-inline label:has(input[type=checkbox][disabled]),.checkbox-inline label:has(input[type=checkbox][disabled]):focus,.checkbox-inline label:has(input[type=checkbox][disabled]):hover,.checkbox-inline label:has(input[type=radio][disabled]),.checkbox-inline label:has(input[type=radio][disabled]):focus,.checkbox-inline label:has(input[type=radio][disabled]):hover,.checkbox label label:has(input[type=checkbox][disabled]),.checkbox label label:has(input[type=checkbox][disabled]):focus,.checkbox label label:has(input[type=checkbox][disabled]):hover,.checkbox label label:has(input[type=radio][disabled]),.checkbox label label:has(input[type=radio][disabled]):focus,.checkbox label label:has(input[type=radio][disabled]):hover,.is-focused .checkbox-inline label:has(input[type=checkbox][disabled]),.is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):focus,.is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):hover,.is-focused .checkbox-inline label:has(input[type=radio][disabled]),.is-focused .checkbox-inline label:has(input[type=radio][disabled]):focus,.is-focused .checkbox-inline label:has(input[type=radio][disabled]):hover,.is-focused .checkbox label label:has(input[type=checkbox][disabled]),.is-focused .checkbox label label:has(input[type=checkbox][disabled]):focus,.is-focused .checkbox label label:has(input[type=checkbox][disabled]):hover,.is-focused .checkbox label label:has(input[type=radio][disabled]),.is-focused .checkbox label label:has(input[type=radio][disabled]):focus,.is-focused .checkbox label label:has(input[type=radio][disabled]):hover,.is-focused .radio-inline label:has(input[type=checkbox][disabled]),.is-focused .radio-inline label:has(input[type=checkbox][disabled]):focus,.is-focused .radio-inline label:has(input[type=checkbox][disabled]):hover,.is-focused .radio-inline label:has(input[type=radio][disabled]),.is-focused .radio-inline label:has(input[type=radio][disabled]):focus,.is-focused .radio-inline label:has(input[type=radio][disabled]):hover,.is-focused .radio label label:has(input[type=checkbox][disabled]),.is-focused .radio label label:has(input[type=checkbox][disabled]):focus,.is-focused .radio label label:has(input[type=checkbox][disabled]):hover,.is-focused .radio label label:has(input[type=radio][disabled]),.is-focused .radio label label:has(input[type=radio][disabled]):focus,.is-focused .radio label label:has(input[type=radio][disabled]):hover,.is-focused .switch label label:has(input[type=checkbox][disabled]),.is-focused .switch label label:has(input[type=checkbox][disabled]):focus,.is-focused .switch label label:has(input[type=checkbox][disabled]):hover,.is-focused .switch label label:has(input[type=radio][disabled]),.is-focused .switch label label:has(input[type=radio][disabled]):focus,.is-focused .switch label label:has(input[type=radio][disabled]):hover,.radio-inline label:has(input[type=checkbox][disabled]),.radio-inline label:has(input[type=checkbox][disabled]):focus,.radio-inline label:has(input[type=checkbox][disabled]):hover,.radio-inline label:has(input[type=radio][disabled]),.radio-inline label:has(input[type=radio][disabled]):focus,.radio-inline label:has(input[type=radio][disabled]):hover,.radio label label:has(input[type=checkbox][disabled]),.radio label label:has(input[type=checkbox][disabled]):focus,.radio label label:has(input[type=checkbox][disabled]):hover,.radio label label:has(input[type=radio][disabled]),.radio label label:has(input[type=radio][disabled]):focus,.radio label label:has(input[type=radio][disabled]):hover,.switch label label:has(input[type=checkbox][disabled]),.switch label label:has(input[type=checkbox][disabled]):focus,.switch label label:has(input[type=checkbox][disabled]):hover,.switch label label:has(input[type=radio][disabled]),.switch label label:has(input[type=radio][disabled]):focus,.switch label label:has(input[type=radio][disabled]):hover,fieldset[disabled] .checkbox-inline,fieldset[disabled] .checkbox-inline:focus,fieldset[disabled] .checkbox-inline:hover,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox label:focus,fieldset[disabled] .checkbox label:hover,fieldset[disabled] .is-focused .checkbox-inline,fieldset[disabled] .is-focused .checkbox-inline:focus,fieldset[disabled] .is-focused .checkbox-inline:hover,fieldset[disabled] .is-focused .checkbox label,fieldset[disabled] .is-focused .checkbox label:focus,fieldset[disabled] .is-focused .checkbox label:hover,fieldset[disabled] .is-focused .radio-inline,fieldset[disabled] .is-focused .radio-inline:focus,fieldset[disabled] .is-focused .radio-inline:hover,fieldset[disabled] .is-focused .radio label,fieldset[disabled] .is-focused .radio label:focus,fieldset[disabled] .is-focused .radio label:hover,fieldset[disabled] .is-focused .switch label,fieldset[disabled] .is-focused .switch label:focus,fieldset[disabled] .is-focused .switch label:hover,fieldset[disabled] .radio-inline,fieldset[disabled] .radio-inline:focus,fieldset[disabled] .radio-inline:hover,fieldset[disabled] .radio label,fieldset[disabled] .radio label:focus,fieldset[disabled] .radio label:hover,fieldset[disabled] .switch label,fieldset[disabled] .switch label:focus,fieldset[disabled] .switch label:hover{color:#999}[class*=" bmd-label"],[class^=bmd-label]{color:#999}.form-control,.is-focused .form-control{background-image:linear-gradient(0deg,#9c27b0 2px,rgba(156,39,176,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.form-control.disabled,.form-control:disabled,.form-control[disabled],fieldset[disabled][disabled] .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.form-control.form-control-success,.is-focused .form-control.form-control-success{background-image:linear-gradient(0deg,#9c27b0 2px,rgba(156,39,176,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.form-control.form-control-warning,.is-focused .form-control.form-control-warning{background-image:linear-gradient(0deg,#9c27b0 2px,rgba(156,39,176,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.form-control.form-control-danger,.is-focused .form-control.form-control-danger{background-image:linear-gradient(0deg,#9c27b0 2px,rgba(156,39,176,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#999}.is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:hsla(0,0%,60%,.8);border-radius:.2rem}.is-focused .custom-select.is-valid,.is-focused .form-control.is-valid,.was-validated .is-focused .custom-select:valid,.was-validated .is-focused .form-control:valid{border-color:#999}.is-focused .custom-select.is-valid:focus,.is-focused .form-control.is-valid:focus,.was-validated .is-focused .custom-select:valid:focus,.was-validated .is-focused .form-control:valid:focus{border-color:#999;box-shadow:0 0 0 .2rem hsla(0,0%,60%,.25)}.is-focused .custom-select.is-valid~.valid-feedback,.is-focused .custom-select.is-valid~.valid-tooltip,.is-focused .form-control.is-valid~.valid-feedback,.is-focused .form-control.is-valid~.valid-tooltip,.was-validated .is-focused .custom-select:valid~.valid-feedback,.was-validated .is-focused .custom-select:valid~.valid-tooltip,.was-validated .is-focused .form-control:valid~.valid-feedback,.was-validated .is-focused .form-control:valid~.valid-tooltip{display:block}.is-focused .form-check-input.is-valid~.form-check-label,.was-validated .is-focused .form-check-input:valid~.form-check-label{color:#999}.is-focused .form-check-input.is-valid~.valid-feedback,.is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .is-focused .form-check-input:valid~.valid-feedback,.was-validated .is-focused .form-check-input:valid~.valid-tooltip{display:block}.is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .is-focused .custom-control-input:valid~.custom-control-label{color:#999}.is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#d9d9d9}.is-focused .custom-control-input.is-valid~.valid-feedback,.is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#b3b3b3}.is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem hsla(0,0%,60%,.25)}.is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .is-focused .custom-file-input:valid~.custom-file-label{border-color:#999}.is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.is-focused .custom-file-input.is-valid~.valid-feedback,.is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem hsla(0,0%,60%,.25)}.is-focused [class*=" bmd-label"],.is-focused [class^=bmd-label]{color:#9c27b0}.is-focused .bmd-label-placeholder{color:#999}.is-focused .form-control{border-color:#d2d2d2}.is-focused .bmd-help{color:#555}.has-success [class*=" bmd-label"],.has-success [class^=bmd-label]{color:#4caf50}.has-success .form-control,.is-focused .has-success .form-control{background-image:linear-gradient(0deg,#4caf50 2px,rgba(76,175,80,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-success .form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-success .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-success .form-control.disabled,.has-success .form-control:disabled,.has-success .form-control[disabled],fieldset[disabled][disabled] .has-success .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-success .form-control.form-control-success,.is-focused .has-success .form-control.form-control-success{background-image:linear-gradient(0deg,#4caf50 2px,rgba(76,175,80,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-success .form-control.form-control-warning,.is-focused .has-success .form-control.form-control-warning{background-image:linear-gradient(0deg,#4caf50 2px,rgba(76,175,80,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-success .form-control.form-control-danger,.is-focused .has-success .form-control.form-control-danger{background-image:linear-gradient(0deg,#4caf50 2px,rgba(76,175,80,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-success .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#4caf50}.has-success .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(76,175,80,.8);border-radius:.2rem}.has-success .is-focused .custom-select.is-valid,.has-success .is-focused .form-control.is-valid,.was-validated .has-success .is-focused .custom-select:valid,.was-validated .has-success .is-focused .form-control:valid{border-color:#4caf50}.has-success .is-focused .custom-select.is-valid:focus,.has-success .is-focused .form-control.is-valid:focus,.was-validated .has-success .is-focused .custom-select:valid:focus,.was-validated .has-success .is-focused .form-control:valid:focus{border-color:#4caf50;box-shadow:0 0 0 .2rem rgba(76,175,80,.25)}.has-success .is-focused .custom-select.is-valid~.valid-feedback,.has-success .is-focused .custom-select.is-valid~.valid-tooltip,.has-success .is-focused .form-control.is-valid~.valid-feedback,.has-success .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-success .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-success .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-success .is-focused .form-control:valid~.valid-feedback,.was-validated .has-success .is-focused .form-control:valid~.valid-tooltip{display:block}.has-success .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-success .is-focused .form-check-input:valid~.form-check-label{color:#4caf50}.has-success .is-focused .form-check-input.is-valid~.valid-feedback,.has-success .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-success .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-success .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-success .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-success .is-focused .custom-control-input:valid~.custom-control-label{color:#4caf50}.has-success .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-success .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#a3d7a5}.has-success .is-focused .custom-control-input.is-valid~.valid-feedback,.has-success .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-success .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-success .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-success .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-success .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#6ec071}.has-success .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-success .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(76,175,80,.25)}.has-success .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-success .is-focused .custom-file-input:valid~.custom-file-label{border-color:#4caf50}.has-success .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-success .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-success .is-focused .custom-file-input.is-valid~.valid-feedback,.has-success .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-success .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-success .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-success .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-success .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(76,175,80,.25)}.has-success .is-focused .bmd-label-placeholder,.has-success .is-focused [class*=" bmd-label"],.has-success .is-focused [class^=bmd-label]{color:#4caf50}.has-success .is-focused .form-control{border-color:#4caf50}.has-success .is-focused .bmd-help{color:#555}.has-info [class*=" bmd-label"],.has-info [class^=bmd-label]{color:#00bcd4}.has-info .form-control,.is-focused .has-info .form-control{background-image:linear-gradient(0deg,#00bcd4 2px,rgba(0,188,212,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-info .form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-info .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-info .form-control.disabled,.has-info .form-control:disabled,.has-info .form-control[disabled],fieldset[disabled][disabled] .has-info .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-info .form-control.form-control-success,.is-focused .has-info .form-control.form-control-success{background-image:linear-gradient(0deg,#00bcd4 2px,rgba(0,188,212,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-info .form-control.form-control-warning,.is-focused .has-info .form-control.form-control-warning{background-image:linear-gradient(0deg,#00bcd4 2px,rgba(0,188,212,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-info .form-control.form-control-danger,.is-focused .has-info .form-control.form-control-danger{background-image:linear-gradient(0deg,#00bcd4 2px,rgba(0,188,212,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-info .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#00bcd4}.has-info .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(0,188,212,.8);border-radius:.2rem}.has-info .is-focused .custom-select.is-valid,.has-info .is-focused .form-control.is-valid,.was-validated .has-info .is-focused .custom-select:valid,.was-validated .has-info .is-focused .form-control:valid{border-color:#00bcd4}.has-info .is-focused .custom-select.is-valid:focus,.has-info .is-focused .form-control.is-valid:focus,.was-validated .has-info .is-focused .custom-select:valid:focus,.was-validated .has-info .is-focused .form-control:valid:focus{border-color:#00bcd4;box-shadow:0 0 0 .2rem rgba(0,188,212,.25)}.has-info .is-focused .custom-select.is-valid~.valid-feedback,.has-info .is-focused .custom-select.is-valid~.valid-tooltip,.has-info .is-focused .form-control.is-valid~.valid-feedback,.has-info .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-info .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-info .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-info .is-focused .form-control:valid~.valid-feedback,.was-validated .has-info .is-focused .form-control:valid~.valid-tooltip{display:block}.has-info .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-info .is-focused .form-check-input:valid~.form-check-label{color:#00bcd4}.has-info .is-focused .form-check-input.is-valid~.valid-feedback,.has-info .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-info .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-info .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-info .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-info .is-focused .custom-control-input:valid~.custom-control-label{color:#00bcd4}.has-info .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-info .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#55ecff}.has-info .is-focused .custom-control-input.is-valid~.valid-feedback,.has-info .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-info .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-info .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-info .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-info .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#08e3ff}.has-info .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-info .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(0,188,212,.25)}.has-info .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-info .is-focused .custom-file-input:valid~.custom-file-label{border-color:#00bcd4}.has-info .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-info .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-info .is-focused .custom-file-input.is-valid~.valid-feedback,.has-info .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-info .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-info .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-info .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-info .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(0,188,212,.25)}.has-info .is-focused .bmd-label-placeholder,.has-info .is-focused [class*=" bmd-label"],.has-info .is-focused [class^=bmd-label]{color:#00bcd4}.has-info .is-focused .form-control{border-color:#00bcd4}.has-info .is-focused .bmd-help{color:#555}.has-white [class*=" bmd-label"],.has-white [class^=bmd-label]{color:#fff}.has-white .form-control,.is-focused .has-white .form-control{background-image:linear-gradient(0deg,#fff 2px,hsla(0,0%,100%,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0)}.has-white .form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0)}.has-white .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0)}.has-white .form-control.disabled,.has-white .form-control:disabled,.has-white .form-control[disabled],fieldset[disabled][disabled] .has-white .form-control{background-image:linear-gradient(90deg,#fff 0,#fff 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-white .form-control.form-control-success,.is-focused .has-white .form-control.form-control-success{background-image:linear-gradient(0deg,#fff 2px,hsla(0,0%,100%,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-white .form-control.form-control-warning,.is-focused .has-white .form-control.form-control-warning{background-image:linear-gradient(0deg,#fff 2px,hsla(0,0%,100%,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-white .form-control.form-control-danger,.is-focused .has-white .form-control.form-control-danger{background-image:linear-gradient(0deg,#fff 2px,hsla(0,0%,100%,0) 0),linear-gradient(0deg,#fff 1px,hsla(0,0%,100%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-white .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#fff}.has-white .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:hsla(0,0%,100%,.8);border-radius:.2rem}.has-white .is-focused .custom-select.is-valid,.has-white .is-focused .form-control.is-valid,.was-validated .has-white .is-focused .custom-select:valid,.was-validated .has-white .is-focused .form-control:valid{border-color:#fff}.has-white .is-focused .custom-select.is-valid:focus,.has-white .is-focused .form-control.is-valid:focus,.was-validated .has-white .is-focused .custom-select:valid:focus,.was-validated .has-white .is-focused .form-control:valid:focus{border-color:#fff;box-shadow:0 0 0 .2rem hsla(0,0%,100%,.25)}.has-white .is-focused .custom-select.is-valid~.valid-feedback,.has-white .is-focused .custom-select.is-valid~.valid-tooltip,.has-white .is-focused .form-control.is-valid~.valid-feedback,.has-white .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-white .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-white .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-white .is-focused .form-control:valid~.valid-feedback,.was-validated .has-white .is-focused .form-control:valid~.valid-tooltip{display:block}.has-white .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-white .is-focused .form-check-input:valid~.form-check-label{color:#fff}.has-white .is-focused .form-check-input.is-valid~.valid-feedback,.has-white .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-white .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-white .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-white .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-white .is-focused .custom-control-input:valid~.custom-control-label{color:#fff}.has-white .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-white .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#fff}.has-white .is-focused .custom-control-input.is-valid~.valid-feedback,.has-white .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-white .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-white .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-white .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-white .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#fff}.has-white .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-white .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem hsla(0,0%,100%,.25)}.has-white .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-white .is-focused .custom-file-input:valid~.custom-file-label{border-color:#fff}.has-white .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-white .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-white .is-focused .custom-file-input.is-valid~.valid-feedback,.has-white .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-white .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-white .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-white .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-white .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem hsla(0,0%,100%,.25)}.has-white .is-focused .bmd-label-placeholder,.has-white .is-focused [class*=" bmd-label"],.has-white .is-focused [class^=bmd-label]{color:#fff}.has-white .is-focused .form-control{border-color:#fff}.has-white .is-focused .bmd-help{color:#555}.has-white .form-control:focus{color:#fff}.has-warning [class*=" bmd-label"],.has-warning [class^=bmd-label]{color:#ff9800}.has-warning .form-control,.is-focused .has-warning .form-control{background-image:linear-gradient(0deg,#ff9800 2px,rgba(255,152,0,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-warning .form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-warning .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-warning .form-control.disabled,.has-warning .form-control:disabled,.has-warning .form-control[disabled],fieldset[disabled][disabled] .has-warning .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-warning .form-control.form-control-success,.is-focused .has-warning .form-control.form-control-success{background-image:linear-gradient(0deg,#ff9800 2px,rgba(255,152,0,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-warning .form-control.form-control-warning,.is-focused .has-warning .form-control.form-control-warning{background-image:linear-gradient(0deg,#ff9800 2px,rgba(255,152,0,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-warning .form-control.form-control-danger,.is-focused .has-warning .form-control.form-control-danger{background-image:linear-gradient(0deg,#ff9800 2px,rgba(255,152,0,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-warning .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ff9800}.has-warning .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(255,152,0,.8);border-radius:.2rem}.has-warning .is-focused .custom-select.is-valid,.has-warning .is-focused .form-control.is-valid,.was-validated .has-warning .is-focused .custom-select:valid,.was-validated .has-warning .is-focused .form-control:valid{border-color:#ff9800}.has-warning .is-focused .custom-select.is-valid:focus,.has-warning .is-focused .form-control.is-valid:focus,.was-validated .has-warning .is-focused .custom-select:valid:focus,.was-validated .has-warning .is-focused .form-control:valid:focus{border-color:#ff9800;box-shadow:0 0 0 .2rem rgba(255,152,0,.25)}.has-warning .is-focused .custom-select.is-valid~.valid-feedback,.has-warning .is-focused .custom-select.is-valid~.valid-tooltip,.has-warning .is-focused .form-control.is-valid~.valid-feedback,.has-warning .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-warning .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-warning .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-warning .is-focused .form-control:valid~.valid-feedback,.was-validated .has-warning .is-focused .form-control:valid~.valid-tooltip{display:block}.has-warning .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-warning .is-focused .form-check-input:valid~.form-check-label{color:#ff9800}.has-warning .is-focused .form-check-input.is-valid~.valid-feedback,.has-warning .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-warning .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-warning .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-warning .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-warning .is-focused .custom-control-input:valid~.custom-control-label{color:#ff9800}.has-warning .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-warning .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#ffcc80}.has-warning .is-focused .custom-control-input.is-valid~.valid-feedback,.has-warning .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-warning .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-warning .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-warning .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-warning .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#ffad33}.has-warning .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-warning .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(255,152,0,.25)}.has-warning .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-warning .is-focused .custom-file-input:valid~.custom-file-label{border-color:#ff9800}.has-warning .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-warning .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-warning .is-focused .custom-file-input.is-valid~.valid-feedback,.has-warning .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-warning .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-warning .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-warning .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-warning .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(255,152,0,.25)}.has-warning .is-focused .bmd-label-placeholder,.has-warning .is-focused [class*=" bmd-label"],.has-warning .is-focused [class^=bmd-label]{color:#ff9800}.has-warning .is-focused .form-control{border-color:#ff9800}.has-warning .is-focused .bmd-help{color:#555}.has-danger [class*=" bmd-label"],.has-danger [class^=bmd-label]{color:#f44336}.has-danger .form-control,.has-danger .form-control:invalid,.is-focused .has-danger .form-control{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-danger .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-danger .form-control.disabled,.has-danger .form-control:disabled,.has-danger .form-control[disabled],fieldset[disabled][disabled] .has-danger .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-danger .form-control.form-control-success,.is-focused .has-danger .form-control.form-control-success{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-danger .form-control.form-control-warning,.is-focused .has-danger .form-control.form-control-warning{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-danger .form-control.form-control-danger,.is-focused .has-danger .form-control.form-control-danger{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-danger .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#f44336}.has-danger .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(244,67,54,.8);border-radius:.2rem}.has-danger .is-focused .custom-select.is-valid,.has-danger .is-focused .form-control.is-valid,.was-validated .has-danger .is-focused .custom-select:valid,.was-validated .has-danger .is-focused .form-control:valid{border-color:#f44336}.has-danger .is-focused .custom-select.is-valid:focus,.has-danger .is-focused .form-control.is-valid:focus,.was-validated .has-danger .is-focused .custom-select:valid:focus,.was-validated .has-danger .is-focused .form-control:valid:focus{border-color:#f44336;box-shadow:0 0 0 .2rem rgba(244,67,54,.25)}.has-danger .is-focused .custom-select.is-valid~.valid-feedback,.has-danger .is-focused .custom-select.is-valid~.valid-tooltip,.has-danger .is-focused .form-control.is-valid~.valid-feedback,.has-danger .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-danger .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-danger .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-danger .is-focused .form-control:valid~.valid-feedback,.was-validated .has-danger .is-focused .form-control:valid~.valid-tooltip{display:block}.has-danger .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-danger .is-focused .form-check-input:valid~.form-check-label{color:#f44336}.has-danger .is-focused .form-check-input.is-valid~.valid-feedback,.has-danger .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-danger .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-danger .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-danger .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-danger .is-focused .custom-control-input:valid~.custom-control-label{color:#f44336}.has-danger .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-danger .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#fbb4af}.has-danger .is-focused .custom-control-input.is-valid~.valid-feedback,.has-danger .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-danger .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-danger .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-danger .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-danger .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#f77066}.has-danger .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-danger .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(244,67,54,.25)}.has-danger .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-danger .is-focused .custom-file-input:valid~.custom-file-label{border-color:#f44336}.has-danger .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-danger .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-danger .is-focused .custom-file-input.is-valid~.valid-feedback,.has-danger .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-danger .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-danger .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-danger .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-danger .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(244,67,54,.25)}.has-danger .is-focused .bmd-label-placeholder,.has-danger .is-focused [class*=" bmd-label"],.has-danger .is-focused [class^=bmd-label]{color:#f44336}.has-danger .is-focused .form-control{border-color:#f44336}.has-danger .is-focused .bmd-help{color:#555}.has-rose [class*=" bmd-label"],.has-rose [class^=bmd-label]{color:#e91e63}.has-rose .form-control,.is-focused .has-rose .form-control{background-image:linear-gradient(0deg,#e91e63 2px,rgba(233,30,99,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-rose .form-control:invalid{background-image:linear-gradient(0deg,#f44336 2px,rgba(244,67,54,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-rose .form-control:read-only{background-image:linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0)}.has-rose .form-control.disabled,.has-rose .form-control:disabled,.has-rose .form-control[disabled],fieldset[disabled][disabled] .has-rose .form-control{background-image:linear-gradient(90deg,#d2d2d2 0,#d2d2d2 30%,transparent 0,transparent);background-repeat:repeat-x;background-size:3px 1px}.has-rose .form-control.form-control-success,.is-focused .has-rose .form-control.form-control-success{background-image:linear-gradient(0deg,#e91e63 2px,rgba(233,30,99,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="}.has-rose .form-control.form-control-warning,.is-focused .has-rose .form-control.form-control-warning{background-image:linear-gradient(0deg,#e91e63 2px,rgba(233,30,99,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"}.has-rose .form-control.form-control-danger,.is-focused .has-rose .form-control.form-control-danger{background-image:linear-gradient(0deg,#e91e63 2px,rgba(233,30,99,0) 0),linear-gradient(0deg,#d2d2d2 1px,hsla(0,0%,82%,0) 0),"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="}.has-rose .is-focused .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e91e63}.has-rose .is-focused .valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(233,30,99,.8);border-radius:.2rem}.has-rose .is-focused .custom-select.is-valid,.has-rose .is-focused .form-control.is-valid,.was-validated .has-rose .is-focused .custom-select:valid,.was-validated .has-rose .is-focused .form-control:valid{border-color:#e91e63}.has-rose .is-focused .custom-select.is-valid:focus,.has-rose .is-focused .form-control.is-valid:focus,.was-validated .has-rose .is-focused .custom-select:valid:focus,.was-validated .has-rose .is-focused .form-control:valid:focus{border-color:#e91e63;box-shadow:0 0 0 .2rem rgba(233,30,99,.25)}.has-rose .is-focused .custom-select.is-valid~.valid-feedback,.has-rose .is-focused .custom-select.is-valid~.valid-tooltip,.has-rose .is-focused .form-control.is-valid~.valid-feedback,.has-rose .is-focused .form-control.is-valid~.valid-tooltip,.was-validated .has-rose .is-focused .custom-select:valid~.valid-feedback,.was-validated .has-rose .is-focused .custom-select:valid~.valid-tooltip,.was-validated .has-rose .is-focused .form-control:valid~.valid-feedback,.was-validated .has-rose .is-focused .form-control:valid~.valid-tooltip{display:block}.has-rose .is-focused .form-check-input.is-valid~.form-check-label,.was-validated .has-rose .is-focused .form-check-input:valid~.form-check-label{color:#e91e63}.has-rose .is-focused .form-check-input.is-valid~.valid-feedback,.has-rose .is-focused .form-check-input.is-valid~.valid-tooltip,.was-validated .has-rose .is-focused .form-check-input:valid~.valid-feedback,.was-validated .has-rose .is-focused .form-check-input:valid~.valid-tooltip{display:block}.has-rose .is-focused .custom-control-input.is-valid~.custom-control-label,.was-validated .has-rose .is-focused .custom-control-input:valid~.custom-control-label{color:#e91e63}.has-rose .is-focused .custom-control-input.is-valid~.custom-control-label:before,.was-validated .has-rose .is-focused .custom-control-input:valid~.custom-control-label:before{background-color:#f492b4}.has-rose .is-focused .custom-control-input.is-valid~.valid-feedback,.has-rose .is-focused .custom-control-input.is-valid~.valid-tooltip,.was-validated .has-rose .is-focused .custom-control-input:valid~.valid-feedback,.was-validated .has-rose .is-focused .custom-control-input:valid~.valid-tooltip{display:block}.has-rose .is-focused .custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .has-rose .is-focused .custom-control-input:valid:checked~.custom-control-label:before{background-color:#ee4c83}.has-rose .is-focused .custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .has-rose .is-focused .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fafafa,0 0 0 .2rem rgba(233,30,99,.25)}.has-rose .is-focused .custom-file-input.is-valid~.custom-file-label,.was-validated .has-rose .is-focused .custom-file-input:valid~.custom-file-label{border-color:#e91e63}.has-rose .is-focused .custom-file-input.is-valid~.custom-file-label:before,.was-validated .has-rose .is-focused .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.has-rose .is-focused .custom-file-input.is-valid~.valid-feedback,.has-rose .is-focused .custom-file-input.is-valid~.valid-tooltip,.was-validated .has-rose .is-focused .custom-file-input:valid~.valid-feedback,.was-validated .has-rose .is-focused .custom-file-input:valid~.valid-tooltip{display:block}.has-rose .is-focused .custom-file-input.is-valid:focus~.custom-file-label,.was-validated .has-rose .is-focused .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(233,30,99,.25)}.has-rose .is-focused .bmd-label-placeholder,.has-rose .is-focused [class*=" bmd-label"],.has-rose .is-focused [class^=bmd-label]{color:#e91e63}.has-rose .is-focused .form-control{border-color:#e91e63}.has-rose .is-focused .bmd-help{color:#555}.bmd-form-group{position:relative}.bmd-form-group:not(.has-success):not(.has-danger) [class*=" bmd-label"].bmd-label-floating,.bmd-form-group:not(.has-success):not(.has-danger) [class^=bmd-label].bmd-label-floating{color:#aaa}.bmd-form-group [class*=" bmd-label"],.bmd-form-group [class^=bmd-label]{position:absolute;pointer-events:none;transition:all .3s ease}.bmd-form-group [class*=" bmd-label"].bmd-label-floating,.bmd-form-group [class^=bmd-label].bmd-label-floating{will-change:left,top,contents;margin:0;line-height:1.4;font-weight:400}.bmd-form-group.is-filled .bmd-label-placeholder{display:none}.bmd-form-group.bmd-collapse-inline{display:flex;align-items:center;padding:0;min-height:2.1em}.bmd-form-group.bmd-collapse-inline .collapse{flex:1;display:none}.bmd-form-group.bmd-collapse-inline .collapse.show{max-width:1200px}.bmd-form-group.bmd-collapse-inline .collapse.show,.bmd-form-group.bmd-collapse-inline .collapsing,.bmd-form-group.bmd-collapse-inline .width:not(.collapse){display:block}.bmd-form-group.bmd-collapse-inline .collapsing{transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bmd-form-group .form-control,.bmd-form-group input::placeholder,.bmd-form-group label{line-height:1.1}.bmd-form-group label{color:#aaa}.bmd-form-group .checkbox label,.bmd-form-group .radio label,.bmd-form-group .switch label,.bmd-form-group label.checkbox-inline,.bmd-form-group label.radio-inline{line-height:1.5}.bmd-form-group .checkbox label,.bmd-form-group .radio label,.bmd-form-group label{font-size:.875rem}.bmd-form-group .bmd-label-floating,.bmd-form-group .bmd-label-placeholder{top:.6125rem}.bmd-form-group .is-filled .bmd-label-floating,.bmd-form-group .is-focused .bmd-label-floating{top:-1rem;left:0;font-size:.6875rem}.bmd-form-group .bmd-label-static{top:.35rem;left:0;font-size:.875rem}.bmd-form-group .bmd-help{margin-top:0;font-size:.75rem}.bmd-form-group .form-control.form-control-danger,.bmd-form-group .form-control.form-control-success,.bmd-form-group .form-control.form-control-warning{background-size:0 100%,100% 100%,.9375rem .9375rem}.bmd-form-group .form-control.form-control-danger,.bmd-form-group .form-control.form-control-danger:focus,.bmd-form-group .form-control.form-control-success,.bmd-form-group .form-control.form-control-success:focus,.bmd-form-group .form-control.form-control-warning,.bmd-form-group .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning{padding-right:0;background-repeat:no-repeat,no-repeat;background-position:bottom,50% calc(100% - 1px),center right .46875rem}.bmd-form-group .form-control.form-control-danger:focus,.bmd-form-group .form-control.form-control-success:focus,.bmd-form-group .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning{background-size:100% 100%,100% 100%,.9375rem .9375rem}.bmd-form-group.bmd-form-group-sm .form-control,.bmd-form-group.bmd-form-group-sm input::placeholder,.bmd-form-group.bmd-form-group-sm label{line-height:1.1}.bmd-form-group.bmd-form-group-sm label{color:#aaa}.bmd-form-group.bmd-form-group-sm .checkbox label,.bmd-form-group.bmd-form-group-sm .radio label,.bmd-form-group.bmd-form-group-sm .switch label,.bmd-form-group.bmd-form-group-sm label.checkbox-inline,.bmd-form-group.bmd-form-group-sm label.radio-inline{line-height:1.5}.bmd-form-group.bmd-form-group-sm .checkbox label,.bmd-form-group.bmd-form-group-sm .radio label,.bmd-form-group.bmd-form-group-sm label{font-size:.875rem}.bmd-form-group.bmd-form-group-sm .bmd-label-floating,.bmd-form-group.bmd-form-group-sm .bmd-label-placeholder{top:.175rem}.bmd-form-group.bmd-form-group-sm .is-filled .bmd-label-floating,.bmd-form-group.bmd-form-group-sm .is-focused .bmd-label-floating{top:-1.25rem;left:0;font-size:.6875rem}.bmd-form-group.bmd-form-group-sm .bmd-label-static{top:.1rem;left:0;font-size:.875rem}.bmd-form-group.bmd-form-group-sm .bmd-help{margin-top:0;font-size:.65625rem}.bmd-form-group.bmd-form-group-sm .form-control.form-control-danger,.bmd-form-group.bmd-form-group-sm .form-control.form-control-success,.bmd-form-group.bmd-form-group-sm .form-control.form-control-warning{background-size:0 100%,100% 100%,.6875rem .6875rem}.bmd-form-group.bmd-form-group-sm .form-control.form-control-danger,.bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus,.bmd-form-group.bmd-form-group-sm .form-control.form-control-success,.bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus,.bmd-form-group.bmd-form-group-sm .form-control.form-control-warning,.bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning{padding-right:0;background-repeat:no-repeat,no-repeat;background-position:bottom,50% calc(100% - 1px),center right .34375rem}.bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus,.bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus,.bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning{background-size:100% 100%,100% 100%,.6875rem .6875rem}.bmd-form-group.bmd-form-group-lg .form-control,.bmd-form-group.bmd-form-group-lg input::placeholder,.bmd-form-group.bmd-form-group-lg label{line-height:1.1}.bmd-form-group.bmd-form-group-lg label{color:#aaa}.bmd-form-group.bmd-form-group-lg .checkbox label,.bmd-form-group.bmd-form-group-lg .radio label,.bmd-form-group.bmd-form-group-lg .switch label,.bmd-form-group.bmd-form-group-lg label.checkbox-inline,.bmd-form-group.bmd-form-group-lg label.radio-inline{line-height:1.5}.bmd-form-group.bmd-form-group-lg .checkbox label,.bmd-form-group.bmd-form-group-lg .radio label,.bmd-form-group.bmd-form-group-lg label{font-size:.875rem}.bmd-form-group.bmd-form-group-lg .bmd-label-floating,.bmd-form-group.bmd-form-group-lg .bmd-label-placeholder{top:.7375rem}.bmd-form-group.bmd-form-group-lg .is-filled .bmd-label-floating,.bmd-form-group.bmd-form-group-lg .is-focused .bmd-label-floating{top:-1rem;left:0;font-size:.6875rem}.bmd-form-group.bmd-form-group-lg .bmd-label-static{top:.35rem;left:0;font-size:.875rem}.bmd-form-group.bmd-form-group-lg .bmd-help{margin-top:0;font-size:.9375rem}.bmd-form-group.bmd-form-group-lg .form-control.form-control-danger,.bmd-form-group.bmd-form-group-lg .form-control.form-control-success,.bmd-form-group.bmd-form-group-lg .form-control.form-control-warning{background-size:0 100%,100% 100%,1.1875rem 1.1875rem}.bmd-form-group.bmd-form-group-lg .form-control.form-control-danger,.bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus,.bmd-form-group.bmd-form-group-lg .form-control.form-control-success,.bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus,.bmd-form-group.bmd-form-group-lg .form-control.form-control-warning,.bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning{padding-right:0;background-repeat:no-repeat,no-repeat;background-position:bottom,50% calc(100% - 1px),center right .59375rem}.bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus,.bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus,.bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success,.bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning{background-size:100% 100%,100% 100%,1.1875rem 1.1875rem}.form-control,input::placeholder,label{line-height:1.1}label{color:#aaa}.checkbox label,.radio label,.switch label,label.checkbox-inline,label.radio-inline{line-height:1.5}.checkbox label,.radio label,label{font-size:.875rem}.bmd-label-floating,.bmd-label-placeholder{top:.6125rem}.is-filled .bmd-label-floating,.is-focused .bmd-label-floating{top:-1rem;left:0;font-size:.6875rem}.bmd-label-static{top:.35rem;left:0;font-size:.875rem}.bmd-help{margin-top:0;font-size:.75rem}.form-control.form-control-danger,.form-control.form-control-success,.form-control.form-control-warning{background-size:0 100%,100% 100%,.9375rem .9375rem}.bmd-form-group.is-focused .form-control.form-control-danger,.bmd-form-group.is-focused .form-control.form-control-success,.bmd-form-group.is-focused .form-control.form-control-warning,.form-control.form-control-danger,.form-control.form-control-danger:focus,.form-control.form-control-success,.form-control.form-control-success:focus,.form-control.form-control-warning,.form-control.form-control-warning:focus{padding-right:0;background-repeat:no-repeat,no-repeat;background-position:bottom,50% calc(100% - 1px),center right .46875rem}.bmd-form-group.is-focused .form-control.form-control-danger,.bmd-form-group.is-focused .form-control.form-control-success,.bmd-form-group.is-focused .form-control.form-control-warning,.form-control.form-control-danger:focus,.form-control.form-control-success:focus,.form-control.form-control-warning:focus{background-size:100% 100%,100% 100%,.9375rem .9375rem}select,select.form-control{-moz-appearance:none;-webkit-appearance:none}@media (min-width:576px){.form-inline .input-group{display:inline-flex;align-items:center}}.form-control-feedback{position:absolute;top:4px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none;opacity:0}.has-success .form-control-feedback{color:#4caf50;opacity:1}.has-danger .form-control-feedback{color:#f44336;opacity:1}.form-group{padding-bottom:10px;position:relative;margin:8px 0 0}.form-group .bmd-label-static{top:-10px}textarea{height:auto!important;resize:none;line-height:1.428571!important}.form-group input[type=file]{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:-1}.form-newsletter .form-group,.form-newsletter .input-group{float:left;width:78%;margin-right:2%;margin-top:9px;padding-top:5px}.form-newsletter .btn{float:left;width:20%;margin:9px 0 0}.form-file-upload .input-group-btn:last-child>.btn-round{border-radius:30px}.form-file-upload .input-group-btn .btn{margin:0}.form-file-upload .input-group{width:100%}.input-group .input-group-btn{padding:0 12px}.form-control[disabled],.form-group .form-control[disabled],fieldset[disabled] .form-control,fieldset[disabled] .form-group .form-control{background-color:transparent;cursor:not-allowed;border-bottom:1px dotted #d2d2d2;background-repeat:no-repeat}.input-group .input-group-text{display:flex;justify-content:center;align-items:center;padding:0 15px;background-color:transparent;border-color:transparent}.img-thumbnail{border-radius:16px}.img-raised{box-shadow:0 5px 15px -8px rgba(0,0,0,.24),0 8px 10px -5px rgba(0,0,0,.2)}.rounded{border-radius:6px!important}.navbar{border:0;border-radius:3px;padding:.625rem 0;margin-bottom:20px;height:auto!important;color:#555;background-color:#fff!important;box-shadow:0 4px 18px 0 rgba(0,0,0,.12),0 7px 10px -5px rgba(0,0,0,.15)}.navbar .dropdown-item:focus,.navbar .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px hsla(0,0%,100%,.4);background-color:#fff;color:#555}.navbar .navbar-toggler .navbar-toggler-icon{background-color:#555}.navbar.fixed-top{border-radius:0}.navbar .navbar-nav .nav-item .nav-link{position:relative;color:inherit;padding:.9375rem;font-weight:400;font-size:12px;text-transform:uppercase;border-radius:3px;line-height:20px}.navbar .navbar-nav .nav-item .nav-link:not(.btn-just-icon) .fa{position:relative;top:2px;margin-top:-4px;margin-right:4px}.navbar .navbar-nav .nav-item .nav-link .fa,.navbar .navbar-nav .nav-item .nav-link .material-icons{font-size:1.25rem;max-width:24px;margin-top:-1.1em}.navbar .navbar-nav .nav-item .nav-link:not(.btn) .material-icons{margin-top:-7px;top:3px;position:relative;margin-right:3px}.navbar .navbar-nav .nav-item .nav-link.profile-photo{padding:0;margin:0 3px}.navbar .navbar-nav .nav-item .nav-link.profile-photo:after{display:none}.navbar .navbar-nav .nav-item .nav-link.profile-photo .profile-photo-small{height:40px;width:40px}.navbar .navbar-nav .nav-item .nav-link.profile-photo .ripple-container{border-radius:50%}.navbar .navbar-nav .dropdown-menu-right{transform-origin:100% 0}.navbar .navbar-nav .nav-item.active .nav-link,.navbar .navbar-nav .nav-item.active .nav-link:focus,.navbar .navbar-nav .nav-item.active .nav-link:hover{color:inherit;background-color:hsla(0,0%,100%,.1)}.navbar .btn,.navbar .navbar-nav .nav-item .btn{margin-top:0;margin-bottom:0}.navbar .navbar-toggler{cursor:pointer;outline:0}.navbar .navbar-toggler .navbar-toggler-icon{width:22px;height:2px;vertical-align:middle;outline:0;display:block;border-radius:1px}.navbar .navbar-toggler .navbar-toggler-icon+.navbar-toggler-icon{margin-top:4px}.navbar.navbar-absolute{position:absolute;width:100%;padding-top:10px;z-index:1029}.navbar .navbar-wrapper{display:inline-flex;align-items:center}.navbar .navbar-brand{position:relative;color:inherit;height:50px;font-size:1.125rem;line-height:30px;padding:.625rem 0;font-weight:300;margin-left:1rem}.navbar>.container{flex:1}.navbar.bg-primary{color:#fff;background-color:#9c27b0!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(156,39,176,.46)}.navbar.bg-primary .dropdown-item:focus,.navbar.bg-primary .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(156,39,176,.4);background-color:#9c27b0;color:#fff}.navbar.bg-primary .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-info{color:#fff;background-color:#00bcd4!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(0,188,212,.46)}.navbar.bg-info .dropdown-item:focus,.navbar.bg-info .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(0,188,212,.4);background-color:#00bcd4;color:#fff}.navbar.bg-info .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-warning{color:#fff;background-color:#ff9800!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(255,152,0,.46)}.navbar.bg-warning .dropdown-item:focus,.navbar.bg-warning .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(255,152,0,.4);background-color:#ff9800;color:#fff}.navbar.bg-warning .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-rose{color:#fff;background-color:#e91e63!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(233,30,99,.46)}.navbar.bg-rose .dropdown-item:focus,.navbar.bg-rose .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(233,30,99,.4);background-color:#e91e63;color:#fff}.navbar.bg-rose .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-danger{color:#fff;background-color:#f44336!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(244,67,54,.46)}.navbar.bg-danger .dropdown-item:focus,.navbar.bg-danger .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(244,67,54,.4);background-color:#f44336;color:#fff}.navbar.bg-danger .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-success{color:#fff;background-color:#4caf50!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(76,175,80,.46)}.navbar.bg-success .dropdown-item:focus,.navbar.bg-success .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(76,175,80,.4);background-color:#4caf50;color:#fff}.navbar.bg-success .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.bg-dark{color:#fff;background-color:#212121!important;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 12px -5px rgba(33,33,33,.46)}.navbar.bg-dark .dropdown-item:focus,.navbar.bg-dark .dropdown-item:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(33,33,33,.4);background-color:#212121;color:#fff}.navbar.bg-dark .navbar-toggler .navbar-toggler-icon{background-color:#fff}.navbar.navbar-transparent{background-color:transparent!important;box-shadow:none}.navbar .notification{position:absolute;top:5px;border:1px solid #fff;right:10px;font-size:9px;background:#f44336;color:#fff;min-width:20px;padding:0 5px;height:20px;border-radius:10px;text-align:center;line-height:19px;vertical-align:middle;display:block}.navbar .navbar-minimize{padding:3px 0 0 15px}.navbar .collapse .navbar-nav .nav-item .nav-link{position:relative;padding:10px 15px;font-weight:400;font-size:12px;text-transform:uppercase;border-radius:3px;line-height:20px;margin-left:5px;color:inherit}.navbar .collapse .navbar-nav .nav-item .nav-link:not(.btn-just-icon) .fa{position:relative;top:2px;margin-top:-4px;margin-right:4px}.navbar .collapse .navbar-nav .nav-item .nav-link .fa,.navbar .collapse .navbar-nav .nav-item .nav-link .material-icons{font-size:1.25rem;max-width:24px;margin-top:-1.1em}.navbar .collapse .navbar-nav .nav-item .nav-link:not(.btn) .material-icons{margin-top:-3px;top:0;position:relative;margin-right:3px}.navbar .collapse .navbar-nav .nav-item .nav-link .notification{top:0}.off-canvas-sidebar .navbar .navbar-collapse .navbar-nav .nav-item .nav-link{padding-top:15px;padding-bottom:15px;font-weight:500;font-size:12px;text-transform:uppercase;border-radius:3px;color:#fff;margin:0 15px}.off-canvas-sidebar .navbar .navbar-collapse .navbar-nav .nav-item .nav-link:hover{background:hsla(0,0%,78%,.2)}.off-canvas-sidebar .navbar.navbar-transparent{padding-top:25px!important}.alert{border:0;border-radius:3px;position:relative;padding:20px 15px;line-height:20px}.alert b{font-weight:500;text-transform:uppercase;font-size:12px}.alert,.alert.alert-default{background-color:#fff;color:#555}.alert.alert-default .alert-link,.alert.alert-default a,.alert .alert-link,.alert a{color:#555}.alert.alert-inverse{background-color:#292929;color:#fff}.alert.alert-inverse .alert-link,.alert.alert-inverse a{color:#fff}.alert.alert-primary{background-color:#a72abd;color:#fff}.alert.alert-primary .alert-link,.alert.alert-primary a{color:#fff}.alert.alert-success{background-color:#55b559;color:#fff}.alert.alert-success .alert-link,.alert.alert-success a{color:#fff}.alert.alert-info{background-color:#00cae3;color:#fff}.alert.alert-info .alert-link,.alert.alert-info a{color:#fff}.alert.alert-warning{background-color:#ff9e0f;color:#fff}.alert.alert-warning .alert-link,.alert.alert-warning a{color:#fff}.alert.alert-danger{background-color:#f55145;color:#fff}.alert.alert-danger .alert-link,.alert.alert-danger a{color:#fff}.alert.alert-rose{background-color:#ea2c6d;color:#fff}.alert-danger,.alert-info,.alert-rose,.alert-success,.alert-warning,.alert.alert-rose .alert-link,.alert.alert-rose a{color:#fff}.alert-default .alert-link,.alert-default a{color:rgba(0,0,0,.87)}.alert span{display:block;max-width:89%}.alert.alert-danger{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(244,67,54,.4)}.alert.alert-danger i{color:#f44336}.alert.alert-warning{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(255,152,0,.4)}.alert.alert-warning i{color:#ff9800}.alert.alert-success{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(76,175,80,.4)}.alert.alert-success i{color:#4caf50}.alert.alert-info{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(0,188,212,.4)}.alert.alert-info i{color:#00bcd4}.alert.alert-primary{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(156,39,176,.4)}.alert.alert-primary i{color:#9c27b0}.alert.alert-rose{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(233,30,99,.4)}.alert.alert-rose i{color:#e91e63}.alert.alert-with-icon{padding-left:66px}.alert.alert-with-icon i[data-notify=icon]{font-size:30px;display:block;left:15px;position:absolute;top:50%;margin-top:-15px;color:#fff}.alert .close{line-height:.5}.alert .close i{color:#fff;font-size:11px}.alert i[data-notify=icon]{display:none}.alert .alert-icon{display:block;float:left;margin-right:1.071rem}.alert .alert-icon i{margin-top:-7px;top:5px;position:relative}.alert [data-notify=dismiss]{margin-right:5px}.places-buttons .btn{margin-bottom:30px}.page-header{min-height:100vh;max-height:1000px;display:flex!important;height:100%;padding:0;color:#fff;position:relative}.page-header .page-header-image{position:absolute;background-size:cover;background-position:50%;width:100%;height:100%;z-index:-1}.page-header .content-center{position:absolute;top:50%;left:50%;z-index:2;transform:translate(-50%,-50%);text-align:center;color:#fff;padding:0 15px;width:100%;max-width:880px}.page-header footer{position:absolute;bottom:0;width:100%}.page-header .container{height:100%;z-index:1}.page-header .category,.page-header .description{color:hsla(0,0%,100%,.8)}.page-header.page-header-small{min-height:60vh;max-height:440px}.page-header.page-header-mini{min-height:40vh;max-height:340px}.page-header .title{margin-bottom:15px}.page-header .title+h4{margin-top:10px}.page-header:after,.page-header:before{position:absolute;z-index:0;width:100%;height:100%;display:block;left:0;top:0;content:""}.page-header:before{background-color:rgba(0,0,0,.3)}html *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h1,.h2,.h3,.h4,body,h1,h2,h3,h4,h5,h6{font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:300;line-height:1.5em}.h1,h1{font-size:3.3125rem;line-height:1.15em}.h2,h2{font-size:2.25rem}.h3,h3{font-size:1.5625rem;margin:20px 0 10px}.h3,.h4,h3,h4{line-height:1.4em}.h4,h4{font-size:1.125rem;font-weight:300}.h5,h5{font-size:1.0625rem;line-height:1.4em;margin-bottom:15px}.h6,h6{font-size:.75rem;text-transform:uppercase;font-weight:500}.card-title,.card-title a,.footer-big h4,.footer-big h4 a,.footer-big h5,.footer-big h5 a,.footer-brand,.footer-brand a,.info-title,.info-title a,.media .media-heading,.media .media-heading a,.title,.title a{color:#3c4858;text-decoration:none}.card-blog .card-title{font-weight:700}h2.title{margin-bottom:2.142rem}.card-description,.description,.footer-big p{color:#999}.text-warning{color:#ff9800!important}.text-primary{color:#9c27b0!important}.text-danger{color:#f44336!important}.text-success{color:#4caf50!important}.text-info{color:#00bcd4!important}.text-rose{color:#e91e63!important}.text-gray{color:#999!important}.nav-tabs{border:0;border-radius:3px;padding:0 15px}.nav-tabs .nav-item .nav-link{position:relative;color:#fff;border:0;margin:0;border-radius:3px;line-height:24px;text-transform:uppercase;font-size:12px;padding:10px 15px;background-color:transparent;transition:background-color .3s 0s}.nav-tabs .nav-item .nav-link:hover{border:0}.nav-tabs .nav-item .nav-link,.nav-tabs .nav-item .nav-link:focus,.nav-tabs .nav-item .nav-link:hover{border:0!important;color:#fff!important;font-weight:500}.nav-tabs .nav-item.disabled .nav-link,.nav-tabs .nav-item.disabled .nav-link:hover{color:hsla(0,0%,100%,.5)}.nav-tabs .nav-item .material-icons{margin:-1px 5px 0 0}.nav-tabs .nav-item .nav-link.active{background-color:hsla(0,0%,100%,.2);transition:background-color .3s .2s}.nav-tabs .nav-link{border-bottom:.214rem solid transparent;color:#555}.nav-tabs .nav-link.active{color:#333;border-color:#9c27b0}.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover{border-color:#9c27b0}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link.disabled:focus,.nav-tabs .nav-link.disabled:hover{color:#999}.nav-tabs.header-primary .nav-link{color:#fff}.nav-tabs.header-primary .nav-link.active{color:#fff;border-color:#fff}.nav-tabs.header-primary .nav-link.active:focus,.nav-tabs.header-primary .nav-link.active:hover{border-color:#fff}.nav-tabs.header-primary .nav-link.disabled,.nav-tabs.header-primary .nav-link.disabled:focus,.nav-tabs.header-primary .nav-link.disabled:hover{color:hsla(0,0%,100%,.84)}.nav-tabs.bg-inverse .nav-link{color:#fff}.nav-tabs.bg-inverse .nav-link.active{color:#fff;border-color:#fff}.nav-tabs.bg-inverse .nav-link.active:focus,.nav-tabs.bg-inverse .nav-link.active:hover{border-color:#fff}.nav-tabs.bg-inverse .nav-link.disabled,.nav-tabs.bg-inverse .nav-link.disabled:focus,.nav-tabs.bg-inverse .nav-link.disabled:hover{color:hsla(0,0%,100%,.84)}.card-nav-tabs{margin-top:45px}.card-nav-tabs .card-header{margin-top:-30px!important}.tab-content .tab-pane .td-actions{display:-ms-flexbox;display:flex}.card .tab-content .form-check{margin-top:6px}.tooltip-arrow{display:none}.tooltip.show{opacity:1;transform:translateZ(0)}.tooltip{opacity:0;transition:opacity,transform .2s ease;transform:translate3d(0,5px,0);font-size:.875rem}.tooltip.bs-tooltip-auto[x-placement^=top] .arrow:before,.tooltip.bs-tooltip-top .arrow:before{border-top-color:#fff}.tooltip.bs-tooltip-auto[x-placement^=right] .arrow:before,.tooltip.bs-tooltip-right .arrow:before{border-right-color:#fff}.tooltip.bs-tooltip-auto[x-placement^=left] .arrow:before,.tooltip.bs-tooltip-left .arrow:before{border-left-color:#fff}.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.tooltip.bs-tooltip-bottom .arrow:before{border-bottom-color:#fff}.tooltip-inner{padding:10px 15px;min-width:130px}.popover,.tooltip-inner{line-height:1.5em;background:#fff;border:none;border-radius:3px;box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2);color:#555}.popover{padding:0;box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.popover.bottom>.arrow,.popover.left>.arrow,.popover.right>.arrow,.popover.top>.arrow{border:none}.popover.bs-popover-auto[x-placement^=bottom] .arrow:before,.popover.bs-popover-auto[x-placement^=left] .arrow:before,.popover.bs-popover-auto[x-placement^=right] .arrow:before,.popover.bs-popover-auto[x-placement^=top] .arrow:before,.popover.bs-popover-bottom .arrow:before,.popover.bs-popover-left .arrow:before,.popover.bs-popover-right .arrow:before,.popover.bs-popover-top .arrow:before{border:0}.popover-header{background-color:#fff;border:none;padding:15px 15px 5px;font-size:1.125rem;margin:0;color:#555}.popover-body{padding:10px 15px 15px;line-height:1.4;color:#555}.dropdown-menu{display:none;padding:.3125rem 0;border:0;opacity:0;transform:scale(0);transform-origin:0 0;will-change:transform,opacity;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.dropdown-menu.showing{animation-name:d;animation-duration:.3s;animation-fill-mode:forwards;animation-timing-function:cubic-bezier(.4,0,.2,1)}.dropdown-menu.show,.open>.dropdown-menu{display:block;opacity:1;transform:scale(1)}.dropdown-menu.hiding{display:block;opacity:0;transform:scale(0)}.dropdown-menu[x-placement=bottom-start]{transform-origin:0 0}.dropdown-menu[x-placement=bottom-end]{transform-origin:100% 0}.dropdown-menu[x-placement=top-start]{transform-origin:0 100%}.dropdown-menu[x-placement=top-end]{transform-origin:100% 100%}.dropdown-menu .disabled>a{color:#777}.dropdown-menu .disabled>a:focus,.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;color:#777}.dropdown-menu.dropdown-with-icons .dropdown-item{padding:.75rem 1.25rem .75rem .75rem}.dropdown-menu.dropdown-with-icons .dropdown-item .material-icons{vertical-align:middle;font-size:24px;position:relative;margin-top:-4px;top:1px;margin-right:12px;opacity:.5}.dropdown-menu .dropdown-item,.dropdown-menu li>a{position:relative;width:auto;display:flex;flex-flow:nowrap;align-items:center;color:#333;font-weight:400;text-decoration:none;font-size:.8125rem;border-radius:.125rem;margin:0 .3125rem;transition:all .15s linear;min-width:7rem;padding:.625rem 1.25rem;overflow:hidden;line-height:1.428571;text-overflow:ellipsis;word-wrap:break-word}@media (min-width:768px){.dropdown-menu .dropdown-item,.dropdown-menu li>a{padding-right:1.5rem;padding-left:1.5rem}}.dropdown-menu .dropdown-item:focus,.dropdown-menu .dropdown-item:hover,.dropdown-menu a:active,.dropdown-menu a:focus,.dropdown-menu a:hover{box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(156,39,176,.4);background-color:#9c27b0;color:#fff}.btn-group.bootstrap-select.open .caret,.dropdown.open .caret,.dropup.open .caret,a[aria-expanded=true] .caret,a[data-toggle=collapse][aria-expanded=true] .caret{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.dropdown-toggle.bmd-btn-fab:after,.dropdown-toggle.bmd-btn-icon:after{display:none}.dropdown-toggle.bmd-btn-fab~.dropdown-menu.dropdown-menu-top-left,.dropdown-toggle.bmd-btn-fab~.dropdown-menu.dropdown-menu-top-right,.dropdown-toggle.bmd-btn-icon~.dropdown-menu.dropdown-menu-top-left,.dropdown-toggle.bmd-btn-icon~.dropdown-menu.dropdown-menu-top-right{bottom:2rem}.dropdown-toggle:after{will-change:transform;transition:transform .15s linear}.dropdown-toggle.bmd-btn-fab-sm~.dropdown-menu.dropdown-menu-top-left,.dropdown-toggle.bmd-btn-fab-sm~.dropdown-menu.dropdown-menu-top-right{bottom:2.5rem}.dropdown-toggle.bmd-btn-icon~.dropdown-menu{margin:0}.show>.dropdown-toggle:not(.dropdown-item):after{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.dropdown-header{font-size:.75rem;padding-top:.625rem;padding-bottom:.625rem;text-transform:none;color:#777;line-height:1.428571;font-weight:inherit}@keyframes d{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.dropdown-menu.bootstrap-datetimepicker-widget{opacity:0;transform:scale(0);transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);transform-origin:0 0;will-change:transform,opacity;top:0}.dropdown-menu.bootstrap-datetimepicker-widget.top{transform-origin:0 100%}.dropdown-menu.bootstrap-datetimepicker-widget.open{opacity:1;transform:scale(1);top:0}.togglebutton{vertical-align:middle}.togglebutton,.togglebutton .toggle,.togglebutton input,.togglebutton label{user-select:none}.togglebutton label{cursor:pointer}.form-group.is-focused .togglebutton label,.togglebutton label{color:rgba(0,0,0,.26)}.form-group.is-focused .togglebutton label:focus,.form-group.is-focused .togglebutton label:hover{color:rgba(0,0,0,.54)}fieldset[disabled] .form-group.is-focused .togglebutton label{color:rgba(0,0,0,.26)}.togglebutton label input[type=checkbox]{opacity:0;width:0;height:0}.togglebutton label .toggle{text-align:left;margin-left:5px}.togglebutton label .toggle,.togglebutton label input[type=checkbox][disabled]+.toggle{content:"";display:inline-block;width:30px;height:15px;background-color:rgba(80,80,80,.7);border-radius:15px;margin-right:15px;transition:background .3s ease;vertical-align:middle}.togglebutton label .toggle:after{content:"";display:inline-block;width:20px;height:20px;background-color:#fff;border-radius:20px;position:relative;box-shadow:0 1px 3px 1px rgba(0,0,0,.4);left:-5px;top:-2.5px;border:1px solid rgba(0,0,0,.54);transition:left .3s ease,background .3s ease,box-shadow .1s ease}.togglebutton label input[type=checkbox][disabled]+.toggle:after,.togglebutton label input[type=checkbox][disabled]:checked+.toggle:after{background-color:#bdbdbd}.togglebutton label input[type=checkbox]+.toggle:active:after,.togglebutton label input[type=checkbox][disabled]+.toggle:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(0,0,0,.1)}.togglebutton label input[type=checkbox]:checked+.toggle:after{left:15px}.togglebutton label input[type=checkbox]:checked+.toggle{background-color:rgba(156,39,176,.7)}.togglebutton label input[type=checkbox]:checked+.toggle:after{border-color:#9c27b0}.togglebutton label input[type=checkbox]:checked+.toggle:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(156,39,176,.1)}.ripple{position:relative}.ripple-container{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;overflow:hidden;pointer-events:none;border-radius:inherit}.ripple-container .ripple-decorator{position:absolute;width:20px;height:20px;margin-top:-10px;margin-left:-10px;pointer-events:none;background-color:rgba(0,0,0,.05);border-radius:100%;opacity:0;transform:scale(1);transform-origin:50%}.ripple-container .ripple-decorator.ripple-on{opacity:.1;transition:opacity .15s ease-in 0s,transform .5s cubic-bezier(.4,0,.2,1) .1s}.ripple-container .ripple-decorator.ripple-out{opacity:0;transition:opacity .1s linear 0s!important}.footer{padding:.9375rem 0;text-align:center;display:flex}.footer ul{margin-bottom:0;padding:0;list-style:none}.footer ul li{display:inline-block}.footer ul li a{color:inherit;padding:.9375rem;font-weight:500;font-size:12px;text-transform:uppercase;border-radius:3px;position:relative;display:block}.footer ul li a,.footer ul li a:hover{text-decoration:none}.footer ul li .btn{margin:0}.footer ul.links-horizontal:first-child a{padding-left:0}.footer ul.links-horizontal:last-child a{padding-right:0}.footer ul.links-vertical li{display:block;margin-left:-5px;margin-right:-5px}.footer ul.links-vertical li a{padding:5px}.footer .social-buttons .btn,.footer .social-buttons a{margin-top:5px;margin-bottom:5px}.footer .footer-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px;margin-left:-15px}.footer .footer-brand:focus,.footer .footer-brand:hover{color:#3c4858}.footer .copyright{padding:15px 0}.footer .copyright .material-icons{font-size:18px;position:relative;top:3px}.footer .pull-center{display:inline-block;float:none}.off-canvas-sidebar .footer{position:absolute;bottom:0;width:100%}@media screen and (min-width:768px){.footer .copyright{padding-right:15px}}.wrapper{position:relative;top:0;height:100vh}.sidebar{position:fixed;top:0;bottom:0;left:0;z-index:2;width:260px;background:#fff;box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.sidebar .caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.sidebar[data-background-color=black]{background-color:#191919}.sidebar .sidebar-wrapper{position:relative;height:calc(100vh - 75px);overflow:auto;width:260px;z-index:4;padding-bottom:30px}.sidebar .sidebar-wrapper .dropdown .dropdown-backdrop{display:none!important}.sidebar .sidebar-wrapper .navbar-form{border:none;box-shadow:none}.sidebar .sidebar-wrapper .navbar-form .input-group{font-size:1.7em;height:36px;width:78%;padding-left:17px}.sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a span,.sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a span{display:inline-block}.sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a .sidebar-normal,.sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a .sidebar-normal{margin:0;position:relative;transform:translateX(0);opacity:1;white-space:nowrap;display:block}.sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a .sidebar-mini,.sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a .sidebar-mini{text-transform:uppercase;width:30px;margin-right:15px;text-align:center;letter-spacing:1px;position:relative;float:left;display:inherit}.sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a i,.sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a i{font-size:17px;line-height:20px;width:26px}.sidebar .nav{margin-top:20px;display:block}.sidebar .nav .caret{margin-top:13px;position:absolute;right:6px}.sidebar .nav li>a:focus,.sidebar .nav li>a:hover{background-color:transparent;outline:none}.sidebar .nav li:first-child>a{margin:0 15px}.sidebar .nav li.active>[data-toggle=collapse],.sidebar .nav li .dropdown-menu a:focus,.sidebar .nav li .dropdown-menu a:hover,.sidebar .nav li:hover>a{background-color:hsla(0,0%,78%,.2);color:#3c4858;box-shadow:none}.sidebar .nav li.active>[data-toggle=collapse] i{color:#a9afbb}.sidebar .nav li.active>a,.sidebar .nav li.active>a i{color:#fff}.sidebar .nav li.separator{margin:15px 0}.sidebar .nav li.separator:after{width:calc(100% - 30px);content:"";position:absolute;height:1px;left:15px;background-color:hsla(0,0%,71%,.3)}.sidebar .nav li.separator+li{margin-top:31px}.sidebar .nav p{margin:0;line-height:30px;font-size:14px;position:relative;display:block;height:auto;white-space:nowrap}.sidebar .nav i{font-size:24px;float:left;margin-right:15px;line-height:30px;width:30px;text-align:center;color:#a9afbb}.sidebar .nav li .dropdown-menu a,.sidebar .nav li a{margin:10px 15px 0;border-radius:3px;color:#3c4858;padding-left:10px;padding-right:10px;text-transform:capitalize;font-size:13px;padding:10px 15px}.sidebar .sidebar-background{position:absolute;z-index:1;height:100%;width:100%;display:block;top:0;left:0;background-size:cover;background-position:50%}.sidebar .sidebar-background:after{position:absolute;z-index:3;width:100%;height:100%;content:"";display:block;background:#fff;opacity:.93}.sidebar .logo{padding:15px 0;margin:0;display:block;position:relative;z-index:4}.sidebar .logo:after{content:"";position:absolute;bottom:0;right:15px;height:1px;width:calc(100% - 30px);background-color:hsla(0,0%,71%,.3)}.sidebar .logo p{float:left;font-size:20px;margin:10px;color:#fff;line-height:20px}.sidebar .logo .simple-text{text-transform:uppercase;padding:5px 0;display:inline-block;font-size:18px;color:#3c4858;white-space:nowrap;font-weight:400;line-height:30px;overflow:hidden;text-align:center;display:block}.sidebar .logo-tim{border-radius:50%;border:1px solid #333;display:block;height:61px;width:61px;float:left;overflow:hidden}.sidebar .logo-tim img{width:60px;height:60px}.sidebar[data-background-color=black] .nav .nav-item .nav-link{color:#fff}.sidebar[data-background-color=black] .nav .nav-item i{color:hsla(0,0%,100%,.8)}.sidebar[data-background-color=black] .nav .nav-item.active [data-toggle=collapse],.sidebar[data-background-color=black] .nav .nav-item:hover [data-toggle=collapse]{color:#fff}.sidebar[data-background-color=black] .nav .nav-item.active [data-toggle=collapse] i,.sidebar[data-background-color=black] .nav .nav-item:hover [data-toggle=collapse] i{color:hsla(0,0%,100%,.8)}.sidebar[data-background-color=black] .simple-text,.sidebar[data-background-color=black] .user a{color:#fff}.sidebar[data-background-color=black] .sidebar-background:after{background:#000;opacity:.8}.sidebar[data-background-color=black] .nav li .dropdown-menu .dropdown-item{color:#fff}.sidebar[data-color=purple] li.active>a{background-color:#9c27b0;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(156,39,176,.4)}.sidebar[data-color=azure] li.active>a{background-color:#00bcd4;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(0,188,212,.4)}.sidebar[data-color=green] li.active>a{background-color:#4caf50;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(76,175,80,.4)}.sidebar[data-color=orange] li.active>a{background-color:#ff9800;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(255,152,0,.4)}.sidebar[data-color=danger] li.active>a{background-color:#f44336;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(244,67,54,.4)}.sidebar[data-color=rose] li.active>a{background-color:#e91e63;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(233,30,99,.4)}.sidebar[data-color=white] li.active>a{background-color:#fff;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px hsla(0,0%,100%,.4)}.sidebar[data-color=white] .nav .nav-item.active>a:not([data-toggle=collapse]){color:#3c4858;opacity:1;box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(60,72,88,.4)}.sidebar[data-color=white] .nav .nav-item.active>a:not([data-toggle=collapse]) i{color:rgba(60,72,88,.8)}.sidebar[data-background-color=red] .nav .nav-item .nav-link{color:#fff}.sidebar[data-background-color=red] .nav .nav-item i{color:hsla(0,0%,100%,.8)}.sidebar[data-background-color=red] .nav .nav-item.active [data-toggle=collapse],.sidebar[data-background-color=red] .nav .nav-item:hover [data-toggle=collapse]{color:#fff}.sidebar[data-background-color=red] .nav .nav-item.active [data-toggle=collapse] i,.sidebar[data-background-color=red] .nav .nav-item:hover [data-toggle=collapse] i{color:hsla(0,0%,100%,.8)}.sidebar[data-background-color=red] .simple-text,.sidebar[data-background-color=red] .user a{color:#fff}.sidebar[data-background-color=red] .sidebar-background:after{background:#f44336;opacity:.8}.sidebar[data-background-color=red] .logo:after,.sidebar[data-background-color=red] .nav li.separator:after,.sidebar[data-background-color=red] .user:after{background-color:hsla(0,0%,100%,.3)}.sidebar[data-background-color=red] .nav li.active>[data-toggle=collapse],.sidebar[data-background-color=red] .nav li:hover:not(.active)>a{background-color:hsla(0,0%,100%,.1)}.sidebar.has-image:after,.sidebar[data-image]:after{opacity:.77}.off-canvas-sidebar .navbar-collapse .nav>li>a,.off-canvas-sidebar .navbar-collapse .nav>li>a:hover{color:#fff;margin:0 15px}.off-canvas-sidebar .navbar-collapse .nav>li>a:focus,.off-canvas-sidebar .navbar-collapse .nav>li>a:hover{background:hsla(0,0%,78%,.2)}.main-panel{position:relative;float:right;width:calc(100% - 260px);transition:.33s,cubic-bezier(.685,.0473,.346,1)}.main-panel>.content{margin-top:70px;padding:30px 15px;min-height:calc(100vh - 123px)}.main-panel>.footer{border-top:1px solid #e7e7e7}.main-panel>.navbar{margin-bottom:0}.main-panel .header{margin-bottom:30px}.main-panel .header .title{margin-top:10px;margin-bottom:10px}.perfect-scrollbar-on .main-panel,.perfect-scrollbar-on .sidebar{height:100%;max-height:100%}.main-panel,.sidebar,.sidebar-wrapper{transition-property:top,bottom,width;transition-duration:.2s,.2s,.35s;transition-timing-function:linear,linear,ease;-webkit-overflow-scrolling:touch}.visible-on-sidebar-regular{display:inline-block!important}.visible-on-sidebar-mini{display:none!important}@media (min-width:991px){.sidebar-mini .visible-on-sidebar-regular{display:none!important}.sidebar-mini .visible-on-sidebar-mini{display:inline-block!important}.sidebar-mini .sidebar,.sidebar-mini .sidebar .sidebar-wrapper{width:80px}.sidebar-mini .main-panel{width:calc(100% - 80px)}.sidebar-mini .sidebar{display:block;font-weight:200;z-index:9999}.sidebar-mini .sidebar .logo a.logo-normal,.sidebar-mini .sidebar .sidebar-wrapper .user .user-info>a>span,.sidebar-mini .sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a .sidebar-normal,.sidebar-mini .sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a .sidebar-normal,.sidebar-mini .sidebar .sidebar-wrapper>.nav li>a p{opacity:0;transform:translate3d(-25px,0,0)}.sidebar-mini .sidebar:hover{width:260px}.sidebar-mini .sidebar:hover .logo a.logo-normal{opacity:1;transform:translateZ(0)}.sidebar-mini .sidebar:hover .sidebar-wrapper{width:260px}.sidebar-mini .sidebar:hover .sidebar-wrapper .user .user-info>a>span,.sidebar-mini .sidebar:hover .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a .sidebar-normal,.sidebar-mini .sidebar:hover .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a .sidebar-normal,.sidebar-mini .sidebar:hover .sidebar-wrapper>.nav li>a p{transform:translateZ(0);opacity:1}.sidebar .nav .nav-item.active-pro{position:absolute;width:100%;bottom:13px;left:0}}.fixed-plugin .dropdown .dropdown-menu{border-radius:10px}.fixed-plugin .dropdown .dropdown-menu li.adjustments-line{border-bottom:1px solid #ddd}.fixed-plugin .dropdown .dropdown-menu li{padding:5px 2px!important}.fixed-plugin .dropdown .dropdown-menu .adjustments-line .bootstrap-switch{position:absolute;right:10px!important}.fixed-plugin .dropdown .dropdown-menu .adjustments-line label{margin-bottom:.1rem!important}.fixed-plugin .badge,.fixed-plugin li>a{transition:all .34s;-webkit-transition:all .34s;-moz-transition:all .34s}.fixed-plugin{position:fixed;top:115px;right:0;width:64px;background:rgba(0,0,0,.3);z-index:3;border-radius:8px 0 0 8px;text-align:center}.fixed-plugin .fa-cog{color:#fff;padding:10px;border-radius:0 0 6px 6px;width:auto}.fixed-plugin .dropdown-menu{right:80px;left:auto;width:290px;border-radius:.1875rem;padding:0 10px}.fixed-plugin .dropdown-menu:after,.fixed-plugin .dropdown-menu:before{right:10px;margin-left:auto;left:auto}.fixed-plugin .fa-circle-thin{color:#fff}.fixed-plugin .active .fa-circle-thin{color:#0bf}.fixed-plugin .dropdown-menu>.active>a,.fixed-plugin .dropdown-menu>.active>a:focus,.fixed-plugin .dropdown-menu>.active>a:hover{color:#777;text-align:center}.fixed-plugin img{border-radius:0;width:100%;height:100px;margin:0 auto}.fixed-plugin .dropdown-menu li>a:focus,.fixed-plugin .dropdown-menu li>a:hover{box-shadow:none}.fixed-plugin .badge{border:3px solid #fff;border-radius:50%;cursor:pointer;display:inline-block;height:23px;margin-right:5px;position:relative;width:23px;padding:8px}.fixed-plugin .badge.active,.fixed-plugin .badge:hover{border-color:#0bf}.fixed-plugin .badge-black{background-color:#000}.fixed-plugin .badge-azure{background-color:#2ca8ff}.fixed-plugin .badge-green{background-color:#18ce0f}.fixed-plugin .badge-orange{background-color:#f96332}.fixed-plugin .badge-yellow{background-color:#ffb236}.fixed-plugin .badge-danger{background-color:#f44336}.fixed-plugin .badge-purple{background-color:#9368e9}.fixed-plugin .badge-white{background-color:hsla(0,0%,78%,.2)}.fixed-plugin .badge-rose{background-color:#e91e63}.fixed-plugin h5{font-size:14px;margin:10px}.fixed-plugin .dropdown-menu li{display:block;padding:18px 2px;width:25%;float:left}.fixed-plugin li.adjustments-line,.fixed-plugin li.button-container,.fixed-plugin li.header-title{width:100%;height:50px;min-height:inherit}.fixed-plugin li.button-container{height:auto}.fixed-plugin li.button-container div{margin-bottom:5px}.fixed-plugin .btn{position:relative;padding:12px 30px;margin:.3125rem 1px;font-size:.75rem;border-radius:.2rem;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1);will-change:box-shadow,transform}.fixed-plugin .btn.btn-primary{color:#fff;background-color:#9c27b0;border-color:#9c27b0;box-shadow:0 2px 2px 0 rgba(156,39,176,.14),0 3px 1px -2px rgba(156,39,176,.2),0 1px 5px 0 rgba(156,39,176,.12)}.fixed-plugin .btn.btn-primary.focus,.fixed-plugin .btn.btn-primary:focus,.fixed-plugin .btn.btn-primary:hover{color:#fff;background-color:#9124a3;border-color:#701c7e}.fixed-plugin .btn.btn-primary.active,.fixed-plugin .btn.btn-primary:active,.open>.fixed-plugin .btn.btn-primary.dropdown-toggle,.show>.fixed-plugin .btn.btn-primary.dropdown-toggle{color:#fff;background-color:#9124a3;border-color:#701c7e;box-shadow:0 2px 2px 0 rgba(156,39,176,.14),0 3px 1px -2px rgba(156,39,176,.2),0 1px 5px 0 rgba(156,39,176,.12)}.fixed-plugin .btn.btn-primary.active.focus,.fixed-plugin .btn.btn-primary.active:focus,.fixed-plugin .btn.btn-primary.active:hover,.fixed-plugin .btn.btn-primary:active.focus,.fixed-plugin .btn.btn-primary:active:focus,.fixed-plugin .btn.btn-primary:active:hover,.open>.fixed-plugin .btn.btn-primary.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-primary.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-primary.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-primary.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-primary.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#9124a3;border-color:#3f1048}.open>.fixed-plugin .btn.btn-primary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#9c27b0}.open>.fixed-plugin .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover{background-color:#9124a3}.fixed-plugin .btn.btn-primary.disabled.focus,.fixed-plugin .btn.btn-primary.disabled:focus,.fixed-plugin .btn.btn-primary.disabled:hover,.fixed-plugin .btn.btn-primary:disabled.focus,.fixed-plugin .btn.btn-primary:disabled:focus,.fixed-plugin .btn.btn-primary:disabled:hover{background-color:#9c27b0;border-color:#9c27b0}.fixed-plugin .btn.btn-primary:active,.fixed-plugin .btn.btn-primary:focus,.fixed-plugin .btn.btn-primary:hover{box-shadow:0 14px 26px -12px rgba(156,39,176,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(156,39,176,.2)}.fixed-plugin .btn.btn-primary.btn-link{box-shadow:none}.fixed-plugin .btn.btn-primary.btn-link,.fixed-plugin .btn.btn-primary.btn-link:active,.fixed-plugin .btn.btn-primary.btn-link:focus,.fixed-plugin .btn.btn-primary.btn-link:hover{background-color:transparent;color:#9c27b0}.fixed-plugin .btn.btn-secondary{color:#333;background-color:#fafafa;border-color:#ccc;box-shadow:0 2px 2px 0 hsla(0,0%,98%,.14),0 3px 1px -2px hsla(0,0%,98%,.2),0 1px 5px 0 hsla(0,0%,98%,.12)}.fixed-plugin .btn.btn-secondary.focus,.fixed-plugin .btn.btn-secondary:focus,.fixed-plugin .btn.btn-secondary:hover{color:#333;background-color:#f2f2f2;border-color:#adadad}.fixed-plugin .btn.btn-secondary.active,.fixed-plugin .btn.btn-secondary:active,.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle,.show>.fixed-plugin .btn.btn-secondary.dropdown-toggle{color:#333;background-color:#f2f2f2;border-color:#adadad;box-shadow:0 2px 2px 0 hsla(0,0%,98%,.14),0 3px 1px -2px hsla(0,0%,98%,.2),0 1px 5px 0 hsla(0,0%,98%,.12)}.fixed-plugin .btn.btn-secondary.active.focus,.fixed-plugin .btn.btn-secondary.active:focus,.fixed-plugin .btn.btn-secondary.active:hover,.fixed-plugin .btn.btn-secondary:active.focus,.fixed-plugin .btn.btn-secondary:active:focus,.fixed-plugin .btn.btn-secondary:active:hover,.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-secondary.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-secondary.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-secondary.dropdown-toggle:hover{color:#333;background-color:#f2f2f2;border-color:#8c8c8c}.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#fafafa}.open>.fixed-plugin .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover{background-color:#f2f2f2}.fixed-plugin .btn.btn-secondary.disabled.focus,.fixed-plugin .btn.btn-secondary.disabled:focus,.fixed-plugin .btn.btn-secondary.disabled:hover,.fixed-plugin .btn.btn-secondary:disabled.focus,.fixed-plugin .btn.btn-secondary:disabled:focus,.fixed-plugin .btn.btn-secondary:disabled:hover{background-color:#fafafa;border-color:#ccc}.fixed-plugin .btn.btn-secondary:active,.fixed-plugin .btn.btn-secondary:focus,.fixed-plugin .btn.btn-secondary:hover{box-shadow:0 14px 26px -12px hsla(0,0%,98%,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px hsla(0,0%,98%,.2)}.fixed-plugin .btn.btn-secondary.btn-link{box-shadow:none}.fixed-plugin .btn.btn-secondary.btn-link,.fixed-plugin .btn.btn-secondary.btn-link:active,.fixed-plugin .btn.btn-secondary.btn-link:focus,.fixed-plugin .btn.btn-secondary.btn-link:hover{background-color:transparent;color:#fafafa}.fixed-plugin .btn.btn-info{color:#fff;background-color:#00bcd4;border-color:#00bcd4;box-shadow:0 2px 2px 0 rgba(0,188,212,.14),0 3px 1px -2px rgba(0,188,212,.2),0 1px 5px 0 rgba(0,188,212,.12)}.fixed-plugin .btn.btn-info.focus,.fixed-plugin .btn.btn-info:focus,.fixed-plugin .btn.btn-info:hover{color:#fff;background-color:#00aec5;border-color:#008697}.fixed-plugin .btn.btn-info.active,.fixed-plugin .btn.btn-info:active,.open>.fixed-plugin .btn.btn-info.dropdown-toggle,.show>.fixed-plugin .btn.btn-info.dropdown-toggle{color:#fff;background-color:#00aec5;border-color:#008697;box-shadow:0 2px 2px 0 rgba(0,188,212,.14),0 3px 1px -2px rgba(0,188,212,.2),0 1px 5px 0 rgba(0,188,212,.12)}.fixed-plugin .btn.btn-info.active.focus,.fixed-plugin .btn.btn-info.active:focus,.fixed-plugin .btn.btn-info.active:hover,.fixed-plugin .btn.btn-info:active.focus,.fixed-plugin .btn.btn-info:active:focus,.fixed-plugin .btn.btn-info:active:hover,.open>.fixed-plugin .btn.btn-info.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-info.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-info.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-info.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-info.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-info.dropdown-toggle:hover{color:#fff;background-color:#00aec5;border-color:#004b55}.open>.fixed-plugin .btn.btn-info.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#00bcd4}.open>.fixed-plugin .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover{background-color:#00aec5}.fixed-plugin .btn.btn-info.disabled.focus,.fixed-plugin .btn.btn-info.disabled:focus,.fixed-plugin .btn.btn-info.disabled:hover,.fixed-plugin .btn.btn-info:disabled.focus,.fixed-plugin .btn.btn-info:disabled:focus,.fixed-plugin .btn.btn-info:disabled:hover{background-color:#00bcd4;border-color:#00bcd4}.fixed-plugin .btn.btn-info:active,.fixed-plugin .btn.btn-info:focus,.fixed-plugin .btn.btn-info:hover{box-shadow:0 14px 26px -12px rgba(0,188,212,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,188,212,.2)}.fixed-plugin .btn.btn-info.btn-link{box-shadow:none}.fixed-plugin .btn.btn-info.btn-link,.fixed-plugin .btn.btn-info.btn-link:active,.fixed-plugin .btn.btn-info.btn-link:focus,.fixed-plugin .btn.btn-info.btn-link:hover{background-color:transparent;color:#00bcd4}.fixed-plugin .btn.btn-success{color:#fff;background-color:#4caf50;border-color:#4caf50;box-shadow:0 2px 2px 0 rgba(76,175,80,.14),0 3px 1px -2px rgba(76,175,80,.2),0 1px 5px 0 rgba(76,175,80,.12)}.fixed-plugin .btn.btn-success.focus,.fixed-plugin .btn.btn-success:focus,.fixed-plugin .btn.btn-success:hover{color:#fff;background-color:#47a44b;border-color:#39843c}.fixed-plugin .btn.btn-success.active,.fixed-plugin .btn.btn-success:active,.open>.fixed-plugin .btn.btn-success.dropdown-toggle,.show>.fixed-plugin .btn.btn-success.dropdown-toggle{color:#fff;background-color:#47a44b;border-color:#39843c;box-shadow:0 2px 2px 0 rgba(76,175,80,.14),0 3px 1px -2px rgba(76,175,80,.2),0 1px 5px 0 rgba(76,175,80,.12)}.fixed-plugin .btn.btn-success.active.focus,.fixed-plugin .btn.btn-success.active:focus,.fixed-plugin .btn.btn-success.active:hover,.fixed-plugin .btn.btn-success:active.focus,.fixed-plugin .btn.btn-success:active:focus,.fixed-plugin .btn.btn-success:active:hover,.open>.fixed-plugin .btn.btn-success.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-success.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-success.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-success.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-success.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-success.dropdown-toggle:hover{color:#fff;background-color:#47a44b;border-color:#255627}.open>.fixed-plugin .btn.btn-success.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#4caf50}.open>.fixed-plugin .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover{background-color:#47a44b}.fixed-plugin .btn.btn-success.disabled.focus,.fixed-plugin .btn.btn-success.disabled:focus,.fixed-plugin .btn.btn-success.disabled:hover,.fixed-plugin .btn.btn-success:disabled.focus,.fixed-plugin .btn.btn-success:disabled:focus,.fixed-plugin .btn.btn-success:disabled:hover{background-color:#4caf50;border-color:#4caf50}.fixed-plugin .btn.btn-success:active,.fixed-plugin .btn.btn-success:focus,.fixed-plugin .btn.btn-success:hover{box-shadow:0 14px 26px -12px rgba(76,175,80,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(76,175,80,.2)}.fixed-plugin .btn.btn-success.btn-link{box-shadow:none}.fixed-plugin .btn.btn-success.btn-link,.fixed-plugin .btn.btn-success.btn-link:active,.fixed-plugin .btn.btn-success.btn-link:focus,.fixed-plugin .btn.btn-success.btn-link:hover{background-color:transparent;color:#4caf50}.fixed-plugin .btn.btn-warning{color:#fff;background-color:#ff9800;border-color:#ff9800;box-shadow:0 2px 2px 0 rgba(255,152,0,.14),0 3px 1px -2px rgba(255,152,0,.2),0 1px 5px 0 rgba(255,152,0,.12)}.fixed-plugin .btn.btn-warning.focus,.fixed-plugin .btn.btn-warning:focus,.fixed-plugin .btn.btn-warning:hover{color:#fff;background-color:#f08f00;border-color:#c27400}.fixed-plugin .btn.btn-warning.active,.fixed-plugin .btn.btn-warning:active,.open>.fixed-plugin .btn.btn-warning.dropdown-toggle,.show>.fixed-plugin .btn.btn-warning.dropdown-toggle{color:#fff;background-color:#f08f00;border-color:#c27400;box-shadow:0 2px 2px 0 rgba(255,152,0,.14),0 3px 1px -2px rgba(255,152,0,.2),0 1px 5px 0 rgba(255,152,0,.12)}.fixed-plugin .btn.btn-warning.active.focus,.fixed-plugin .btn.btn-warning.active:focus,.fixed-plugin .btn.btn-warning.active:hover,.fixed-plugin .btn.btn-warning:active.focus,.fixed-plugin .btn.btn-warning:active:focus,.fixed-plugin .btn.btn-warning:active:hover,.open>.fixed-plugin .btn.btn-warning.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-warning.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-warning.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-warning.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-warning.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#f08f00;border-color:#804c00}.open>.fixed-plugin .btn.btn-warning.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#ff9800}.open>.fixed-plugin .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover{background-color:#f08f00}.fixed-plugin .btn.btn-warning.disabled.focus,.fixed-plugin .btn.btn-warning.disabled:focus,.fixed-plugin .btn.btn-warning.disabled:hover,.fixed-plugin .btn.btn-warning:disabled.focus,.fixed-plugin .btn.btn-warning:disabled:focus,.fixed-plugin .btn.btn-warning:disabled:hover{background-color:#ff9800;border-color:#ff9800}.fixed-plugin .btn.btn-warning:active,.fixed-plugin .btn.btn-warning:focus,.fixed-plugin .btn.btn-warning:hover{box-shadow:0 14px 26px -12px rgba(255,152,0,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(255,152,0,.2)}.fixed-plugin .btn.btn-warning.btn-link{box-shadow:none}.fixed-plugin .btn.btn-warning.btn-link,.fixed-plugin .btn.btn-warning.btn-link:active,.fixed-plugin .btn.btn-warning.btn-link:focus,.fixed-plugin .btn.btn-warning.btn-link:hover{background-color:transparent;color:#ff9800}.fixed-plugin .btn.btn-danger{color:#fff;background-color:#f44336;border-color:#f44336;box-shadow:0 2px 2px 0 rgba(244,67,54,.14),0 3px 1px -2px rgba(244,67,54,.2),0 1px 5px 0 rgba(244,67,54,.12)}.fixed-plugin .btn.btn-danger.focus,.fixed-plugin .btn.btn-danger:focus,.fixed-plugin .btn.btn-danger:hover{color:#fff;background-color:#f33527;border-color:#e11b0c}.fixed-plugin .btn.btn-danger.active,.fixed-plugin .btn.btn-danger:active,.open>.fixed-plugin .btn.btn-danger.dropdown-toggle,.show>.fixed-plugin .btn.btn-danger.dropdown-toggle{color:#fff;background-color:#f33527;border-color:#e11b0c;box-shadow:0 2px 2px 0 rgba(244,67,54,.14),0 3px 1px -2px rgba(244,67,54,.2),0 1px 5px 0 rgba(244,67,54,.12)}.fixed-plugin .btn.btn-danger.active.focus,.fixed-plugin .btn.btn-danger.active:focus,.fixed-plugin .btn.btn-danger.active:hover,.fixed-plugin .btn.btn-danger:active.focus,.fixed-plugin .btn.btn-danger:active:focus,.fixed-plugin .btn.btn-danger:active:hover,.open>.fixed-plugin .btn.btn-danger.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-danger.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-danger.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-danger.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-danger.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#f33527;border-color:#a21309}.open>.fixed-plugin .btn.btn-danger.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#f44336}.open>.fixed-plugin .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover{background-color:#f33527}.fixed-plugin .btn.btn-danger.disabled.focus,.fixed-plugin .btn.btn-danger.disabled:focus,.fixed-plugin .btn.btn-danger.disabled:hover,.fixed-plugin .btn.btn-danger:disabled.focus,.fixed-plugin .btn.btn-danger:disabled:focus,.fixed-plugin .btn.btn-danger:disabled:hover{background-color:#f44336;border-color:#f44336}.fixed-plugin .btn.btn-danger:active,.fixed-plugin .btn.btn-danger:focus,.fixed-plugin .btn.btn-danger:hover{box-shadow:0 14px 26px -12px rgba(244,67,54,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(244,67,54,.2)}.fixed-plugin .btn.btn-danger.btn-link{box-shadow:none}.fixed-plugin .btn.btn-danger.btn-link,.fixed-plugin .btn.btn-danger.btn-link:active,.fixed-plugin .btn.btn-danger.btn-link:focus,.fixed-plugin .btn.btn-danger.btn-link:hover{background-color:transparent;color:#f44336}.fixed-plugin .btn.btn-rose{color:#fff;background-color:#e91e63;border-color:#e91e63;box-shadow:0 2px 2px 0 rgba(233,30,99,.14),0 3px 1px -2px rgba(233,30,99,.2),0 1px 5px 0 rgba(233,30,99,.12)}.fixed-plugin .btn.btn-rose.focus,.fixed-plugin .btn.btn-rose:focus,.fixed-plugin .btn.btn-rose:hover{color:#fff;background-color:#ea2c6d;border-color:#b8124a}.fixed-plugin .btn.btn-rose.active,.fixed-plugin .btn.btn-rose:active,.open>.fixed-plugin .btn.btn-rose.dropdown-toggle,.show>.fixed-plugin .btn.btn-rose.dropdown-toggle{color:#fff;background-color:#ea2c6d;border-color:#b8124a;box-shadow:0 2px 2px 0 rgba(233,30,99,.14),0 3px 1px -2px rgba(233,30,99,.2),0 1px 5px 0 rgba(233,30,99,.12)}.fixed-plugin .btn.btn-rose.active.focus,.fixed-plugin .btn.btn-rose.active:focus,.fixed-plugin .btn.btn-rose.active:hover,.fixed-plugin .btn.btn-rose:active.focus,.fixed-plugin .btn.btn-rose:active:focus,.fixed-plugin .btn.btn-rose:active:hover,.open>.fixed-plugin .btn.btn-rose.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-rose.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-rose.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-rose.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-rose.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-rose.dropdown-toggle:hover{color:#fff;background-color:#ea2c6d;border-color:#7b0c32}.open>.fixed-plugin .btn.btn-rose.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#e91e63}.open>.fixed-plugin .btn.btn-rose.dropdown-toggle.bmd-btn-icon:hover{background-color:#ea2c6d}.fixed-plugin .btn.btn-rose.disabled.focus,.fixed-plugin .btn.btn-rose.disabled:focus,.fixed-plugin .btn.btn-rose.disabled:hover,.fixed-plugin .btn.btn-rose:disabled.focus,.fixed-plugin .btn.btn-rose:disabled:focus,.fixed-plugin .btn.btn-rose:disabled:hover{background-color:#e91e63;border-color:#e91e63}.fixed-plugin .btn.btn-rose:active,.fixed-plugin .btn.btn-rose:focus,.fixed-plugin .btn.btn-rose:hover{box-shadow:0 14px 26px -12px rgba(233,30,99,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(233,30,99,.2)}.fixed-plugin .btn.btn-rose.btn-link{box-shadow:none}.fixed-plugin .btn.btn-rose.btn-link,.fixed-plugin .btn.btn-rose.btn-link:active,.fixed-plugin .btn.btn-rose.btn-link:focus,.fixed-plugin .btn.btn-rose.btn-link:hover{background-color:transparent;color:#e91e63}.fixed-plugin .btn,.fixed-plugin .btn.btn-default{color:#fff;background-color:#999;border-color:#999;box-shadow:0 2px 2px 0 hsla(0,0%,60%,.14),0 3px 1px -2px hsla(0,0%,60%,.2),0 1px 5px 0 hsla(0,0%,60%,.12)}.fixed-plugin .btn.btn-default.focus,.fixed-plugin .btn.btn-default:focus,.fixed-plugin .btn.btn-default:hover,.fixed-plugin .btn.focus,.fixed-plugin .btn:focus,.fixed-plugin .btn:hover{color:#fff;background-color:#919191;border-color:#7a7a7a}.fixed-plugin .btn.active,.fixed-plugin .btn.btn-default.active,.fixed-plugin .btn.btn-default:active,.fixed-plugin .btn:active,.open>.fixed-plugin .btn.btn-default.dropdown-toggle,.open>.fixed-plugin .btn.dropdown-toggle,.show>.fixed-plugin .btn.btn-default.dropdown-toggle,.show>.fixed-plugin .btn.dropdown-toggle{color:#fff;background-color:#919191;border-color:#7a7a7a;box-shadow:0 2px 2px 0 hsla(0,0%,60%,.14),0 3px 1px -2px hsla(0,0%,60%,.2),0 1px 5px 0 hsla(0,0%,60%,.12)}.fixed-plugin .btn.active.focus,.fixed-plugin .btn.active:focus,.fixed-plugin .btn.active:hover,.fixed-plugin .btn.btn-default.active.focus,.fixed-plugin .btn.btn-default.active:focus,.fixed-plugin .btn.btn-default.active:hover,.fixed-plugin .btn.btn-default:active.focus,.fixed-plugin .btn.btn-default:active:focus,.fixed-plugin .btn.btn-default:active:hover,.fixed-plugin .btn:active.focus,.fixed-plugin .btn:active:focus,.fixed-plugin .btn:active:hover,.open>.fixed-plugin .btn.btn-default.dropdown-toggle.focus,.open>.fixed-plugin .btn.btn-default.dropdown-toggle:focus,.open>.fixed-plugin .btn.btn-default.dropdown-toggle:hover,.open>.fixed-plugin .btn.dropdown-toggle.focus,.open>.fixed-plugin .btn.dropdown-toggle:focus,.open>.fixed-plugin .btn.dropdown-toggle:hover,.show>.fixed-plugin .btn.btn-default.dropdown-toggle.focus,.show>.fixed-plugin .btn.btn-default.dropdown-toggle:focus,.show>.fixed-plugin .btn.btn-default.dropdown-toggle:hover,.show>.fixed-plugin .btn.dropdown-toggle.focus,.show>.fixed-plugin .btn.dropdown-toggle:focus,.show>.fixed-plugin .btn.dropdown-toggle:hover{color:#fff;background-color:#919191;border-color:#595959}.open>.fixed-plugin .btn.btn-default.dropdown-toggle.bmd-btn-icon,.open>.fixed-plugin .btn.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#999}.open>.fixed-plugin .btn.btn-default.dropdown-toggle.bmd-btn-icon:hover,.open>.fixed-plugin .btn.dropdown-toggle.bmd-btn-icon:hover{background-color:#919191}.fixed-plugin .btn.btn-default.disabled.focus,.fixed-plugin .btn.btn-default.disabled:focus,.fixed-plugin .btn.btn-default.disabled:hover,.fixed-plugin .btn.btn-default:disabled.focus,.fixed-plugin .btn.btn-default:disabled:focus,.fixed-plugin .btn.btn-default:disabled:hover,.fixed-plugin .btn.disabled.focus,.fixed-plugin .btn.disabled:focus,.fixed-plugin .btn.disabled:hover,.fixed-plugin .btn:disabled.focus,.fixed-plugin .btn:disabled:focus,.fixed-plugin .btn:disabled:hover{background-color:#999;border-color:#999}.fixed-plugin .btn.btn-default:active,.fixed-plugin .btn.btn-default:focus,.fixed-plugin .btn.btn-default:hover,.fixed-plugin .btn:active,.fixed-plugin .btn:focus,.fixed-plugin .btn:hover{box-shadow:0 14px 26px -12px hsla(0,0%,60%,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px hsla(0,0%,60%,.2)}.fixed-plugin .btn.btn-default.btn-link,.fixed-plugin .btn.btn-link{background-color:transparent;color:#999;box-shadow:none}.fixed-plugin .btn.btn-default.btn-link:active,.fixed-plugin .btn.btn-default.btn-link:focus,.fixed-plugin .btn.btn-default.btn-link:hover,.fixed-plugin .btn.btn-link:active,.fixed-plugin .btn.btn-link:focus,.fixed-plugin .btn.btn-link:hover{background-color:transparent;color:#999}.fixed-plugin .btn.active.focus,.fixed-plugin .btn.active:focus,.fixed-plugin .btn.focus,.fixed-plugin .btn:active.focus,.fixed-plugin .btn:active:focus,.fixed-plugin .btn:focus{outline:0}.fixed-plugin .btn.btn-round{border-radius:30px}.fixed-plugin .button-container .btn:not(.btn-facebook):not(.btn-twitter){display:block}.fixed-plugin .button-container.github-star{margin-left:78px}.fixed-plugin #sharrreTitle{text-align:center;padding:10px 0;height:50px}.fixed-plugin li.header-title{height:30px;line-height:25px;font-size:12px;font-weight:600;text-transform:uppercase;text-align:center}.fixed-plugin .adjustments-line p{float:left;display:inline-block;margin-bottom:0;font-size:1em;color:#3c4858;padding-top:0}.fixed-plugin .adjustments-line a .badge-colors{position:relative;top:-2px}.fixed-plugin .adjustments-line .togglebutton{padding-right:7px}.fixed-plugin .adjustments-line .togglebutton .toggle{margin-right:0}.fixed-plugin .dropdown-menu>li.adjustments-line>a{padding-right:0;padding-left:0;border-radius:0;margin:0}.fixed-plugin .dropdown-menu>li>a.img-holder{font-size:16px;text-align:center;border-radius:10px;background-color:#fff;border:3px solid #fff;padding-left:0;padding-right:0;opacity:1;cursor:pointer;display:block;max-height:100px;overflow:hidden;padding:0;min-width:25%}.fixed-plugin .dropdown-menu>li>a.switch-trigger:focus,.fixed-plugin .dropdown-menu>li>a.switch-trigger:hover{background-color:transparent}.fixed-plugin .dropdown-menu>li:focus>a.img-holder,.fixed-plugin .dropdown-menu>li:hover>a.img-holder{border-color:rgba(0,187,255,.53)}.fixed-plugin .dropdown-menu>.active>a.img-holder{border-color:#0bf;background-color:#fff}.fixed-plugin .dropdown-menu>li>a img{margin-top:auto}.fixed-plugin .btn-social{width:50%;display:block;width:48%;float:left;font-weight:600}.fixed-plugin .btn-social i{margin-right:5px}.fixed-plugin .btn-social:first-child{margin-right:2%}.fixed-plugin .adjustments-line a,.fixed-plugin .adjustments-line a:focus,.fixed-plugin .adjustments-line a:hover{color:transparent}.fixed-plugin .dropdown .dropdown-menu{top:-40px!important;opacity:0;left:-303px!important;transform-origin:100% 0}.fixed-plugin .dropdown.show .dropdown-menu{opacity:1;transform:scale(1)}.fixed-plugin .dropdown-menu:after,.fixed-plugin .dropdown-menu:before{content:"";display:inline-block;position:absolute;top:65px;width:16px;transform:translateY(-50%);-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%)}.fixed-plugin .dropdown-menu:before{border-bottom:16px solid transparent;border-left:16px solid rgba(0,0,0,.2);border-top:16px solid transparent;right:-16px}.fixed-plugin .dropdown-menu:after{border-bottom:16px solid transparent;border-left:16px solid #fff;border-top:16px solid transparent;right:-15px}.wrapper-full-page~.fixed-plugin .dropdown.open .dropdown-menu{transform:translateY(-17%)}.wrapper-full-page~.fixed-plugin .dropdown .dropdown-menu{transform:translateY(-19%)}.table>thead>tr>th{border-bottom-width:1px;font-size:1.0625rem;font-weight:300}.table .form-check{margin-top:0}.table .form-check .form-check-sign{top:-13px;left:0;padding-right:0}.table .checkbox,.table .radio{margin-top:0;margin-bottom:0;padding:0;width:15px}.table .checkbox .icons,.table .radio .icons{position:relative}.table .flag img{max-width:18px;margin-top:-2px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:12px 8px;vertical-align:middle;border-color:#ddd}.table thead tr th{font-size:1.063rem}.table .th-description{max-width:150px}.table .td-price{font-size:26px;font-weight:300;margin-top:5px;text-align:right}.table .td-total{font-weight:500;font-size:1.0625rem;padding-top:20px;text-align:right}.table .td-actions .btn{margin:0;padding:5px}.table>tbody>tr{position:relative}.table-shopping>thead>tr>th{font-size:.75rem;text-transform:uppercase}.table-shopping>tbody>tr>td{font-size:14px}.table-shopping>tbody>tr>td b{display:block;margin-bottom:5px}.table-shopping .td-name{font-weight:400;font-size:1.5em;line-height:1.42857143}.table-shopping .td-name small{color:#999;font-size:.75em;font-weight:300}.table-shopping .td-number{font-weight:300;font-size:1.125rem}.table-shopping .td-name{min-width:200px}.table-shopping .td-number{text-align:right;min-width:150px}.table-shopping .td-number small{margin-right:3px}.table-shopping .img-container{width:120px;max-height:160px;overflow:hidden;display:block}.table-shopping .img-container img{width:100%}.table-inverse{color:hsla(0,0%,100%,.84)}.table thead th{font-size:.95rem;font-weight:500;border-top-width:0;border-bottom-width:1px}.table-inverse thead th,thead.thead-inverse th{color:hsla(0,0%,100%,.54)}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:hsla(0,0%,100%,.06)}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table.table-hover tbody tr:hover{background-color:#f5f5f5}.dataTable>tbody>tr>td,.dataTable>tbody>tr>th,.dataTable>tfoot>tr>td,.dataTable>tfoot>tr>th,.dataTable>thead>tr>td,.dataTable>thead>tr>th{padding:5px!important}body{background-color:#eee;color:#3c4858;font-weight:300}legend{border-bottom:0}.serif-font{font-family:Roboto Slab,Times New Roman,serif}*{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}:focus{outline:0}a{color:#9c27b0}a:focus,a:hover{color:#89229b;text-decoration:none}a.text-info:focus,a.text-info:hover{color:#00a5bb}a .material-icons{vertical-align:middle}.form-check,label{font-size:14px;line-height:1.42857;color:#aaa;font-weight:400}.animation-transition-general,.sidebar .nav p,.sidebar .sidebar-wrapper .user .user-info [data-toggle=collapse]~div>ul>li>a span,.sidebar .sidebar-wrapper>.nav [data-toggle=collapse]~div>ul>li>a span{transition:all .3s linear}.animation-transition-slow{transition:all .37s linear}.animation-transition-fast{transition:all .15s ease 0s}.caret,.sidebar a{transition:all .15s ease-in}.offline-doc .navbar.navbar-transparent{padding-top:25px;border-bottom:none}.offline-doc .navbar.navbar-transparent .navbar-minimize{display:none}.offline-doc .navbar.navbar-transparent .collapse .navbar-nav .nav-link,.offline-doc .navbar.navbar-transparent .navbar-brand{color:#fff!important}.offline-doc .footer{z-index:3!important;position:absolute;width:100%;background:transparent;bottom:0;color:#fff}.offline-doc .page-header{display:flex;align-items:center}.offline-doc .page-header .content-center{z-index:3}.offline-doc .page-header .content-center .brand .title{color:#fff}.offline-doc .page-header:after{background-color:rgba(0,0,0,.5);content:"";display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:2}.bd-docs .bd-toc-item .bd-sidenav a span{float:right;margin-top:5px;padding:3px 7px;font-size:8px;line-height:9px;background-color:#9c27b0}.bootstrap-datetimepicker-widget .timepicker .table-condesed .btn .ripple-container{width:40px;height:40px;margin:-11px 3px}.off-canvas-sidebar .wrapper-full-page .page-header{padding:15vh 0!important}html[dir=rtl] .main-panel{float:left}html[dir=rtl] .off-canvas-sidebar nav .navbar-collapse,html[dir=rtl] .sidebar{text-align:right}html[dir=rtl] .sidebar{left:unset;right:0}html[dir=rtl] .sidebar .nav{padding-right:0}html[dir=rtl] .sidebar .nav i{float:right;margin-left:15px;margin-right:unset}html[dir=rtl] .card.card-chart{direction:ltr}html[dir=rtl] .card.card-chart .card-category,html[dir=rtl] .card.card-chart .card-title{text-align:right}html[dir=rtl] .card .card-body,html[dir=rtl] .card .card-footer{direction:rtl}html[dir=rtl] .form-check .form-check-sign .check:before{margin-right:10px}.btn.btn-facebook{color:#fff;background-color:#3b5998;border-color:#3b5998;box-shadow:0 2px 2px 0 rgba(59,89,152,.14),0 3px 1px -2px rgba(59,89,152,.2),0 1px 5px 0 rgba(59,89,152,.12)}.btn.btn-facebook.focus,.btn.btn-facebook:focus,.btn.btn-facebook:hover{color:#fff;background-color:#37538d;border-color:#2a3f6c}.btn.btn-facebook.active,.btn.btn-facebook:active,.open>.btn.btn-facebook.dropdown-toggle,.show>.btn.btn-facebook.dropdown-toggle{color:#fff;background-color:#37538d;border-color:#2a3f6c;box-shadow:0 2px 2px 0 rgba(59,89,152,.14),0 3px 1px -2px rgba(59,89,152,.2),0 1px 5px 0 rgba(59,89,152,.12)}.btn.btn-facebook.active.focus,.btn.btn-facebook.active:focus,.btn.btn-facebook.active:hover,.btn.btn-facebook:active.focus,.btn.btn-facebook:active:focus,.btn.btn-facebook:active:hover,.open>.btn.btn-facebook.dropdown-toggle.focus,.open>.btn.btn-facebook.dropdown-toggle:focus,.open>.btn.btn-facebook.dropdown-toggle:hover,.show>.btn.btn-facebook.dropdown-toggle.focus,.show>.btn.btn-facebook.dropdown-toggle:focus,.show>.btn.btn-facebook.dropdown-toggle:hover{color:#fff;background-color:#37538d;border-color:#17233c}.open>.btn.btn-facebook.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#3b5998}.open>.btn.btn-facebook.dropdown-toggle.bmd-btn-icon:hover{background-color:#37538d}.btn.btn-facebook.disabled.focus,.btn.btn-facebook.disabled:focus,.btn.btn-facebook.disabled:hover,.btn.btn-facebook:disabled.focus,.btn.btn-facebook:disabled:focus,.btn.btn-facebook:disabled:hover{background-color:#3b5998;border-color:#3b5998}.btn.btn-facebook:active,.btn.btn-facebook:focus,.btn.btn-facebook:hover{box-shadow:0 14px 26px -12px rgba(59,89,152,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(59,89,152,.2)}.btn.btn-facebook.btn-link{box-shadow:none}.btn.btn-facebook.btn-link,.btn.btn-facebook.btn-link:active,.btn.btn-facebook.btn-link:focus,.btn.btn-facebook.btn-link:hover{background-color:transparent;color:#3b5998}.btn.btn-twitter{color:#fff;background-color:#55acee;border-color:#55acee;box-shadow:0 2px 2px 0 rgba(85,172,238,.14),0 3px 1px -2px rgba(85,172,238,.2),0 1px 5px 0 rgba(85,172,238,.12)}.btn.btn-twitter.focus,.btn.btn-twitter:focus,.btn.btn-twitter:hover{color:#fff;background-color:#47a5ed;border-color:#1d91e8}.btn.btn-twitter.active,.btn.btn-twitter:active,.open>.btn.btn-twitter.dropdown-toggle,.show>.btn.btn-twitter.dropdown-toggle{color:#fff;background-color:#47a5ed;border-color:#1d91e8;box-shadow:0 2px 2px 0 rgba(85,172,238,.14),0 3px 1px -2px rgba(85,172,238,.2),0 1px 5px 0 rgba(85,172,238,.12)}.btn.btn-twitter.active.focus,.btn.btn-twitter.active:focus,.btn.btn-twitter.active:hover,.btn.btn-twitter:active.focus,.btn.btn-twitter:active:focus,.btn.btn-twitter:active:hover,.open>.btn.btn-twitter.dropdown-toggle.focus,.open>.btn.btn-twitter.dropdown-toggle:focus,.open>.btn.btn-twitter.dropdown-toggle:hover,.show>.btn.btn-twitter.dropdown-toggle.focus,.show>.btn.btn-twitter.dropdown-toggle:focus,.show>.btn.btn-twitter.dropdown-toggle:hover{color:#fff;background-color:#47a5ed;border-color:#126db2}.open>.btn.btn-twitter.dropdown-toggle.bmd-btn-icon{color:inherit;background-color:#55acee}.open>.btn.btn-twitter.dropdown-toggle.bmd-btn-icon:hover{background-color:#47a5ed}.btn.btn-twitter.disabled.focus,.btn.btn-twitter.disabled:focus,.btn.btn-twitter.disabled:hover,.btn.btn-twitter:disabled.focus,.btn.btn-twitter:disabled:focus,.btn.btn-twitter:disabled:hover{background-color:#55acee;border-color:#55acee}.btn.btn-twitter:active,.btn.btn-twitter:focus,.btn.btn-twitter:hover{box-shadow:0 14px 26px -12px rgba(85,172,238,.42),0 4px 23px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(85,172,238,.2)}.btn.btn-twitter.btn-link{box-shadow:none}.btn.btn-twitter.btn-link,.btn.btn-twitter.btn-link:active,.btn.btn-twitter.btn-link:focus,.btn.btn-twitter.btn-link:hover{background-color:transparent;color:#55acee}.card{border:0;margin-bottom:30px;margin-top:30px;border-radius:6px;color:#333;background:#fff;width:100%;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.card .card-category:not([class*=text-]){color:#999}.card .card-category{margin-top:10px}.card .card-category .material-icons{position:relative;top:8px;line-height:0}.card .form-check{margin-top:5px}.card .card-title{margin-top:.625rem}.card .card-title:last-child{margin-bottom:0}.card.no-shadow .card-header-image,.card.no-shadow .card-header-image img{box-shadow:none!important}.card .card-body,.card .card-footer{padding:.9375rem 1.875rem}.card .card-body+.card-footer{padding-top:0;border:0;border-radius:6px}.card .card-footer{display:flex;align-items:center;background-color:transparent;border:0}.card .card-footer .author,.card .card-footer .stats{display:inline-flex}.card .card-footer .stats{color:#999}.card .card-footer .stats .material-icons{position:relative;top:-10px;margin-right:3px;margin-left:3px;font-size:18px}.card.bmd-card-raised{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}@media (min-width:992px){.card.bmd-card-flat{box-shadow:none}}.card .card-header{border-bottom:none;background:transparent}.card .card-header .title{color:#fff}.card .card-header .nav-tabs{padding:0}.card .card-header.card-header-image{position:relative;padding:0;z-index:1;margin-left:15px;margin-right:15px;margin-top:-30px;border-radius:6px}.card .card-header.card-header-image img{width:100%;border-radius:6px;pointer-events:none;box-shadow:0 5px 15px -8px rgba(0,0,0,.24),0 8px 10px -5px rgba(0,0,0,.2)}.card .card-header.card-header-image .card-title{position:absolute;bottom:15px;left:15px;color:#fff;font-size:1.125rem;text-shadow:0 2px 5px rgba(33,33,33,.5)}.card .card-header.card-header-image .colored-shadow{transform:scale(.94);top:12px;filter:blur(12px);position:absolute;width:100%;height:100%;background-size:cover;z-index:-1;transition:opacity .45s;opacity:0}.card .card-header.card-header-image.no-shadow{box-shadow:none}.card .card-header.card-header-image.no-shadow.shadow-normal{box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.card .card-header.card-header-image.no-shadow .colored-shadow{display:none!important}.card.bg-primary,.card .card-header-primary .card-icon,.card .card-header-primary .card-text,.card .card-header-primary:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-primary .back,.card.card-rotate.bg-primary .front{background:linear-gradient(60deg,#ab47bc,#8e24aa)}.card.bg-info,.card .card-header-info .card-icon,.card .card-header-info .card-text,.card .card-header-info:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-info .back,.card.card-rotate.bg-info .front{background:linear-gradient(60deg,#26c6da,#00acc1)}.card.bg-success,.card .card-header-success .card-icon,.card .card-header-success .card-text,.card .card-header-success:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-success .back,.card.card-rotate.bg-success .front{background:linear-gradient(60deg,#66bb6a,#43a047)}.card.bg-warning,.card .card-header-warning .card-icon,.card .card-header-warning .card-text,.card .card-header-warning:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-warning .back,.card.card-rotate.bg-warning .front{background:linear-gradient(60deg,#ffa726,#fb8c00)}.card.bg-danger,.card .card-header-danger .card-icon,.card .card-header-danger .card-text,.card .card-header-danger:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-danger .back,.card.card-rotate.bg-danger .front{background:linear-gradient(60deg,#ef5350,#e53935)}.card.bg-rose,.card .card-header-rose .card-icon,.card .card-header-rose .card-text,.card .card-header-rose:not(.card-header-icon):not(.card-header-text),.card.card-rotate.bg-rose .back,.card.card-rotate.bg-rose .front{background:linear-gradient(60deg,#ec407a,#d81b60)}.card .card-header-primary .card-icon,.card .card-header-primary .card-text,.card .card-header-primary:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(156,39,176,.4)}.card .card-header-danger .card-icon,.card .card-header-danger .card-text,.card .card-header-danger:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(244,67,54,.4)}.card .card-header-rose .card-icon,.card .card-header-rose .card-text,.card .card-header-rose:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(233,30,99,.4)}.card .card-header-warning .card-icon,.card .card-header-warning .card-text,.card .card-header-warning:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(255,152,0,.4)}.card .card-header-info .card-icon,.card .card-header-info .card-text,.card .card-header-info:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(0,188,212,.4)}.card .card-header-success .card-icon,.card .card-header-success .card-text,.card .card-header-success:not(.card-header-icon):not(.card-header-text){box-shadow:0 4px 20px 0 rgba(0,0,0,.14),0 7px 10px -5px rgba(76,175,80,.4)}.card[class*=bg-],.card[class*=bg-] .card-title,.card[class*=bg-] .card-title a,.card[class*=bg-] .icon i,.card [class*=card-header-],.card [class*=card-header-] .card-title,.card [class*=card-header-] .card-title a,.card [class*=card-header-] .icon i{color:#fff}.card[class*=bg-] .icon i,.card [class*=card-header-] .icon i{border-color:hsla(0,0%,100%,.25)}.card[class*=bg-] .author a,.card[class*=bg-] .card-category,.card[class*=bg-] .card-description,.card[class*=bg-] .stats,.card [class*=card-header-] .author a,.card [class*=card-header-] .card-category,.card [class*=card-header-] .card-description,.card [class*=card-header-] .stats{color:hsla(0,0%,100%,.8)}.card[class*=bg-] .author a:active,.card[class*=bg-] .author a:focus,.card[class*=bg-] .author a:hover,.card [class*=card-header-] .author a:active,.card [class*=card-header-] .author a:focus,.card [class*=card-header-] .author a:hover{color:#fff}.card .author .avatar{width:30px;height:30px;overflow:hidden;border-radius:50%;margin-right:5px}.card .author a{color:#3c4858;text-decoration:none}.card .author a .ripple-container{display:none}.card .card-category-social .fa{font-size:24px;position:relative;margin-top:-4px;top:2px;margin-right:5px}.card .card-category-social .material-icons{position:relative;top:5px}.card[class*=bg-],.card[class*=bg-] .card-body{border-radius:6px}.card[class*=bg-] .card-body h1 small,.card[class*=bg-] .card-body h2 small,.card[class*=bg-] .card-body h3 small,.card[class*=bg-] h1 small,.card[class*=bg-] h2 small,.card[class*=bg-] h3 small{color:hsla(0,0%,100%,.8)}.card .card-stats{background:transparent;display:flex}.card .card-stats .author,.card .card-stats .stats{display:inline-flex}.card{box-shadow:0 1px 4px 0 rgba(0,0,0,.14)}.card .table tr:first-child td{border-top:none}.card .card-title{margin-top:0;margin-bottom:3px}.card .card-body{padding:.9375rem 20px;position:relative}.card .card-body .form-group{margin:8px 0 0}.card .card-header{z-index:3!important}.card .card-header .card-title{margin-bottom:3px}.card .card-header .card-category{margin:0}.card .card-header.card-header-text{display:inline-block}.card .card-header.card-header-text:after{content:"";display:table}.card .card-header.card-header-icon i,.card .card-header.card-header-text i{width:33px;height:33px;text-align:center;line-height:33px}.card .card-header.card-header-icon .card-title,.card .card-header.card-header-text .card-title{margin-top:15px;color:#3c4858}.card .card-header.card-header-icon h4,.card .card-header.card-header-text h4{font-weight:300}.card .card-header.card-header-tabs .nav-tabs{background:transparent;padding:0}.card .card-header.card-header-tabs .nav-tabs-title{float:left;padding:10px 10px 10px 0;line-height:24px}.card.card-plain .card-header.card-header-icon+.card-body .card-category,.card.card-plain .card-header.card-header-icon+.card-body .card-title{margin-top:-20px}.card .card-actions{position:absolute;z-index:1;top:-50px;width:calc(100% - 30px);left:17px;right:17px;text-align:center}.card .card-actions .card-header{padding:0;min-height:160px}.card .card-actions .btn{padding-left:12px;padding-right:12px}.card .card-actions .fix-broken-card{position:absolute;top:-65px}.card.card-chart .card-footer i:nth-child(1n+2){width:18px;text-align:center}.card.card-chart .card-category{margin:0}.card .card-body+.card-footer,.card .card-footer{padding:0;padding-top:10px;margin:0 15px 10px;border-radius:0;justify-content:space-between;align-items:center}.card .card-body+.card-footer h6,.card .card-footer h6{width:100%}.card .card-body+.card-footer .stats,.card .card-footer .stats{color:#999;font-size:12px;line-height:22px}.card .card-body+.card-footer .stats .card-category,.card .card-footer .stats .card-category{padding-top:7px;padding-bottom:7px;margin:0}.card .card-body+.card-footer .stats .material-icons,.card .card-footer .stats .material-icons{position:relative;top:4px;font-size:16px}.card [class*=card-header-]{margin:0 15px;padding:0;position:relative}.card [class*=card-header-] .card-title+.card-category{color:hsla(0,0%,100%,.8)}.card [class*=card-header-] .card-title+.card-category a{color:#fff}.card [class*=card-header-]:not(.card-header-icon):not(.card-header-text):not(.card-header-image){border-radius:3px;margin-top:-20px;padding:15px}.card [class*=card-header-] .card-icon,.card [class*=card-header-] .card-text{border-radius:3px;background-color:#999;padding:15px;margin-top:-20px;margin-right:15px;float:left}.card [class*=card-header-] .card-text{float:none;display:inline-block;margin-right:0}.card [class*=card-header-] .card-text .card-title{color:#fff;margin-top:0}.card [class*=card-header-] .ct-chart .card-title{color:#fff}.card [class*=card-header-] .ct-chart .card-category{margin-bottom:0;color:hsla(0,0%,100%,.62)}.card [class*=card-header-] .ct-chart .ct-label{color:hsla(0,0%,100%,.7)}.card [class*=card-header-] .ct-chart .ct-grid{stroke:hsla(0,0%,100%,.2)}.card [class*=card-header-] .ct-chart .ct-series-a .ct-bar,.card [class*=card-header-] .ct-chart .ct-series-a .ct-line,.card [class*=card-header-] .ct-chart .ct-series-a .ct-point,.card [class*=card-header-] .ct-chart .ct-series-a .ct-slice-donut{stroke:hsla(0,0%,100%,.8)}.card [class*=card-header-] .ct-chart .ct-series-a .ct-area,.card [class*=card-header-] .ct-chart .ct-series-a .ct-slice-pie{fill:hsla(0,0%,100%,.4)}.card [class*=card-header-] .ct-chart .ct-series-a .ct-bar{stroke-width:10px}.card [class*=card-header-] .ct-chart .ct-point{stroke-width:10px;stroke-linecap:round}.card [class*=card-header-] .ct-chart .ct-line{fill:none;stroke-width:4px}.card [data-header-animation=true]{transform:translateZ(0);transition:all .3s cubic-bezier(.34,1.61,.7,1)}.card:hover [data-header-animation=true]{transform:translate3d(0,-50px,0)}.card .map{height:280px;border-radius:6px;margin-top:15px}.card .map.map-big{height:420px}.card .card-body.table-full-width{padding:0}.card .card-plain .card-header-icon{margin-right:15px!important}.table-sales{margin-top:40px}.iframe-container{width:100%}.iframe-container iframe{width:100%;height:500px;border:0;box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.card-wizard .nav.nav-pills .nav-item{margin:0}.card-wizard .nav.nav-pills .nav-item .nav-link{padding:6px 15px!important}.card-wizard .nav-pills:not(.flex-column) .nav-item+.nav-item:not(:first-child){margin-left:0}.card-wizard .nav-item .nav-link.active,.card-wizard .nav-item .nav-link:focus,.card-wizard .nav-item .nav-link:hover{background-color:inherit!important;box-shadow:none!important}.card-wizard .input-group-text{padding:6px 15px 0!important}.card-wizard .card-footer{border-top:none!important}.card-chart .card-body+.card-footer,.card-product .card-body+.card-footer{border-top:1px solid #eee}.card-product .price{color:inherit}.card-collapse{margin-bottom:15px}.card-collapse .card .card-header a[aria-expanded=true]{color:#e91e63}.card-stats .card-header.card-header-icon,.card-stats .card-header.card-header-text{text-align:right}.card-stats .card-header .card-icon+.card-category,.card-stats .card-header .card-icon+.card-title{padding-top:10px}.card-stats .card-header.card-header-icon .card-category,.card-stats .card-header.card-header-icon .card-title,.card-stats .card-header.card-header-text .card-category,.card-stats .card-header.card-header-text .card-title{margin:0}.card-stats .card-header .card-category{margin-bottom:0;margin-top:0}.card-stats .card-header .card-category:not([class*=text-]){color:#999;font-size:14px}.card-stats .card-header+.card-footer{border-top:1px solid #eee;margin-top:20px}.card-stats .card-header.card-header-icon i{font-size:36px;line-height:56px;width:56px;height:56px;text-align:center}.card-stats .card-body{text-align:right}.card-profile{margin-top:30px;text-align:center}.card-profile .card-avatar{margin:-50px auto 0;border-radius:50%;overflow:hidden;padding:0;box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.card-profile .card-avatar+.card-body{margin-top:15px}.card-profile .card-avatar img{width:100%;height:auto}.card-profile .card-body+.card-footer{margin-top:-15px}.card-profile .card-footer .btn.btn-just-icon{font-size:20px;padding:12px;line-height:1em}.card-profile.card-plain .card-avatar{margin-top:0}.card-profile .card-header:not([class*=card-header-]){background:transparent}.card-profile .card-avatar{max-width:130px;max-height:130px}.card-plain{background:transparent;box-shadow:none}.card-plain .card-header:not(.card-avatar){margin-left:0;margin-right:0}.card-plain .card-body{padding-left:5px;padding-right:5px}.card-plain .card-header-image{margin:0!important;border-radius:6px}.card-plain .card-header-image img{border-radius:6px}.card-plain .card-footer{padding-left:5px;padding-right:5px;background-color:transparent}.animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{animation-duration:.75s}@keyframes e{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:e}@keyframes f{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:f}@keyframes g{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:g}@keyframes h{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:h}@keyframes i{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:i}.ct-chart .ct-series-a .ct-area,.ct-chart .ct-series-a .ct-bar,.ct-chart .ct-series-a .ct-line,.ct-chart .ct-series-a .ct-point,.ct-chart .ct-series-a .ct-slice-donut,.ct-chart .ct-series-a .ct-slice-donut-solid,.ct-chart .ct-series-a .ct-slice-pie{stroke:#00bcd4}.ct-chart .ct-series-b .ct-area,.ct-chart .ct-series-b .ct-bar,.ct-chart .ct-series-b .ct-line,.ct-chart .ct-series-b .ct-point,.ct-chart .ct-series-b .ct-slice-donut,.ct-chart .ct-series-b .ct-slice-donut-solid,.ct-chart .ct-series-b .ct-slice-pie{stroke:#f44336}.ct-chart .ct-series-c .ct-area,.ct-chart .ct-series-c .ct-bar,.ct-chart .ct-series-c .ct-line,.ct-chart .ct-series-c .ct-point,.ct-chart .ct-series-c .ct-slice-donut,.ct-chart .ct-series-c .ct-slice-donut-solid,.ct-chart .ct-series-c .ct-slice-pie{stroke:#ff9800}.ct-chart .ct-bar{fill:none;stroke-width:10px}.ct-chart .ct-line{fill:none;stroke-width:4px}.ct-chart .ct-point{stroke-width:10px;stroke-linecap:round}.ct-chart .ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-chart .ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);display:flex}.ct-chart .ct-label.ct-vertical.ct-start{-ms-flex-align:flex-end;align-items:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart .ct-series-a .ct-area,.ct-chart .ct-series-a .ct-slice-donut-solid,.ct-chart .ct-series-a .ct-slice-pie{fill:#00bcd4}.ct-chart .ct-series-b .ct-area,.ct-chart .ct-series-b .ct-slice-donut-solid,.ct-chart .ct-series-b .ct-slice-pie{fill:#f44336}.ct-chart .ct-series-c .ct-area,.ct-chart .ct-series-c .ct-slice-donut-solid,.ct-chart .ct-series-c .ct-slice-pie{fill:#ff9800}.ps-container{-ms-touch-action:auto;touch-action:auto;overflow:hidden!important;-ms-overflow-style:none}@supports (-ms-overflow-style:none){.ps-container{overflow:auto!important}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ps-container{overflow:auto!important}}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block;background-color:transparent}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;opacity:0;transition:background-color .2s linear,opacity .2s linear;bottom:0;height:15px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s linear,width .2s ease-in-out,border-radius .2s ease-in-out;bottom:2px;height:6px}.ps-container>.ps-scrollbar-x-rail:active>.ps-scrollbar-x,.ps-container>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{height:11px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;opacity:0;transition:background-color .2s linear,opacity .2s linear;right:0;width:15px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s linear,width .2s ease-in-out,border-radius .2s ease-in-out;right:2px;width:6px}.ps-container>.ps-scrollbar-y-rail:active>.ps-scrollbar-y,.ps-container>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{width:11px}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}@media (max-width:991px){[class*=navbar-expand-]>.container,[class*=navbar-expand-]>.container-fluid{padding-left:15px;padding-right:15px}.navbar .navbar-collapse .navbar-nav>li.button-container{padding:15px}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:-webkit-fill-available!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) .dropdown-menu.show{min-width:auto;left:auto}.carousel .card .card-body{max-width:340px;margin:0 auto;min-height:400px}.navbar-collapse{position:fixed;display:block;top:0;height:100vh;width:230px;right:0;margin-right:0!important;z-index:1032;visibility:visible;background-color:#999;overflow-y:visible;border-top:none;text-align:left;padding-right:0;padding-left:0;max-height:none!important;transform:translate3d(230px,0,0);transition:all .5s cubic-bezier(.685,.0473,.346,1)}.navbar-collapse:after{top:0;left:0;height:100%;width:100%;position:absolute;background-color:#fff;display:block;content:"";z-index:1}.navbar-collapse .dropdown-toggle:after{position:absolute;right:16px;margin-top:8px}.navbar-collapse .navbar-nav{position:relative;z-index:3}.navbar-collapse .navbar-nav .nav-item .nav-link{color:#3c4858;margin:5px 15px}.navbar-collapse .navbar-nav .nav-item.button-container .nav-link{margin:15px}.navbar-collapse .navbar-nav .nav-item:after{width:calc(100% - 30px);content:"";display:block;height:1px;margin-left:15px}.navbar-collapse .navbar-nav .nav-item:last-child:after{display:none}.nav-open .navbar-collapse{transform:translateZ(0)}.nav-open .navbar-translate{transform:translate3d(-230px,0,0)}.navbar .navbar-translate{width:100%;position:relative;display:flex;-ms-flex-pack:justify!important;justify-content:space-between!important;-ms-flex-align:center;align-items:center;transition:transform .5s cubic-bezier(.685,.0473,.346,1)}.navbar .dropdown.show .dropdown-menu{display:block}.navbar .dropdown .dropdown-menu{display:none}.navbar .dropdown-menu .dropdown-item{margin-left:1.5rem;margin-right:1.5rem}.navbar .dropdown .dropdown-menu,.navbar .dropdown.show .dropdown-menu{background-color:transparent;border:0;padding-bottom:15px;transition:none;box-shadow:none;transform:none!important;width:auto;margin-bottom:15px;padding-top:0;height:300px;animation:none;opacity:1;overflow-y:scroll}.navbar.navbar-transparent .navbar-toggler .navbar-toggler-icon{background-color:#fff}#bodyClick{height:100%;width:100%;position:fixed;opacity:0;top:0;left:auto;right:230px;content:"";z-index:1029;overflow-x:hidden}#navbar .navbar-collapse,#navigation .navbar-collapse{display:none!important}.dropdown-menu.show .dropdown-item.open+.dropdown-menu.show{right:101%!important}.dropdown-menu.show .dropdown-item.open+.dropdown-menu.show .dropdown-item.open+.dropdown-menu,.dropdown-menu.show .dropdown-item.open+.dropdown-menu.show .dropdown-item.open+.dropdown-menu.show{left:-165px!important}}@media (min-width:991px){.navbar .navbar-nav{align-items:center}.navbar .navbar-nav .button-container{margin-left:.1875px}.sidebar .navbar-form{display:none!important}}@media screen and (max-width:991px){.presentation-page .section-components .components-macbook{max-width:850px!important;max-height:480px!important;margin-top:12vh;left:-12px}.presentation-page .section-components .coloured-card-img,.presentation-page .section-components .table-img{display:none}.presentation-page .section-components .social-img{left:47%;top:37%}.presentation-page .section-components .pin-btn-img{top:54%}.presentation-page .section-components .share-btn-img{top:12%}.presentation-page .section-components .coloured-card-btn-img{top:-2%;left:65%}.presentation-page .section-content .area-img{max-width:130px;max-height:170px}.presentation-page .section-content .info-img{max-width:170px;max-height:120px}}@media screen and (max-width:767px){.presentation-page .section-components .components-macbook{max-width:350px!important;max-height:250px!important;margin-top:12vh;left:-12px}.presentation-page .section-components .coloured-card-img,.presentation-page .section-components .table-img{display:none}.presentation-page .section-components .social-img{left:-7%;top:37%}.presentation-page .section-components .pin-btn-img{top:54%}.presentation-page .section-components .share-btn-img{top:7%}.presentation-page .section-components .coloured-card-btn-img{top:-2%}.login-page .container{padding-top:100px!important}.index-page #cd-vertical-nav,.presentation-page #cd-vertical-nav,.section-page #cd-vertical-nav{display:none}.index-page .cd-section .tim-typo .tim-note{width:60px}}@media screen and (max-width:400px){.cd-vertical-nav{display:none!important}}@media (max-width:991px){.form-group textarea{padding-top:15px}.nav-open .menu-on-left .main-panel{position:static}body,html{overflow-x:hidden}.nav-open .menu-on-left .main-panel,.nav-open .menu-on-left .navbar-fixed>div,.nav-open .menu-on-left .wrapper-full-page{transform:translate3d(260px,0,0)}.menu-on-left .off-canvas-sidebar,.menu-on-left .sidebar{left:0;right:auto;transform:translate3d(-260px,0,0)}.menu-on-left .close-layer{left:auto;right:0}.timeline:before,.timeline>li>.timeline-badge{left:5%}.timeline>li>.timeline-panel{float:right;width:86%}.timeline>li>.timeline-panel:before{border-left-width:0;border-right-width:15px;left:-15px;right:auto}.timeline>li>.timeline-panel:after{border-left-width:0;border-right-width:14px;left:-14px;right:auto}.nav-mobile-menu .dropdown .dropdown-menu{display:none;position:static!important;background-color:transparent;width:auto;float:none;box-shadow:none}.nav-mobile-menu .dropdown .dropdown-menu.showing{animation:initial;animation-duration:0s}.nav-mobile-menu .dropdown .dropdown-menu.hiding{transform:none;opacity:1}.nav-mobile-menu .dropdown.show .dropdown-menu{display:block}.nav-mobile-menu li.active>a{background-color:hsla(0,0%,100%,.1)}.navbar-minimize{display:none}.card .form-horizontal .label-on-left,.card .form-horizontal .label-on-right{padding-left:15px;padding-top:8px}.card .form-horizontal .form-group{margin-top:0}.card .form-horizontal .checkbox-radios{padding-bottom:15px}.card .form-horizontal .checkbox-inline,.card .form-horizontal .checkbox-radios .checkbox:first-child,.card .form-horizontal .checkbox-radios .radio:first-child{margin-top:0}.sidebar{display:none;box-shadow:none}.sidebar .sidebar-wrapper{padding-bottom:60px}.sidebar .nav-mobile-menu{margin-top:0}.sidebar .nav-mobile-menu .notification{float:left;line-height:30px;margin-right:8px}.sidebar .nav-mobile-menu .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.main-panel{width:100%}.navbar-transparent{padding-top:15px;background-color:rgba(0,0,0,.45)}body{position:relative}.nav-open .main-panel,.nav-open .navbar .container,.nav-open .navbar .container .navbar-toggler,.nav-open .navbar .container .navbar-wrapper,.nav-open .wrapper-full-page{left:0;transform:translate3d(-260px,0,0)}.nav-open .sidebar{box-shadow:0 16px 38px -12px rgba(0,0,0,.56),0 4px 25px 0 rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.nav-open .off-canvas-sidebar .navbar-collapse,.nav-open .sidebar{transform:translateZ(0)}.navbar .container,.navbar .container .navbar-toggler,.navbar .container .navbar-wrapper,.wrapper-full-page{transform:translateZ(0);transition:all .33s cubic-bezier(.685,.0473,.346,1);left:0}.off-canvas-sidebar .navbar .container{transform:none}.main-panel,.navbar-collapse{transition:all .33s cubic-bezier(.685,.0473,.346,1)}.navbar .navbar-collapse.collapse,.navbar .navbar-collapse.collapse.in,.navbar .navbar-collapse.collapsing{display:none!important}.off-canvas-sidebar .navbar .navbar-collapse.collapse,.off-canvas-sidebar .navbar .navbar-collapse.collapse.in,.off-canvas-sidebar .navbar .navbar-collapse.collapsing{display:block!important}.navbar-nav>li{float:none;position:relative;display:block}.off-canvas-sidebar nav .navbar-collapse{margin:0}.off-canvas-sidebar nav .navbar-collapse>ul{margin-top:19px}.off-canvas-sidebar nav .navbar-collapse,.sidebar{position:fixed;display:block;top:0;height:100vh;width:260px;right:0;left:auto;z-index:1032;visibility:visible;background-color:#9a9a9a;overflow-y:visible;border-top:none;text-align:left;padding-right:0;padding-left:0;transform:translate3d(260px,0,0);transition:all .33s cubic-bezier(.685,.0473,.346,1)}.off-canvas-sidebar nav .navbar-collapse>ul,.sidebar>ul{position:relative;z-index:4;width:100%}.off-canvas-sidebar nav .navbar-collapse:before,.sidebar:before{top:0;left:0;height:100%;width:100%;position:absolute;background-color:#282828;display:block;content:"";z-index:1}.off-canvas-sidebar nav .navbar-collapse .logo,.sidebar .logo{position:relative;z-index:4}.off-canvas-sidebar nav .navbar-collapse .navbar-form,.sidebar .navbar-form{margin:10px 0;float:none!important;padding-top:1px;padding-bottom:1px;position:relative}.off-canvas-sidebar nav .navbar-collapse .table-responsive,.sidebar .table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.form-group.form-search .form-control{font-size:1.7em;height:37px;width:78%}.navbar-form .btn{position:absolute;top:-5px;right:-50px}.close-layer{height:100%;width:100%;position:absolute;opacity:0;top:0;left:auto;background:rgba(0,0,0,.35);content:"";z-index:9999;overflow-x:hidden;transition:all .37s ease-in}.close-layer.visible{opacity:1}.navbar-toggler .icon-bar{display:block;position:relative;background:#555!important;width:24px;height:2px;border-radius:1px;margin:0 auto}.navbar-header .navbar-toggler{padding:15px;margin-top:4px;width:40px;height:40px}.bar1,.bar2,.bar3{outline:1px solid transparent}@keyframes j{0%{top:0;transform:rotate(0deg)}45%{top:6px;transform:rotate(145deg)}75%{transform:rotate(130deg)}to{transform:rotate(135deg)}}@keyframes k{0%{top:6px;transform:rotate(135deg)}45%{transform:rotate(-10deg)}75%{transform:rotate(5deg)}to{top:0;transform:rotate(0)}}@keyframes l{0%{bottom:0;transform:rotate(0deg)}45%{bottom:6px;transform:rotate(-145deg)}75%{transform:rotate(-130deg)}to{transform:rotate(-135deg)}}@keyframes m{0%{bottom:6px;transform:rotate(-135deg)}45%{transform:rotate(10deg)}75%{transform:rotate(-5deg)}to{bottom:0;transform:rotate(0)}}.navbar-toggler .icon-bar:nth-child(2){top:0;animation:k .5s 0s;animation-fill-mode:forwards}.navbar-toggler .icon-bar:nth-child(3){opacity:1}.navbar-toggler .icon-bar:nth-child(4){bottom:0;animation:m .5s 0s;animation-fill-mode:forwards}.navbar-toggler.toggled .icon-bar:nth-child(2){top:6px;animation:j .5s 0s;animation-fill-mode:forwards}.navbar-toggler.toggled .icon-bar:nth-child(3){opacity:0}.navbar-toggler.toggled .icon-bar:nth-child(4){bottom:6px;animation:l .5s 0s;animation-fill-mode:forwards}.dropdown-menu .divider{background-color:hsla(0,0%,90%,.15)}.navbar-nav{margin:1px 0}.navbar-nav .open .dropdown-menu>li>a{padding:15px 15px 5px 50px}.navbar-nav .open .dropdown-menu>li:first-child>a{padding:5px 15px 5px 50px}.navbar-nav .open .dropdown-menu>li:last-child>a{padding:15px 15px 25px 50px}[class*=navbar-] .navbar-nav .active>a,[class*=navbar-] .navbar-nav .active>a:focus,[class*=navbar-] .navbar-nav .active>a:hover,[class*=navbar-] .navbar-nav .navbar-nav .open .dropdown-menu>li>a:active,[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a,[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a:focus,[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a:hover,[class*=navbar-] .navbar-nav>li>a,[class*=navbar-] .navbar-nav>li>a:focus,[class*=navbar-] .navbar-nav>li>a:hover{color:#fff}[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a,[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a:focus,[class*=navbar-] .navbar-nav .open .dropdown-menu>li>a:hover,[class*=navbar-] .navbar-nav>li>a,[class*=navbar-] .navbar-nav>li>a:focus,[class*=navbar-] .navbar-nav>li>a:hover{opacity:.7;background:transparent}[class*=navbar-] .navbar-nav.navbar-nav .open .dropdown-menu>li>a:active{opacity:1}[class*=navbar-] .navbar-nav .dropdown>a:hover .caret{border-bottom-color:#777;border-top-color:#777}[class*=navbar-] .navbar-nav .dropdown>a:active .caret{border-bottom-color:#fff;border-top-color:#fff}.dropdown-menu{display:none}.navbar-fixed-top{-webkit-backface-visibility:hidden}#bodyClick{height:100%;width:100%;position:fixed;opacity:0;top:0;left:auto;right:260px;content:"";z-index:9999;overflow-x:hidden}.social-line .btn,.subscribe-line .form-control{margin:0 0 10px}.footer:not(.footer-big) nav>ul li,.social-line.pull-right{float:none}.social-area.pull-right{float:none!important}.form-control+.form-control-feedback{margin-top:-8px}.navbar-toggle:focus,.navbar-toggle:hover{background-color:transparent!important}.media-post .author{width:20%;float:none!important;display:block;margin:0 auto 10px}.media-post .media-body{width:100%}.navbar-collapse.collapse{height:100%!important}.navbar-collapse.collapse.in{display:block}.navbar-header .collapse,.navbar-toggle{display:block!important}.navbar-header{float:none}.navbar-collapse .nav p{font-size:1rem;margin:0}}@media (min-width:992px){.main-panel .navbar .navbar-collapse .navbar-nav .nav-item .nav-link p{display:none}.nav-mobile-menu,.sidebar .navbar-form{display:none!important}}
diff --git a/stlearn/app/static/css/style.css b/stlearn/app/static/css/style.css
deleted file mode 100644
index 7f34cd22..00000000
--- a/stlearn/app/static/css/style.css
+++ /dev/null
@@ -1,95 +0,0 @@
-.container-fluid {
- width: 80%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-.right {
- float: right;
- width: 300px;
- border: 3px solid #73AD21;
- padding: 10px;
-}
-
-.card {
- border: 0;
- margin-bottom: 30px;
- margin-top: 10px;
- border-radius: 6px;
- color: #333;
- background: #fff;
- width: 100%;
- box-shadow: 0 2px 2px 0 rgb(0 0 0 / 14%), 0 3px 1px -2px rgb(0 0 0 / 20%), 0 1px 5px 0 rgb(0 0 0 / 12%);
-}
-
-.main-panel>.content {
- margin-top: 0px;
- padding: 30px 15px;
- min-height: calc(100vh - 123px);
-}
-
-a.disabled, fieldset:disabled a {
- pointer-events: none;
- background-color: #D8D8D8;
-}
-
-
-.list-group-item {
- position: relative;
- display: block;
- padding: 0.25rem 1.25rem;
- margin-bottom: 0;
- background-color: inherit;
- border: 0 solid rgba(0,0,0,.125);
-}
-
-#Cluster\ Select {
- height: 150px
-}
-
-#overlay { width:100px;
- height: 100px;
- position: fixed;
- top: 50%;
- left: 50%;
- z-index: -1;
-}
-
-#loading { width:100px;
- height: 200px;
- position: fixed;
- top: 50%;
- left: 50%;
-}
-
-.btn, .btn.btn-default {
- color: #fff;
- background-color: #9124a3;
- border-color: #9c27b0;
- box-shadow: 0 2px 2px 0 hsl(0deg 0% 60% / 14%), 0 3px 1px -2px hsl(0deg 0% 60% / 20%), 0 1px 5px 0 hsl(0deg 0% 60% / 12%);
-}
-
-.logging_window{
- display: block;
- padding: 9.5px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
- width: 50%;
- margin: auto;
-}
-
-.sidebar {
- width: 285px;
-}
-
-.sidebar .sidebar-wrapper {
- width: 285px;
-}
diff --git a/stlearn/app/static/img/Settings.gif b/stlearn/app/static/img/Settings.gif
deleted file mode 100644
index 6c170a8d..00000000
Binary files a/stlearn/app/static/img/Settings.gif and /dev/null differ
diff --git a/stlearn/app/static/img/favicon.png b/stlearn/app/static/img/favicon.png
deleted file mode 100644
index 621d986b..00000000
Binary files a/stlearn/app/static/img/favicon.png and /dev/null differ
diff --git a/stlearn/app/static/img/loading_gif.gif b/stlearn/app/static/img/loading_gif.gif
deleted file mode 100644
index 289a779c..00000000
Binary files a/stlearn/app/static/img/loading_gif.gif and /dev/null differ
diff --git a/stlearn/app/static/js/core/bootstrap-material-design.min.js b/stlearn/app/static/js/core/bootstrap-material-design.min.js
deleted file mode 100644
index 0a8a9bd3..00000000
--- a/stlearn/app/static/js/core/bootstrap-material-design.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["jquery","popper.js"],e):e(t.jQuery,t.Popper)}(this,function(t,e){"use strict";function n(t,e){for(var n=0;n0?i:null}catch(t){return null}},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(n){t(n).trigger(e.end)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)){var o=n[r],s=e[r],a=s&&i.isElement(s)?"element":(l=s,{}.toString.call(l).match(/\s([a-zA-Z]+)/)[1].toLowerCase());if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+r+'" provided type "'+a+'" but expected type "'+o+'".')}var l}};return e=("undefined"==typeof window||!window.QUnit)&&{end:"transitionend"},t.fn.emulateTransitionEnd=n,i.supportsTransitionEnd()&&(t.event.special[i.TRANSITION_END]={bindType:e.end,delegateType:e.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}),i}(t),ur=(a="alert",c="."+(l="bs.alert"),h=(s=t).fn[a],u={CLOSE:"close"+c,CLOSED:"closed"+c,CLICK_DATA_API:"click"+c+".data-api"},d="alert",f="fade",p="show",m=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){s.removeData(this._element,l),this._element=null},e._getRootElement=function(t){var e=hr.getSelectorFromElement(t),n=!1;return e&&(n=s(e)[0]),n||(n=s(t).closest("."+d)[0]),n},e._triggerCloseEvent=function(t){var e=s.Event(u.CLOSE);return s(t).trigger(e),e},e._removeElement=function(t){var e=this;s(t).removeClass(p),hr.supportsTransitionEnd()&&s(t).hasClass(f)?s(t).one(hr.TRANSITION_END,function(n){return e._destroyElement(t,n)}).emulateTransitionEnd(150):this._destroyElement(t)},e._destroyElement=function(t){s(t).detach().trigger(u.CLOSED).remove()},t._jQueryInterface=function(e){return this.each(function(){var n=s(this),i=n.data(l);i||(i=new t(this),n.data(l,i)),"close"===e&&i[e](this)})},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}}]),t}(),s(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',m._handleDismiss(new m)),s.fn[a]=m._jQueryInterface,s.fn[a].Constructor=m,s.fn[a].noConflict=function(){return s.fn[a]=h,m._jQueryInterface},_="button",y="."+(v="bs.button"),E=".data-api",b=(g=t).fn[_],C="active",I="btn",T="focus",A='[data-toggle^="button"]',S='[data-toggle="buttons"]',w="input",D=".active",N=".btn",O={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:"focus"+y+E+" blur"+y+E},k=function(){function t(t){this._element=t}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(S)[0];if(n){var i=g(this._element).find(w)[0];if(i){if("radio"===i.type)if(i.checked&&g(this._element).hasClass(C))t=!1;else{var r=g(n).find(D)[0];r&&g(r).removeClass(C)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!g(this._element).hasClass(C),g(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!g(this._element).hasClass(C)),t&&g(this._element).toggleClass(C)},e.dispose=function(){g.removeData(this._element,v),this._element=null},t._jQueryInterface=function(e){return this.each(function(){var n=g(this).data(v);n||(n=new t(this),g(this).data(v,n)),"toggle"===e&&n[e]()})},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}}]),t}(),g(document).on(O.CLICK_DATA_API,A,function(t){t.preventDefault();var e=t.target;g(e).hasClass(I)||(e=g(e).closest(N)),k._jQueryInterface.call(g(e),"toggle")}).on(O.FOCUS_BLUR_DATA_API,A,function(t){var e=g(t.target).closest(N)[0];g(e).toggleClass(T,/^focus(in)?$/.test(t.type))}),g.fn[_]=k._jQueryInterface,g.fn[_].Constructor=k,g.fn[_].noConflict=function(){return g.fn[_]=b,k._jQueryInterface},j="carousel",L="."+(R="bs.carousel"),P=".data-api",x=($=t).fn[j],F={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},M={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},Q="next",H="prev",U="left",G="right",W={SLIDE:"slide"+L,SLID:"slid"+L,KEYDOWN:"keydown"+L,MOUSEENTER:"mouseenter"+L,MOUSELEAVE:"mouseleave"+L,TOUCHEND:"touchend"+L,LOAD_DATA_API:"load"+L+P,CLICK_DATA_API:"click"+L+P},B="carousel",K="active",V="slide",Y="carousel-item-right",q="carousel-item-left",z="carousel-item-next",X="carousel-item-prev",Z={ACTIVE:".active",ACTIVE_ITEM:".active.carousel-item",ITEM:".carousel-item",NEXT_PREV:".carousel-item-next, .carousel-item-prev",INDICATORS:".carousel-indicators",DATA_SLIDE:"[data-slide], [data-slide-to]",DATA_RIDE:'[data-ride="carousel"]'},J=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(e),this._element=$(t)[0],this._indicatorsElement=$(this._element).find(Z.INDICATORS)[0],this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide(Q)},e.nextWhenVisible=function(){!document.hidden&&$(this._element).is(":visible")&&"hidden"!==$(this._element).css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(H)},e.pause=function(t){t||(this._isPaused=!0),$(this._element).find(Z.NEXT_PREV)[0]&&hr.supportsTransitionEnd()&&(hr.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=$(this._element).find(Z.ACTIVE_ITEM)[0];var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)$(this._element).one(W.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=t>n?Q:H;this._slide(i,this._items[t])}},e.dispose=function(){$(this._element).off(L),$.removeData(this._element,R),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},F,t),hr.typeCheckConfig(j,t,M),t},e._addEventListeners=function(){var t=this;this._config.keyboard&&$(this._element).on(W.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&($(this._element).on(W.MOUSEENTER,function(e){return t.pause(e)}).on(W.MOUSELEAVE,function(e){return t.cycle(e)}),"ontouchstart"in document.documentElement&&$(this._element).on(W.TOUCHEND,function(){t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval)}))},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=$.makeArray($(t).parent().find(Z.ITEM)),this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n=t===Q,i=t===H,r=this._getItemIndex(e),o=this._items.length-1;if((i&&0===r||n&&r===o)&&!this._config.wrap)return e;var s=(r+(t===H?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex($(this._element).find(Z.ACTIVE_ITEM)[0]),r=$.Event(W.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return $(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){$(this._indicatorsElement).find(Z.ACTIVE).removeClass(K);var e=this._indicatorsElement.children[this._getItemIndex(t)];e&&$(e).addClass(K)}},e._slide=function(t,e){var n,i,r,o=this,s=$(this._element).find(Z.ACTIVE_ITEM)[0],a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(t===Q?(n=q,i=z,r=U):(n=Y,i=X,r=G),l&&$(l).hasClass(K))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=$.Event(W.SLID,{relatedTarget:l,direction:r,from:a,to:c});hr.supportsTransitionEnd()&&$(this._element).hasClass(V)?($(l).addClass(i),hr.reflow(l),$(s).addClass(n),$(l).addClass(n),$(s).one(hr.TRANSITION_END,function(){$(l).removeClass(n+" "+i).addClass(K),$(s).removeClass(K+" "+i+" "+n),o._isSliding=!1,setTimeout(function(){return $(o._element).trigger(u)},0)}).emulateTransitionEnd(600)):($(s).removeClass(K),$(l).addClass(K),this._isSliding=!1,$(this._element).trigger(u)),h&&this.cycle()}},t._jQueryInterface=function(e){return this.each(function(){var n=$(this).data(R),i=r({},F,$(this).data());"object"==typeof e&&(i=r({},i,e));var o="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),$(this).data(R,n)),"number"==typeof e)n.to(e);else if("string"==typeof o){if(void 0===n[o])throw new TypeError('No method named "'+o+'"');n[o]()}else i.interval&&(n.pause(),n.cycle())})},t._dataApiClickHandler=function(e){var n=hr.getSelectorFromElement(this);if(n){var i=$(n)[0];if(i&&$(i).hasClass(B)){var o=r({},$(i).data(),$(this).data()),s=this.getAttribute("data-slide-to");s&&(o.interval=!1),t._jQueryInterface.call($(i),o),s&&$(i).data(R).to(s),e.preventDefault()}}},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return F}}]),t}(),$(document).on(W.CLICK_DATA_API,Z.DATA_SLIDE,J._dataApiClickHandler),$(window).on(W.LOAD_DATA_API,function(){$(Z.DATA_RIDE).each(function(){var t=$(this);J._jQueryInterface.call(t,t.data())})}),$.fn[j]=J._jQueryInterface,$.fn[j].Constructor=J,$.fn[j].noConflict=function(){return $.fn[j]=x,J._jQueryInterface},et="collapse",it="."+(nt="bs.collapse"),rt=(tt=t).fn[et],ot={toggle:!0,parent:""},st={toggle:"boolean",parent:"(string|element)"},at={SHOW:"show"+it,SHOWN:"shown"+it,HIDE:"hide"+it,HIDDEN:"hidden"+it,CLICK_DATA_API:"click"+it+".data-api"},lt="show",ct="collapse",ht="collapsing",ut="collapsed",dt="width",ft="height",pt={ACTIVES:".show, .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},mt=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=tt.makeArray(tt('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=tt(pt.DATA_TOGGLE),i=0;i0&&(this._selector=o,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){tt(this._element).hasClass(lt)?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!tt(this._element).hasClass(lt)&&(this._parent&&0===(e=tt.makeArray(tt(this._parent).find(pt.ACTIVES).filter('[data-parent="'+this._config.parent+'"]'))).length&&(e=null),!(e&&(n=tt(e).not(this._selector).data(nt))&&n._isTransitioning))){var r=tt.Event(at.SHOW);if(tt(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(tt(e).not(this._selector),"hide"),n||tt(e).data(nt,null));var o=this._getDimension();tt(this._element).removeClass(ct).addClass(ht),this._element.style[o]=0,this._triggerArray.length>0&&tt(this._triggerArray).removeClass(ut).attr("aria-expanded",!0),this.setTransitioning(!0);var s=function(){tt(i._element).removeClass(ht).addClass(ct).addClass(lt),i._element.style[o]="",i.setTransitioning(!1),tt(i._element).trigger(at.SHOWN)};if(hr.supportsTransitionEnd()){var a="scroll"+(o[0].toUpperCase()+o.slice(1));tt(this._element).one(hr.TRANSITION_END,s).emulateTransitionEnd(600),this._element.style[o]=this._element[a]+"px"}else s()}}},e.hide=function(){var t=this;if(!this._isTransitioning&&tt(this._element).hasClass(lt)){var e=tt.Event(at.HIDE);if(tt(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();if(this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",hr.reflow(this._element),tt(this._element).addClass(ht).removeClass(ct).removeClass(lt),this._triggerArray.length>0)for(var i=0;i0&&tt(e).toggleClass(ut,!n).attr("aria-expanded",n)}},t._getTargetFromElement=function(t){var e=hr.getSelectorFromElement(t);return e?tt(e)[0]:null},t._jQueryInterface=function(e){return this.each(function(){var n=tt(this),i=n.data(nt),o=r({},ot,n.data(),"object"==typeof e&&e);if(!i&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),i||(i=new t(this,o),n.data(nt,i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}})},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return ot}}]),t}(),tt(document).on(at.CLICK_DATA_API,pt.DATA_TOGGLE,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=tt(this),n=hr.getSelectorFromElement(this);tt(n).each(function(){var t=tt(this),n=t.data(nt)?"toggle":e.data();mt._jQueryInterface.call(t,n)})}),tt.fn[et]=mt._jQueryInterface,tt.fn[et].Constructor=mt,tt.fn[et].noConflict=function(){return tt.fn[et]=rt,mt._jQueryInterface},_t="modal",yt="."+(vt="bs.modal"),Et=(gt=t).fn[_t],bt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Ct={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},It={HIDE:"hide"+yt,HIDDEN:"hidden"+yt,SHOW:"show"+yt,SHOWN:"shown"+yt,FOCUSIN:"focusin"+yt,RESIZE:"resize"+yt,CLICK_DISMISS:"click.dismiss"+yt,KEYDOWN_DISMISS:"keydown.dismiss"+yt,MOUSEUP_DISMISS:"mouseup.dismiss"+yt,MOUSEDOWN_DISMISS:"mousedown.dismiss"+yt,CLICK_DATA_API:"click"+yt+".data-api"},Tt="modal-scrollbar-measure",At="modal-backdrop",St="modal-open",wt="fade",Dt="show",Nt={DIALOG:".modal-dialog",DATA_TOGGLE:'[data-toggle="modal"]',DATA_DISMISS:'[data-dismiss="modal"]',FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"},Ot=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=gt(t).find(Nt.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._originalBodyPadding=0,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isTransitioning&&!this._isShown){hr.supportsTransitionEnd()&>(this._element).hasClass(wt)&&(this._isTransitioning=!0);var n=gt.Event(It.SHOW,{relatedTarget:t});gt(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),gt(document.body).addClass(St),this._setEscapeEvent(),this._setResizeEvent(),gt(this._element).on(It.CLICK_DISMISS,Nt.DATA_DISMISS,function(t){return e.hide(t)}),gt(this._dialog).on(It.MOUSEDOWN_DISMISS,function(){gt(e._element).one(It.MOUSEUP_DISMISS,function(t){gt(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),!this._isTransitioning&&this._isShown){var n=gt.Event(It.HIDE);if(gt(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=hr.supportsTransitionEnd()&>(this._element).hasClass(wt);i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),gt(document).off(It.FOCUSIN),gt(this._element).removeClass(Dt),gt(this._element).off(It.CLICK_DISMISS),gt(this._dialog).off(It.MOUSEDOWN_DISMISS),i?gt(this._element).one(hr.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(300):this._hideModal()}}},e.dispose=function(){gt.removeData(this._element,vt),gt(window,document,this._element,this._backdrop).off(yt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=r({},bt,t),hr.typeCheckConfig(_t,t,Ct),t},e._showElement=function(t){var e=this,n=hr.supportsTransitionEnd()&>(this._element).hasClass(wt);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.scrollTop=0,n&&hr.reflow(this._element),gt(this._element).addClass(Dt),this._config.focus&&this._enforceFocus();var i=gt.Event(It.SHOWN,{relatedTarget:t}),r=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,gt(e._element).trigger(i)};n?gt(this._dialog).one(hr.TRANSITION_END,r).emulateTransitionEnd(300):r()},e._enforceFocus=function(){var t=this;gt(document).off(It.FOCUSIN).on(It.FOCUSIN,function(e){document!==e.target&&t._element!==e.target&&0===gt(t._element).has(e.target).length&&t._element.focus()})},e._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?gt(this._element).on(It.KEYDOWN_DISMISS,function(e){27===e.which&&(e.preventDefault(),t.hide())}):this._isShown||gt(this._element).off(It.KEYDOWN_DISMISS)},e._setResizeEvent=function(){var t=this;this._isShown?gt(window).on(It.RESIZE,function(e){return t.handleUpdate(e)}):gt(window).off(It.RESIZE)},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._isTransitioning=!1,this._showBackdrop(function(){gt(document.body).removeClass(St),t._resetAdjustments(),t._resetScrollbar(),gt(t._element).trigger(It.HIDDEN)})},e._removeBackdrop=function(){this._backdrop&&(gt(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=gt(this._element).hasClass(wt)?wt:"";if(this._isShown&&this._config.backdrop){var i=hr.supportsTransitionEnd()&&n;if(this._backdrop=document.createElement("div"),this._backdrop.className=At,n&>(this._backdrop).addClass(n),gt(this._backdrop).appendTo(document.body),gt(this._element).on(It.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),i&&hr.reflow(this._backdrop),gt(this._backdrop).addClass(Dt),!t)return;if(!i)return void t();gt(this._backdrop).one(hr.TRANSITION_END,t).emulateTransitionEnd(150)}else if(!this._isShown&&this._backdrop){gt(this._backdrop).removeClass(Dt);var r=function(){e._removeBackdrop(),t&&t()};hr.supportsTransitionEnd()&>(this._element).hasClass(wt)?gt(this._backdrop).one(hr.TRANSITION_END,r).emulateTransitionEnd(150):r()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},Ht="show",Ut="out",Gt={HIDE:"hide"+Rt,HIDDEN:"hidden"+Rt,SHOW:"show"+Rt,SHOWN:"shown"+Rt,INSERTED:"inserted"+Rt,CLICK:"click"+Rt,FOCUSIN:"focusin"+Rt,FOCUSOUT:"focusout"+Rt,MOUSEENTER:"mouseenter"+Rt,MOUSELEAVE:"mouseleave"+Rt},Wt="fade",Bt="show",Kt=".tooltip-inner",Vt=".arrow",Yt="hover",qt="focus",zt="click",Xt="manual",Zt=function(){function t(t,n){if(void 0===e)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(n),this.tip=null,this._setListeners()}var n=t.prototype;return n.enable=function(){this._isEnabled=!0},n.disable=function(){this._isEnabled=!1},n.toggleEnabled=function(){this._isEnabled=!this._isEnabled},n.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=kt(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),kt(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(kt(this.getTipElement()).hasClass(Bt))return void this._leave(null,this);this._enter(null,this)}},n.dispose=function(){clearTimeout(this._timeout),kt.removeData(this.element,this.constructor.DATA_KEY),kt(this.element).off(this.constructor.EVENT_KEY),kt(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&kt(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},n.show=function(){var n=this;if("none"===kt(this.element).css("display"))throw new Error("Please use show on visible elements");var i=kt.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){kt(this.element).trigger(i);var r=kt.contains(this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!r)return;var o=this.getTipElement(),s=hr.getUID(this.constructor.NAME);o.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&kt(o).addClass(Wt);var a="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,l=this._getAttachment(a);this.addAttachmentClass(l);var c=!1===this.config.container?document.body:kt(this.config.container);kt(o).data(this.constructor.DATA_KEY,this),kt.contains(this.element.ownerDocument.documentElement,this.tip)||kt(o).appendTo(c),kt(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new e(this.element,o,{placement:l,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Vt},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&n._handlePopperPlacementChange(t)},onUpdate:function(t){n._handlePopperPlacementChange(t)}}),kt(o).addClass(Bt),"ontouchstart"in document.documentElement&&kt("body").children().on("mouseover",null,kt.noop);var h=function(){n.config.animation&&n._fixTransition();var t=n._hoverState;n._hoverState=null,kt(n.element).trigger(n.constructor.Event.SHOWN),t===Ut&&n._leave(null,n)};hr.supportsTransitionEnd()&&kt(this.tip).hasClass(Wt)?kt(this.tip).one(hr.TRANSITION_END,h).emulateTransitionEnd(t._TRANSITION_DURATION):h()}},n.hide=function(t){var e=this,n=this.getTipElement(),i=kt.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==Ht&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),kt(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};kt(this.element).trigger(i),i.isDefaultPrevented()||(kt(n).removeClass(Bt),"ontouchstart"in document.documentElement&&kt("body").children().off("mouseover",null,kt.noop),this._activeTrigger[zt]=!1,this._activeTrigger[qt]=!1,this._activeTrigger[Yt]=!1,hr.supportsTransitionEnd()&&kt(this.tip).hasClass(Wt)?kt(n).one(hr.TRANSITION_END,r).emulateTransitionEnd(150):r(),this._hoverState="")},n.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},n.isWithContent=function(){return Boolean(this.getTitle())},n.addAttachmentClass=function(t){kt(this.getTipElement()).addClass(Pt+"-"+t)},n.getTipElement=function(){return this.tip=this.tip||kt(this.config.template)[0],this.tip},n.setContent=function(){var t=kt(this.getTipElement());this.setElementContent(t.find(Kt),this.getTitle()),t.removeClass(Wt+" "+Bt)},n.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?kt(e).parent().is(t)||t.empty().append(e):t.text(kt(e).text()):t[n?"html":"text"](e)},n.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},n._getAttachment=function(t){return Mt[t.toUpperCase()]},n._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)kt(t.element).on(t.constructor.Event.CLICK,t.config.selector,function(e){return t.toggle(e)});else if(e!==Xt){var n=e===Yt?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i=e===Yt?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;kt(t.element).on(n,t.config.selector,function(e){return t._enter(e)}).on(i,t.config.selector,function(e){return t._leave(e)})}kt(t.element).closest(".modal").on("hide.bs.modal",function(){return t.hide()})}),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},n._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",""))},n._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||kt(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),kt(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?qt:Yt]=!0),kt(e.getTipElement()).hasClass(Bt)||e._hoverState===Ht?e._hoverState=Ht:(clearTimeout(e._timeout),e._hoverState=Ht,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ht&&e.show()},e.config.delay.show):e.show())},n._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||kt(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),kt(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?qt:Yt]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=Ut,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===Ut&&e.hide()},e.config.delay.hide):e.hide())},n._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},n._getConfig=function(t){return"number"==typeof(t=r({},this.constructor.Default,kt(this.element).data(),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()),hr.typeCheckConfig($t,t,this.constructor.DefaultType),t},n._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},n._cleanTipClass=function(){var t=kt(this.getTipElement()),e=t.attr("class").match(xt);null!==e&&e.length>0&&t.removeClass(e.join(""))},n._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},n._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(kt(t).removeClass(Wt),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each(function(){var n=kt(this).data(jt),i="object"==typeof e&&e;if((n||!/dispose|hide/.test(e))&&(n||(n=new t(this,i),kt(this).data(jt,n)),"string"==typeof e)){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}})},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return Qt}},{key:"NAME",get:function(){return $t}},{key:"DATA_KEY",get:function(){return jt}},{key:"Event",get:function(){return Gt}},{key:"EVENT_KEY",get:function(){return Rt}},{key:"DefaultType",get:function(){return Ft}}]),t}(),kt.fn[$t]=Zt._jQueryInterface,kt.fn[$t].Constructor=Zt,kt.fn[$t].noConflict=function(){return kt.fn[$t]=Lt,Zt._jQueryInterface},Zt),dr=(te="popover",ne="."+(ee="bs.popover"),ie=(Jt=t).fn[te],re="bs-popover",oe=new RegExp("(^|\\s)"+re+"\\S+","g"),se=r({},ur.Default,{placement:"right",trigger:"click",content:"",template:''}),ae=r({},ur.DefaultType,{content:"(string|element|function)"}),le="fade",ce="show",he=".popover-header",ue=".popover-body",de={HIDE:"hide"+ne,HIDDEN:"hidden"+ne,SHOW:"show"+ne,SHOWN:"shown"+ne,INSERTED:"inserted"+ne,CLICK:"click"+ne,FOCUSIN:"focusin"+ne,FOCUSOUT:"focusout"+ne,MOUSEENTER:"mouseenter"+ne,MOUSELEAVE:"mouseleave"+ne},fe=function(t){function e(){return t.apply(this,arguments)||this}o(e,t);var n=e.prototype;return n.isWithContent=function(){return this.getTitle()||this._getContent()},n.addAttachmentClass=function(t){Jt(this.getTipElement()).addClass(re+"-"+t)},n.getTipElement=function(){return this.tip=this.tip||Jt(this.config.template)[0],this.tip},n.setContent=function(){var t=Jt(this.getTipElement());this.setElementContent(t.find(he),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ue),e),t.removeClass(le+" "+ce)},n._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},n._cleanTipClass=function(){var t=Jt(this.getTipElement()),e=t.attr("class").match(oe);null!==e&&e.length>0&&t.removeClass(e.join(""))},e._jQueryInterface=function(t){return this.each(function(){var n=Jt(this).data(ee),i="object"==typeof t?t:null;if((n||!/destroy|hide/.test(t))&&(n||(n=new e(this,i),Jt(this).data(ee,n)),"string"==typeof t)){if(void 0===n[t])throw new TypeError('No method named "'+t+'"');n[t]()}})},i(e,null,[{key:"VERSION",get:function(){return"4.0.0"}},{key:"Default",get:function(){return se}},{key:"NAME",get:function(){return te}},{key:"DATA_KEY",get:function(){return ee}},{key:"Event",get:function(){return de}},{key:"EVENT_KEY",get:function(){return ne}},{key:"DefaultType",get:function(){return ae}}]),e}(ur),Jt.fn[te]=fe._jQueryInterface,Jt.fn[te].Constructor=fe,Jt.fn[te].noConflict=function(){return Jt.fn[te]=ie,fe._jQueryInterface},me="scrollspy",_e="."+(ge="bs.scrollspy"),ve=(pe=t).fn[me],ye={offset:10,method:"auto",target:""},Ee={offset:"number",method:"string",target:"(string|element)"},be={ACTIVATE:"activate"+_e,SCROLL:"scroll"+_e,LOAD_DATA_API:"load"+_e+".data-api"},Ce="dropdown-item",Ie="active",Te={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},Ae="offset",Se="position",we=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" "+Te.NAV_LINKS+","+this._config.target+" "+Te.LIST_ITEMS+","+this._config.target+" "+Te.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,pe(this._scrollElement).on(be.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?Ae:Se,n="auto"===this._config.method?e:this._config.method,i=n===Se?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),pe.makeArray(pe(this._selector)).map(function(t){var e,r=hr.getSelectorFromElement(t);if(r&&(e=pe(r)[0]),e){var o=e.getBoundingClientRect();if(o.width||o.height)return[pe(e)[n]().top+i,r]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},e.dispose=function(){pe.removeData(this._element,ge),pe(this._scrollElement).off(_e),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},ye,t)).target){var e=pe(t.target).attr("id");e||(e=hr.getUID(me),pe(t.target).attr("id",e)),t.target="#"+e}return hr.typeCheckConfig(me,t,Ee),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var r=this._offsets.length;r--;){this._activeTarget!==this._targets[r]&&t>=this._offsets[r]&&(void 0===this._offsets[r+1]||t li > .active",Ue='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ge=".dropdown-toggle",We="> .dropdown-menu .active",Be=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&De(this._element).hasClass(Re)||De(this._element).hasClass(Le))){var e,n,i=De(this._element).closest(Me)[0],r=hr.getSelectorFromElement(this._element);if(i){var o="UL"===i.nodeName?He:Qe;n=(n=De.makeArray(De(i).find(o)))[n.length-1]}var s=De.Event($e.HIDE,{relatedTarget:this._element}),a=De.Event($e.SHOW,{relatedTarget:n});if(n&&De(n).trigger(s),De(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=De(r)[0]),this._activate(this._element,i);var l=function(){var e=De.Event($e.HIDDEN,{relatedTarget:t._element}),i=De.Event($e.SHOWN,{relatedTarget:n});De(n).trigger(e),De(t._element).trigger(i)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){De.removeData(this._element,Ne),this._element=null},e._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?De(e).find(He):De(e).children(Qe))[0],o=n&&hr.supportsTransitionEnd()&&r&&De(r).hasClass(Pe),s=function(){return i._transitionComplete(t,r,n)};r&&o?De(r).one(hr.TRANSITION_END,s).emulateTransitionEnd(150):s()},e._transitionComplete=function(t,e,n){if(e){De(e).removeClass(xe+" "+Re);var i=De(e.parentNode).find(We)[0];i&&De(i).removeClass(Re),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(De(t).addClass(Re),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),hr.reflow(t),De(t).addClass(xe),t.parentNode&&De(t.parentNode).hasClass(je)){var r=De(t).closest(Fe)[0];r&&De(r).find(Ge).addClass(Re),t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each(function(){var n=De(this),i=n.data(Ne);if(i||(i=new t(this),n.data(Ne,i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}})},i(t,null,[{key:"VERSION",get:function(){return"4.0.0"}}]),t}(),De(document).on($e.CLICK_DATA_API,Ue,function(t){t.preventDefault(),Be._jQueryInterface.call(De(this),"show")}),De.fn.tab=Be._jQueryInterface,De.fn.tab.Constructor=Be,De.fn.tab.noConflict=function(){return De.fn.tab=ke,Be._jQueryInterface},function(){var t=!1,e="",n={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};var i={transitionEndSupported:function(){return t},transitionEndSelector:function(){return e},isChar:function(t){return void 0===t.which||"number"==typeof t.which&&t.which>0&&(!t.ctrlKey&&!t.metaKey&&!t.altKey&&8!==t.which&&9!==t.which&&13!==t.which&&16!==t.which&&17!==t.which&&20!==t.which&&27!==t.which)},assert:function(t,e,n){if(e)throw void 0===!t&&t.css("border","1px solid red"),console.error(n,t),n},describe:function(t){return void 0===t?"undefined":0===t.length?"(no matching elements)":t[0].outerHTML.split(">")[0]+">"}};return function(){t=function(){if(window.QUnit)return!1;var t=document.createElement("bmd");for(var e in n)if(void 0!==t.style[e])return n[e];return!1}();for(var i in n)e+=" "+n[i]}(),i}(jQuery)),fr=(Ke=jQuery,Ve="is-filled",Ye="is-focused",qe={BMD_FORM_GROUP:"."+"bmd-form-group"},ze={},function(){function t(t,e,n){void 0===n&&(n={}),this.$element=t,this.config=Ke.extend(!0,{},ze,e);for(var i in n)this[i]=n[i]}var e=t.prototype;return e.dispose=function(t){this.$element.data(t,null),this.$element=null,this.config=null},e.addFormGroupFocus=function(){this.$element.prop("disabled")||this.$bmdFormGroup.addClass(Ye)},e.removeFormGroupFocus=function(){this.$bmdFormGroup.removeClass(Ye)},e.removeIsFilled=function(){this.$bmdFormGroup.removeClass(Ve)},e.addIsFilled=function(){this.$bmdFormGroup.addClass(Ve)},e.findMdbFormGroup=function(t){void 0===t&&(t=!0);var e=this.$element.closest(qe.BMD_FORM_GROUP);return 0===e.length&&t&&Ke.error("Failed to find "+qe.BMD_FORM_GROUP+" for "+dr.describe(this.$element)),e},t}()),pr=(Xe=jQuery,tn="has-danger",en="input-group",nn={FORM_GROUP:"."+"form-group",BMD_FORM_GROUP:"."+(Ze="bmd-form-group"),BMD_LABEL_WILDCARD:"label[class^='"+(Je="bmd-label")+"'], label[class*=' "+Je+"']"},rn={validate:!1,formGroup:{required:!1},bmdFormGroup:{template:" ",create:!0,required:!0},label:{required:!1,selectors:[".form-control-label","> label"],className:"bmd-label-static"},requiredClasses:[],invalidComponentMatches:[],convertInputSizeVariations:!0},on={"form-control-lg":"bmd-form-group-lg","form-control-sm":"bmd-form-group-sm"},function(t){function e(e,n,i){var r;return void 0===i&&(i={}),(r=t.call(this,e,Xe.extend(!0,{},rn,n),i)||this)._rejectInvalidComponentMatches(),r.rejectWithoutRequiredStructure(),r._rejectWithoutRequiredClasses(),r.$formGroup=r.findFormGroup(r.config.formGroup.required),r.$bmdFormGroup=r.resolveMdbFormGroup(),r.$bmdLabel=r.resolveMdbLabel(),r.resolveMdbFormGroupSizing(),r.addFocusListener(),r.addChangeListener(),""!=r.$element.val()&&r.addIsFilled(),r}o(e,t);var n=e.prototype;return n.dispose=function(e){t.prototype.dispose.call(this,e),this.$bmdFormGroup=null,this.$formGroup=null},n.rejectWithoutRequiredStructure=function(){},n.addFocusListener=function(){var t=this;this.$element.on("focus",function(){t.addFormGroupFocus()}).on("blur",function(){t.removeFormGroupFocus()})},n.addChangeListener=function(){var t=this;this.$element.on("keydown paste",function(e){dr.isChar(e)&&t.addIsFilled()}).on("keyup change",function(){t.isEmpty()?t.removeIsFilled():t.addIsFilled(),t.config.validate&&(void 0===t.$element[0].checkValidity||t.$element[0].checkValidity()?t.removeHasDanger():t.addHasDanger())})},n.addHasDanger=function(){this.$bmdFormGroup.addClass(tn)},n.removeHasDanger=function(){this.$bmdFormGroup.removeClass(tn)},n.isEmpty=function(){return null===this.$element.val()||void 0===this.$element.val()||""===this.$element.val()},n.resolveMdbFormGroup=function(){var t=this.findMdbFormGroup(!1);return void 0!==t&&0!==t.length||(!this.config.bmdFormGroup.create||void 0!==this.$formGroup&&0!==this.$formGroup.length?this.$formGroup.addClass(Ze):this.outerElement().parent().hasClass(en)?this.outerElement().parent().wrap(this.config.bmdFormGroup.template):this.outerElement().wrap(this.config.bmdFormGroup.template),t=this.findMdbFormGroup(this.config.bmdFormGroup.required)),t},n.outerElement=function(){return this.$element},n.resolveMdbLabel=function(){var t=this.$bmdFormGroup.find(nn.BMD_LABEL_WILDCARD);return void 0!==t&&0!==t.length||void 0===(t=this.findMdbLabel(this.config.label.required))||0===t.length||t.addClass(this.config.label.className),t},n.findMdbLabel=function(t){void 0===t&&(t=!0);var e=null,n=this.config.label.selectors,i=Array.isArray(n),r=0;for(n=i?n:n[Symbol.iterator]();;){var o;if(i){if(r>=n.length)break;o=n[r++]}else{if((r=n.next()).done)break;o=r.value}var s=o;if(void 0!==(e=Xe.isFunction(s)?s(this):this.$bmdFormGroup.find(s))&&e.length>0)break}return 0===e.length&&t&&Xe.error("Failed to find "+nn.BMD_LABEL_WILDCARD+" within form-group for "+dr.describe(this.$element)),e},n.findFormGroup=function(t){void 0===t&&(t=!0);var e=this.$element.closest(nn.FORM_GROUP);return 0===e.length&&t&&Xe.error("Failed to find "+nn.FORM_GROUP+" for "+dr.describe(this.$element)),e},n.resolveMdbFormGroupSizing=function(){if(this.config.convertInputSizeVariations)for(var t in on)this.$element.hasClass(t)&&this.$bmdFormGroup.addClass(on[t])},n._rejectInvalidComponentMatches=function(){var t=this.config.invalidComponentMatches,e=Array.isArray(t),n=0;for(t=e?t:t[Symbol.iterator]();;){var i;if(e){if(n>=t.length)break;i=t[n++]}else{if((n=t.next()).done)break;i=n.value}i.rejectMatch(this.constructor.name,this.$element)}},n._rejectWithoutRequiredClasses=function(){var t=this.config.requiredClasses,e=Array.isArray(t),n=0;for(t=e?t:t[Symbol.iterator]();;){var i;if(e){if(n>=t.length)break;i=t[n++]}else{if((n=t.next()).done)break;i=n.value}var r=i,o=!1;if(-1!==r.indexOf("||")){var s=r.split("||"),a=Array.isArray(s),l=0;for(s=a?s:s[Symbol.iterator]();;){var c;if(a){if(l>=s.length)break;c=s[l++]}else{if((l=s.next()).done)break;c=l.value}var h=c;if(this.$element.hasClass(h)){o=!0;break}}}else this.$element.hasClass(r)&&(o=!0);o||Xe.error(this.constructor.name+" element: "+dr.describe(this.$element)+" requires class: "+r)}},e}(fr)),mr=(sn=jQuery,an={label:{required:!1}},ln="label",function(t){function e(e,n,i){var r;return(r=t.call(this,e,sn.extend(!0,{},an,n),i)||this).decorateMarkup(),r}o(e,t);var n=e.prototype;return n.decorateMarkup=function(){var t=sn(this.config.template);this.$element.after(t),!1!==this.config.ripples&&t.bmdRipples()},n.outerElement=function(){return this.$element.parent().closest("."+this.outerClass)},n.rejectWithoutRequiredStructure=function(){dr.assert(this.$element,"label"===!this.$element.parent().prop("tagName"),this.constructor.name+"'s "+dr.describe(this.$element)+" parent element should be ."),dr.assert(this.$element,!this.outerElement().hasClass(this.outerClass),this.constructor.name+"'s "+dr.describe(this.$element)+" outer element should have class "+this.outerClass+".")},n.addFocusListener=function(){var t=this;this.$element.closest(ln).hover(function(){t.addFormGroupFocus()},function(){t.removeFormGroupFocus()})},n.addChangeListener=function(){var t=this;this.$element.change(function(){t.$element.blur()})},e}(pr)),gr=(cn=jQuery,un="bmd."+(hn="checkbox"),dn="bmd"+(hn.charAt(0).toUpperCase()+hn.slice(1)),fn=cn.fn[dn],pn={template:" "},mn=function(t){function e(e,n,i){return void 0===i&&(i={inputType:hn,outerClass:hn}),t.call(this,e,cn.extend(!0,pn,n),i)||this}return o(e,t),e.prototype.dispose=function(e){void 0===e&&(e=un),t.prototype.dispose.call(this,e)},e.matches=function(t){return"checkbox"===t.attr("type")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for type='checkbox'.")},e._jQueryInterface=function(t){return this.each(function(){var n=cn(this),i=n.data(un);i||(i=new e(n,t),n.data(un,i))})},e}(mr),cn.fn[dn]=mn._jQueryInterface,cn.fn[dn].Constructor=mn,cn.fn[dn].noConflict=function(){return cn.fn[dn]=fn,mn._jQueryInterface},mn),_r=(gn=jQuery,vn="bmd."+(_n="checkboxInline"),yn="bmd"+(_n.charAt(0).toUpperCase()+_n.slice(1)),En=gn.fn[yn],bn={bmdFormGroup:{create:!1,required:!1}},Cn=function(t){function e(e,n,i){return void 0===i&&(i={inputType:"checkbox",outerClass:"checkbox-inline"}),t.call(this,e,gn.extend(!0,{},bn,n),i)||this}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,vn)},e._jQueryInterface=function(t){return this.each(function(){var n=gn(this),i=n.data(vn);i||(i=new e(n,t),n.data(vn,i))})},e}(gr),gn.fn[yn]=Cn._jQueryInterface,gn.fn[yn].Constructor=Cn,gn.fn[yn].noConflict=function(){return gn.fn[yn]=En,Cn._jQueryInterface},In=jQuery,An="bmd."+(Tn="collapseInline"),Sn="bmd"+(Tn.charAt(0).toUpperCase()+Tn.slice(1)),wn=In.fn[Sn],Dn={ANY_INPUT:"input, select, textarea"},Nn={IN:"in",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed",WIDTH:"width"},On={},kn=function(t){function e(e,n){var i;(i=t.call(this,e,In.extend(!0,{},On,n))||this).$bmdFormGroup=i.findMdbFormGroup(!0);var r=e.data("target");i.$collapse=In(r),dr.assert(e,0===i.$collapse.length,"Cannot find collapse target for "+dr.describe(e)),dr.assert(i.$collapse,!i.$collapse.hasClass(Nn.COLLAPSE),dr.describe(i.$collapse)+" is expected to have the '"+Nn.COLLAPSE+"' class. It is being targeted by "+dr.describe(e));var o=i.$bmdFormGroup.find(Dn.ANY_INPUT);return o.length>0&&(i.$input=o.first()),i.$collapse.hasClass(Nn.WIDTH)||i.$collapse.addClass(Nn.WIDTH),i.$input&&(i.$collapse.on("shown.bs.collapse",function(){i.$input.focus()}),i.$input.blur(function(){i.$collapse.collapse("hide")})),i}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,An),this.$bmdFormGroup=null,this.$collapse=null,this.$input=null},e._jQueryInterface=function(t){return this.each(function(){var n=In(this),i=n.data(An);i||(i=new e(n,t),n.data(An,i))})},e}(fr),In.fn[Sn]=kn._jQueryInterface,In.fn[Sn].Constructor=kn,In.fn[Sn].noConflict=function(){return In.fn[Sn]=wn,kn._jQueryInterface},$n=jQuery,Rn="bmd."+(jn="file"),Ln="bmd"+(jn.charAt(0).toUpperCase()+jn.slice(1)),Pn=$n.fn[Ln],xn={},Fn={FILE:jn,IS_FILE:"is-file"},Mn="input.form-control[readonly]",Qn=function(t){function e(e,n){var i;return(i=t.call(this,e,$n.extend(!0,xn,n))||this).$bmdFormGroup.addClass(Fn.IS_FILE),i}o(e,t);var n=e.prototype;return n.dispose=function(){t.prototype.dispose.call(this,Rn)},e.matches=function(t){return"file"===t.attr("type")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for type='file'.")},n.outerElement=function(){return this.$element.parent().closest("."+Fn.FILE)},n.rejectWithoutRequiredStructure=function(){dr.assert(this.$element,"label"===!this.outerElement().prop("tagName"),this.constructor.name+"'s "+dr.describe(this.$element)+" parent element "+dr.describe(this.outerElement())+" should be ."),dr.assert(this.$element,!this.outerElement().hasClass(Fn.FILE),this.constructor.name+"'s "+dr.describe(this.$element)+" parent element "+dr.describe(this.outerElement())+" should have class ."+Fn.FILE+".")},n.addFocusListener=function(){var t=this;this.$bmdFormGroup.on("focus",function(){t.addFormGroupFocus()}).on("blur",function(){t.removeFormGroupFocus()})},n.addChangeListener=function(){var t=this;this.$element.on("change",function(){var e="";$n.each(t.$element.files,function(t,n){e+=n.name+" , "}),(e=e.substring(0,e.length-2))?t.addIsFilled():t.removeIsFilled(),t.$bmdFormGroup.find(Mn).val(e)})},e._jQueryInterface=function(t){return this.each(function(){var n=$n(this),i=n.data(Rn);i||(i=new e(n,t),n.data(Rn,i))})},e}(pr),$n.fn[Ln]=Qn._jQueryInterface,$n.fn[Ln].Constructor=Qn,$n.fn[Ln].noConflict=function(){return $n.fn[Ln]=Pn,Qn._jQueryInterface},Hn=jQuery,Gn="bmd."+(Un="radio"),Wn="bmd"+(Un.charAt(0).toUpperCase()+Un.slice(1)),Bn=Hn.fn[Wn],Kn={template:" "},Vn=function(t){function e(e,n,i){return void 0===i&&(i={inputType:Un,outerClass:Un}),t.call(this,e,Hn.extend(!0,Kn,n),i)||this}return o(e,t),e.prototype.dispose=function(e){void 0===e&&(e=Gn),t.prototype.dispose.call(this,e)},e.matches=function(t){return"radio"===t.attr("type")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for type='radio'.")},e._jQueryInterface=function(t){return this.each(function(){var n=Hn(this),i=n.data(Gn);i||(i=new e(n,t),n.data(Gn,i))})},e}(mr),Hn.fn[Wn]=Vn._jQueryInterface,Hn.fn[Wn].Constructor=Vn,Hn.fn[Wn].noConflict=function(){return Hn.fn[Wn]=Bn,Vn._jQueryInterface},Vn),vr=(Yn=jQuery,zn="bmd."+(qn="radioInline"),Xn="bmd"+(qn.charAt(0).toUpperCase()+qn.slice(1)),Zn=Yn.fn[Xn],Jn={bmdFormGroup:{create:!1,required:!1}},ti=function(t){function e(e,n,i){return void 0===i&&(i={inputType:"radio",outerClass:"radio-inline"}),t.call(this,e,Yn.extend(!0,{},Jn,n),i)||this}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,zn)},e._jQueryInterface=function(t){return this.each(function(){var n=Yn(this),i=n.data(zn);i||(i=new e(n,t),n.data(zn,i))})},e}(_r),Yn.fn[Xn]=ti._jQueryInterface,Yn.fn[Xn].Constructor=ti,Yn.fn[Xn].noConflict=function(){return Yn.fn[Xn]=Zn,ti._jQueryInterface},ei=jQuery,ni={requiredClasses:["form-control"]},function(t){function e(e,n){var i;return(i=t.call(this,e,ei.extend(!0,ni,n))||this).isEmpty()&&i.removeIsFilled(),i}return o(e,t),e}(pr)),yr=(ii=jQuery,oi="bmd."+(ri="select"),si="bmd"+(ri.charAt(0).toUpperCase()+ri.slice(1)),ai=ii.fn[si],li={requiredClasses:["form-control||custom-select"]},ci=function(t){function e(e,n){var i;return(i=t.call(this,e,ii.extend(!0,li,n))||this).addIsFilled(),i}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,oi)},e.matches=function(t){return"select"===t.prop("tagName")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for .")},e._jQueryInterface=function(t){return this.each(function(){var n=ii(this),i=n.data(oi);i||(i=new e(n,t),n.data(oi,i))})},e}(vr),ii.fn[si]=ci._jQueryInterface,ii.fn[si].Constructor=ci,ii.fn[si].noConflict=function(){return ii.fn[si]=ai,ci._jQueryInterface},hi=jQuery,di="bmd."+(ui="switch"),fi="bmd"+(ui.charAt(0).toUpperCase()+ui.slice(1)),pi=hi.fn[fi],mi={template:" "},gi=function(t){function e(e,n,i){return void 0===i&&(i={inputType:"checkbox",outerClass:"switch"}),t.call(this,e,hi.extend(!0,{},mi,n),i)||this}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,di)},e._jQueryInterface=function(t){return this.each(function(){var n=hi(this),i=n.data(di);i||(i=new e(n,t),n.data(di,i))})},e}(gr),hi.fn[fi]=gi._jQueryInterface,hi.fn[fi].Constructor=gi,hi.fn[fi].noConflict=function(){return hi.fn[fi]=pi,gi._jQueryInterface},_i=jQuery,yi="bmd."+(vi="text"),Ei="bmd"+(vi.charAt(0).toUpperCase()+vi.slice(1)),bi=_i.fn[Ei],Ci={},Ii=function(t){function e(e,n){return t.call(this,e,_i.extend(!0,Ci,n))||this}return o(e,t),e.prototype.dispose=function(e){void 0===e&&(e=yi),t.prototype.dispose.call(this,e)},e.matches=function(t){return"text"===t.attr("type")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for type='text'.")},e._jQueryInterface=function(t){return this.each(function(){var n=_i(this),i=n.data(yi);i||(i=new e(n,t),n.data(yi,i))})},e}(vr),_i.fn[Ei]=Ii._jQueryInterface,_i.fn[Ei].Constructor=Ii,_i.fn[Ei].noConflict=function(){return _i.fn[Ei]=bi,Ii._jQueryInterface},Ti=jQuery,Si="bmd."+(Ai="textarea"),wi="bmd"+(Ai.charAt(0).toUpperCase()+Ai.slice(1)),Di=Ti.fn[wi],Ni={},Oi=function(t){function e(e,n){return t.call(this,e,Ti.extend(!0,Ni,n))||this}return o(e,t),e.prototype.dispose=function(){t.prototype.dispose.call(this,Si)},e.matches=function(t){return"textarea"===t.prop("tagName")},e.rejectMatch=function(t,e){dr.assert(this.$element,this.matches(e),t+" component element "+dr.describe(e)+" is invalid for