diff --git a/.env b/.env new file mode 100644 index 0000000..ff13404 --- /dev/null +++ b/.env @@ -0,0 +1,166 @@ +COMPOSE_PROJECT_NAME=haitidata +BACKUPS_VOLUME_DRIVER=local + +DOCKER_HOST_IP= +DOCKER_ENV=production +# See https://github.com/geosolutions-it/geonode-generic/issues/28 +# to see why we force API version to 1.24 +DOCKER_API_VERSION="1.24" + +C_FORCE_ROOT=1 +IS_CELERY=false +IS_FIRST_START=true +FORCE_REINIT=false + +SITEURL=http://localhost/ +ALLOWED_HOSTS=['django',] + +GEONODE_INSTANCE_NAME=geonode +DJANGO_SETTINGS_MODULE=haitidata.settings +UWSGI_CMD=uwsgi --ini /usr/src/haitidata/uwsgi.ini + +# ################# +# backend +# ################# +GEONODE_DATABASE=geonode +GEONODE_DATABASE_PASSWORD=geonode +GEONODE_GEODATABASE=geonode_data +GEONODE_GEODATABASE_PASSWORD=geonode_data + +DATABASE_URL=postgres://geonode:geonode@db:5432/geonode +GEODATABASE_URL=postgis://geonode:geonode@db:5432/geonode_data +DEFAULT_BACKEND_DATASTORE=datastore +BROKER_URL=amqp://guest:guest@rabbitmq:5672/ + +# ################# +# geoserver +# ################# +GEOSERVER_WEB_UI_LOCATION=http://localhost/geoserver/ +GEOSERVER_PUBLIC_LOCATION=http://localhost/geoserver/ +GEOSERVER_LOCATION=http://geoserver:8080/geoserver/ +GEOSERVER_ADMIN_PASSWORD=geoserver + +OGC_REQUEST_TIMEOUT=30 +OGC_REQUEST_MAX_RETRIES=1 +OGC_REQUEST_BACKOFF_FACTOR=0.3 +OGC_REQUEST_POOL_MAXSIZE=10 +OGC_REQUEST_POOL_CONNECTIONS=10 + +# Java Options & Memory +GEOSERVER_JAVA_OPTS=-Djava.awt.headless=true -Xms2G -Xmx4G -XX:PerfDataSamplingInterval=500 -XX:SoftRefLRUPolicyMSPerMB=36000 -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=true -DGEOSERVER_CSRF_DISABLED=true + +# Data Uploader +DEFAULT_BACKEND_UPLOADER=geonode.importer +TIME_ENABLED=True +MOSAIC_ENABLED=False + +# ################# +# nginx +# HTTPD Server +# ################# +# IP or domain name and port where the server can be reached on HTTP (leave HOST empty if you want to use HTTPS only) +GEONODE_LB_HOST_IP=localhost +HTTP_HOST=localhost +# port where the server can be reached on HTTP +GEONODE_LB_PORT=80 +HTTP_PORT=80 + +# IP or domain name and port where the server can be reached on HTTPS (leave HOST empty if you want to use HTTP only) +# HTTPS_HOST=localhost +# port where the server can be reached on HTTPS +# GEONODE_LB_PORT=443 +# HTTPS_PORT=443 + +# Let's Encrypt certificates for https encryption. You must have a domain name as HTTPS_HOST (doesn't work +# with an ip) and it must be reachable from the outside. This can be one of the following : +# disabled : we do not get a certificate at all (a placeholder certificate will be used) +# staging : we get staging certificates (are invalid, but allow to test the process completely and have much higher limit rates) +# production : we get a normal certificate (default) +LETSENCRYPT_MODE=disabled +# LETSENCRYPT_MODE=staging +# LETSENCRYPT_MODE=production + +RESOLVER=127.0.0.11 + +# ################# +# Security +# ################# +# Admin Settings +ADMIN_PASSWORD=admin +ADMIN_EMAIL=admin@localhost + +# EMAIL Notifications +EMAIL_ENABLE=False +DJANGO_EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend +DJANGO_EMAIL_HOST=localhost +DJANGO_EMAIL_PORT=25 +DJANGO_EMAIL_HOST_USER= +DJANGO_EMAIL_HOST_PASSWORD= +DJANGO_EMAIL_USE_TLS=False +DEFAULT_FROM_EMAIL='GeoNode ' + +# Session/Access Control +LOCKDOWN_GEONODE=False +CORS_ORIGIN_ALLOW_ALL=True +SESSION_EXPIRED_CONTROL_ENABLED=True +DEFAULT_ANONYMOUS_VIEW_PERMISSION=True +DEFAULT_ANONYMOUS_DOWNLOAD_PERMISSION=True + +# Users Registration +ACCOUNT_OPEN_SIGNUP=True +ACCOUNT_EMAIL_REQUIRED=True +ACCOUNT_APPROVAL_REQUIRED=False +ACCOUNT_CONFIRM_EMAIL_ON_GET=False +ACCOUNT_EMAIL_VERIFICATION='optional' +ACCOUNT_EMAIL_CONFIRMATION_EMAIL=False +ACCOUNT_EMAIL_CONFIRMATION_REQUIRED=False + +# OAuth2 +OAUTH2_API_KEY= +OAUTH2_CLIENT_ID=Jrchz2oPY3akmzndmgUTYrs9gczlgoV20YPSvqaV +OAUTH2_CLIENT_SECRET=rCnp5txobUo83EpQEblM8fVj3QT5zb5qRfxNsuPzCqZaiRyIoxM4jdgMiZKFfePBHYXCLd7B8NlkfDBY9HKeIQPcy5Cp08KQNpRHQbjpLItDHv12GvkSeXp6OxaUETv3 + +# GeoNode APIs +API_LOCKDOWN=False +TASTYPIE_APIKEY= + +# ################# +# Production and +# Monitoring +# ################# +DEBUG=False + +SECRET_KEY='myv-y4#7j-d*p-__@j#*3z@!y24fz8%^z2v6atuy4bo9vqr1_a' + +STATIC_ROOT=/mnt/volumes/statics/static/ +MEDIA_ROOT=/mnt/volumes/statics/uploaded/ +GEOIP_PATH=/mnt/volumes/statics/geoip.db + +CACHE_BUSTING_STATIC_ENABLED=False +CACHE_BUSTING_MEDIA_ENABLED=False + +MAX_DOCUMENT_SIZE=2 +CLIENT_RESULTS_LIMIT=5 +API_LIMIT_PER_PAGE=1000 +ALLOWED_DOCUMENT_TYPES=['doc', 'docx', 'gif', 'jpg', 'jpeg', 'ods', 'odt', 'odp', 'pdf', 'png','ppt', 'pptx', 'rar', 'sld', 'tif', 'tiff', 'txt', 'xls', 'xlsx', 'xml', 'zip', 'gz', 'qml'] + +# GIS Client +GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY=mapstore +MAPBOX_ACCESS_TOKEN= +BING_API_KEY= +GOOGLE_API_KEY= + +# Monitoring +MONITORING_ENABLED=True +MONITORING_DATA_TTL=365 +USER_ANALYTICS_ENABLED=True +USER_ANALYTICS_GZIP=False +MONITORING_SERVICE_NAME=local-geonode +MONITORING_HOST_NAME=geonode + +# Other Options/Contribs +MODIFY_TOPICCATEGORY=True +AVATAR_GRAVATAR_SSL=True +EXIF_ENABLED=False +CREATE_LAYER=False +FAVORITE_ENABLED=False diff --git a/.gitignore b/.gitignore index 9e81aae..f701259 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ - -.DS_Store - # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -10,7 +7,7 @@ __pycache__/ # Distribution / packaging .Python -env/ +# env/ build/ develop-eggs/ dist/ @@ -46,12 +43,9 @@ nosetests.xml coverage.xml *,cover -# Translations -#*.mo -*.pot - # Django stuff: *.log +celerybeat-schedule.* # Sphinx documentation docs/_build/ @@ -61,7 +55,14 @@ target/ # Downstream Project downloaded/ -geoserver/ uploaded/ +static_root/ development.db development.db-journal +local_settings.py + +.idea/ + +/.vscode/settings.json + +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..12c5d87 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,58 @@ +FROM python:2.7.16-stretch +MAINTAINER GeoNode development team + +RUN mkdir -p /usr/src/haitidata + +# This section is borrowed from the official Django image but adds GDAL and others +RUN apt-get update && apt-get install -y \ + gcc \ + zip \ + gettext \ + postgresql-client libpq-dev \ + sqlite3 \ + python-gdal python-psycopg2 \ + python-imaging python-lxml \ + python-dev libgdal-dev \ + python-ldap \ + libmemcached-dev libsasl2-dev zlib1g-dev \ + python-pylibmc \ + uwsgi uwsgi-plugin-python \ + --no-install-recommends && rm -rf /var/lib/apt/lists/* + + +RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list +RUN apt-get update && apt-get install -y geoip-bin + +# add bower and grunt command +COPY . /usr/src/haitidata/ +WORKDIR /usr/src/haitidata + +RUN apt-get update && apt-get -y install cron +COPY monitoring-cron /etc/cron.d/monitoring-cron +RUN chmod 0644 /etc/cron.d/monitoring-cron +RUN crontab /etc/cron.d/monitoring-cron +RUN touch /var/log/cron.log +RUN service cron start + +COPY wait-for-databases.sh /usr/bin/wait-for-databases +RUN chmod +x /usr/bin/wait-for-databases +RUN chmod +x /usr/src/haitidata/tasks.py \ + && chmod +x /usr/src/haitidata/entrypoint.sh + +# Upgrade pip +RUN pip install pip==20.1 + +# To understand the next section (the need for requirements.txt and setup.py) +# Please read: https://packaging.python.org/requirements/ + +# fix for known bug in system-wide packages +RUN ln -fs /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata*.py /usr/lib/python2.7/ + +# app-specific requirements +RUN pip install --src /usr/src -r requirements.txt +RUN pip install -e . + +# Install pygdal (after requirements for numpy 1.16) +RUN pip install pygdal==$(gdal-config --version).* + +ENTRYPOINT service cron restart && /usr/src/haitidata/entrypoint.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bc22e6d --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +up: + # bring up the services + docker-compose up -d + +build: + docker-compose build django + docker-compose build celery + +sync: + # set up the database tablea + docker-compose run django python manage.py makemigrations --noinput + docker-compose exec django python manage.py migrate account --noinput + docker-compose run django python manage.py migrate --noinput + +wait: + sleep 5 + +logs: + docker-compose logs --follow + +down: + docker-compose down + +test: + docker-compose run django python manage.py test --failfast + +reset: down up wait sync + +hardreset: pull build reset diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad19474 --- /dev/null +++ b/README.md @@ -0,0 +1,231 @@ +# Haitidata + +GeoNode template project. Generates a django project with GeoNode support. + +## Table of Contents + +- [Developer Workshop](#developer-Workshop) +- [Create a custom project](#create-a-custom-project) +- [Start your server using Docker](#start-your-server-using-docker) +- [Run the instance in development mode](#run-the-instance-in-development-mode) +- [Run the instance on a public site](#run-the-instance-on-a-public-site) +- [Stop the Docker Images](#stop-the-docker-images) +- [Recommended: Track your changes](#recommended-track-your-changes) +- [Hints: Configuring `requirements.txt`](#hints-configuring-requirementstxt) +- [Hints: Using Ansible](#hints-using-ansible) +- [Configuration](#configuration) + +## Developer Workshop + +Available at + + ```bash + http://geonode.org/dev-workshop + ``` + +## Create a custom project + +**NOTE**: *You can call your geonode project whatever you like following the naming conventions for python packages (generally lower case with underscores (``_``). In the examples below, replace ``my_geonode`` with whatever you would like to name your project.* + +### Using a Python virtual environment + +**NOTE**: *Skip this part if you want to run the project using Docker instead* + +(see [Start your server using Docker](#start-your-server-using-docker)) + +To setup your project using a local python virtual environment, follow these instructions: + +1. Prepare the Environment + + ```bash + git clone https://github.com/GeoNode/geonode-project.git -b + mkvirtualenv my_geonode + pip install Django==1.11.29 + + django-admin startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample -n monitoring-cron -n Dockerfile my_geonode + + cd my_geonode + ``` + +2. Setup the Python Dependencies + + **NOTE**: *Important: modify your `requirements.txt` file, by adding the `GeoNode` branch before continue!* + + (see [Hints: Configuring `requirements.txt`](#hints-configuring-requirementstxt)) + + ```bash + pip install -r requirements.txt + pip install -e . + + # Install GDAL Utilities for Python + pip install pygdal=="`gdal-config --version`.*" + + # Using the Default Settings + DJANGO_SETTINGS_MODULE=my_geonode.settings paver reset + DJANGO_SETTINGS_MODULE=my_geonode.settings paver setup + DJANGO_SETTINGS_MODULE=my_geonode.settings paver sync + DJANGO_SETTINGS_MODULE=my_geonode.settings paver start + + # Using the Custom Local Settings + # - Remember that `.settings` includes `.local_settings` + cp my_geonode/local_settings.py.sample my_geonode/local_settings.py + + DJANGO_SETTINGS_MODULE=my_geonode.local_settings paver reset + DJANGO_SETTINGS_MODULE=my_geonode.local_settings paver setup + DJANGO_SETTINGS_MODULE=my_geonode.local_settings paver sync + DJANGO_SETTINGS_MODULE=my_geonode.local_settings paver start + ``` + +3. Access GeoNode from browser + + **NOTE**: default admin user is ``admin`` (with pw: ``admin``) + + ```bash + http://localhost:8000/ + ``` + +## Start your server using Docker + +You need Docker 1.12 or higher, get the latest stable official release for your platform. + +1. Prepare the Environment + + ```bash + git clone https://github.com/GeoNode/geonode-project.git -b + mkvirtualenv my_geonode + pip install Django==1.11.29 + + django-admin startproject --template=./geonode-project -e py,sh,md,rst,json,yml,ini,env,sample -n monitoring-cron -n Dockerfile my_geonode + + cd my_geonode + ``` + +2. Run `docker-compose` to start it up (get a cup of coffee or tea while you wait) + + ```bash + docker-compose build --no-cache + docker-compose up -d + ``` + + ```bash + set COMPOSE_CONVERT_WINDOWS_PATHS=1 + ``` + + before running `docker-compose up` + +3. Access the site on http://localhost/ + +## Run the instance in development mode + +### Use dedicated docker-compose files while developing + +**NOTE**: In this example we are going to keep localhost as the target IP for GeoNode + + ```bash + docker-compose -f docker-compose.development.yml -f docker-compose.development.override.yml up + ``` + +## Run the instance on a public site + +### Preparation of the image (First time only) + +**NOTE**: In this example we are going to publish to the public IP http://123.456.789.111 + +```bash +vim .env + --> replace localhost with 123.456.789.111 everywhere +``` + +### Startup the image + +```bash +docker-compose up --build -d +``` + +### Stop the Docker Images + +```bash +docker-compose stop +``` + +### Fully Wipe-out the Docker Images + +**WARNING**: This will wipe out all the repositories created until now. + +**NOTE**: The images must be stopped first + +```bash +docker system prune -a +``` + +## Recommended: Track your changes + +Step 1. Install Git (for Linux, Mac or Windows). + +Step 2. Init git locally and do the first commit: + +```bash +git init +git add * +git commit -m "Initial Commit" +``` + +Step 3. Set up a free account on github or bitbucket and make a copy of the repo there. + +## Hints: Configuring `requirements.txt` + +You may want to configure your requirements.txt, if you are using additional or custom versions of python packages. For example + +```python +Django==1.11.29 +git+git://github.com//geonode.git@ +``` + +## Hints: Using Ansible + +You will need to use Ansible Role in order to run the playbook. + +In order to install and setup Ansible, run the following commands + +```bash +sudo apt-get install software-properties-common +sudo apt-add-repository ppa:ansible/ansible +sudo apt-get update +sudo apt-get install ansible +``` + +A sample Ansible Role can be found at https://github.com/GeoNode/ansible-geonode + +To install the default one, run + +```bash +sudo ansible-galaxy install GeoNode.geonode +``` + +you will find the Ansible files into the ``~/.ansible/roles`` folder. Those must be updated in order to match the GeoNode and GeoServer versions you will need to install. + +To run the Ansible playbook use something like this + +```bash +ANSIBLE_ROLES_PATH=~.ansible/roles ansible-playbook -e "gs_root_password=" -e "gs_admin_password=" -e "dj_superuser_password=" -i inventory --limit all playbook.yml +``` + +## Configuration + +**NOTE**: *For `GeoNode` settings, make use of the `ENVIRONMENT` variables whenever is possible. Avoid overwriting them yourself, you might me missing some additional logic done on `geonode.settings`* + +Since this application uses geonode, base source of settings is ``geonode.settings`` module. It provides defaults for many items, which are used by geonode. This application has own settings module, ``haitidata.settings``, which includes ``geonode.settings``. It customizes few elements: + * static/media files locations - they will be collected and stored along with this application files by default. This is useful during development. + * Adds ``haitidata`` to installed applications, updates templates, staticfiles dirs, sets urlconf to ``haitidata.urls``. + +Whether you deploy development or production environment, you should create additional settings file. Convention is to make ``haitidata.local_settings`` module. It is recommended to use ``haitidata/local_settings.py``.. That file contains small subset of settings for edition. It should: + * not be versioned along with application (because changes you make for your private deployment may become public), + * have customized at least ``DATABASES``, ``SECRET_KEY`` and ``SITEURL``. + +You can add more settings there, note however, some settings (notably ``DEBUG_STATIC``, ``EMAIL_ENABLE``, ``*_ROOT``, and few others) can be used by other settings, or as condition values, which change other settings. For example, ``EMAIL_ENABLE`` defined in ``geonode.settings`` enables whole email handling block, so if you disable it in your ``local_settings``, derived settings will be preserved. You should carefully check if additional settings you change don't trigger other settings. + +To illustrate whole concept of chained settings: + +|GeoNode configuration| |(optionally) Your deployment(s) | |Your application default configuration| +|---|---|---|---|---| +|`geonode.settings`|included by ->|`haitidata.local_settings`|included by ->|`haitidata.settings`| diff --git a/README.rst b/README.rst deleted file mode 100644 index 283d3e1..0000000 --- a/README.rst +++ /dev/null @@ -1,84 +0,0 @@ -Haitidata -======================== - -You should write some docs, it's good for the soul. - -Installation ------------- - -Install geonode with:: - - $ sudo add-apt-repository ppa:geonode/stable - - $ sudo apt-get update - - $ sudo apt-get install geonode - -Create a new template based on the geonode example project.:: - - $ django-admin startproject my_geonode --template=https://github.com/GeoNode/geonode-project/archive/2.6.zip -epy,rst - $ sudo pip install -e my_geonode - -.. note:: You should NOT use the name geonode for your project as it will conflict with the default geonode package name. - -Usage ------ - -Rename the local_settings.py.sample to local_settings.py and edit it's content by setting the SITEURL and SITENAME. - -Edit the file /etc/apache2/sites-available/geonode and change the following directive from: - - WSGIScriptAlias / /var/www/geonode/wsgi/geonode.wsgi - -to: - - WSGIScriptAlias / /path/to/my_geonode/my_geonode/wsgi.py - -To avoid having to grant apache permissions (i.e. www-data user and group) to your home dir where you likely setup the geonode-project; you may want to instead copy the wsgi.py file next to geonode.wsgi and replace the file name instead of the entire path. - - $ cp /path/to/my_geonode/my_geonode/wsgi.py /var/www/geonode/wsgi/wsgi.py - -Add the "Directory" directive for your folder like the following example: - - - - Order allow,deny - - Options Indexes FollowSymLinks - - Allow from all - - Require all granted - - IndexOptions FancyIndexing - - - -Restart apache:: - - $ sudo service apache2 restart - -Edit the templates in my_geonode/templates, the css and images to match your needs. - -In the my_geonode folder run:: - - $ python manage.py collectstatic - -Github Considerations ------------------------- - -While it is helpful to recommit your django project wrapper back to a distributed version control repository. -* It is also important to remember that production instances will store security information in the local_settings.py -* Admin/Devs should always remember to exclude this file in the .gitignore file in the same folder as the .git:: - - $ nano .gitignore - - /{project}/local_settings.py - -save, make sure the file is also removed from git cache:: - - $ git rm -f --cache //local_settings.py - - $ git status - -confirm the file is no longer staged for the next commit or that if it is as "removed" diff --git a/charts_app/admin.py b/charts_app/admin.py deleted file mode 100644 index 05e7ad9..0000000 --- a/charts_app/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.contrib import admin - -from .models import Chart - - -class ChartAdmin(admin.ModelAdmin): - list_display = ['id', 'title'] - - -admin.site.register(Chart, ChartAdmin) diff --git a/charts_app/migrations/0001_initial.py b/charts_app/migrations/0001_initial.py deleted file mode 100644 index 04f3248..0000000 --- a/charts_app/migrations/0001_initial.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('layers', '24_to_26'), - ] - - operations = [ - migrations.CreateModel( - name='Chart', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=128, blank=True)), - ('category', models.CharField(max_length=200)), - ('quantity', models.CharField(max_length=200)), - ('type', models.SmallIntegerField(default=0, choices=[(0, b'Bar chart'), (1, b'Pie chart'), (2, b'Donut chart')])), - ('aggr_type', models.SmallIntegerField(default=3, choices=[(0, b'Sum'), (1, b'Mean'), (2, b'Category count'), (3, b'Max'), (4, b'Min')])), - ('abstract', models.TextField(blank=True)), - ('layer', models.ForeignKey(to='layers.Layer')), - ], - ), - ] diff --git a/charts_app/migrations/0002_auto_20170705_0742.py b/charts_app/migrations/0002_auto_20170705_0742.py deleted file mode 100644 index 646fed7..0000000 --- a/charts_app/migrations/0002_auto_20170705_0742.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models -from django.conf import settings -import charts_app.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('charts_app', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='chart', - name='created_by', - field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True), - ), - migrations.AlterField( - model_name='chart', - name='layer', - field=models.ForeignKey(to='layers.Layer', validators=[charts_app.models.validate_wfs]), - ), - migrations.AlterField( - model_name='chart', - name='type', - field=models.SmallIntegerField(default=0, choices=[(0, b'Bar chart'), (1, b'Pie chart'), (2, b'Donut chart'), (3, b'Line chart')]), - ), - ] diff --git a/charts_app/migrations/0003_auto_20171026_0528.py b/charts_app/migrations/0003_auto_20171026_0528.py deleted file mode 100644 index e8bfa6c..0000000 --- a/charts_app/migrations/0003_auto_20171026_0528.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('charts_app', '0002_auto_20170705_0742'), - ] - - operations = [ - migrations.AlterField( - model_name='chart', - name='quantity', - field=models.CharField(max_length=200, blank=True), - ), - migrations.AlterField( - model_name='chart', - name='title', - field=models.CharField(max_length=128), - ), - ] diff --git a/charts_app/models.py b/charts_app/models.py deleted file mode 100644 index 5ebb4c2..0000000 --- a/charts_app/models.py +++ /dev/null @@ -1,80 +0,0 @@ -from django.db import models -from django.core.urlresolvers import reverse -from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ -from django.conf import settings -from django.forms import ModelForm, ValidationError as VE - -from geonode.layers.models import Layer - -from wfs_harvest.utils import get_featno, get_fields - - -def validate_wfs(value): - lyr = Layer.objects.get(pk=value) - if lyr.service_type != 'WFS': - raise ValidationError(_('%(lyr_title)s is not a WFS layer'), - code='not_a_wfs', - params={'lyr_title': lyr.title}) - - feat_no = get_featno(value) - if feat_no > settings.MAX_CSV_RECORDS: - raise ValidationError(_('%(lyr_title)s has too many features; ' - 'chart functionality is not available ' - 'for very large datasets'), - code='too_many_records', - params={'lyr_title': lyr.title}) - - -class Chart(models.Model): - CHART_TYPES = ( - (0, 'Bar chart'), - (1, 'Pie chart'), - (2, 'Donut chart'), - (3, 'Line chart') - ) - - AGGREGATION_TYPES = ( - (0, 'Sum'), - (1, 'Mean'), - (2, 'Category count'), - (3, 'Max'), - (4, 'Min'), - ) - - layer = models.ForeignKey(Layer, validators=[validate_wfs]) - title = models.CharField(max_length=128, blank=False) - category = models.CharField(max_length=200) - quantity = models.CharField(max_length=200, blank=True) - type = models.SmallIntegerField(choices=CHART_TYPES, default=0) - aggr_type = models.SmallIntegerField(choices=AGGREGATION_TYPES, default=3) - abstract = models.TextField(blank=True) - created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null = True) - - def get_absolute_url(self): - return reverse('chart_detail', kwargs={'pk': self.pk}) - -class ChartForm(ModelForm): - def clean(self): - cleaned_data = super(ChartForm, self).clean() - layer = cleaned_data.get('layer') - category = cleaned_data.get('category') - quantity = cleaned_data.get('quantity') - aggr_type = cleaned_data.get('aggr_type') - categories, quantities = get_fields(layer) - - if category not in categories: - lyr = Layer.objects.get(pk=layer) - raise VE(_('%(lyr_title)s does not contain the field %(category)s'), - code='non_extant_category_field', - params={'lyr_title': lyr.title, 'category': category}) - - if quantity not in quantities and aggr_type != 2: - lyr = Layer.objects.get(pk=layer) - raise VE(_('%(lyr_title)s does not contain the field %(quantity)s'), - code='non_extant_quantity_field', - params={'lyr_title': lyr.title, 'quantity': quantity}) - - class Meta: - model = Chart - fields = '__all__' diff --git a/charts_app/templates/donut_chart_v1.html b/charts_app/templates/donut_chart_v1.html deleted file mode 100644 index 286f532..0000000 --- a/charts_app/templates/donut_chart_v1.html +++ /dev/null @@ -1,68 +0,0 @@ - - -Donut Chart v1 -

Simple Donut Chart v1

-

Zero values excluded

-

D3js version 4, use canvas

- - - - \ No newline at end of file diff --git a/charts_app/templates/donut_chart_v2.html b/charts_app/templates/donut_chart_v2.html deleted file mode 100644 index c371272..0000000 --- a/charts_app/templates/donut_chart_v2.html +++ /dev/null @@ -1,169 +0,0 @@ - - -Donut Chart v2 -

Simple Donut Chart v2

-

Zero values excluded, label with ticks

-

D3js version 3, use svg

- - - - - \ No newline at end of file diff --git a/charts_app/templates/pie_chart_v1.html b/charts_app/templates/pie_chart_v1.html deleted file mode 100644 index 10e08c5..0000000 --- a/charts_app/templates/pie_chart_v1.html +++ /dev/null @@ -1,65 +0,0 @@ - - -Pie Chart v1 -

Simple Pie Chart v1

-

All data

-

D3js version 4, use svg

- - - - diff --git a/charts_app/templates/pie_chart_v2.html b/charts_app/templates/pie_chart_v2.html deleted file mode 100644 index 7a93002..0000000 --- a/charts_app/templates/pie_chart_v2.html +++ /dev/null @@ -1,67 +0,0 @@ - - -Pie Chart v2 -

Simple Pie Chart v2

-

Zero values excluded

-

D3js version 4, use svg

- - - - diff --git a/charts_app/tests.py b/charts_app/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/charts_app/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/charts_app/urls.py b/charts_app/urls.py deleted file mode 100644 index 2923a2d..0000000 --- a/charts_app/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.conf.urls import url - -from . import views - -urlpatterns = [url(r'^(?P[0-9]+)/$', views.ChartDetail.as_view(), name='chart_detail'), - url(r'^add/(?P[0-9]+)/$', views.ChartCreate.as_view(), name='chart_add'), - url(r'^(?P[0-9]+)/update/$', views.ChartUpdate.as_view(), name='chart_update'), - url(r'^(?P[0-9]+)/delete/$', views.ChartDelete.as_view(), name='chart_delete'), - url(r'^$', views.ChartList.as_view(), name='chart_list') - ] diff --git a/charts_app/views.py b/charts_app/views.py deleted file mode 100644 index 98ac22d..0000000 --- a/charts_app/views.py +++ /dev/null @@ -1,105 +0,0 @@ -from django.views.generic.detail import DetailView -from django.views.generic.edit import CreateView, UpdateView, DeleteView -from django.views.generic.list import ListView -from django.contrib.auth.decorators import login_required -from django.core.exceptions import PermissionDenied - - -from geonode.layers.models import Layer - -from .models import Chart, ChartForm -from wfs_harvest.utils import get_fields - - -class LoginRequiredMixin(object): - @classmethod - def as_view(cls, **initkwargs): - view = super(LoginRequiredMixin, cls).as_view(**initkwargs) - return login_required(view) - - -class ChartDetail(DetailView): - model = Chart - - def get_object(self, queryset=None): - obj = super(ChartDetail, self).get_object(queryset=queryset) - lyr_obj = Layer.objects.get(pk=obj.layer) - if not self.request.user.has_perm('download_resourcebase', lyr_obj.get_self_resource()): - raise PermissionDenied - return obj - - def get_context_data(self, **kwargs): - context = super(ChartDetail, self).get_context_data(**kwargs) - return context - - -class ChartCreate(LoginRequiredMixin, CreateView): - form_class = ChartForm - template_name = 'charts_app/chart_update_form.html' - - def get_initial(self): - layer_id = self.kwargs['layer_id'] - initial = self.initial.copy() - initial['layer'] = layer_id - return initial - - def get_context_data(self, **kwargs): - layer_id = self.kwargs['layer_id'] - layer = Layer.objects.get(pk=layer_id) - if not self.request.user.has_perm('download_resourcebase', layer.get_self_resource()): - raise PermissionDenied - fieldnames, num_fieldnames = get_fields(layer_id) - ctx = super(ChartCreate, self).get_context_data(**kwargs) - ctx['fieldnames'] = fieldnames - ctx['num_fieldnames'] = num_fieldnames - ctx['layer'] = layer - return ctx - - def form_valid(self, form): - if not self.request.user.has_perm('download_resourcebase', form.instance.layer.get_self_resource()): - raise PermissionDenied - form.instance.created_by = self.request.user - return super(ChartCreate, self).form_valid(form) - - -class ChartUpdate(LoginRequiredMixin, UpdateView): - model = Chart - fields = '__all__' - template_name = 'charts_app/chart_update_form.html' - - def get_object(self, queryset=None): - obj = super(ChartUpdate, self).get_object(queryset=queryset) - is_chart_owner = (self.request.user == obj.created_by) - lyr_obj = Layer.objects.get(pk=obj.layer) - is_lyr_owner = (self.request.user == lyr_obj.owner) - if not (self.request.user.is_superuser or is_chart_owner or is_lyr_owner): - raise PermissionDenied - return obj - - def form_valid(self, form): - form.instance.created_by = self.request.user - return super(ChartUpdate, self).form_valid(form) - - -class ChartDelete(LoginRequiredMixin, DeleteView): - model = Chart - success_url = '/layers/' - - def get_object(self, queryset=None): - obj = super(ChartDelete, self).get_object(queryset=queryset) - is_chart_owner = (self.request.user == obj.created_by) - lyr_obj = Layer.objects.get(pk=obj.layer) - is_lyr_owner = (self.request.user == lyr_obj.owner) - if not (self.request.user.is_superuser or is_chart_owner or is_lyr_owner): - raise PermissionDenied - return obj - - -class ChartList(ListView): - model = Chart - fields = '__all__' - template_name = 'charts_app/chart_list.html' - - def get_context_data(self, **kwargs): - context = super(ChartList, self).get_context_data(**kwargs) - return context diff --git a/clip-and-ship/__init__.py b/clip-and-ship/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/charts_app/__init__.py b/clip_and_ship/__init__.py similarity index 100% rename from charts_app/__init__.py rename to clip_and_ship/__init__.py diff --git a/clip_and_ship/admin.py b/clip_and_ship/admin.py new file mode 100644 index 0000000..13be29d --- /dev/null +++ b/clip_and_ship/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/clip_and_ship/apps.py b/clip_and_ship/apps.py new file mode 100644 index 0000000..a466090 --- /dev/null +++ b/clip_and_ship/apps.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + + +class ClipAndShipConfig(AppConfig): + name = 'clip_and_ship' diff --git a/charts_app/migrations/__init__.py b/clip_and_ship/migrations/__init__.py similarity index 100% rename from charts_app/migrations/__init__.py rename to clip_and_ship/migrations/__init__.py diff --git a/clip_and_ship/models.py b/clip_and_ship/models.py new file mode 100644 index 0000000..1dfab76 --- /dev/null +++ b/clip_and_ship/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/clip_and_ship/tests.py b/clip_and_ship/tests.py new file mode 100644 index 0000000..5982e6b --- /dev/null +++ b/clip_and_ship/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/clip-and-ship/urls.py b/clip_and_ship/urls.py similarity index 100% rename from clip-and-ship/urls.py rename to clip_and_ship/urls.py diff --git a/clip-and-ship/views.py b/clip_and_ship/views.py similarity index 86% rename from clip-and-ship/views.py rename to clip_and_ship/views.py index 84bfcd7..e8c0377 100644 --- a/clip-and-ship/views.py +++ b/clip_and_ship/views.py @@ -1,3 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + import datetime import os import tempfile @@ -6,20 +9,33 @@ import zipfile import urllib2 import subprocess + from pyproj import Proj, transform from django.conf import settings from django.http import Http404, HttpResponse, JsonResponse from django.shortcuts import render from django.views.generic.detail import View from geonode.layers.views import _resolve_layer, _PERMISSION_MSG_VIEW +from geonode.layers.models import Layer -WCS_URL = settings.GEOSERVER_BASE_URL + \ +WCS_URL = settings.GEOSERVER_PUBLIC_LOCATION + \ 'wcs?request=getcoverage&' \ 'version=1.0.0&service=WCS&coverage={layer_name}&' \ 'format=geotiff&crs=EPSG:4326&bbox={bbox}&width={width}&' \ 'height={height}' -WCS_URL_2_0_1 = settings.GEOSERVER_BASE_URL + \ +WCS_URL_2_0_1 = settings.GEOSERVER_PUBLIC_LOCATION + \ + 'wcs?request=getcoverage&' \ + 'version=2.0.1&service=WCS&coverageid={layer_name}&' \ + 'format=geotiff&crs=EPSG:4326&subset=E({x1},{x2})&subset=N({y1},{y2})' + +WCS_URL_dev = settings.GEOSERVER_PUBLIC_LOCATION + \ + 'wcs?request=getcoverage&' \ + 'version=1.0.0&service=WCS&coverage={layer_name}&' \ + 'format=geotiff&crs=EPSG:4326&bbox={bbox}&width={width}&' \ + 'height={height}' + +WCS_URL_2_0_1_dev = settings.GEOSERVER_PUBLIC_LOCATION + \ 'wcs?request=getcoverage&' \ 'version=2.0.1&service=WCS&coverageid={layer_name}&' \ 'format=geotiff&crs=EPSG:4326&subset=E({x1},{x2})&subset=N({y1},{y2})' @@ -62,12 +78,20 @@ def download_wcs(layername, bbox_string, width, height, raster_filepath): :return: """ - wcs_formatted_url = WCS_URL.format( - layer_name=layername, - bbox=bbox_string, - width=width, - height=height - ) + if layername == 'geonode:ortho_images' or layername == 'geonode:lidar': + wcs_formatted_url = WCS_URL_dev.format( + layer_name=layername, + bbox=bbox_string, + width=width, + height=height + ) + else: + wcs_formatted_url = WCS_URL.format( + layer_name=layername, + bbox=bbox_string, + width=width, + height=height + ) response = urllib2.urlopen(wcs_formatted_url) fh = open(raster_filepath, "w") @@ -83,13 +107,22 @@ def download_wcs_v2(layername, x1, x2, y1, y2, raster_filepath): :return: """ - wcs_formatted_url = WCS_URL_2_0_1.format( - layer_name=layername, - x1=x1, - x2=x2, - y1=y1, - y2=y2 - ) + if layername == 'geonode:ortho_images' or layername == 'geonode:lidar': + wcs_formatted_url = WCS_URL_2_0_1_dev.format( + layer_name=layername, + x1=x1, + x2=x2, + y1=y1, + y2=y2 + ) + else: + wcs_formatted_url = WCS_URL_2_0_1.format( + layer_name=layername, + x1=x1, + x2=x2, + y1=y1, + y2=y2 + ) response = urllib2.urlopen(wcs_formatted_url) fh = open(raster_filepath, "w") @@ -106,11 +139,10 @@ def clip_layer(request, layername): """ # PREPARATION try: - layer = _resolve_layer( - request, - layername, - 'base.view_resourcebase', - _PERMISSION_MSG_VIEW) + layer = Layer.objects.get( + workspace=layername.split(':')[0], + name=layername.split(':')[1] + ) except Http404 as e: response = JsonResponse({ 'error': '%s. ' @@ -318,11 +350,10 @@ def download_clip(request, layername, clip_filename): :return: The HTTPResponse with a file. """ # PREPARATION - layer = _resolve_layer( - request, - layername, - 'base.view_resourcebase', - _PERMISSION_MSG_VIEW) + layer = Layer.objects.get( + workspace=layername.split(':')[0], + name=layername.split(':')[1] + ) query = request.GET or request.POST params = { @@ -401,7 +432,7 @@ def download_clip(request, layername, clip_filename): class ClipView(View): - template_name = 'clip-and-ship/clip-page.html' + template_name = 'clip_and_ship/clip_page.html' def get(self, request, geotiffname): context = { diff --git a/dev_config.yml b/dev_config.yml new file mode 100644 index 0000000..e28cca1 --- /dev/null +++ b/dev_config.yml @@ -0,0 +1,9 @@ +--- +GEOSERVER_URL: "https://build.geo-solutions.it/geonode/geoserver/latest/geoserver-2.15.4.war" +DATA_DIR_URL: "https://build.geo-solutions.it/geonode/geoserver/latest/data-2.15.4.zip" +JETTY_RUNNER_URL: "https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-runner/9.4.7.v20170914/jetty-runner-9.4.7.v20170914.jar" +WINDOWS: + py2exe: "http://downloads.sourceforge.net/project/py2exe/py2exe/0.6.9/py2exe-0.6.9.win32-py2.7.exe" + nose: "https://s3.amazonaws.com/geonodedeps/nose-1.3.3.win32-py2.7.exe" + pyproj: "https://pyproj.googlecode.com/files/pyproj-1.9.3.win32-py2.7.exe" + lxml: "https://pypi.python.org/packages/2.7/l/lxml/lxml-3.6.0.win32-py2.7.exe" diff --git a/docker-build.sh b/docker-build.sh new file mode 100755 index 0000000..64fba5a --- /dev/null +++ b/docker-build.sh @@ -0,0 +1 @@ +docker-compose build --no-cache; docker-compose stop; docker-compose up -d; docker system prune -a \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 0000000..194d4f4 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,10 @@ +version: '2.2' +services: + + django: + build: . + # Loading the app is defined here to allow for + # autoreload on changes it is mounted on top of the + # old copy that docker added when creating the image + volumes: + - '.:/usr/src/haitidata' diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9251d8d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,113 @@ +version: '2.2' +services: + + db: + image: geonode/postgis:11 + restart: unless-stopped + container_name: db4${COMPOSE_PROJECT_NAME} + stdin_open: true + # tty: true + labels: + org.geonode.component: db + org.geonode.instance.name: geonode + volumes: + - dbdata:/var/lib/postgresql/data + - dbbackups:/pg_backups + env_file: + - .env + + geoserver: + image: geonode/geoserver:2.15.4 + build: ./docker/geoserver/ + restart: unless-stopped + container_name: geoserver4${COMPOSE_PROJECT_NAME} + stdin_open: true + # tty: true + labels: + org.geonode.component: geoserver + org.geonode.instance.name: geonode + depends_on: + - db + - data-dir-conf + volumes: + - geoserver-data-dir:/geoserver_data/data + env_file: + - .env + + django: + restart: unless-stopped + build: . + container_name: django4${COMPOSE_PROJECT_NAME} + stdin_open: true + # tty: true + labels: + org.geonode.component: django + org.geonode.instance.name: geonode + depends_on: + - db + - data-dir-conf + # command: paver start_django -b 0.0.0.0:8000 + # command: uwsgi --ini uwsgi.ini + volumes: + - statics:/mnt/volumes/statics + - geoserver-data-dir:/geoserver_data/data + env_file: + - .env + + geonode: + image: geonode/nginx:geoserver + build: ./docker/nginx/ + restart: unless-stopped + container_name: nginx4${COMPOSE_PROJECT_NAME} + stdin_open: true + # tty: true + labels: + org.geonode.component: nginx + org.geonode.instance.name: geonode + depends_on: + - django + - geoserver + ports: + - "80:80" + - "443:443" + volumes: + - nginx-confd:/etc/nginx + - nginx-certificates:/geonode-certificates + - statics:/mnt/volumes/statics + env_file: + - .env + + # Gets and installs letsencrypt certificates + letsencrypt: + image: geonode/letsencrypt:2.10.4 + build: ./docker/letsencrypt/ + restart: on-failure + volumes: + - nginx-certificates:/geonode-certificates/ + env_file: + - .env + + data-dir-conf: + image: geonode/geoserver_data:2.15.4 + restart: on-failure + container_name: gsconf4${COMPOSE_PROJECT_NAME} + labels: + org.geonode.component: conf + org.geonode.instance.name: geonode + command: /bin/true + volumes: + - geoserver-data-dir:/geoserver_data/data + +volumes: + statics: + name: ${COMPOSE_PROJECT_NAME}-statics + nginx-confd: + name: ${COMPOSE_PROJECT_NAME}-nginxconfd + nginx-certificates: + name: ${COMPOSE_PROJECT_NAME}-nginxcerts + geoserver-data-dir: + name: ${COMPOSE_PROJECT_NAME}-gsdatadir + dbdata: + name: ${COMPOSE_PROJECT_NAME}-dbdata + dbbackups: + name: ${COMPOSE_PROJECT_NAME}-dbbackups diff --git a/docker-purge.sh b/docker-purge.sh new file mode 100755 index 0000000..4def1e8 --- /dev/null +++ b/docker-purge.sh @@ -0,0 +1 @@ +docker kill $(docker ps -q); docker rm $(docker ps -a -q); docker rmi $(docker images -q); docker volume ls -qf dangling=true | xargs -r docker volume rm; docker system prune -a \ No newline at end of file diff --git a/docker/geoserver/Dockerfile b/docker/geoserver/Dockerfile new file mode 100644 index 0000000..9182218 --- /dev/null +++ b/docker/geoserver/Dockerfile @@ -0,0 +1,97 @@ +FROM tomcat:9-jre8 +MAINTAINER GeoNode Development Team + +# +# Set GeoServer version and data directory +# +ENV GEOSERVER_VERSION=2.15.4 +ENV GEOSERVER_DATA_DIR="/geoserver_data/data" + +# +# Download and install GeoServer +# +RUN cd /usr/local/tomcat/webapps \ + && wget --no-check-certificate --progress=bar:force:noscroll https://build.geo-solutions.it/geonode/geoserver/latest/geoserver-${GEOSERVER_VERSION}.war \ + && unzip -q geoserver-${GEOSERVER_VERSION}.war -d geoserver \ + && rm geoserver-${GEOSERVER_VERSION}.war \ + && mkdir -p $GEOSERVER_DATA_DIR + +VOLUME $GEOSERVER_DATA_DIR + +# added by simonelanucara https://github.com/simonelanucara +# Optionally add JAI, ImageIO and Marlin Render for improved Geoserver performance +WORKDIR /tmp +ARG JAI_IMAGEIO=true +RUN if [ "$JAI_IMAGEIO" = true ]; then \ + wget https://github.com/bourgesl/marlin-renderer/releases/download/v0_9_3/marlin-0.9.3-Unsafe.jar && \ + mv /tmp/marlin-0.9.3-Unsafe.jar /usr/local/tomcat/webapps/geoserver/WEB-INF/lib/ ; \ + fi + +###########docker host############### +# Set DOCKERHOST variable if DOCKER_HOST exists +ARG DOCKERHOST=${DOCKERHOST} +# for debugging +RUN echo -n #1===>DOCKERHOST=${DOCKERHOST} +# +ENV DOCKERHOST ${DOCKERHOST} +# for debugging +RUN echo -n #2===>DOCKERHOST=${DOCKERHOST} + +###########docker host ip############# +# Set GEONODE_HOST_IP address if it exists +ARG GEONODE_HOST_IP=${GEONODE_HOST_IP} +# for debugging +RUN echo -n #1===>GEONODE_HOST_IP=${GEONODE_HOST_IP} +# +ENV GEONODE_HOST_IP ${GEONODE_HOST_IP} +# for debugging +RUN echo -n #2===>GEONODE_HOST_IP=${GEONODE_HOST_IP} +# If empty set DOCKER_HOST_IP to GEONODE_HOST_IP +ENV DOCKER_HOST_IP=${DOCKER_HOST_IP:-${GEONODE_HOST_IP}} +# for debugging +RUN echo -n #1===>DOCKER_HOST_IP=${DOCKER_HOST_IP} +# Trying to set the value of DOCKER_HOST_IP from DOCKER_HOST +RUN if ! [ -z ${DOCKER_HOST_IP} ]; \ + then echo export DOCKER_HOST_IP=${DOCKERHOST} | \ + sed 's/tcp:\/\/\([^:]*\).*/\1/' >> /root/.bashrc; \ + else echo "DOCKER_HOST_IP is already set!"; fi +# for debugging +RUN echo -n #2===>DOCKER_HOST_IP=${DOCKER_HOST_IP} + +# Set WEBSERVER public port +ARG PUBLIC_PORT=${PUBLIC_PORT} +# for debugging +RUN echo -n #1===>PUBLIC_PORT=${PUBLIC_PORT} +# +ENV PUBLIC_PORT=${PUBLIC_PORT} +# for debugging +RUN echo -n #2===>PUBLIC_PORT=${PUBLIC_PORT} + +# set nginx base url for geoserver +RUN echo export NGINX_BASE_URL=http://${NGINX_HOST}:${NGINX_PORT}/ | \ + sed 's/tcp:\/\/\([^:]*\).*/\1/' >> /root/.bashrc + +# copy the script and perform the run of scripts from entrypoint.sh +RUN mkdir -p /usr/local/tomcat/tmp +WORKDIR /usr/local/tomcat/tmp +COPY set_geoserver_auth.sh /usr/local/tomcat/tmp +COPY setup_auth.sh /usr/local/tomcat/tmp +COPY requirements.txt /usr/local/tomcat/tmp +COPY get_dockerhost_ip.py /usr/local/tomcat/tmp +COPY get_nginxhost_ip.py /usr/local/tomcat/tmp +COPY entrypoint.sh /usr/local/tomcat/tmp + +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y python python-pip python-dev \ + && chmod +x /usr/local/tomcat/tmp/set_geoserver_auth.sh \ + && chmod +x /usr/local/tomcat/tmp/setup_auth.sh \ + && chmod +x /usr/local/tomcat/tmp/entrypoint.sh \ + && pip install pip==9.0.3 \ + && pip install -r requirements.txt \ + && chmod +x /usr/local/tomcat/tmp/get_dockerhost_ip.py \ + && chmod +x /usr/local/tomcat/tmp/get_nginxhost_ip.py + +ENV JAVA_OPTS="-Djava.awt.headless=true -XX:MaxPermSize=512m -XX:PermSize=256m -Xms512m -Xmx2048m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Duser.timezone=GMT -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Duser.timezone=GMT -Dorg.geotools.shapefile.datetime=true" + +CMD ["/usr/local/tomcat/tmp/entrypoint.sh"] diff --git a/docker/geoserver/README.md b/docker/geoserver/README.md new file mode 100644 index 0000000..352ccb2 --- /dev/null +++ b/docker/geoserver/README.md @@ -0,0 +1,128 @@ +# geoserver-docker + +[GeoServer](http://geoserver.org) is an open source server for sharing geospatial data. +This is a docker image that eases setting up a GeoServer running specifically for [GeoNode](https://github.com/GeoNode/geoserver-geonode-ext) with an additional separated data directory. + +The image is based on the official Tomcat 9 image + +## Installation + +This image is available as a [trusted build on the docker hub](https://registry.hub.docker.com/r/geonode/geoserver/), and is the recommended method of installation. +Simple pull the image from the docker hub. + +```bash +$ docker pull geonode/geoserver +``` + +Alternatively you can build the image locally + +```bash +$ git clone https://github.com/geonode/geoserver-docker.git +$ cd geoserver-docker +$ docker build -t "geonode/geoserver" . +``` + +## Quick start + +You can quick start the image using the command line + +```bash +$ docker run --name "geoserver" -v /var/run/docker.sock:/var/run/docker.sock -d -p 8080:8080 geonode/geoserver +``` + +Point your browser to `http://localhost:8080/geoserver` and login using GeoServer's default username and password: + +* Username: admin +* Password: geoserver + +## How to use different versions + +There are mainly two different versions of this image which are useful for running **GeoNode** with different authentication system types. These versions are released as specific tags for two authentication mechanisms: + +**Cookie based authn**: +- [geonode/geoserver:2.9.x](https://hub.docker.com/r/geonode/geoserver/builds/bx7ydhghnlrfnsppduyva73/) + +**Oauth2 based authn**: +- [geonode/geoserver:2.9.x-oauth2](https://hub.docker.com/r/geonode/geoserver/builds/bwca5rtexeoegzgroavftdr/) +- [geonode/geoserver:2.10.x](https://hub.docker.com/r/geonode/geoserver/builds/bjohcnc29vm69acqjrvndxf/) +- [geonode/geoserver:2.12.x](https://hub.docker.com/r/geonode/geoserver/builds/bh7pyw5atmkcljurwsnzbs7/) +- [geonode/geoserver:2.13.x](https://hub.docker.com/r/geonode/geoserver/builds/btmjctbuvrjfnnrxrs4wyrs/) +- [geonode/geoserver:2.14.x](https://hub.docker.com/r/geonode/geoserver/builds/bj53pi8he8uksz6ggvrs3wc/) + +You can declare what version to use along with the data directory tag which corresponds to the same version. + +## Configuration + +### Data volume + +This GeoServer container keeps its configuration data at `/geoserver_data/data` which is exposed as volume in the dockerfile. +The volume allows for stopping and starting new containers from the same image without losing all the data and custom configuration. + +You may want to map this volume to a directory on the host. It will also ease the upgrade process in the future. Volumes can be mounted by passing the `-v` flag to the docker run command: + +```bash +-v /your/host/data/path:/geoserver_data/data +``` + +### Data volume container + +In case you are running Compose for automatically having GeoServer up and running then a data volume container will be mounted with a default preloaded *GEOSERVER_DATA_DIR* at the configuration data directory of the container. +Make sure that the image from the repository [data-docker](https://github.com/GeoNode/data-docker) is available from the [GeoNode Docker Hub](https://hub.docker.com/u/geonode/) or has been built locally: + +```bash +docker build -t geonode/geoserver_data . +``` + +#### Persistance behavior + +If you run: + +```bash +docker-compose stop +``` + +Data are retained in the *GEOSERVER_DATA_DIR* and can then be mounted in a new GeoServer instance by running again: + +```bash +docker-compose up +``` + +If you run: + +```bash +docker-compose down +``` + +Data are completely gone but you can ever start from the base GeoServer Data Directory built for Geonode. + +#### Data directory versions + +There has to be a correspondence one-to-one between the data directory version and the tag of the GeoServer image used in the Docker compose file. So at the end you can consume these images below: + +* **2.9.x**: [geonode/geoserver_data:2.9.x](https://hub.docker.com/r/geonode/geoserver_data/builds/bsus6alnddg4bc7icwymevp/) +* **2.9.x-oauth2**: [geonode/geoserver_data:2.9.x-oauth2](https://hub.docker.com/r/geonode/geoserver_data/builds/bwkxcupsunvuitzusi9gsnt/) +* **2.10.x**: [geonode/geoserver_data:2.10.x](https://hub.docker.com/r/geonode/geoserver_data/builds/b5jqhpzapkqxzyevjizccug/) +* **2.12.x**: [geonode/geoserver_data:2.12.x](https://hub.docker.com/r/geonode/geoserver_data/builds/byaaalw3lnasunpveyg3x4i/) +* **2.13.x**: [geonode/geoserver_data:2.13.x](https://hub.docker.com/r/geonode/geoserver_data/builds/bunuqzq7a7dk65iumjhkbtc/) +* **2.14.x**: [geonode/geoserver_data:2.14.x](https://hub.docker.com/r/geonode/geoserver_data/builds/blpdjzkrv7pm3stunzpn4pp/) + +### Database + +GeoServer recommends the usage of a spatial database + +#### PostGIS container (PostgreSQL + GIS Extension) + +If you want to use a [PostGIS](http://postgis.org/) container, you can link it to this image. You're free to use any PostGIS container. +An example with [kartooza/postgis](https://registry.hub.docker.com/u/kartoza/postgis/) image: + +```bash +$ docker run -d --name="postgis" kartoza/postgis +``` + +For further information see [kartooza/postgis](https://registry.hub.docker.com/u/kartoza/postgis/). + +Now start the GeoServer instance by adding the `--link` option to the docker run command: + +```bash +--link postgis:postgis +``` diff --git a/docker/geoserver/docker-compose.yml b/docker/geoserver/docker-compose.yml new file mode 100644 index 0000000..608cd55 --- /dev/null +++ b/docker/geoserver/docker-compose.yml @@ -0,0 +1,48 @@ +version: '2.2' + +services: + + geoserver: + image: geonode/geoserver:2.15.4 + build: + context: . + args: + - DOCKERHOST + - GEONODE_HOST_IP + - PUBLIC_PORT=80 + links: + - postgis + ports: + - "8080:8080" + volumes: + #- /srv/docker/geoserver/geoserver:/geoserver_data/data + volumes_from: + # reference to the service which has the volume + # with the preloaded geoserver_data_dir + - data_dir_conf # service for geoserver data volume + environment: + - DOCKERHOST + - GEONODE_HOST_IP + - PUBLIC_PORT=80 + - DOCKER_HOST_IP + - DJANGO_URL=http://localhost/ + + data_dir_conf: + image: geonode/geoserver_data:2.15.4 + container_name: geoserver_data_dir # named data container + command: /bin/true + volumes: + - /geoserver_data/data + + postgis: + image: geonode/postgis + ports: + - "25432:5432" + volumes: + - /srv/docker/geoserver/postgis:/var/lib/postgresql + #volumes_from: + #- pgstore + +volumes: + # reference to the named data container that holds the preloaded geoserver data directory + geoserver_data_dir: diff --git a/docker/geoserver/entrypoint.sh b/docker/geoserver/entrypoint.sh new file mode 100644 index 0000000..339220e --- /dev/null +++ b/docker/geoserver/entrypoint.sh @@ -0,0 +1,103 @@ +#!/bin/bash +set -e + +source /root/.bashrc + +# control the value of DOCKER_HOST_IP variable +if [ -z ${DOCKER_HOST_IP} ] +then + + echo "DOCKER_HOST_IP is empty so I'll run the python utility \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + echo export DOCKER_HOST_IP=`python /usr/local/tomcat/tmp/get_dockerhost_ip.py` >> /root/.override_env + echo "The calculated value is now DOCKER_HOST_IP='$DOCKER_HOST_IP' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +else + + echo "DOCKER_HOST_IP is filled so I'll leave the found value '$DOCKER_HOST_IP' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +fi + +# control the values of LB settings if present +if [ ${GEONODE_LB_HOST_IP} ] +then + + echo "GEONODE_LB_HOST_IP is filled so I replace the value of '$DOCKER_HOST_IP' with '$GEONODE_LB_HOST_IP' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + echo export DOCKER_HOST_IP=${GEONODE_LB_HOST_IP} >> /root/.override_env + +fi + +if [ ${GEONODE_LB_PORT} ] +then + + echo "GEONODE_LB_PORT is filled so I replace the value of '$PUBLIC_PORT' with '$GEONODE_LB_PORT' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + echo export PUBLIC_PORT=${GEONODE_LB_PORT} >> /root/.override_env + +fi + +if [ ! -z "${GEOSERVER_JAVA_OPTS}" ] +then + + echo "GEOSERVER_JAVA_OPTS is filled so I replace the value of '$JAVA_OPTS' with '$GEOSERVER_JAVA_OPTS' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + JAVA_OPTS=${GEOSERVER_JAVA_OPTS} + +fi + +# control the value of NGINX_BASE_URL variable +if [ -z `echo ${NGINX_BASE_URL} | sed 's/http:\/\/\([^:]*\).*/\1/'` ] +then + echo "NGINX_BASE_URL is empty so I'll use the static nginx hostname \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + # echo export NGINX_BASE_URL=`python /usr/local/tomcat/tmp/get_nginxhost_ip.py` >> /root/.override_env + # TODO rework get_nginxhost_ip to get URL with static hostname from nginx service name + # + exposed port of that container i.e. http://geonode:80 + echo export NGINX_BASE_URL=http://geonode:80 >> /root/.override_env + echo "The calculated value is now NGINX_BASE_URL='$NGINX_BASE_URL' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log +else + echo "NGINX_BASE_URL is filled so I'll leave the found value '$NGINX_BASE_URL' \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log +fi + +# set basic tagname +TAGNAME=( "baseUrl" ) + +if ! [ -f ${GEOSERVER_DATA_DIR}/security/auth/geonodeAuthProvider/config.xml ] +then + + echo "Configuration file '$GEOSERVER_DATA_DIR'/security/auth/geonodeAuthProvider/config.xml is not available so it is gone to skip \n" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +else + + # backup geonodeAuthProvider config.xml + cp ${GEOSERVER_DATA_DIR}/security/auth/geonodeAuthProvider/config.xml ${GEOSERVER_DATA_DIR}/security/auth/geonodeAuthProvider/config.xml.orig + # run the setting script for geonodeAuthProvider + /usr/local/tomcat/tmp/set_geoserver_auth.sh ${GEOSERVER_DATA_DIR}/security/auth/geonodeAuthProvider/config.xml ${GEOSERVER_DATA_DIR}/security/auth/geonodeAuthProvider/ ${TAGNAME} >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +fi + +# backup geonode REST role service config.xml +cp "${GEOSERVER_DATA_DIR}/security/role/geonode REST role service/config.xml" "${GEOSERVER_DATA_DIR}/security/role/geonode REST role service/config.xml.orig" +# run the setting script for geonode REST role service +/usr/local/tomcat/tmp/set_geoserver_auth.sh "${GEOSERVER_DATA_DIR}/security/role/geonode REST role service/config.xml" "${GEOSERVER_DATA_DIR}/security/role/geonode REST role service/" ${TAGNAME} >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +# set oauth2 filter tagname +TAGNAME=( "accessTokenUri" "userAuthorizationUri" "redirectUri" "checkTokenEndpointUrl" "logoutUri" ) + +# backup geonode-oauth2 config.xml +cp ${GEOSERVER_DATA_DIR}/security/filter/geonode-oauth2/config.xml ${GEOSERVER_DATA_DIR}/security/filter/geonode-oauth2/config.xml.orig +# run the setting script for geonode-oauth2 +/usr/local/tomcat/tmp/set_geoserver_auth.sh ${GEOSERVER_DATA_DIR}/security/filter/geonode-oauth2/config.xml ${GEOSERVER_DATA_DIR}/security/filter/geonode-oauth2/ "${TAGNAME[@]}" >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +# set global tagname +TAGNAME=( "proxyBaseUrl" ) + +# backup global.xml +cp ${GEOSERVER_DATA_DIR}/global.xml ${GEOSERVER_DATA_DIR}/global.xml.orig +# run the setting script for global configuration +/usr/local/tomcat/tmp/set_geoserver_auth.sh ${GEOSERVER_DATA_DIR}/global.xml ${GEOSERVER_DATA_DIR}/ ${TAGNAME} >> /usr/local/tomcat/tmp/set_geoserver_auth.log + +# set correct amqp broker url +sed -i -e 's/localhost/rabbitmq/g' ${GEOSERVER_DATA_DIR}/notifier/notifier.xml + +# exclude wrong dependencies +sed -i -e 's/xom-\*\.jar/xom-\*\.jar,bcprov\*\.jar/g' /usr/local/tomcat/conf/catalina.properties + +# start tomcat +exec env JAVA_OPTS="${JAVA_OPTS}" catalina.sh run diff --git a/docker/geoserver/get_dockerhost_ip.py b/docker/geoserver/get_dockerhost_ip.py new file mode 100644 index 0000000..bb6174b --- /dev/null +++ b/docker/geoserver/get_dockerhost_ip.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import logging + +import docker + +BOOTSTRAP_IMAGE_CHEIP = 'codenvy/che-ip:nightly' +# AF: why call before definition? print _docker_host_ip() + +def _docker_host_ip(): + client = docker.from_env() + ip_list = client.containers.run(BOOTSTRAP_IMAGE_CHEIP, + network_mode='host' + ).split("\n") + if len(ip_list) > 1: + logging.info("Docker daemon is running on more than one \ +address {0}".format(ip_list)) + logging.info("Only the first address:{0} will be returned!".format( + ip_list[0] + )) + else: + logging.info("Docker daemon is running at the following \ +address {0}".format(ip_list[0])) + return ip_list[0] diff --git a/docker/geoserver/get_nginxhost_ip.py b/docker/geoserver/get_nginxhost_ip.py new file mode 100644 index 0000000..753865d --- /dev/null +++ b/docker/geoserver/get_nginxhost_ip.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +import logging +import os + +import docker + +client = docker.from_env() +# print client.info() +# TODO avoid this script can fail and fall in the loop where the geoserver +# service is not available and consequently the nginx too which has geoserver +# as a reference link +for network in client.networks.list(): + if 'geonode' in network.name: + geonode_network = network.name + else: + geonode_network = 'geonode_default' + +try: + containers = { + c.attrs['Config']['Image']: c.attrs['NetworkSettings']['\ +Networks'][geonode_network]['\ +IPAddress'] for c in client.containers.list() if c.status in 'running' + } + for item in containers.items(): + if "geonode/nginx" in item[0]: + ipaddr = item[1] + + try: + os.environ["NGINX_BASE_URL"] = "http://" + ipaddr + ":" + "80" + nginx_base_url = "http://{}:80".format(ipaddr) + except NameError as er: + logging.info("NGINX container is not running maybe exited! Running\ +containers are:{0}".format(containers)) +except KeyError as ke: + logging.info("There has been a problem with the docker\ +network which has raised the following exception: {0}".format(ke)) +else: + # nginx_base_url = None + pass +finally: + try: + print nginx_base_url + except NameError as ne: + print "http://geonode:80" diff --git a/docker/geoserver/requirements.txt b/docker/geoserver/requirements.txt new file mode 100644 index 0000000..0b31242 --- /dev/null +++ b/docker/geoserver/requirements.txt @@ -0,0 +1 @@ +docker==3.1.1 diff --git a/docker/geoserver/set_geoserver_auth.sh b/docker/geoserver/set_geoserver_auth.sh new file mode 100644 index 0000000..27dd11e --- /dev/null +++ b/docker/geoserver/set_geoserver_auth.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +auth_conf_source="$1" +auth_conf_target="$2" +# Creating a temporary file for sed to write the changes to +temp_file="xml.tmp" +touch $temp_file + +source /root/.bashrc +source /root/.override_env + +test -z "$auth_conf_source" && echo "You must specify a source file" && exit 1 +test -z "$auth_conf_target" && echo "You must specify a target conf directory" && exit 1 + +test ! -f "$auth_conf_source" && echo "Source $auth_conf_source does not exist or is not a file" && exit 1 +test ! -d "$auth_conf_target" && echo "Target directory $auth_conf_target does not exist or is not a directory" && exit 1 + +# for debugging +echo -e "NGINX_BASE_URL=${NGINX_BASE_URL}\n" +if [ "$PUBLIC_PORT" == "443" ]; then + SUBSTITUTION_URL="https://${DOCKER_HOST_IP}" + if [ "$PUBLIC_PORT" != "443" ]; then + SUBSTITUTION_URL="https://${DOCKER_HOST_IP}:${PUBLIC_PORT}" + fi +else + SUBSTITUTION_URL="http://${DOCKER_HOST_IP}" + if [ "$PUBLIC_PORT" != "80" ]; then + SUBSTITUTION_URL="http://${DOCKER_HOST_IP}:${PUBLIC_PORT}" + fi +fi + +echo -e "SUBSTITUTION_URL=$SUBSTITUTION_URL\n" +echo -e "auth_conf_source=$auth_conf_source\n" +echo -e "auth_conf_target=$auth_conf_target\n" + +# Elegance is the key -> adding an empty last line for Mr. “sed” to pick up +echo " " >> "$auth_conf_source" + +cat "$auth_conf_source" + +tagname=( ${@:3:5} ) + +# for debugging +for i in "${tagname[@]}" +do + echo "tagname=<$i>" +done + +echo "DEBUG: Starting... [Ok]\n" + +for i in "${tagname[@]}" +do + echo "DEBUG: Working on '$auth_conf_source' for tagname <$i>" + # Extracting the value from the <$tagname> element + # echo -ne "<$i>$tagvalue" | xmlstarlet sel -t -m "//a" -v . -n + tagvalue=`grep "<$i>.*<.$i>" "$auth_conf_source" | sed -e "s/^.*<$i/<$i/" | cut -f2 -d">"| cut -f1 -d"<"` + + echo "DEBUG: Found the current value for the element <$i> - '$tagvalue'" + + # Setting new substituted value + case $i in + proxyBaseUrl ) + if [ ${GEONODE_LB_HOST_IP} ] + then + echo "DEBUG: Editing '$auth_conf_source' for tagname <$i> and replacing its value with '$SUBSTITUTION_URL'" + newvalue=`echo -ne "$tagvalue" | sed -re "s@http://localhost(:8.*0)@$SUBSTITUTION_URL@"` + else + echo "DEBUG: Editing '$auth_conf_source' for tagname <$i> and replacing its value with '$NGINX_BASE_URL'" + newvalue=`echo -ne "$tagvalue" | sed -re "s@http://localhost(:8.*0)@$NGINX_BASE_URL@"` + fi;; + accessTokenUri | checkTokenEndpointUrl | baseUrl ) + echo "DEBUG: Editing '$auth_conf_source' for tagname <$i> and replacing its value with '$NGINX_BASE_URL'" + newvalue=`echo -ne "$tagvalue" | sed -re "s@http://localhost(:8.*0)@$NGINX_BASE_URL@"`;; + userAuthorizationUri | redirectUri | logoutUri ) + echo "DEBUG: Editing '$auth_conf_source' for tagname <$i> and replacing its value with '$SUBSTITUTION_URL'" + newvalue=`echo -ne "$tagvalue" | sed -re "s@http://localhost(:8.*0)@$SUBSTITUTION_URL@"`;; + *) echo -n "an unknown variable has been found";; + esac + + echo "DEBUG: Found the new value for the element <$i> - '$newvalue'" + # Replacing element’s value with $SUBSTITUTION_URL + # echo -ne "<$i>$tagvalue" | xmlstarlet sel -t -m "//a" -v . -n + sed -e "s@<$i>$tagvalue<\/$i>@<$i>$newvalue<\/$i>@g" "$auth_conf_source" > "$temp_file" + cp "$temp_file" "$auth_conf_source" +done +# Writing our changes back to the original file ($auth_conf_source) +# no longer needed +# mv $temp_file $auth_conf_source + +echo "DEBUG: Finished... [Ok] --- Final xml file is \n" +cat "$auth_conf_source" diff --git a/docker/geoserver/setup_auth.sh b/docker/geoserver/setup_auth.sh new file mode 100644 index 0000000..6f9373b --- /dev/null +++ b/docker/geoserver/setup_auth.sh @@ -0,0 +1,3 @@ +#!/bin/sh +sed -i.bak 's@\([^<][^<]*\)@'"$DJANGO_URL"'@'\ + /geoserver_data/data/security/auth/geonodeAuthProvider/config.xml \ No newline at end of file diff --git a/docker/letsencrypt/Dockerfile b/docker/letsencrypt/Dockerfile new file mode 100644 index 0000000..b8f6234 --- /dev/null +++ b/docker/letsencrypt/Dockerfile @@ -0,0 +1,19 @@ +FROM alpine:3.8 + +# 1-2. Install system dependencies +RUN apk add --no-cache certbot py-pip && pip install pyopenssl==16.0.0 # Need to downgrade PyOpenSSL to 16.0.0 to avoid conflicts and solve the cryptography error : https://github.com/plesk/letsencrypt-plesk/issues/117 + +# Installing scripts +ADD docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + +# Installing cronjobs +ADD crontab /crontab +RUN /usr/bin/crontab /crontab && \ + rm /crontab + +# Setup the entrypoint +ENTRYPOINT ["./docker-entrypoint.sh"] + +# We run cron in foreground to update the certificates +CMD /usr/sbin/crond -f diff --git a/docker/letsencrypt/README.md b/docker/letsencrypt/README.md new file mode 100644 index 0000000..37140f5 --- /dev/null +++ b/docker/letsencrypt/README.md @@ -0,0 +1,16 @@ +ervice for SPCGeonode + +This service generates SSL certificates to be used by Nginx. + +## Let's Encrypt + +Upon startup, it generates one SSL certificate from Let's Encrypt using Certbot. It then starts cron (in foreground) to renew the certificates using Certbot renew. + +If for some reason getting the certificate fails, a placeholder certificate is generated. This certificate is invalid, but still allows to encrypt the data and to start the webserver. + +To avoid hitting Let's Encrypt very low rate limits when developping or doing tests, LETSENCRYPT_MODE env var can be set to "disabled" (which will completely bypass Let'sEncrypt, simulating a failure) or to "staging" (using Let'sEncrypt test certificates with higher rates). + +## Autoissued + +An auto-issued certificate is also generate to be used on the LAN if needed. It is also renewed every now and then using the same cron process than above. + diff --git a/docker/letsencrypt/crontab b/docker/letsencrypt/crontab new file mode 100644 index 0000000..66cacb8 --- /dev/null +++ b/docker/letsencrypt/crontab @@ -0,0 +1,9 @@ +# .............. minute (0 - 59) +# . .............. hour (0 - 23) +# . . .............. day of month (1 - 31) +# . . . .............. month (1 - 12) +# . . . . .............. day of week (0 - 6) (Sunday to Saturday; 7 is also Sunday on some systems) +# . . . . . + + 0 0,12 * * * date && echo "daily " && /docker-entrypoint.sh + diff --git a/docker/letsencrypt/docker-entrypoint.sh b/docker/letsencrypt/docker-entrypoint.sh new file mode 100644 index 0000000..1fcc87e --- /dev/null +++ b/docker/letsencrypt/docker-entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Exit script in case of error +set -e + +echo $"\n\n\n" +echo "-----------------------------------------------------" +echo "STARTING LETSENCRYPT ENTRYPOINT ---------------------" +date + +# We make the config dir +mkdir -p "/geonode-certificates/$LETSENCRYPT_MODE" + +# Do not exit script in case of error +set +e + +# We run the command +if [ "$LETSENCRYPT_MODE" == "staging" ]; then + printf "\nTrying to get STAGING certificate\n" + certbot --config-dir "/geonode-certificates/$LETSENCRYPT_MODE" certonly --webroot -w "/geonode-certificates" -d "$HTTPS_HOST" -m "$ADMIN_EMAIL" --agree-tos --non-interactive --staging --server https://acme-v02.api.letsencrypt.org/directory +elif [ "$LETSENCRYPT_MODE" == "production" ]; then + printf "\nTrying to get PRODUCTION certificate\n" + certbot --config-dir "/geonode-certificates/$LETSENCRYPT_MODE" certonly --webroot -w "/geonode-certificates" -d "$HTTPS_HOST" -m "$ADMIN_EMAIL" --agree-tos --non-interactive --server https://acme-v02.api.letsencrypt.org/directory +else + printf "\nNot trying to get certificate (simulating failure, because LETSENCRYPT_MODE variable was neither staging nor production\n" + /bin/false +fi + +# If the certbot comand failed, we will create a placeholder certificate +if [ ! $? -eq 0 ]; then + # Exit script in case of error + set -e + + printf "\nFailed to get the certificates !\n" + + printf "\nWaiting 30s to avoid hitting Letsencrypt rate limits before it's even possible to react\n" + sleep 30 + + exit 1 +fi + +printf "\nCertificate have been created/renewed successfully\n" + +echo "-----------------------------------------------------" +echo "FINISHED LETSENCRYPT ENTRYPOINT ---------------------" +echo "-----------------------------------------------------" + +# Run the CMD +exec "$@" diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 0000000..bb689af --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,15 @@ +FROM nginx:1.17.2-alpine + +RUN apk add --no-cache openssl inotify-tools + +WORKDIR /etc/nginx/ + +ADD nginx.conf.envsubst nginx.https.available.conf.envsubst ./ +ADD geonode.conf ./sites-enabled/ + +ADD docker-autoreload.sh docker-entrypoint.sh / +ENTRYPOINT ["/docker-entrypoint.sh"] +RUN chmod +x /docker-autoreload.sh +RUN chmod +x /docker-entrypoint.sh + +CMD ["nginx", "-g", "daemon off;"] diff --git a/docker/nginx/docker-autoreload.sh b/docker/nginx/docker-autoreload.sh new file mode 100644 index 0000000..812cc76 --- /dev/null +++ b/docker/nginx/docker-autoreload.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +# This will watch the /geonode-certificates folder and run nginx -s reload whenever there are some changes. +# We use this to reload nginx config when certificates changed. + +# inspired/copied from https://github.com/kubernetes/kubernetes/blob/master/examples/https-nginx/auto-reload-nginx.sh + +while true +do + inotifywait -e create -e modify -e delete -e move -r --exclude "\\.certbot\\.lock|\\.well-known" "/geonode-certificates/$LETSENCRYPT_MODE" + echo "Changes noticed in /geonode-certificates" + + echo "Waiting 5s for additionnal changes" + sleep 5 + + echo "Creating symbolic link for WAN host" + # for some reason, the ln -f flag doesn't work below... + rm -f /certificate_symlink + if [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/fullchain.pem" ] && [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/privkey.pem" ]; then + echo "Certbot certificate exists, we symlink to the live cert" + ln -sf "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST" /certificate_symlink + else + echo "Certbot certificate does not exist, we symlink to autoissued" + ln -sf "/geonode-certificates/autoissued" /certificate_symlink + fi + + # Test nginx configuration + nginx -t + # If it passes, we reload + if [ $? -eq 0 ] + then + echo "Configuration valid, we reload..." + nginx -s reload + else + echo "Configuration not valid, we do not reload." + fi +done diff --git a/docker/nginx/docker-entrypoint.sh b/docker/nginx/docker-entrypoint.sh new file mode 100644 index 0000000..d54aa28 --- /dev/null +++ b/docker/nginx/docker-entrypoint.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# Exit script in case of error +set -e + +echo $"\n\n\n" +echo "-----------------------------------------------------" +echo "STARTING NGINX ENTRYPOINT ---------------------------" +date + +# We make the config dir +mkdir -p "/geonode-certificates/$LETSENCRYPT_MODE" + +echo "Creating autoissued certificates for HTTP host" +if [ ! -f "/geonode-certificates/autoissued/privkey.pem" ] || [[ $(find /geonode-certificates/autoissued/privkey.pem -mtime +365 -print) ]]; then + echo "Autoissued certificate does not exist or is too old, we generate one" + mkdir -p "/geonode-certificates/autoissued/" + openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout "/geonode-certificates/autoissued/privkey.pem" -out "/geonode-certificates/autoissued/fullchain.pem" -subj "/CN=${HTTP_HOST:-null}" +else + echo "Autoissued certificate already exists" +fi + +echo "Creating symbolic link for HTTPS certificate" +# for some reason, the ln -f flag doesn't work below... +# TODO : not DRY (reuse same scripts as docker-autoreload.sh) +rm -f /certificate_symlink +if [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/fullchain.pem" ] && [ -f "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST/privkey.pem" ]; then + echo "Certbot certificate exists, we symlink to the live cert" + ln -sf "/geonode-certificates/$LETSENCRYPT_MODE/live/$HTTPS_HOST" /certificate_symlink +else + echo "Certbot certificate does not exist, we symlink to autoissued" + ln -sf "/geonode-certificates/autoissued" /certificate_symlink +fi + +echo "Replacing environement variables" +envsubst '\$HTTP_HOST \$HTTPS_HOST \$RESOLVER' < /etc/nginx/nginx.conf.envsubst > /etc/nginx/nginx.conf +envsubst '\$HTTP_HOST \$HTTPS_HOST \$RESOLVER' < /etc/nginx/nginx.https.available.conf.envsubst > /etc/nginx/nginx.https.available.conf + +echo "Enabling or not https configuration" +if [ -z "${HTTPS_HOST}" ]; then + echo "" > /etc/nginx/nginx.https.enabled.conf +else + ln -sf /etc/nginx/nginx.https.available.conf /etc/nginx/nginx.https.enabled.conf +fi + +echo "Loading nginx autoreloader" +sh /docker-autoreload.sh & + +echo "-----------------------------------------------------" +echo "FINISHED NGINX ENTRYPOINT ---------------------------" +echo "-----------------------------------------------------" + +# Run the CMD +exec "$@" diff --git a/docker/nginx/geonode.conf b/docker/nginx/geonode.conf new file mode 100644 index 0000000..6fb9105 --- /dev/null +++ b/docker/nginx/geonode.conf @@ -0,0 +1,117 @@ +include /etc/nginx/mime.types; + +# This is the main geonode conf +charset utf-8; + +# max upload size +client_max_body_size 100G; +client_body_buffer_size 256K; +large_client_header_buffers 4 64k; +proxy_read_timeout 600s; + +fastcgi_hide_header Set-Cookie; + +etag on; + +# compression +gzip on; +gzip_vary on; +gzip_proxied any; +gzip_http_version 1.1; +gzip_disable "MSIE [1-6]\."; +gzip_buffers 16 8k; +gzip_min_length 1100; +gzip_comp_level 6; +gzip_types + text/css + text/javascript + text/xml + text/plain + application/xml + application/xml+rss + application/javascript + application/x-javascript + application/json; + +# GeoServer +location /geoserver { + + # Using a variable is a trick to let Nginx start even if upstream host is not up yet + # (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) + set $upstream geoserver:8080; + + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass http://$upstream; +} + +# GeoNode +location /static/ { + alias /mnt/volumes/statics/static/; + + location ~* \.(?:html|js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|txt|woff|woff2|svg|xml)$ { + gzip_static always; + expires 30d; + access_log off; + add_header Pragma "public"; + add_header Cache-Control "max-age=31536000, public"; + } +} + +location /uploaded/ { + alias /mnt/volumes/statics/uploaded/; + + location ~* \.(?:html|js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|txt|woff|woff2|svg|xml)$ { + gzip_static always; + expires 30d; + access_log off; + add_header Pragma "public"; + add_header Cache-Control "max-age=31536000, public"; + } +} + +location / { + # Using a variable is a trick to let Nginx start even if upstream host is not up yet + # (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) + set $upstream django:8000; + + if ($request_method = OPTIONS) { + add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, OPTIONS"; + add_header Access-Control-Allow-Headers "Authorization, Content-Type, Accept"; + add_header Access-Control-Allow-Credentials true; + add_header Content-Length 0; + add_header Content-Type text/plain; + add_header Access-Control-Max-Age 1728000; + return 200; + } + + add_header Access-Control-Allow-Credentials false; + add_header Access-Control-Allow-Headers "Content-Type, Accept, Authorization, Origin, User-Agent"; + add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, OPTIONS"; + proxy_set_header X-Forwarded-Protocol $scheme; + proxy_connect_timeout 600; + proxy_send_timeout 600; + proxy_read_timeout 600; + send_timeout 600; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + + proxy_pass http://$upstream; + + # uwsgi_params + include /etc/nginx/uwsgi_params; + + location ~* \.(?:js|jpg|jpeg|gif|png|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|ttf|rtf|swf|ico|flv|woff|woff2|svg|xml)$ { + gzip_static always; + expires 30d; + access_log off; + add_header Pragma "public"; + add_header Cache-Control "max-age=31536000, public"; + } +} diff --git a/docker/nginx/nginx.conf.envsubst b/docker/nginx/nginx.conf.envsubst new file mode 100644 index 0000000..cedb581 --- /dev/null +++ b/docker/nginx/nginx.conf.envsubst @@ -0,0 +1,39 @@ +# NOTE : $VARIABLES are env variables replaced by entrypoint.sh using envsubst +# not to be mistaken for nginx variables (also starting with $, but usually lowercase) + +worker_processes auto; + +events { + +} + +http { + server_names_hash_bucket_size 64; + + # Allow Nginx to resolve Docker host names (see https://sandro-keil.de/blog/2017/07/24/let-nginx-start-if-upstream-host-is-unavailable-or-down/) + resolver $RESOLVER; # it seems rancher uses 169.254.169.250 instead of 127.0.0.11 which works well in docker-compose (see /etc/resolv.conf) + + # https - listens on specific name - this uses letsencrypt cert + # this includes a symlink that links either to nginx.https.available.conf if https in enabled + # or to an empty file if https is disabled. + include nginx.https.enabled.conf; + + # http - listens to specific HTTP_HOST only - this is not encrypted (not ideal but admissible on LAN for instance) + # even if not used (HTTP_HOST empty), we must keep it as it's used for internal API calls between django and geoserver + # TODO : do not use unencrypted connection even on LAN, but is it possible to have browser not complaining about unknown authority ? + server { + listen 80; + server_name $HTTP_HOST 127.0.0.1 geonode; + + include sites-enabled/*.conf; + } + + # Default server closes the connection (we can connect use only HTTP_HOST and HTTPS HOST) + server { + listen 80 default_server; + listen 443; + server_name _; + return 444; + } + +} diff --git a/docker/nginx/nginx.https.available.conf.envsubst b/docker/nginx/nginx.https.available.conf.envsubst new file mode 100644 index 0000000..fcd1cb3 --- /dev/null +++ b/docker/nginx/nginx.https.available.conf.envsubst @@ -0,0 +1,37 @@ +# NOTE : $VARIABLES are env variables replaced by entrypoint.sh using envsubst +# not to be mistaken for nginx variables (also starting with $, but usually lowercase) + +# This file is to be included in the main nginx.conf configuration if HTTPS_HOST is set +ssl_session_cache shared:SSL:10m; +ssl_session_timeout 10m; + +# this is the actual HTTPS host +server { + listen 443 ssl; + server_name $HTTPS_HOST; + keepalive_timeout 70; + + ssl_certificate /certificate_symlink/fullchain.pem; + ssl_certificate_key /certificate_symlink/privkey.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + include sites-enabled/*.conf; +} + +# if we try to connect from http, we redirect to https +server { + listen 80; + server_name $HTTPS_HOST $HTTP_HOST; # TODO : once geoserver supports relative urls, we should allow access though both HTTP and HTTPS at the same time and hence remove HTTP_HOST from this line + + # Except for let's encrypt challenge + location /.well-known { + alias /geonode-certificates/.well-known; + include /etc/nginx/mime.types; + } + + # Redirect to https + location / { + return 302 https://$HTTPS_HOST$request_uri; # TODO : we should use 301 (permanent redirect, but not practical for debug) + } +} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..d8b8506 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,69 @@ +#!/bin/bash +set -e + +/usr/local/bin/invoke update >> /usr/src/haitidata/invoke.log + +source $HOME/.bashrc +source $HOME/.override_env + +echo DATABASE_URL=$DATABASE_URL +echo GEODATABASE_URL=$GEODATABASE_URL +echo SITEURL=$SITEURL +echo ALLOWED_HOSTS=$ALLOWED_HOSTS +echo GEOSERVER_PUBLIC_LOCATION=$GEOSERVER_PUBLIC_LOCATION +echo MONITORING_ENABLED=$MONITORING_ENABLED +echo MONITORING_HOST_NAME=$MONITORING_HOST_NAME +echo MONITORING_SERVICE_NAME=$MONITORING_SERVICE_NAME +echo MONITORING_DATA_TTL=$MONITORING_DATA_TTL + +/usr/local/bin/invoke waitfordbs >> /usr/src/haitidata/invoke.log +echo "waitfordbs task done" + +echo "running migrations" +/usr/local/bin/invoke migrations >> /usr/src/haitidata/invoke.log +echo "migrations task done" + +cmd="$@" + +echo DOCKER_ENV=$DOCKER_ENV + +if [ -z ${DOCKER_ENV} ] || [ ${DOCKER_ENV} = "development" ] +then + echo "Executing standard Django server $cmd for Development" +else + if [ ${IS_CELERY} = "true" ] || [ ${IS_CELERY} = "True" ] + then + cmd=$CELERY_CMD + echo "Executing Celery server $cmd for Production" + else + + /usr/local/bin/invoke prepare >> /usr/src/haitidata/invoke.log + echo "prepare task done" + + if [ ${IS_FIRST_START} = "true" ] || [ ${IS_FIRST_START} = "True" ] || [ ${FORCE_REINIT} = "true" ] || [ ${FORCE_REINIT} = "True" ] || [ ! -e "/mnt/volumes/statics/geonode_init.lock" ]; then + /usr/local/bin/invoke updategeoip >> /usr/src/haitidata/invoke.log + echo "updategeoip task done" + /usr/local/bin/invoke fixtures >> /usr/src/haitidata/invoke.log + echo "fixture task done" + /usr/local/bin/invoke monitoringfixture >> /usr/src/haitidata/invoke.log + echo "monitoringfixture task done" + /usr/local/bin/invoke initialized >> /usr/src/haitidata/invoke.log + echo "initialized" + fi + + echo "refresh static data" + /usr/local/bin/invoke statics >> /usr/src/haitidata/invoke.log + echo "static data refreshed" + /usr/local/bin/invoke waitforgeoserver >> /usr/src/haitidata/invoke.log + echo "waitforgeoserver task done" + /usr/local/bin/invoke geoserverfixture >> /usr/src/haitidata/invoke.log + echo "geoserverfixture task done" + /usr/local/bin/invoke updateadmin >> /usr/src/haitidata/invoke.log + echo "updateadmin task done" + + cmd=$UWSGI_CMD + echo "Executing UWSGI server $cmd for Production" + fi +fi +echo 'got command ${cmd}' +exec $cmd diff --git a/filter/__init__.py b/filter/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/filter/admin.py b/filter/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/filter/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/filter/migrations/0001_initial.py b/filter/migrations/0001_initial.py deleted file mode 100644 index 6655bef..0000000 --- a/filter/migrations/0001_initial.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('base', '24_to_26'), - ] - - operations = [ - migrations.CreateModel( - name='RegionBBox', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('bbox_x0', models.DecimalField(null=True, max_digits=19, decimal_places=10, blank=True)), - ('bbox_x1', models.DecimalField(null=True, max_digits=19, decimal_places=10, blank=True)), - ('bbox_y0', models.DecimalField(null=True, max_digits=19, decimal_places=10, blank=True)), - ('bbox_y1', models.DecimalField(null=True, max_digits=19, decimal_places=10, blank=True)), - ('region', models.OneToOneField(to='base.Region')), - ], - ), - ] diff --git a/filter/migrations/0002_regionbbox_srid.py b/filter/migrations/0002_regionbbox_srid.py deleted file mode 100644 index c0ad7c2..0000000 --- a/filter/migrations/0002_regionbbox_srid.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('filter', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='regionbbox', - name='srid', - field=models.CharField(default=b'EPSG:4326', max_length=255), - ), - ] diff --git a/filter/migrations/__init__.py b/filter/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/filter/models.py b/filter/models.py deleted file mode 100644 index ff1841a..0000000 --- a/filter/models.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.db import models - -from geonode.base.models import Region - - -class RegionBBox(models.Model): - region = models.OneToOneField(Region, on_delete=models.CASCADE) - bbox_x0 = models.DecimalField(max_digits=19, decimal_places=10, blank=True, null=True) - bbox_x1 = models.DecimalField(max_digits=19, decimal_places=10, blank=True, null=True) - bbox_y0 = models.DecimalField(max_digits=19, decimal_places=10, blank=True, null=True) - bbox_y1 = models.DecimalField(max_digits=19, decimal_places=10, blank=True, null=True) - srid = models.CharField(max_length=255, default='EPSG:4326') diff --git a/filter/resourcebase_api.py b/filter/resourcebase_api.py deleted file mode 100644 index f4fd7ad..0000000 --- a/filter/resourcebase_api.py +++ /dev/null @@ -1,86 +0,0 @@ -from django.conf import settings -from django.core.exceptions import ObjectDoesNotExist - -from geonode.api.resourcebase_api import CommonModelApi, CommonMetaApi -from geonode.layers.models import Layer -from geonode.base.models import Region - - -class CommonModelApiExt(CommonModelApi): - def apply_filters(self, request, applicable_filters): - types = applicable_filters.pop('type', None) - extent = applicable_filters.pop('extent', None) - keywords = applicable_filters.pop('keywords__slug__in', None) - region = applicable_filters.get('regions__name__in', None) - region_bbox = None - if region: - print('region is ', region) - try: - region_obj = Region.objects.get(name=region[0]) - except Region.DoesNotExist: - print 'it does not exists' - else: - print('db record', region_obj.name_en) - try: - regionbbox_obj = region_obj.regionbbox - except ObjectDoesNotExist: - print 'regionbbox does not exist' - else: - print(str(regionbbox_obj.bbox_x0)) - bbox = [regionbbox_obj.bbox_x0, regionbbox_obj.bbox_y0, regionbbox_obj.bbox_x1, regionbbox_obj.bbox_y1] - bbox_valid = not any(coo is None for coo in bbox) - if bbox_valid: - region_bbox = ','.join([str(coo) for coo in bbox]) - del applicable_filters['regions__name__in'] - extent = None - print region_bbox - else: - print 'bbox not valid' - - semi_filtered = super( - CommonModelApi, - self).apply_filters( - request, - applicable_filters) - filtered = None - if types: - for the_type in types: - if the_type in LAYER_SUBTYPES.keys(): - if filtered: - filtered = filtered | semi_filtered.filter( - Layer___storeType=LAYER_SUBTYPES[the_type]) - else: - filtered = semi_filtered.filter( - Layer___storeType=LAYER_SUBTYPES[the_type]) - else: - if filtered: - filtered = filtered | semi_filtered.instance_of( - FILTER_TYPES[the_type]) - else: - filtered = semi_filtered.instance_of( - FILTER_TYPES[the_type]) - else: - filtered = semi_filtered - - if extent: - filtered = self.filter_bbox(filtered, extent) - - if keywords: - filtered = self.filter_h_keywords(filtered, keywords) - - if region_bbox: - filtered = self.filter_bbox(filtered, region_bbox) - print 'filtering by bbox: ', region_bbox - - return filtered - - -class LayerExtResource(CommonModelApiExt): - """Layer Ext API""" - - class Meta(CommonMetaApi): - queryset = Layer.objects.distinct().order_by('-date') - if settings.RESOURCE_PUBLISHING: - queryset = queryset.filter(is_published=True) - resource_name = 'layers' - excludes = ['csw_anytext', 'metadata_xml'] diff --git a/filter/tests.py b/filter/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/filter/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/filter/urls.py b/filter/urls.py deleted file mode 100644 index 1539670..0000000 --- a/filter/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -from tastypie.api import Api - -#from geonode.api.resourcebase_api import LayerResource -from filter.resourcebase_api import LayerExtResource - - -api_ext = Api(api_name='api') - -api_ext.register(LayerExtResource()) diff --git a/filter/views.py b/filter/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/filter/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/fixtures/apikey_docker.json b/fixtures/apikey_docker.json new file mode 100644 index 0000000..1c98b66 --- /dev/null +++ b/fixtures/apikey_docker.json @@ -0,0 +1,11 @@ +[ + { + "fields": { + "user": 1000, + "key": "pyxW5djJ7XsjeFUXduAsGpR4xMGUwpeBGQRqTeT3", + "created": "2018-06-28T14:54:51Z" + }, + "model": "tastypie.apikey", + "pk": 1 + } +] \ No newline at end of file diff --git a/fixtures/default_oauth_apps.json b/fixtures/default_oauth_apps.json new file mode 100644 index 0000000..41b8bd9 --- /dev/null +++ b/fixtures/default_oauth_apps.json @@ -0,0 +1,21 @@ +[ +{ + "model": "oauth2_provider.application", + "pk": 1001, + "fields": { + "skip_authorization": true, + "created": "2018-05-31T10:00:31.661Z", + "updated": "2018-05-31T11:30:31.245Z", + "algorithm": "RS256", + "redirect_uris": "http://localhost:8080/geoserver/index.html\nhttp://localhost/geoserver/index.html", + "name": "GeoServer", + "authorization_grant_type": "authorization-code", + "client_type": "confidential", + "client_id": "Jrchz2oPY3akmzndmgUTYrs9gczlgoV20YPSvqaV", + "client_secret": "rCnp5txobUo83EpQEblM8fVj3QT5zb5qRfxNsuPzCqZaiRyIoxM4jdgMiZKFfePBHYXCLd7B8NlkfDBY9HKeIQPcy5Cp08KQNpRHQbjpLItDHv12GvkSeXp6OxaUETv3", + "user": [ + "admin" + ] + } +} +] diff --git a/fixtures/default_oauth_apps_docker.json b/fixtures/default_oauth_apps_docker.json new file mode 100644 index 0000000..975680f --- /dev/null +++ b/fixtures/default_oauth_apps_docker.json @@ -0,0 +1,21 @@ +[ +{ + "model": "oauth2_provider.application", + "pk": 1001, + "fields": { + "skip_authorization": true, + "created": "2018-05-31T10:00:31.661Z", + "updated": "2018-05-31T11:30:31.245Z", + "algorithm": "RS256", + "redirect_uris": "http://geonode/geoserver", + "name": "GeoServer", + "authorization_grant_type": "authorization-code", + "client_type": "confidential", + "client_id": "Jrchz2oPY3akmzndmgUTYrs9gczlgoV20YPSvqaV", + "client_secret": "rCnp5txobUo83EpQEblM8fVj3QT5zb5qRfxNsuPzCqZaiRyIoxM4jdgMiZKFfePBHYXCLd7B8NlkfDBY9HKeIQPcy5Cp08KQNpRHQbjpLItDHv12GvkSeXp6OxaUETv3", + "user": [ + "admin" + ] + } +} +] diff --git a/fixtures/initial_data.json b/fixtures/initial_data.json new file mode 100644 index 0000000..03c684f --- /dev/null +++ b/fixtures/initial_data.json @@ -0,0 +1,4856 @@ +[ + { + "pk": 1, + "model": "base.topiccategory", + "fields": { + "description": "information pertaining to earth sciences. Examples: geophysical features and processes, geology, minerals, sciences dealing with the composition, structure and origin of the earth s rocks, risks of earthquakes, volcanic activity, landslides, gravity information, soils, permafrost, hydrogeology, erosion", + "gn_description": "Geoscientific Information", + "is_choice": true, + "fa_class": "fa-bullseye", + "identifier": "geoscientificInformation" + } + }, + { + "pk": 2, + "model": "base.topiccategory", + "fields": { + "description": "rearing of animals and/or cultivation of plants. Examples: agriculture, irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and livestock", + "gn_description": "Farming", + "is_choice": true, + "fa_class": "fa-lemon-o", + "identifier": "farming" + } + }, + { + "pk": 3, + "model": "base.topiccategory", + "fields": { + "description": "height above or below sea level. Examples: altitude, bathymetry, digital elevation models, slope, derived products", + "gn_description": "Elevation", + "is_choice": true, + "fa_class": "fa-flag", + "identifier": "elevation" + } + }, + { + "pk": 4, + "model": "base.topiccategory", + "fields": { + "description": "energy, water and waste systems and communications infrastructure and services. Examples: hydroelectricity, geothermal, solar and nuclear sources of energy, water purification and distribution, sewage collection and disposal, electricity and gas distribution, data communication, telecommunication, radio, communication networks", + "gn_description": "Utilities Communication", + "is_choice": true, + "fa_class": "fa-phone", + "identifier": "utilitiesCommunication" + } + }, + { + "pk": 5, + "model": "base.topiccategory", + "fields": { + "description": "features and characteristics of salt water bodies (excluding inland waters). Examples: tides, tidal waves, coastal information, reefs", + "gn_description": "Oceans", + "is_choice": true, + "fa_class": "fa-anchor", + "identifier": "oceans" + } + }, + { + "pk": 6, + "model": "base.topiccategory", + "fields": { + "description": "legal land descriptions. Examples: political and administrative boundaries", + "gn_description": "Boundaries", + "is_choice": true, + "fa_class": "fa-ellipsis-h", + "identifier": "boundaries" + } + }, + { + "pk": 7, + "model": "base.topiccategory", + "fields": { + "description": "inland water features, drainage systems and their characteristics. Examples: rivers and glaciers, salt lakes, water utilization plans, dams, currents, floods, water quality, hydrographic charts", + "gn_description": "Inland Waters", + "is_choice": true, + "fa_class": "fa-tint", + "identifier": "inlandWaters" + } + }, + { + "pk": 8, + "model": "base.topiccategory", + "fields": { + "description": "military bases, structures, activities. Examples: barracks, training grounds, military transportation, information collection", + "gn_description": "Intelligence Military", + "is_choice": true, + "fa_class": "fa-fighter-jet", + "identifier": "intelligenceMilitary" + } + }, + { + "pk": 9, + "model": "base.topiccategory", + "fields": { + "description": "environmental resources, protection and conservation. Examples: environmental pollution, waste storage and treatment, environmental impact assessment, monitoring environmental risk, nature reserves, landscape", + "gn_description": "Environment", + "is_choice": true, + "fa_class": "fa-tree", + "identifier": "environment" + } + }, + { + "pk": 10, + "model": "base.topiccategory", + "fields": { + "description": "positional information and services. Examples: addresses, geodetic networks, control points, postal zones and services, place names", + "gn_description": "Location", + "is_choice": true, + "fa_class": "fa-map-marker", + "identifier": "location" + } + }, + { + "pk": 11, + "model": "base.topiccategory", + "fields": { + "description": "economic activities, conditions and employment. Examples: production, labour, revenue, commerce, industry, tourism and ecotourism, forestry, fisheries, commercial or subsistence hunting, exploration and exploitation of resources such as minerals, oil and gas", + "gn_description": "Economy", + "is_choice": true, + "fa_class": "fa-shopping-cart", + "identifier": "economy" + } + }, + { + "pk": 12, + "model": "base.topiccategory", + "fields": { + "description": "information used for appropriate actions for future use of the land. Examples: land use maps, zoning maps, cadastral surveys, land ownership", + "gn_description": "Planning Cadastre", + "is_choice": true, + "fa_class": "fa-home", + "identifier": "planningCadastre" + } + }, + { + "pk": 13, + "model": "base.topiccategory", + "fields": { + "description": "flora and/or fauna in natural environment. Examples: wildlife, vegetation, biological sciences, ecology, wilderness, sealife, wetlands, habitat", + "gn_description": "Biota", + "is_choice": true, + "fa_class": "fa-leaf", + "identifier": "biota" + } + }, + { + "pk": 14, + "model": "base.topiccategory", + "fields": { + "description": "health, health services, human ecology, and safety. Examples: disease and illness, factors affecting health, hygiene, substance abuse, mental and physical health, health services", + "gn_description": "Health", + "is_choice": true, + "fa_class": "fa-stethoscope", + "identifier": "health" + } + }, + { + "pk": 15, + "model": "base.topiccategory", + "fields": { + "description": "base maps. Examples: land cover, topographic maps, imagery, unclassified images, annotations", + "gn_description": "Imagery Base Maps Earth Cover", + "is_choice": true, + "fa_class": "fa-globe", + "identifier": "imageryBaseMapsEarthCover" + } + }, + { + "pk": 16, + "model": "base.topiccategory", + "fields": { + "description": "means and aids for conveying persons and/or goods. Examples: roads, airports/airstrips, shipping routes, tunnels, nautical charts, vehicle or vessel location, aeronautical charts, railways", + "gn_description": "Transportation", + "is_choice": true, + "fa_class": "fa-truck", + "identifier": "transportation" + } + }, + { + "pk": 17, + "model": "base.topiccategory", + "fields": { + "description": "characteristics of society and cultures. Examples: settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information", + "gn_description": "Society", + "is_choice": true, + "fa_class": "fa-comments", + "identifier": "society" + } + }, + { + "pk": 18, + "model": "base.topiccategory", + "fields": { + "description": "man-made construction. Examples: buildings, museums, churches, factories, housing, monuments, shops, towers", + "gn_description": "Structure", + "is_choice": true, + "fa_class": "fa-building", + "identifier": "structure" + } + }, + { + "pk": 19, + "model": "base.topiccategory", + "fields": { + "description": "processes and phenomena of the atmosphere. Examples: cloud cover, weather, climate, atmospheric conditions, climate change, precipitation", + "gn_description": "Climatology Meteorology Atmosphere", + "is_choice": true, + "fa_class": "fa-cloud", + "identifier": "climatologyMeteorologyAtmosphere" + } + }, + { + "pk": 20, + "model": "base.topiccategory", + "fields": { + "description": "settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information. Economic activities, conditions and employment", + "gn_description": "Population", + "is_choice": true, + "fa_class": "fa-male", + "identifier": "population" + } + }, + { + "pk": 1, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "vector data is used to represent geographic data", + "identifier": "vector", + "description": "vector data is used to represent geographic data" + } + }, + { + "pk": 2, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "grid data is used to represent geographic data", + "identifier": "grid", + "description": "grid data is used to represent geographic data" + } + }, + { + "pk": 3, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "textual or tabular data is used to represent geographic data", + "identifier": "textTable", + "description": "textual or tabular data is used to represent geographic data" + } + }, + { + "pk": 4, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "triangulated irregular network", + "identifier": "tin", + "description": "triangulated irregular network" + } + }, + { + "pk": 5, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images", + "identifier": "stereoModel", + "description": "three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images" + } + }, + { + "pk": 6, + "model": "base.spatialrepresentationtype", + "fields": { + "is_choice": true, + "gn_description": "scene from a video recording", + "identifier": "video", + "description": "scene from a video recording" + } + }, + { + "pk": 1, + "model": "base.license", + "fields": { + "identifier": "not_specified", + "name":"Not Specified", + "abbreviation":"", + "description":"The original author did not specify a license.", + "url":"", + "license_text":"Not applicable" + } + }, +{ + "pk": 2, + "model": "base.license", + "fields": { + "identifier":"varied_original", + "name":"Varied / Original", + "abbreviation":"", + "description":"This item is either licensed under multiple licenses. See the item's abstract for more information or contact the distributor.", + "url":"", + "license_text":"Not applicable" + } + }, + { + "pk": 3, + "model": "base.license", + "fields": { + "identifier":"varied_derived", + "name":"Varied / Derived", + "abbreviation":"", + "description":"The constituent parts of this item have different licenses. Go to each part to see license information.", + "url":"", + "license_text":"Not applicable" + } + }, + { + "pk": 4, + "model": "base.license", + "fields": { + "identifier":"public_domain", + "name":"Public Domain", + "abbreviation":"PD", + "description":"Works in the public domain may be used freely without the permission of the former copyright owner.", + "url":"http://www.copyright.gov/help/faq/faq-definitions.html", + "license_text":"The public domain is not a place. A work of authorship is in the “public domain” if it is no longer under copyright protection or if it failed to meet the requirements for copyright protection. Works in the public domain may be used freely without the permission of the former copyright owner." + } + }, + { + "pk": 5, + "model": "base.license", + "fields": { + "identifier":"public_domain_usg", + "name":"Public Domain / USG", + "abbreviation":"PD/USG", + "description":"This project constitutes a work of the United States Government and is not subject to domestic copyright protection under 17 USC § 105.", + "url":"https://raw.githubusercontent.com/state-hiu/cybergis-licenses/master/licenses/PUBLICDOMAIN-LICENSE-RAW.txt", + "license_text":"This project constitutes a work of the United States Government and is not subject to domestic copyright protection under 17 USC § 105." + } + }, + { + "pk": 6, + "model": "base.license", + "fields": { + "identifier":"odbl", + "name":"Open Data Commons Open Database License / OSM", + "abbreviation":"ODbL/OSM", + "description":"You are free to copy, distribute, transmit and adapt our data, as long as you credit OpenStreetMap and its contributors\nIf you alter or build upon our data, you may distribute the result only under the same licence.", + "url":"http://www.openstreetmap.org/copyright", + "license_text":"" + } + }, + { + "pk": 7, + "model": "base.license", + "fields": { + "identifier":"nextview", + "name":"NextView", + "abbreviation":"NV", + "description":"This data is licensed for use by the US Government (USG) under the NextView (NV) license and copyrighted by Digital Globe or GeoEye. The NV license allows the USG to share the imagery and Literal Imagery Derived Products (LIDP) with entities outside the USG when that entity is working directly with the USG, for the USG, or in a manner that is directly beneficial to the USG. The party receiving the data can only use the imagery or LIDP for the original purpose or only as otherwise agreed to by the USG. The party receiving the data cannot share the imagery or LIDP with a third party without express permission from the USG. At no time should this imagery or LIDP be used for other than USG-related purposes and must not be used for commercial gain. The copyright information should be maintained at all times. Your acceptance of these license terms is implied by your use.\nIn other words, you may only use NextView imagery linked from this site for digitizing OpenStreetMap data for humanitarian purposes.", + "url":"https://raw.githubusercontent.com/state-hiu/cybergis-licenses/master/licenses/NEXTVIEW-LICENSE-RAW.txt", + "license_text":"" + } + }, + { + "pk": 1, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor", + "identifier": "copyright", + "description": "exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor" + } + }, + { + "pk": 6, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity", + "identifier": "intellectualPropertyRights", + "description": "rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity" + } + }, + { + "pk": 5, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "formal permission to do something", + "identifier": "license", + "description": "formal permission to do something" + } + }, + { + "pk": 8, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "otherRestrictions", + "identifier": "limitation not listed", + "description": "otherRestrictions" + } + }, + { + "pk": 2, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "government has granted exclusive right to make, sell, use or license an invention or discovery", + "identifier": "patent", + "description": "government has granted exclusive right to make, sell, use or license an invention or discovery" + } + }, + { + "pk": 3, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "produced or sold information awaiting a patent", + "identifier": "patentPending", + "description": "produced or sold information awaiting a patent" + } + }, + { + "pk": 7, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "withheld from general circulation or disclosure", + "identifier": "restricted", + "description": "withheld from general circulation or disclosure" + } + }, + { + "pk": 4, + "model": "base.restrictioncodetype", + "fields": { + "is_choice": true, + "gn_description": "a name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer", + "identifier": "trademark", + "description": "a name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer" + } + }, + { + "pk": 1, + "model": "base.region", + "fields": { + "rght": 516, + "code": "GLO", + "name": "Global", + "parent": null, + "level": 0, + "lft": 1, + "tree_id": 90, + "bbox_x0": -180, + "bbox_x1": 180, + "bbox_y0": -90, + "bbox_y1": 90 + } + }, + { + "pk": 2, + "model": "base.region", + "fields": { + "rght": 212, + "code": "NAM", + "name": "North America", + "parent": 254, + "level": 2, + "lft": 203, + "tree_id": 90, + "bbox_x0": -167.276413, + "bbox_x1": -52.23304, + "bbox_y0": 5.49955, + "bbox_y1": 83.162102 + } + }, + { + "pk": 3, + "model": "base.region", + "fields": { + "rght": 202, + "code": "CAM", + "name": "Central America", + "parent": 254, + "level": 2, + "lft": 187, + "tree_id": 90, + "bbox_x0": -118.867172, + "bbox_x1": -66.869827, + "bbox_y0": -4.23048, + "bbox_y1": 32.71862 + } + }, + { + "pk": 4, + "model": "base.region", + "fields": { + "rght": 242, + "code": "SAM", + "name": "South America", + "parent": 254, + "level": 2, + "lft": 213, + "tree_id": 90, + "bbox_x0": -109.47493, + "bbox_x1": -26.33247, + "bbox_y0": -59.450451, + "bbox_y1": 13.39029 + } + }, + { + "pk": 5, + "model": "base.region", + "fields": { + "rght": 433, + "code": "EUR", + "name": "Europe", + "parent": null, + "level": 1, + "lft": 318, + "tree_id": 90, + "bbox_x0": -31.266001, + "bbox_x1": 39.869301, + "bbox_y0": 27.636311, + "bbox_y1": 81.008797 + } + }, + { + "pk": 6, + "model": "base.region", + "fields": { + "rght": 317, + "code": "ASI", + "name": "Asia", + "parent": null, + "level": 1, + "lft": 246, + "tree_id": 90, + "bbox_x0": 19.6381, + "bbox_x1": 180, + "bbox_y0": -12.56111, + "bbox_y1": 82.50045 + } + }, + { + "pk": 7, + "model": "base.region", + "fields": { + "rght": 316, + "code": "SEA", + "name": "Southeast Asia", + "parent": 6, + "level": 2, + "lft": 293, + "tree_id": 90, + "bbox_x0": 68.0327, + "bbox_x1": 141.021805, + "bbox_y0": -12.56111, + "bbox_y1": 35.504211 + } + }, + { + "pk": 8, + "model": "base.region", + "fields": { + "rght": 260, + "code": "CTA", + "name": "Central Asia", + "parent": 6, + "level": 2, + "lft": 247, + "tree_id": 90, + "bbox_x0": 44.236641, + "bbox_x1": 90.076767, + "bbox_y0": 33.890511, + "bbox_y1": 54.845139 + } + }, + { + "pk": 9, + "model": "base.region", + "fields": { + "rght": 292, + "code": "SAS", + "name": "South Asia", + "parent": 6, + "level": 2, + "lft": 277, + "tree_id": 90, + "bbox_x0": 19.6381, + "bbox_x1": 180, + "bbox_y0": -12.56111, + "bbox_y1": 82.50045 + } + }, + { + "pk": 10, + "model": "base.region", + "fields": { + "rght": 127, + "code": "AFR", + "name": "Africa", + "parent": null, + "level": 1, + "lft": 2, + "tree_id": 90, + "bbox_x0": -25.35874, + "bbox_x1": 63.525379, + "bbox_y0": -46.900452, + "bbox_y1": 37.56712 + } + }, + { + "pk": 11, + "model": "base.region", + "fields": { + "rght": 64, + "code": "NAF", + "name": "North Africa", + "parent": 10, + "level": 2, + "lft": 49, + "tree_id": 90, + "bbox_x0": -17.10317, + "bbox_x1": 38.833801, + "bbox_y0": 3.48639, + "bbox_y1": 37.56712 + } + }, + { + "pk": 12, + "model": "base.region", + "fields": { + "rght": 48, + "code": "EAF", + "name": "East Africa", + "parent": 10, + "level": 2, + "lft": 13, + "tree_id": 90, + "bbox_x0": 22.855089, + "bbox_x1": 63.94656, + "bbox_y0": -25.84763, + "bbox_y1": 17.467039 + } + }, + { + "pk": 13, + "model": "base.region", + "fields": { + "rght": 126, + "code": "WAF", + "name": "West Africa", + "parent": 10, + "level": 2, + "lft": 83, + "tree_id": 90, + "bbox_x0": -26.758421, + "bbox_x1": 24.002661, + "bbox_y0": -9.29925, + "bbox_y1": 27.702801 + } + }, + { + "pk": 14, + "model": "base.region", + "fields": { + "rght": 82, + "code": "SAF", + "name": "Southern Africa", + "parent": 10, + "level": 2, + "lft": 65, + "tree_id": 90, + "bbox_x0": 8.93107, + "bbox_x1": 42.74847, + "bbox_y0": -35.507481, + "bbox_y1": -13.27553 + } + }, + { + "pk": 15, + "model": "base.region", + "fields": { + "rght": 463, + "code": "MES", + "name": "Middle East", + "parent": null, + "level": 1, + "lft": 434, + "tree_id": 90, + "bbox_x0": 24.698099, + "bbox_x1": 63.317459, + "bbox_y0": 12.111, + "bbox_y1": 42.10751 + } + }, + { + "pk": 16, + "model": "base.region", + "fields": { + "rght": 245, + "code": "ANT", + "name": "Antarctica", + "parent": null, + "level": 1, + "lft": 244, + "tree_id": 90, + "bbox_x0": -180, + "bbox_x1": 180, + "bbox_y0": -90, + "bbox_y1": -73 + } + }, + { + "pk": 17, + "model": "base.region", + "fields": { + "rght": 249, + "code": "AFG", + "name": "Afghanistan", + "parent": 8, + "level": 3, + "lft": 248, + "tree_id": 90, + "bbox_x0": 60.478439, + "bbox_x1": 74.879433, + "bbox_y0": 29.37747, + "bbox_y1": 38.483421 + } + }, + { + "pk": 18, + "model": "base.region", + "fields": { + "rght": 320, + "code": "ALA", + "name": "Aland Islands", + "parent": 5, + "level": 2, + "lft": 319, + "tree_id": 90, + "bbox_x0": 19.262711, + "bbox_x1": 21.324409, + "bbox_y0": 59.736301, + "bbox_y1": 60.665581 + } + }, + { + "pk": 19, + "model": "base.region", + "fields": { + "rght": 322, + "code": "ALB", + "name": "Albania", + "parent": 5, + "level": 2, + "lft": 321, + "tree_id": 90, + "bbox_x0": 19.28219, + "bbox_x1": 21.057819, + "bbox_y0": 39.644489, + "bbox_y1": 42.660801 + } + }, + { + "pk": 20, + "model": "base.region", + "fields": { + "rght": 51, + "code": "DZA", + "name": "Algeria", + "parent": 11, + "level": 3, + "lft": 50, + "tree_id": 90, + "bbox_x0": -8.67386, + "bbox_x1": 11.97955, + "bbox_y0": 18.96002, + "bbox_y1": 37.093731 + } + }, + { + "pk": 21, + "model": "base.region", + "fields": { + "rght": 466, + "code": "ASM", + "name": "American Samoa", + "parent": 256, + "level": 2, + "lft": 465, + "tree_id": 90, + "bbox_x0": -171.091873, + "bbox_x1": -169.416077, + "bbox_y0": -14.38247, + "bbox_y1": -11.04969 + } + }, + { + "pk": 22, + "model": "base.region", + "fields": { + "rght": 324, + "code": "AND", + "name": "Andorra", + "parent": 5, + "level": 2, + "lft": 323, + "tree_id": 90, + "bbox_x0": 1.41382, + "bbox_x1": 1.78659, + "bbox_y0": 42.42873, + "bbox_y1": 42.65601 + } + }, + { + "pk": 23, + "model": "base.region", + "fields": { + "rght": 85, + "code": "AGO", + "name": "Angola", + "parent": 13, + "level": 3, + "lft": 84, + "tree_id": 90, + "bbox_x0": 11.6792, + "bbox_x1": 24.082109, + "bbox_y0": -18.04207, + "bbox_y1": -4.37259 + } + }, + { + "pk": 24, + "model": "base.region", + "fields": { + "rght": 131, + "code": "AIA", + "name": "Anguilla", + "parent": 255, + "level": 3, + "lft": 130, + "tree_id": 90, + "bbox_x0": -63.434872, + "bbox_x1": -62.916199, + "bbox_y0": 18.149549, + "bbox_y1": 18.61278 + } + }, + { + "pk": 25, + "model": "base.region", + "fields": { + "rght": 133, + "code": "ATG", + "name": "Antigua and Barbuda", + "parent": 255, + "level": 3, + "lft": 132, + "tree_id": 90, + "bbox_x0": -62.352402, + "bbox_x1": -61.659081, + "bbox_y0": 16.927219, + "bbox_y1": 17.72938 + } + }, + { + "pk": 26, + "model": "base.region", + "fields": { + "rght": 215, + "code": "ARG", + "name": "Argentina", + "parent": 4, + "level": 3, + "lft": 214, + "tree_id": 90, + "bbox_x0": -73.577782, + "bbox_x1": -53.637539, + "bbox_y0": -55.057362, + "bbox_y1": -21.78126 + } + }, + { + "pk": 27, + "model": "base.region", + "fields": { + "rght": 326, + "code": "ARM", + "name": "Armenia", + "parent": 5, + "level": 2, + "lft": 325, + "tree_id": 90, + "bbox_x0": 43.449749, + "bbox_x1": 46.630039, + "bbox_y0": 38.830521, + "bbox_y1": 41.30183 + } + }, + { + "pk": 28, + "model": "base.region", + "fields": { + "rght": 135, + "code": "ABW", + "name": "Aruba", + "parent": 255, + "level": 3, + "lft": 134, + "tree_id": 90, + "bbox_x0": -70.0611, + "bbox_x1": -69.8669, + "bbox_y0": 12.4061, + "bbox_y1": 12.6306 + } + }, + { + "pk": 29, + "model": "base.region", + "fields": { + "rght": 468, + "code": "AUS", + "name": "Australia", + "parent": 256, + "level": 2, + "lft": 467, + "tree_id": 90, + "bbox_x0": 112.921112, + "bbox_x1": 159.278717, + "bbox_y0": -54.640301, + "bbox_y1": -9.22882 + } + }, + { + "pk": 30, + "model": "base.region", + "fields": { + "rght": 328, + "code": "AUT", + "name": "Austria", + "parent": 5, + "level": 2, + "lft": 327, + "tree_id": 90, + "bbox_x0": 9.53079, + "bbox_x1": 17.160749, + "bbox_y0": 46.372299, + "bbox_y1": 49.02071 + } + }, + { + "pk": 31, + "model": "base.region", + "fields": { + "rght": 330, + "code": "AZE", + "name": "Azerbaijan", + "parent": 5, + "level": 2, + "lft": 329, + "tree_id": 90, + "bbox_x0": 44.7719, + "bbox_x1": 50.6078, + "bbox_y0": 38.3970, + "bbox_y1": 41.9056 + } + }, + { + "pk": 32, + "model": "base.region", + "fields": { + "rght": 137, + "code": "BHS", + "name": "Bahamas", + "parent": 255, + "level": 3, + "lft": 136, + "tree_id": 90, + "bbox_x0": -80.499229, + "bbox_x1": -72.649513, + "bbox_y0": 20.916059, + "bbox_y1": 27.933781 + } + }, + { + "pk": 33, + "model": "base.region", + "fields": { + "rght": 436, + "code": "BHR", + "name": "Bahrain", + "parent": 15, + "level": 2, + "lft": 435, + "tree_id": 90, + "bbox_x0": 50.385799, + "bbox_x1": 50.828499, + "bbox_y0": 25.5422, + "bbox_y1": 26.292391 + } + }, + { + "pk": 34, + "model": "base.region", + "fields": { + "rght": 279, + "code": "BGD", + "name": "Bangladesh", + "parent": 9, + "level": 3, + "lft": 278, + "tree_id": 90, + "bbox_x0": 88.028198, + "bbox_x1": 92.673599, + "bbox_y0": 20.585199, + "bbox_y1": 26.631701 + } + }, + { + "pk": 35, + "model": "base.region", + "fields": { + "rght": 139, + "code": "BRB", + "name": "Barbados", + "parent": 255, + "level": 3, + "lft": 138, + "tree_id": 90, + "bbox_x0": -59.648918, + "bbox_x1": -59.420368, + "bbox_y0": 13.03984, + "bbox_y1": 13.32725 + } + }, + { + "pk": 36, + "model": "base.region", + "fields": { + "rght": 332, + "code": "BLR", + "name": "Belarus", + "parent": 5, + "level": 2, + "lft": 331, + "tree_id": 90, + "bbox_x0": 23.17679, + "bbox_x1": 32.77071, + "bbox_y0": 51.256401, + "bbox_y1": 56.16571 + } + }, + { + "pk": 37, + "model": "base.region", + "fields": { + "rght": 334, + "code": "BEL", + "name": "Belgium", + "parent": 5, + "level": 2, + "lft": 333, + "tree_id": 90, + "bbox_x0": 2.54563, + "bbox_x1": 6.40791, + "bbox_y0": 49.496899, + "bbox_y1": 51.505081 + } + }, + { + "pk": 38, + "model": "base.region", + "fields": { + "rght": 189, + "code": "BLZ", + "name": "Belize", + "parent": 3, + "level": 3, + "lft": 188, + "tree_id": 90, + "bbox_x0": -89.224823, + "bbox_x1": -87.468132, + "bbox_y0": 15.8893, + "bbox_y1": 18.49655 + } + }, + { + "pk": 39, + "model": "base.region", + "fields": { + "rght": 87, + "code": "BEN", + "name": "Benin", + "parent": 13, + "level": 3, + "lft": 86, + "tree_id": 90, + "bbox_x0": 0.77456, + "bbox_x1": 3.8517, + "bbox_y0": 6.22574, + "bbox_y1": 12.41834 + } + }, + { + "pk": 40, + "model": "base.region", + "fields": { + "rght": 141, + "code": "BMU", + "name": "Bermuda", + "parent": 255, + "level": 3, + "lft": 140, + "tree_id": 90, + "bbox_x0": -64.896042, + "bbox_x1": -64.642952, + "bbox_y0": 32.230709, + "bbox_y1": 32.393829 + } + }, + { + "pk": 41, + "model": "base.region", + "fields": { + "rght": 281, + "code": "BTN", + "name": "Bhutan", + "parent": 9, + "level": 3, + "lft": 280, + "tree_id": 90, + "bbox_x0": 88.759521, + "bbox_x1": 92.125023, + "bbox_y0": 26.7075, + "bbox_y1": 28.3235 + } + }, + { + "pk": 42, + "model": "base.region", + "fields": { + "rght": 217, + "code": "BOL", + "name": "Bolivia", + "parent": 4, + "level": 3, + "lft": 216, + "tree_id": 90, + "bbox_x0": -69.640762, + "bbox_x1": -57.458092, + "bbox_y0": -22.89613, + "bbox_y1": -9.68056 + } + }, + { + "pk": 43, + "model": "base.region", + "fields": { + "rght": 336, + "code": "BIH", + "name": "Bosnia and Herzegovina", + "parent": 5, + "level": 2, + "lft": 335, + "tree_id": 90, + "bbox_x0": 15.74909, + "bbox_x1": 19.62907, + "bbox_y0": 42.56451, + "bbox_y1": 45.276001 + } + }, + { + "pk": 44, + "model": "base.region", + "fields": { + "rght": 67, + "code": "BWA", + "name": "Botswana", + "parent": 14, + "level": 3, + "lft": 66, + "tree_id": 90, + "bbox_x0": 19.999531, + "bbox_x1": 29.360781, + "bbox_y0": -26.90724, + "bbox_y1": -17.780809 + } + }, + { + "pk": 45, + "model": "base.region", + "fields": { + "rght": 219, + "code": "BRA", + "name": "Brazil", + "parent": 4, + "level": 3, + "lft": 218, + "tree_id": 90, + "bbox_x0": -73.985527, + "bbox_x1": -28.839041, + "bbox_y0": -33.750702, + "bbox_y1": 5.26486 + } + }, + { + "pk": 46, + "model": "base.region", + "fields": { + "rght": 143, + "code": "VGB", + "name": "British Virgin Islands", + "parent": 255, + "level": 3, + "lft": 142, + "tree_id": 90, + "bbox_x0": -64.783012, + "bbox_x1": -64.268761, + "bbox_y0": 18.312731, + "bbox_y1": 18.757219 + } + }, + { + "pk": 47, + "model": "base.region", + "fields": { + "rght": 295, + "code": "BRN", + "name": "Brunei Darussalam", + "parent": 7, + "level": 3, + "lft": 294, + "tree_id": 90, + "bbox_x0": 114.071457, + "bbox_x1": 115.359451, + "bbox_y0": 4.00309, + "bbox_y1": 5.04717 + } + }, + { + "pk": 48, + "model": "base.region", + "fields": { + "rght": 338, + "code": "BGR", + "name": "Bulgaria", + "parent": 5, + "level": 2, + "lft": 337, + "tree_id": 90, + "bbox_x0": 22.35741, + "bbox_x1": 28.60882, + "bbox_y0": 41.235931, + "bbox_y1": 44.227261 + } + }, + { + "pk": 49, + "model": "base.region", + "fields": { + "rght": 89, + "code": "BFA", + "name": "Burkina Faso", + "parent": 13, + "level": 3, + "lft": 88, + "tree_id": 90, + "bbox_x0": -5.51891, + "bbox_x1": 2.40539, + "bbox_y0": 9.4011, + "bbox_y1": 15.08259 + } + }, + { + "pk": 50, + "model": "base.region", + "fields": { + "rght": 15, + "code": "BDI", + "name": "Burundi", + "parent": 12, + "level": 3, + "lft": 14, + "tree_id": 90, + "bbox_x0": 28.993071, + "bbox_x1": 30.847719, + "bbox_y0": -4.46571, + "bbox_y1": -2.31012 + } + }, + { + "pk": 51, + "model": "base.region", + "fields": { + "rght": 297, + "code": "KHM", + "name": "Cambodia", + "parent": 7, + "level": 3, + "lft": 296, + "tree_id": 90, + "bbox_x0": 102.340012, + "bbox_x1": 107.627724, + "bbox_y0": 9.28325, + "bbox_y1": 14.6864 + } + }, + { + "pk": 52, + "model": "base.region", + "fields": { + "rght": 91, + "code": "CMR", + "name": "Cameroon", + "parent": 13, + "level": 3, + "lft": 90, + "tree_id": 90, + "bbox_x0": 8.49477, + "bbox_x1": 16.19211, + "bbox_y0": 1.65254, + "bbox_y1": 13.07805 + } + }, + { + "pk": 53, + "model": "base.region", + "fields": { + "rght": 205, + "code": "CAN", + "name": "Canada", + "parent": 2, + "level": 3, + "lft": 204, + "tree_id": 90, + "bbox_x0": -141.002701, + "bbox_x1": -52.620201, + "bbox_y0": 41.681019, + "bbox_y1": 83.110619 + } + }, + { + "pk": 54, + "model": "base.region", + "fields": { + "rght": 93, + "code": "CPV", + "name": "Cape Verde", + "parent": 13, + "level": 3, + "lft": 92, + "tree_id": 90, + "bbox_x0": -25.35874, + "bbox_x1": -22.666201, + "bbox_y0": 14.80221, + "bbox_y1": 17.19717 + } + }, + { + "pk": 55, + "model": "base.region", + "fields": { + "rght": 145, + "code": "CYM", + "name": "Cayman Islands", + "parent": 255, + "level": 3, + "lft": 144, + "tree_id": 90, + "bbox_x0": -81.420593, + "bbox_x1": -79.722321, + "bbox_y0": 19.262659, + "bbox_y1": 19.75738 + } + }, + { + "pk": 56, + "model": "base.region", + "fields": { + "rght": 5, + "code": "CAF", + "name": "Central African Republic", + "parent": 257, + "level": 3, + "lft": 4, + "tree_id": 90, + "bbox_x0": 14.42009, + "bbox_x1": 27.463421, + "bbox_y0": 2.22051, + "bbox_y1": 11.00756 + } + }, + { + "pk": 57, + "model": "base.region", + "fields": { + "rght": 7, + "code": "TCD", + "name": "Chad", + "parent": 257, + "level": 3, + "lft": 6, + "tree_id": 90, + "bbox_x0": 13.47592, + "bbox_x1": 24.00161, + "bbox_y0": 7.44237, + "bbox_y1": 23.478239 + } + }, + { + "pk": 58, + "model": "base.region", + "fields": { + "rght": 340, + "code": "CIL", + "name": "Channel Islands", + "parent": 5, + "level": 2, + "lft": 339, + "tree_id": 90, + "bbox_x0": -2.67545, + "bbox_x1": -2.01129, + "bbox_y0": 49.16209, + "bbox_y1": 49.7393 + } + }, + { + "pk": 59, + "model": "base.region", + "fields": { + "rght": 221, + "code": "CHL", + "name": "Chile", + "parent": 4, + "level": 3, + "lft": 220, + "tree_id": 90, + "bbox_x0": -109.47493, + "bbox_x1": -66.417549, + "bbox_y0": -56.533779, + "bbox_y1": -17.507549 + } + }, + { + "pk": 60, + "model": "base.region", + "fields": { + "rght": 263, + "code": "CHN", + "name": "China", + "parent": 258, + "level": 3, + "lft": 262, + "tree_id": 90, + "bbox_x0": 73.557701, + "bbox_x1": 134.773605, + "bbox_y0": 15.77539, + "bbox_y1": 53.5606 + } + }, + { + "pk": 61, + "model": "base.region", + "fields": { + "rght": 265, + "code": "HKG", + "name": "China - Hong Kong", + "parent": 258, + "level": 3, + "lft": 264, + "tree_id": 90, + "bbox_x0": 113.835083, + "bbox_x1": 114.441788, + "bbox_y0": 22.153549, + "bbox_y1": 22.56204 + } + }, + { + "pk": 62, + "model": "base.region", + "fields": { + "rght": 267, + "code": "MAC", + "name": "China - Macao", + "parent": 258, + "level": 3, + "lft": 266, + "tree_id": 90, + "bbox_x0": 113.528351, + "bbox_x1": 113.598297, + "bbox_y0": 22.10977, + "bbox_y1": 22.21697 + } + }, + { + "pk": 63, + "model": "base.region", + "fields": { + "rght": 223, + "code": "COL", + "name": "Colombia", + "parent": 4, + "level": 3, + "lft": 222, + "tree_id": 90, + "bbox_x0": -81.728111, + "bbox_x1": -66.869827, + "bbox_y0": -4.23048, + "bbox_y1": 13.39029 + } + }, + { + "pk": 64, + "model": "base.region", + "fields": { + "rght": 17, + "code": "COM", + "name": "Comoros", + "parent": 12, + "level": 3, + "lft": 16, + "tree_id": 90, + "bbox_x0": 43.215778, + "bbox_x1": 44.538219, + "bbox_y0": -12.41382, + "bbox_y1": -11.36238 + } + }, + { + "pk": 65, + "model": "base.region", + "fields": { + "rght": 9, + "code": "COG", + "name": "Congo", + "parent": 257, + "level": 3, + "lft": 8, + "tree_id": 90, + "bbox_x0": 11.205, + "bbox_x1": 18.64983, + "bbox_y0": -5.02831, + "bbox_y1": 3.70308 + } + }, + { + "pk": 66, + "model": "base.region", + "fields": { + "rght": 470, + "code": "COK", + "name": "Cook Islands", + "parent": 256, + "level": 2, + "lft": 469, + "tree_id": 90, + "bbox_x0": -165.858093, + "bbox_x1": -157.312119, + "bbox_y0": -21.94416, + "bbox_y1": -8.94402 + } + }, + { + "pk": 67, + "model": "base.region", + "fields": { + "rght": 191, + "code": "CRI", + "name": "Costa Rica", + "parent": 3, + "level": 3, + "lft": 190, + "tree_id": 90, + "bbox_x0": -87.083778, + "bbox_x1": -82.556, + "bbox_y0": 5.49955, + "bbox_y1": 11.21681 + } + }, + { + "pk": 68, + "model": "base.region", + "fields": { + "rght": 95, + "code": "CIV", + "name": "Cote d'Ivoire", + "parent": 13, + "level": 3, + "lft": 94, + "tree_id": 90, + "bbox_x0": -8.6017249, + "bbox_x1": -2.4930309, + "bbox_y0": 4.1642077, + "bbox_y1": 10.740015 + } + }, + { + "pk": 69, + "model": "base.region", + "fields": { + "rght": 342, + "code": "HRV", + "name": "Croatia", + "parent": 5, + "level": 2, + "lft": 341, + "tree_id": 90, + "bbox_x0": 13.48972, + "bbox_x1": 19.44722, + "bbox_y0": 42.392208, + "bbox_y1": 46.554981 + } + }, + { + "pk": 70, + "model": "base.region", + "fields": { + "rght": 147, + "code": "CUB", + "name": "Cuba", + "parent": 255, + "level": 3, + "lft": 146, + "tree_id": 90, + "bbox_x0": -84.957428, + "bbox_x1": -74.131783, + "bbox_y0": 19.828079, + "bbox_y1": 23.283779 + } + }, + { + "pk": 71, + "model": "base.region", + "fields": { + "rght": 344, + "code": "CYP", + "name": "Cyprus", + "parent": 5, + "level": 2, + "lft": 343, + "tree_id": 90, + "bbox_x0": 32.27309, + "bbox_x1": 34.597919, + "bbox_y0": 34.563511, + "bbox_y1": 35.701542 + } + }, + { + "pk": 72, + "model": "base.region", + "fields": { + "rght": 346, + "code": "CZE", + "name": "Czech Republic", + "parent": 5, + "level": 2, + "lft": 345, + "tree_id": 90, + "bbox_x0": 12.0905901, + "bbox_x1": 18.859216, + "bbox_y0": 48.5518144, + "bbox_y1": 51.0557036 + } + }, + { + "pk": 73, + "model": "base.region", + "fields": { + "rght": 269, + "code": "PRK", + "name": "Democratic People's Republic of Korea", + "parent": 258, + "level": 3, + "lft": 268, + "tree_id": 90, + "bbox_x0": 124.182739, + "bbox_x1": 130.674713, + "bbox_y0": 37.632881, + "bbox_y1": 43.006001 + } + }, + { + "pk": 74, + "model": "base.region", + "fields": { + "rght": 11, + "code": "COD", + "name": "Democratic Republic of the Congo", + "parent": 257, + "level": 3, + "lft": 10, + "tree_id": 90, + "bbox_x0": 12.20663, + "bbox_x1": 31.30591, + "bbox_y0": -13.45567, + "bbox_y1": 5.38609 + } + }, + { + "pk": 75, + "model": "base.region", + "fields": { + "rght": 348, + "code": "DNK", + "name": "Denmark", + "parent": 5, + "level": 2, + "lft": 347, + "tree_id": 90, + "bbox_x0": 8.07472, + "bbox_x1": 15.19324, + "bbox_y0": 54.559132, + "bbox_y1": 57.751949 + } + }, + { + "pk": 76, + "model": "base.region", + "fields": { + "rght": 19, + "code": "DJI", + "name": "Djibouti", + "parent": 12, + "level": 3, + "lft": 18, + "tree_id": 90, + "bbox_x0": 41.773441, + "bbox_x1": 43.450459, + "bbox_y0": 10.90991, + "bbox_y1": 12.70683 + } + }, + { + "pk": 77, + "model": "base.region", + "fields": { + "rght": 149, + "code": "DMA", + "name": "Dominica", + "parent": 255, + "level": 3, + "lft": 148, + "tree_id": 90, + "bbox_x0": -61.4841, + "bbox_x1": -61.244148, + "bbox_y0": 15.20168, + "bbox_y1": 15.6318 + } + }, + { + "pk": 78, + "model": "base.region", + "fields": { + "rght": 151, + "code": "DOM", + "name": "Dominican Republic", + "parent": 255, + "level": 3, + "lft": 150, + "tree_id": 90, + "bbox_x0": -72.003479, + "bbox_x1": -68.319992, + "bbox_y0": 17.469299, + "bbox_y1": 19.92985 + } + }, + { + "pk": 79, + "model": "base.region", + "fields": { + "rght": 225, + "code": "ECU", + "name": "Ecuador", + "parent": 4, + "level": 3, + "lft": 224, + "tree_id": 90, + "bbox_x0": -91.66124, + "bbox_x1": -75.200073, + "bbox_y0": -5.01734, + "bbox_y1": 1.45421 + } + }, + { + "pk": 80, + "model": "base.region", + "fields": { + "rght": 53, + "code": "EGY", + "name": "Egypt", + "parent": 11, + "level": 3, + "lft": 52, + "tree_id": 90, + "bbox_x0": 24.698099, + "bbox_x1": 36.89468, + "bbox_y0": 22, + "bbox_y1": 31.674179 + } + }, + { + "pk": 81, + "model": "base.region", + "fields": { + "rght": 193, + "code": "SLV", + "name": "El Salvador", + "parent": 3, + "level": 3, + "lft": 192, + "tree_id": 90, + "bbox_x0": -90.12867, + "bbox_x1": -87.682869, + "bbox_y0": 13.14867, + "bbox_y1": 14.44506 + } + }, + { + "pk": 82, + "model": "base.region", + "fields": { + "rght": 97, + "code": "GNQ", + "name": "Equatorial Guinea", + "parent": 13, + "level": 3, + "lft": 96, + "tree_id": 90, + "bbox_x0": 5.60236, + "bbox_x1": 11.33572, + "bbox_y0": -1.48378, + "bbox_y1": 3.78597 + } + }, + { + "pk": 83, + "model": "base.region", + "fields": { + "rght": 21, + "code": "ERI", + "name": "Eritrea", + "parent": 12, + "level": 3, + "lft": 20, + "tree_id": 90, + "bbox_x0": 36.43877, + "bbox_x1": 43.14864, + "bbox_y0": 12.35956, + "bbox_y1": 18.00308 + } + }, + { + "pk": 84, + "model": "base.region", + "fields": { + "rght": 350, + "code": "EST", + "name": "Estonia", + "parent": 5, + "level": 2, + "lft": 349, + "tree_id": 90, + "bbox_x0": 21.771851, + "bbox_x1": 28.20989, + "bbox_y0": 57.509312, + "bbox_y1": 59.685749 + } + }, + { + "pk": 85, + "model": "base.region", + "fields": { + "rght": 23, + "code": "ETH", + "name": "Ethiopia", + "parent": 12, + "level": 3, + "lft": 22, + "tree_id": 90, + "bbox_x0": 32.99992, + "bbox_x1": 47.986172, + "bbox_y0": 3.40242, + "bbox_y1": 14.89218 + } + }, + { + "pk": 86, + "model": "base.region", + "fields": { + "rght": 352, + "code": "FRO", + "name": "Faeroe Islands", + "parent": 5, + "level": 2, + "lft": 351, + "tree_id": 90, + "bbox_x0": -7.68124, + "bbox_x1": -6.25861, + "bbox_y0": 61.394932, + "bbox_y1": 62.400742 + } + }, + { + "pk": 87, + "model": "base.region", + "fields": { + "rght": 227, + "code": "FLK", + "name": "Falkland Islands (Malvinas)", + "parent": 4, + "level": 3, + "lft": 226, + "tree_id": 90, + "bbox_x0": -61.43404, + "bbox_x1": -57.712479, + "bbox_y0": -52.900581, + "bbox_y1": -50.966221 + } + }, + { + "pk": 88, + "model": "base.region", + "fields": { + "rght": 472, + "code": "FJI", + "name": "Fiji", + "parent": 256, + "level": 2, + "lft": 471, + "tree_id": 90, + "bbox_x0": 174.866196, + "bbox_x1": -178.203156, + "bbox_y0": -21.01712, + "bbox_y1": -12.46622 + } + }, + { + "pk": 89, + "model": "base.region", + "fields": { + "rght": 354, + "code": "FIN", + "name": "Finland", + "parent": 5, + "level": 2, + "lft": 353, + "tree_id": 90, + "bbox_x0": 20.548571, + "bbox_x1": 31.586201, + "bbox_y0": 59.764881, + "bbox_y1": 70.092308 + } + }, + { + "pk": 90, + "model": "base.region", + "fields": { + "rght": 356, + "code": "FRA", + "name": "France", + "parent": 5, + "level": 2, + "lft": 355, + "tree_id": 90, + "bbox_x0": -5.1406, + "bbox_x1": 9.55932, + "bbox_y0": 41.33374, + "bbox_y1": 51.089062 + } + }, + { + "pk": 91, + "model": "base.region", + "fields": { + "rght": 229, + "code": "GUF", + "name": "French Guiana", + "parent": 4, + "level": 3, + "lft": 228, + "tree_id": 90, + "bbox_x0": -54.542511, + "bbox_x1": -51.613941, + "bbox_y0": 2.12709, + "bbox_y1": 5.77649 + } + }, + { + "pk": 92, + "model": "base.region", + "fields": { + "rght": 474, + "code": "PYF", + "name": "French Polynesia", + "parent": 256, + "level": 2, + "lft": 473, + "tree_id": 90, + "bbox_x0": -154.700485, + "bbox_x1": -108.87291, + "bbox_y0": -27.65357, + "bbox_y1": 10.35983 + } + }, + { + "pk": 93, + "model": "base.region", + "fields": { + "rght": 99, + "code": "GAB", + "name": "Gabon", + "parent": 13, + "level": 3, + "lft": 98, + "tree_id": 90, + "bbox_x0": 8.69547, + "bbox_x1": 14.50234, + "bbox_y0": -3.9788, + "bbox_y1": 2.32261 + } + }, + { + "pk": 94, + "model": "base.region", + "fields": { + "rght": 101, + "code": "GMB", + "name": "Gambia", + "parent": 13, + "level": 3, + "lft": 100, + "tree_id": 90, + "bbox_x0": -16.82506, + "bbox_x1": -13.7978, + "bbox_y0": 13.06425, + "bbox_y1": 13.82657 + } + }, + { + "pk": 95, + "model": "base.region", + "fields": { + "rght": 358, + "code": "GEO", + "name": "Georgia", + "parent": 5, + "level": 2, + "lft": 357, + "tree_id": 90, + "bbox_x0": 40.01022, + "bbox_x1": 46.721359, + "bbox_y0": 41.038502, + "bbox_y1": 43.584549 + } + }, + { + "pk": 96, + "model": "base.region", + "fields": { + "rght": 360, + "code": "DEU", + "name": "Germany", + "parent": 5, + "level": 2, + "lft": 359, + "tree_id": 90, + "bbox_x0": 5.86624, + "bbox_x1": 15.04205, + "bbox_y0": 47.27021, + "bbox_y1": 55.05814 + } + }, + { + "pk": 97, + "model": "base.region", + "fields": { + "rght": 103, + "code": "GHA", + "name": "Ghana", + "parent": 13, + "level": 3, + "lft": 102, + "tree_id": 90, + "bbox_x0": -3.25542, + "bbox_x1": 1.19178, + "bbox_y0": 4.73672, + "bbox_y1": 11.1733 + } + }, + { + "pk": 98, + "model": "base.region", + "fields": { + "rght": 362, + "code": "GIB", + "name": "Gibraltar", + "parent": 5, + "level": 2, + "lft": 361, + "tree_id": 90, + "bbox_x0": -5.3579, + "bbox_x1": -5.33867, + "bbox_y0": 36.108219, + "bbox_y1": 36.15593 + } + }, + { + "pk": 99, + "model": "base.region", + "fields": { + "rght": 364, + "code": "GRC", + "name": "Greece", + "parent": 5, + "level": 2, + "lft": 363, + "tree_id": 90, + "bbox_x0": 19.37431, + "bbox_x1": 29.70056, + "bbox_y0": 34.809502, + "bbox_y1": 41.757111 + } + }, + { + "pk": 100, + "model": "base.region", + "fields": { + "rght": 207, + "code": "GRL", + "name": "Greenland", + "parent": 2, + "level": 3, + "lft": 206, + "tree_id": 90, + "bbox_x0": -73.263474, + "bbox_x1": -11.31232, + "bbox_y0": 59.777271, + "bbox_y1": 83.627419 + } + }, + { + "pk": 101, + "model": "base.region", + "fields": { + "rght": 153, + "code": "GRD", + "name": "Grenada", + "parent": 255, + "level": 3, + "lft": 152, + "tree_id": 90, + "bbox_x0": -61.79998, + "bbox_x1": -61.376362, + "bbox_y0": 11.98288, + "bbox_y1": 12.5415 + } + }, + { + "pk": 102, + "model": "base.region", + "fields": { + "rght": 155, + "code": "GLP", + "name": "Guadeloupe", + "parent": 255, + "level": 3, + "lft": 154, + "tree_id": 90, + "bbox_x0": -61.807159, + "bbox_x1": -61, + "bbox_y0": 15.83097, + "bbox_y1": 16.51684 + } + }, + { + "pk": 103, + "model": "base.region", + "fields": { + "rght": 476, + "code": "GUM", + "name": "Guam", + "parent": 256, + "level": 2, + "lft": 475, + "tree_id": 90, + "bbox_x0": 144.619263, + "bbox_x1": 144.953995, + "bbox_y0": 13.24059, + "bbox_y1": 13.65232 + } + }, + { + "pk": 104, + "model": "base.region", + "fields": { + "rght": 195, + "code": "GTM", + "name": "Guatemala", + "parent": 3, + "level": 3, + "lft": 194, + "tree_id": 90, + "bbox_x0": -92.241432, + "bbox_x1": -88.22319, + "bbox_y0": 13.7373, + "bbox_y1": 17.815201 + } + }, + { + "pk": 105, + "model": "base.region", + "fields": { + "rght": 366, + "code": "GGY", + "name": "Guernsey", + "parent": 5, + "level": 2, + "lft": 365, + "tree_id": 90, + "bbox_x0": -2.67545, + "bbox_x1": -2.16382, + "bbox_y0": 49.405762, + "bbox_y1": 49.7393 + } + }, + { + "pk": 106, + "model": "base.region", + "fields": { + "rght": 105, + "code": "GIN", + "name": "Guinea", + "parent": 13, + "level": 3, + "lft": 104, + "tree_id": 90, + "bbox_x0": -15.08625, + "bbox_x1": -7.64106, + "bbox_y0": 7.19355, + "bbox_y1": 12.67621 + } + }, + { + "pk": 107, + "model": "base.region", + "fields": { + "rght": 107, + "code": "GNB", + "name": "Guinea-Bissau", + "parent": 13, + "level": 3, + "lft": 106, + "tree_id": 90, + "bbox_x0": -16.717529, + "bbox_x1": -13.63652, + "bbox_y0": 10.85997, + "bbox_y1": 12.68078 + } + }, + { + "pk": 108, + "model": "base.region", + "fields": { + "rght": 231, + "code": "GUY", + "name": "Guyana", + "parent": 4, + "level": 3, + "lft": 230, + "tree_id": 90, + "bbox_x0": -61.396271, + "bbox_x1": -56.480251, + "bbox_y0": 1.17508, + "bbox_y1": 8.55756 + } + }, + { + "pk": 109, + "model": "base.region", + "fields": { + "rght": 157, + "code": "HTI", + "name": "Haiti", + "parent": 255, + "level": 3, + "lft": 156, + "tree_id": 90, + "bbox_x0": -74.478592, + "bbox_x1": -71.61335, + "bbox_y0": 18.02103, + "bbox_y1": 20.08782 + } + }, + { + "pk": 110, + "model": "base.region", + "fields": { + "rght": 368, + "code": "VAT", + "name": "Holy See (Vatican City)", + "parent": 5, + "level": 2, + "lft": 367, + "tree_id": 90, + "bbox_x0": 12.44584, + "bbox_x1": 12.45842, + "bbox_y0": 41.900211, + "bbox_y1": 41.907459 + } + }, + { + "pk": 111, + "model": "base.region", + "fields": { + "rght": 197, + "code": "HND", + "name": "Honduras", + "parent": 3, + "level": 3, + "lft": 196, + "tree_id": 90, + "bbox_x0": -89.350792, + "bbox_x1": -82.499527, + "bbox_y0": 12.98241, + "bbox_y1": 17.450451 + } + }, + { + "pk": 112, + "model": "base.region", + "fields": { + "rght": 370, + "code": "HUN", + "name": "Hungary", + "parent": 5, + "level": 2, + "lft": 369, + "tree_id": 90, + "bbox_x0": 16.11335, + "bbox_x1": 22.89657, + "bbox_y0": 45.737061, + "bbox_y1": 48.585258 + } + }, + { + "pk": 113, + "model": "base.region", + "fields": { + "rght": 372, + "code": "ISL", + "name": "Iceland", + "parent": 5, + "level": 2, + "lft": 371, + "tree_id": 90, + "bbox_x0": -24.54652, + "bbox_x1": -13.49416, + "bbox_y0": 63.295952, + "bbox_y1": 66.566193 + } + }, + { + "pk": 114, + "model": "base.region", + "fields": { + "rght": 283, + "code": "IND", + "name": "India", + "parent": 9, + "level": 3, + "lft": 282, + "tree_id": 90, + "bbox_x0": 68.032318, + "bbox_x1": 97.403023, + "bbox_y0": 6.7471, + "bbox_y1": 36.261688 + } + }, + { + "pk": 115, + "model": "base.region", + "fields": { + "rght": 299, + "code": "IDN", + "name": "Indonesia", + "parent": 7, + "level": 3, + "lft": 298, + "tree_id": 90, + "bbox_x0": 94.969833, + "bbox_x1": 141.021805, + "bbox_y0": -11.00485, + "bbox_y1": 6.07573 + } + }, + { + "pk": 116, + "model": "base.region", + "fields": { + "rght": 438, + "code": "IRN", + "name": "Iran", + "parent": 15, + "level": 2, + "lft": 437, + "tree_id": 90, + "bbox_x0": 44.047249, + "bbox_x1": 63.317459, + "bbox_y0": 25.064079, + "bbox_y1": 39.777222 + } + }, + { + "pk": 117, + "model": "base.region", + "fields": { + "rght": 440, + "code": "IRQ", + "name": "Iraq", + "parent": 15, + "level": 2, + "lft": 439, + "tree_id": 90, + "bbox_x0": 38.804001, + "bbox_x1": 48.575699, + "bbox_y0": 29.103001, + "bbox_y1": 37.378052 + } + }, + { + "pk": 118, + "model": "base.region", + "fields": { + "rght": 374, + "code": "IRL", + "name": "Ireland", + "parent": 5, + "level": 2, + "lft": 373, + "tree_id": 90, + "bbox_x0": -10.61834, + "bbox_x1": -5.9975, + "bbox_y0": 51.424511, + "bbox_y1": 55.436211 + } + }, + { + "pk": 119, + "model": "base.region", + "fields": { + "rght": 376, + "code": "IMN", + "name": "Isle of Man", + "parent": 5, + "level": 2, + "lft": 375, + "tree_id": 90, + "bbox_x0": -4.83018, + "bbox_x1": -4.31007, + "bbox_y0": 54.04464, + "bbox_y1": 54.418839 + } + }, + { + "pk": 120, + "model": "base.region", + "fields": { + "rght": 442, + "code": "ISR", + "name": "Israel", + "parent": 15, + "level": 2, + "lft": 441, + "tree_id": 90, + "bbox_x0": 34.2677, + "bbox_x1": 35.940941, + "bbox_y0": 29.4965, + "bbox_y1": 33.43338 + } + }, + { + "pk": 121, + "model": "base.region", + "fields": { + "rght": 378, + "code": "ITA", + "name": "Italy", + "parent": 5, + "level": 2, + "lft": 377, + "tree_id": 90, + "bbox_x0": 6.62665, + "bbox_x1": 18.520281, + "bbox_y0": 35.49308, + "bbox_y1": 47.091999 + } + }, + { + "pk": 122, + "model": "base.region", + "fields": { + "rght": 159, + "code": "JAM", + "name": "Jamaica", + "parent": 255, + "level": 3, + "lft": 158, + "tree_id": 90, + "bbox_x0": -78.366638, + "bbox_x1": -75.982857, + "bbox_y0": 16.949551, + "bbox_y1": 18.52697 + } + }, + { + "pk": 123, + "model": "base.region", + "fields": { + "rght": 271, + "code": "JPN", + "name": "Japan", + "parent": 258, + "level": 3, + "lft": 270, + "tree_id": 90, + "bbox_x0": 122.933647, + "bbox_x1": 153.986847, + "bbox_y0": 20.4251, + "bbox_y1": 45.557709 + } + }, + { + "pk": 124, + "model": "base.region", + "fields": { + "rght": 380, + "code": "JEY", + "name": "Jersey", + "parent": 5, + "level": 2, + "lft": 379, + "tree_id": 90, + "bbox_x0": -2.25505, + "bbox_x1": -2.01129, + "bbox_y0": 49.16209, + "bbox_y1": 49.26231 + } + }, + { + "pk": 125, + "model": "base.region", + "fields": { + "rght": 444, + "code": "JOR", + "name": "Jordan", + "parent": 15, + "level": 2, + "lft": 443, + "tree_id": 90, + "bbox_x0": 34.960232, + "bbox_x1": 39.301128, + "bbox_y0": 29.18409, + "bbox_y1": 33.374828 + } + }, + { + "pk": 126, + "model": "base.region", + "fields": { + "rght": 251, + "code": "KAZ", + "name": "Kazakhstan", + "parent": 8, + "level": 3, + "lft": 250, + "tree_id": 90, + "bbox_x0": 46.491859, + "bbox_x1": 87.312737, + "bbox_y0": 40.566689, + "bbox_y1": 55.431808 + } + }, + { + "pk": 127, + "model": "base.region", + "fields": { + "rght": 25, + "code": "KEN", + "name": "Kenya", + "parent": 12, + "level": 3, + "lft": 24, + "tree_id": 90, + "bbox_x0": 33.90884, + "bbox_x1": 41.899059, + "bbox_y0": -4.71712, + "bbox_y1": 4.62933 + } + }, + { + "pk": 128, + "model": "base.region", + "fields": { + "rght": 478, + "code": "KIR", + "name": "Kiribati", + "parent": 256, + "level": 2, + "lft": 477, + "tree_id": 90, + "bbox_x0": 158.418335, + "bbox_x1": -150.208359, + "bbox_y0": -11.43703, + "bbox_y1": 4.71956 + } + }, + { + "pk": 129, + "model": "base.region", + "fields": { + "rght": 446, + "code": "KWT", + "name": "Kuwait", + "parent": 15, + "level": 2, + "lft": 445, + "tree_id": 90, + "bbox_x0": 46.55751, + "bbox_x1": 48.78384, + "bbox_y0": 28.5245, + "bbox_y1": 30.0958 + } + }, + { + "pk": 130, + "model": "base.region", + "fields": { + "rght": 253, + "code": "KGZ", + "name": "Kyrgyzstan", + "parent": 8, + "level": 3, + "lft": 252, + "tree_id": 90, + "bbox_x0": 69.276619, + "bbox_x1": 80.28318, + "bbox_y0": 39.17284, + "bbox_y1": 43.238239 + } + }, + { + "pk": 131, + "model": "base.region", + "fields": { + "rght": 301, + "code": "LAO", + "name": "Lao People's Democratic Republic", + "parent": 7, + "level": 3, + "lft": 300, + "tree_id": 90, + "bbox_x0": 100.093048, + "bbox_x1": 107.697021, + "bbox_y0": 13.91002, + "bbox_y1": 22.500389 + } + }, + { + "pk": 132, + "model": "base.region", + "fields": { + "rght": 382, + "code": "LVA", + "name": "Latvia", + "parent": 5, + "level": 2, + "lft": 381, + "tree_id": 90, + "bbox_x0": 20.966061, + "bbox_x1": 28.244431, + "bbox_y0": 55.67276, + "bbox_y1": 58.087448 + } + }, + { + "pk": 133, + "model": "base.region", + "fields": { + "rght": 448, + "code": "LBN", + "name": "Lebanon", + "parent": 15, + "level": 2, + "lft": 447, + "tree_id": 90, + "bbox_x0": 35.10368, + "bbox_x1": 36.622791, + "bbox_y0": 33.048908, + "bbox_y1": 34.69268 + } + }, + { + "pk": 134, + "model": "base.region", + "fields": { + "rght": 69, + "code": "LSO", + "name": "Lesotho", + "parent": 14, + "level": 3, + "lft": 68, + "tree_id": 90, + "bbox_x0": 27.02906, + "bbox_x1": 29.465771, + "bbox_y0": -30.668961, + "bbox_y1": -28.57205 + } + }, + { + "pk": 135, + "model": "base.region", + "fields": { + "rght": 109, + "code": "LBR", + "name": "Liberia", + "parent": 13, + "level": 3, + "lft": 108, + "tree_id": 90, + "bbox_x0": -11.49208, + "bbox_x1": -7.36511, + "bbox_y0": 4.35305, + "bbox_y1": 8.55179 + } + }, + { + "pk": 136, + "model": "base.region", + "fields": { + "rght": 55, + "code": "LBY", + "name": "Libyan Arab Jamahiriya", + "parent": 11, + "level": 3, + "lft": 54, + "tree_id": 90, + "bbox_x0": 9.38702, + "bbox_x1": 25.15061, + "bbox_y0": 19.508039, + "bbox_y1": 33.168999 + } + }, + { + "pk": 137, + "model": "base.region", + "fields": { + "rght": 384, + "code": "LIE", + "name": "Liechtenstein", + "parent": 5, + "level": 2, + "lft": 383, + "tree_id": 90, + "bbox_x0": 9.47181, + "bbox_x1": 9.63578, + "bbox_y0": 47.04834, + "bbox_y1": 47.270649 + } + }, + { + "pk": 138, + "model": "base.region", + "fields": { + "rght": 386, + "code": "LTU", + "name": "Lithuania", + "parent": 5, + "level": 2, + "lft": 385, + "tree_id": 90, + "bbox_x0": 20.953199, + "bbox_x1": 26.835581, + "bbox_y0": 53.89748, + "bbox_y1": 56.450432 + } + }, + { + "pk": 139, + "model": "base.region", + "fields": { + "rght": 388, + "code": "LUX", + "name": "Luxembourg", + "parent": 5, + "level": 2, + "lft": 387, + "tree_id": 90, + "bbox_x0": 5.73579, + "bbox_x1": 6.53117, + "bbox_y0": 49.447689, + "bbox_y1": 50.182751 + } + }, + { + "pk": 140, + "model": "base.region", + "fields": { + "rght": 390, + "code": "MKD", + "name": "Macedonia", + "parent": 5, + "level": 2, + "lft": 389, + "tree_id": 90, + "bbox_x0": 20.4645, + "bbox_x1": 23.038071, + "bbox_y0": 40.860111, + "bbox_y1": 42.345501 + } + }, + { + "pk": 141, + "model": "base.region", + "fields": { + "rght": 27, + "code": "MDG", + "name": "Madagascar", + "parent": 12, + "level": 3, + "lft": 26, + "tree_id": 90, + "bbox_x0": 43.19138, + "bbox_x1": 50.483799, + "bbox_y0": -25.60894, + "bbox_y1": -11.94543 + } + }, + { + "pk": 142, + "model": "base.region", + "fields": { + "rght": 29, + "code": "MWI", + "name": "Malawi", + "parent": 12, + "level": 3, + "lft": 28, + "tree_id": 90, + "bbox_x0": 32.668991, + "bbox_x1": 35.920441, + "bbox_y0": -17.129459, + "bbox_y1": -9.36468 + } + }, + { + "pk": 143, + "model": "base.region", + "fields": { + "rght": 303, + "code": "MYS", + "name": "Malaysia", + "parent": 7, + "level": 3, + "lft": 302, + "tree_id": 90, + "bbox_x0": 98.935059, + "bbox_x1": 119.448433, + "bbox_y0": 0.66364, + "bbox_y1": 7.58378 + } + }, + { + "pk": 144, + "model": "base.region", + "fields": { + "rght": 285, + "code": "MDV", + "name": "Maldives", + "parent": 9, + "level": 3, + "lft": 284, + "tree_id": 90, + "bbox_x0": 72.616219, + "bbox_x1": 73.76712, + "bbox_y0": -2.90045, + "bbox_y1": 7.11712 + } + }, + { + "pk": 145, + "model": "base.region", + "fields": { + "rght": 111, + "code": "MLI", + "name": "Mali", + "parent": 13, + "level": 3, + "lft": 110, + "tree_id": 90, + "bbox_x0": -12.24261, + "bbox_x1": 4.24495, + "bbox_y0": 10.15951, + "bbox_y1": 25 + } + }, + { + "pk": 146, + "model": "base.region", + "fields": { + "rght": 392, + "code": "MLT", + "name": "Malta", + "parent": 5, + "level": 2, + "lft": 391, + "tree_id": 90, + "bbox_x0": 14.18341, + "bbox_x1": 14.5766, + "bbox_y0": 35.786282, + "bbox_y1": 36.081821 + } + }, + { + "pk": 147, + "model": "base.region", + "fields": { + "rght": 480, + "code": "MHL", + "name": "Marshall Islands", + "parent": 256, + "level": 2, + "lft": 479, + "tree_id": 90, + "bbox_x0": 162.143265, + "bbox_x1": 172.161987, + "bbox_y0": 4.57487, + "bbox_y1": 14.65516 + } + }, + { + "pk": 148, + "model": "base.region", + "fields": { + "rght": 161, + "code": "MTQ", + "name": "Martinique", + "parent": 255, + "level": 3, + "lft": 160, + "tree_id": 90, + "bbox_x0": -61.23011, + "bbox_x1": -60.81551, + "bbox_y0": 14.38244, + "bbox_y1": 14.87881 + } + }, + { + "pk": 149, + "model": "base.region", + "fields": { + "rght": 113, + "code": "MRT", + "name": "Mauritania", + "parent": 13, + "level": 3, + "lft": 112, + "tree_id": 90, + "bbox_x0": -17.066521, + "bbox_x1": -4.8352, + "bbox_y0": 14.71554, + "bbox_y1": 27.298071 + } + }, + { + "pk": 150, + "model": "base.region", + "fields": { + "rght": 31, + "code": "MUS", + "name": "Mauritius", + "parent": 12, + "level": 3, + "lft": 30, + "tree_id": 90, + "bbox_x0": 56.512711, + "bbox_x1": 63.525379, + "bbox_y0": -20.525709, + "bbox_y1": -10.31925 + } + }, + { + "pk": 151, + "model": "base.region", + "fields": { + "rght": 33, + "code": "MYT", + "name": "Mayotte", + "parent": 12, + "level": 3, + "lft": 32, + "tree_id": 90, + "bbox_x0": 45.01461, + "bbox_x1": 45.317131, + "bbox_y0": -13.00045, + "bbox_y1": -12.63383 + } + }, + { + "pk": 152, + "model": "base.region", + "fields": { + "rght": 209, + "code": "MEX", + "name": "Mexico", + "parent": 2, + "level": 3, + "lft": 208, + "tree_id": 90, + "bbox_x0": -118.867172, + "bbox_x1": -86.703392, + "bbox_y0": 14.53285, + "bbox_y1": 32.71862 + } + }, + { + "pk": 153, + "model": "base.region", + "fields": { + "rght": 482, + "code": "FSM", + "name": "Micronesia, Federated States of", + "parent": 256, + "level": 2, + "lft": 481, + "tree_id": 90, + "bbox_x0": 138.052856, + "bbox_x1": 163.034912, + "bbox_y0": 5.25984, + "bbox_y1": 10.02222 + } + }, + { + "pk": 154, + "model": "base.region", + "fields": { + "rght": 394, + "code": "MCO", + "name": "Monaco", + "parent": 5, + "level": 2, + "lft": 393, + "tree_id": 90, + "bbox_x0": 7.4091, + "bbox_x1": 7.43948, + "bbox_y0": 43.724789, + "bbox_y1": 43.7519 + } + }, + { + "pk": 155, + "model": "base.region", + "fields": { + "rght": 273, + "code": "MNG", + "name": "Mongolia", + "parent": 258, + "level": 3, + "lft": 272, + "tree_id": 90, + "bbox_x0": 87.749496, + "bbox_x1": 119.92411, + "bbox_y0": 41.567501, + "bbox_y1": 52.154099 + } + }, + { + "pk": 156, + "model": "base.region", + "fields": { + "rght": 396, + "code": "MNE", + "name": "Montenegro", + "parent": 5, + "level": 2, + "lft": 395, + "tree_id": 90, + "bbox_x0": 18.43705, + "bbox_x1": 20.41608, + "bbox_y0": 41.84808, + "bbox_y1": 43.542912 + } + }, + { + "pk": 157, + "model": "base.region", + "fields": { + "rght": 163, + "code": "MSR", + "name": "Montserrat", + "parent": 255, + "level": 3, + "lft": 162, + "tree_id": 90, + "bbox_x0": -62.24258, + "bbox_x1": -62.14642, + "bbox_y0": 16.671, + "bbox_y1": 16.81732 + } + }, + { + "pk": 158, + "model": "base.region", + "fields": { + "rght": 57, + "code": "MAR", + "name": "Morocco", + "parent": 11, + "level": 3, + "lft": 56, + "tree_id": 90, + "bbox_x0": -11.7805, + "bbox_x1": -1.02441, + "bbox_y0": 26.946489, + "bbox_y1": 35.921909 + } + }, + { + "pk": 159, + "model": "base.region", + "fields": { + "rght": 35, + "code": "MOZ", + "name": "Mozambique", + "parent": 12, + "level": 3, + "lft": 34, + "tree_id": 90, + "bbox_x0": 30.21731, + "bbox_x1": 40.844471, + "bbox_y0": -26.868679, + "bbox_y1": -10.47188 + } + }, + { + "pk": 160, + "model": "base.region", + "fields": { + "rght": 305, + "code": "MMR", + "name": "Myanmar", + "parent": 7, + "level": 3, + "lft": 304, + "tree_id": 90, + "bbox_x0": 92.189209, + "bbox_x1": 101.176788, + "bbox_y0": 9.60035, + "bbox_y1": 28.543249 + } + }, + { + "pk": 161, + "model": "base.region", + "fields": { + "rght": 71, + "code": "NMB", + "name": "Namibia", + "parent": 14, + "level": 3, + "lft": 70, + "tree_id": 90, + "bbox_x0": 11.71563, + "bbox_x1": 25.256701, + "bbox_y0": -28.97142, + "bbox_y1": -16.95989 + } + }, + { + "pk": 162, + "model": "base.region", + "fields": { + "rght": 484, + "code": "NRU", + "name": "Nauru", + "parent": 256, + "level": 2, + "lft": 483, + "tree_id": 90, + "bbox_x0": 166.899017, + "bbox_x1": 166.945267, + "bbox_y0": -0.55232, + "bbox_y1": -0.50429 + } + }, + { + "pk": 163, + "model": "base.region", + "fields": { + "rght": 287, + "code": "NPL", + "name": "Nepal", + "parent": 9, + "level": 3, + "lft": 286, + "tree_id": 90, + "bbox_x0": 80.056221, + "bbox_x1": 88.199318, + "bbox_y0": 26.356501, + "bbox_y1": 30.433001 + } + }, + { + "pk": 164, + "model": "base.region", + "fields": { + "rght": 398, + "code": "NLD", + "name": "Netherlands", + "parent": 5, + "level": 2, + "lft": 397, + "tree_id": 90, + "bbox_x0": 3.35794, + "bbox_x1": 7.2267, + "bbox_y0": 50.750401, + "bbox_y1": 53.554241 + } + }, + { + "pk": 165, + "model": "base.region", + "fields": { + "rght": 165, + "code": "NAN", + "name": "Netherlands Antilles", + "parent": 255, + "level": 3, + "lft": 164, + "tree_id": 90, + "bbox_x0": -69.157188, + "bbox_x1": -62.943661, + "bbox_y0": 11.97318, + "bbox_y1": 18.07024 + } + }, + { + "pk": 166, + "model": "base.region", + "fields": { + "rght": 486, + "code": "NCL", + "name": "New Caledonia", + "parent": 256, + "level": 2, + "lft": 485, + "tree_id": 90, + "bbox_x0": 158.332855, + "bbox_x1": 172.061417, + "bbox_y0": -22.90045, + "bbox_y1": -18.01622 + } + }, + { + "pk": 167, + "model": "base.region", + "fields": { + "rght": 488, + "code": "NZL", + "name": "New Zealand", + "parent": 256, + "level": 2, + "lft": 487, + "tree_id": 90, + "bbox_x0": 165.883804, + "bbox_x1": -175.987198, + "bbox_y0": -52.618591, + "bbox_y1": -29.20997 + } + }, + { + "pk": 168, + "model": "base.region", + "fields": { + "rght": 199, + "code": "NIC", + "name": "Nicaragua", + "parent": 3, + "level": 3, + "lft": 198, + "tree_id": 90, + "bbox_x0": -87.6903, + "bbox_x1": -82.592072, + "bbox_y0": 10.70754, + "bbox_y1": 15.0259 + } + }, + { + "pk": 169, + "model": "base.region", + "fields": { + "rght": 115, + "code": "NER", + "name": "Niger", + "parent": 13, + "level": 3, + "lft": 114, + "tree_id": 90, + "bbox_x0": 0.16625, + "bbox_x1": 15.99564, + "bbox_y0": 11.69697, + "bbox_y1": 23.525021 + } + }, + { + "pk": 170, + "model": "base.region", + "fields": { + "rght": 117, + "code": "NGA", + "name": "Nigeria", + "parent": 13, + "level": 3, + "lft": 116, + "tree_id": 90, + "bbox_x0": 2.66844, + "bbox_x1": 14.68006, + "bbox_y0": 4.27714, + "bbox_y1": 13.892 + } + }, + { + "pk": 171, + "model": "base.region", + "fields": { + "rght": 490, + "code": "NIU", + "name": "Niue", + "parent": 256, + "level": 2, + "lft": 489, + "tree_id": 90, + "bbox_x0": -169.951004, + "bbox_x1": -169.775177, + "bbox_y0": -19.152189, + "bbox_y1": -18.951059 + } + }, + { + "pk": 172, + "model": "base.region", + "fields": { + "rght": 492, + "code": "NFK", + "name": "Norfolk Island", + "parent": 256, + "level": 2, + "lft": 491, + "tree_id": 90, + "bbox_x0": 167.949493, + "bbox_x1": 168.091614, + "bbox_y0": -29.11937, + "bbox_y1": -28.99493 + } + }, + { + "pk": 173, + "model": "base.region", + "fields": { + "rght": 494, + "code": "MNP", + "name": "Northern Mariana Islands", + "parent": 256, + "level": 2, + "lft": 493, + "tree_id": 90, + "bbox_x0": 136.082855, + "bbox_x1": 146.081223, + "bbox_y0": 14.10735, + "bbox_y1": 20.41712 + } + }, + { + "pk": 174, + "model": "base.region", + "fields": { + "rght": 400, + "code": "NOR", + "name": "Norway", + "parent": 5, + "level": 2, + "lft": 399, + "tree_id": 90, + "bbox_x0": 4.43292, + "bbox_x1": 31.168409, + "bbox_y0": 57.962582, + "bbox_y1": 71.185509 + } + }, + { + "pk": 175, + "model": "base.region", + "fields": { + "rght": 450, + "code": "PSE", + "name": "Occupied Palestinian Territory", + "parent": 15, + "level": 2, + "lft": 449, + "tree_id": 90, + "bbox_x0": 34.230461, + "bbox_x1": 35.876499, + "bbox_y0": 31.223499, + "bbox_y1": 33.340099 + } + }, + { + "pk": 176, + "model": "base.region", + "fields": { + "rght": 452, + "code": "OMN", + "name": "Oman", + "parent": 15, + "level": 2, + "lft": 451, + "tree_id": 90, + "bbox_x0": 51.882011, + "bbox_x1": 59.83651, + "bbox_y0": 16.6457, + "bbox_y1": 26.50045 + } + }, + { + "pk": 177, + "model": "base.region", + "fields": { + "rght": 289, + "code": "PAK", + "name": "Pakistan", + "parent": 9, + "level": 3, + "lft": 288, + "tree_id": 90, + "bbox_x0": 60.87859, + "bbox_x1": 77.840813, + "bbox_y0": 23.786699, + "bbox_y1": 37.097 + } + }, + { + "pk": 178, + "model": "base.region", + "fields": { + "rght": 496, + "code": "PLW", + "name": "Palau", + "parent": 256, + "level": 2, + "lft": 495, + "tree_id": 90, + "bbox_x0": 131.169235, + "bbox_x1": 134.723724, + "bbox_y0": 3.00114, + "bbox_y1": 8.09291 + } + }, + { + "pk": 179, + "model": "base.region", + "fields": { + "rght": 201, + "code": "PAN", + "name": "Panama", + "parent": 3, + "level": 3, + "lft": 200, + "tree_id": 90, + "bbox_x0": -83.051453, + "bbox_x1": -77.17411, + "bbox_y0": 7.1979, + "bbox_y1": 9.65045 + } + }, + { + "pk": 180, + "model": "base.region", + "fields": { + "rght": 498, + "code": "PNG", + "name": "Papua New Guinea", + "parent": 256, + "level": 2, + "lft": 497, + "tree_id": 90, + "bbox_x0": 140.842865, + "bbox_x1": 159.48378, + "bbox_y0": -11.65785, + "bbox_y1": -0.86622 + } + }, + { + "pk": 181, + "model": "base.region", + "fields": { + "rght": 233, + "code": "PRY", + "name": "Paraguay", + "parent": 4, + "level": 3, + "lft": 232, + "tree_id": 90, + "bbox_x0": -62.647072, + "bbox_x1": -54.25935, + "bbox_y0": -27.60873, + "bbox_y1": -19.294041 + } + }, + { + "pk": 182, + "model": "base.region", + "fields": { + "rght": 235, + "code": "PER", + "name": "Peru", + "parent": 4, + "level": 3, + "lft": 234, + "tree_id": 90, + "bbox_x0": -81.326736, + "bbox_x1": -68.677979, + "bbox_y0": -18.34972, + "bbox_y1": -0.01297 + } + }, + { + "pk": 183, + "model": "base.region", + "fields": { + "rght": 307, + "code": "PHL", + "name": "Philippines", + "parent": 7, + "level": 3, + "lft": 306, + "tree_id": 90, + "bbox_x0": 116.812721, + "bbox_x1": 126.856628, + "bbox_y0": 4.46811, + "bbox_y1": 21.23415 + } + }, + { + "pk": 184, + "model": "base.region", + "fields": { + "rght": 500, + "code": "PCN", + "name": "Pitcairn", + "parent": 256, + "level": 2, + "lft": 499, + "tree_id": 90, + "bbox_x0": -130.746033, + "bbox_x1": -124.772842, + "bbox_y0": -25.07752, + "bbox_y1": -23.917271 + } + }, + { + "pk": 185, + "model": "base.region", + "fields": { + "rght": 402, + "code": "POL", + "name": "Poland", + "parent": 5, + "level": 2, + "lft": 401, + "tree_id": 90, + "bbox_x0": 14.12281, + "bbox_x1": 24.145781, + "bbox_y0": 49.002022, + "bbox_y1": 54.835812 + } + }, + { + "pk": 186, + "model": "base.region", + "fields": { + "rght": 404, + "code": "PRT", + "name": "Portugal", + "parent": 5, + "level": 2, + "lft": 403, + "tree_id": 90, + "bbox_x0": -31.266001, + "bbox_x1": -6.18931, + "bbox_y0": 30.028061, + "bbox_y1": 42.154121 + } + }, + { + "pk": 187, + "model": "base.region", + "fields": { + "rght": 167, + "code": "PRI", + "name": "Puerto Rico", + "parent": 255, + "level": 3, + "lft": 166, + "tree_id": 90, + "bbox_x0": -67.942719, + "bbox_x1": -65.219978, + "bbox_y0": 17.883039, + "bbox_y1": 18.520161 + } + }, + { + "pk": 188, + "model": "base.region", + "fields": { + "rght": 454, + "code": "QAT", + "name": "Qatar", + "parent": 15, + "level": 2, + "lft": 453, + "tree_id": 90, + "bbox_x0": 50.757011, + "bbox_x1": 52.427509, + "bbox_y0": 24.482901, + "bbox_y1": 26.177509 + } + }, + { + "pk": 189, + "model": "base.region", + "fields": { + "rght": 275, + "code": "KOR", + "name": "Republic of Korea", + "parent": 258, + "level": 3, + "lft": 274, + "tree_id": 90, + "bbox_x0": 124.608147, + "bbox_x1": 130.933899, + "bbox_y0": 33.10611, + "bbox_y1": 38.612301 + } + }, + { + "pk": 190, + "model": "base.region", + "fields": { + "rght": 406, + "code": "MDA", + "name": "Republic of Moldova", + "parent": 5, + "level": 2, + "lft": 405, + "tree_id": 90, + "bbox_x0": 26.618879, + "bbox_x1": 30.16374, + "bbox_y0": 45.468498, + "bbox_y1": 48.490162 + } + }, + { + "pk": 191, + "model": "base.region", + "fields": { + "rght": 37, + "code": "REU", + "name": "Reunion", + "parent": 12, + "level": 3, + "lft": 36, + "tree_id": 90, + "bbox_x0": 55.219082, + "bbox_x1": 55.845039, + "bbox_y0": -21.37221, + "bbox_y1": -20.85685 + } + }, + { + "pk": 192, + "model": "base.region", + "fields": { + "rght": 408, + "code": "ROU", + "name": "Romania", + "parent": 5, + "level": 2, + "lft": 407, + "tree_id": 90, + "bbox_x0": 20.269791, + "bbox_x1": 29.691, + "bbox_y0": 43.626999, + "bbox_y1": 48.266891 + } + }, + { + "pk": 193, + "model": "base.region", + "fields": { + "rght": 410, + "code": "RUS", + "name": "Russian Federation", + "parent": 5, + "level": 2, + "lft": 409, + "tree_id": 90, + "bbox_x0": 19.638861, + "bbox_x1": 180, + "bbox_y0": 41.185902, + "bbox_y1": 81.856903 + } + }, + { + "pk": 194, + "model": "base.region", + "fields": { + "rght": 39, + "code": "RWA", + "name": "Rwanda", + "parent": 12, + "level": 3, + "lft": 38, + "tree_id": 90, + "bbox_x0": 28.8568, + "bbox_x1": 30.89596, + "bbox_y0": -2.84067, + "bbox_y1": -1.05348 + } + }, + { + "pk": 195, + "model": "base.region", + "fields": { + "rght": 73, + "code": "SHN", + "name": "Saint Helena", + "parent": 14, + "level": 3, + "lft": 72, + "tree_id": 90, + "bbox_x0": -14.44153, + "bbox_x1": -5.63286, + "bbox_y0": -40.400452, + "bbox_y1": -7.87757 + } + }, + { + "pk": 196, + "model": "base.region", + "fields": { + "rght": 169, + "code": "KNA", + "name": "Saint Kitts and Nevis", + "parent": 255, + "level": 3, + "lft": 168, + "tree_id": 90, + "bbox_x0": -62.86956, + "bbox_x1": -62.543259, + "bbox_y0": 17.095341, + "bbox_y1": 17.420111 + } + }, + { + "pk": 197, + "model": "base.region", + "fields": { + "rght": 171, + "code": "LCA", + "name": "Saint Lucia", + "parent": 255, + "level": 3, + "lft": 170, + "tree_id": 90, + "bbox_x0": -61.07415, + "bbox_x1": -60.866051, + "bbox_y0": 13.70477, + "bbox_y1": 14.10324 + } + }, + { + "pk": 198, + "model": "base.region", + "fields": { + "rght": 173, + "code": "SPM", + "name": "Saint Pierre and Miquelon", + "parent": 255, + "level": 3, + "lft": 172, + "tree_id": 90, + "bbox_x0": -56.420658, + "bbox_x1": -56.157372, + "bbox_y0": 46.753269, + "bbox_y1": 47.14629 + } + }, + { + "pk": 199, + "model": "base.region", + "fields": { + "rght": 175, + "code": "VCT", + "name": "Saint Vincent and the Grenadines", + "parent": 255, + "level": 3, + "lft": 174, + "tree_id": 90, + "bbox_x0": -61.459251, + "bbox_x1": -61.11388, + "bbox_y0": 12.58101, + "bbox_y1": 13.37783 + } + }, + { + "pk": 200, + "model": "base.region", + "fields": { + "rght": 177, + "code": "BLM", + "name": "Saint-Barthelemy", + "parent": 255, + "level": 3, + "lft": 176, + "tree_id": 90, + "bbox_x0": -62.9338, + "bbox_x1": -62.78286, + "bbox_y0": 17.86622, + "bbox_y1": 17.968599 + } + }, + { + "pk": 201, + "model": "base.region", + "fields": { + "rght": 179, + "code": "MAF", + "name": "Saint-Martin (French part)", + "parent": 255, + "level": 3, + "lft": 178, + "tree_id": 90, + "bbox_x0": -63.15276, + "bbox_x1": -62.972778, + "bbox_y0": 18.052231, + "bbox_y1": 18.13069 + } + }, + { + "pk": 202, + "model": "base.region", + "fields": { + "rght": 502, + "code": "WSM", + "name": "Samoa", + "parent": 256, + "level": 2, + "lft": 501, + "tree_id": 90, + "bbox_x0": -172.798584, + "bbox_x1": -171.33287, + "bbox_y0": -14.06353, + "bbox_y1": -13.4322 + } + }, + { + "pk": 203, + "model": "base.region", + "fields": { + "rght": 412, + "code": "SMR", + "name": "San Marino", + "parent": 5, + "level": 2, + "lft": 411, + "tree_id": 90, + "bbox_x0": 12.40306, + "bbox_x1": 12.51651, + "bbox_y0": 43.893299, + "bbox_y1": 43.992168 + } + }, + { + "pk": 204, + "model": "base.region", + "fields": { + "rght": 119, + "code": "STP", + "name": "Sao Tome and Principe", + "parent": 13, + "level": 3, + "lft": 118, + "tree_id": 90, + "bbox_x0": 5.59955, + "bbox_x1": 7.46637, + "bbox_y0": -0.014, + "bbox_y1": 1.73378 + } + }, + { + "pk": 205, + "model": "base.region", + "fields": { + "rght": 456, + "code": "SAU", + "name": "Saudi Arabia", + "parent": 15, + "level": 2, + "lft": 455, + "tree_id": 90, + "bbox_x0": 34.508282, + "bbox_x1": 55.666672, + "bbox_y0": 16.261169, + "bbox_y1": 32.173481 + } + }, + { + "pk": 206, + "model": "base.region", + "fields": { + "rght": 121, + "code": "SEN", + "name": "Senegal", + "parent": 13, + "level": 3, + "lft": 120, + "tree_id": 90, + "bbox_x0": -17.535231, + "bbox_x1": -11.35588, + "bbox_y0": 12.30727, + "bbox_y1": 16.691629 + } + }, + { + "pk": 207, + "model": "base.region", + "fields": { + "rght": 414, + "code": "SRB", + "name": "Serbia", + "parent": 5, + "level": 2, + "lft": 413, + "tree_id": 90, + "bbox_x0": 18.814581, + "bbox_x1": 23.007, + "bbox_y0": 41.908611, + "bbox_y1": 46.191002 + } + }, + { + "pk": 208, + "model": "base.region", + "fields": { + "rght": 41, + "code": "SYC", + "name": "Seychelles", + "parent": 12, + "level": 3, + "lft": 40, + "tree_id": 90, + "bbox_x0": 46.199211, + "bbox_x1": 56.279499, + "bbox_y0": -10.21712, + "bbox_y1": -3.71151 + } + }, + { + "pk": 209, + "model": "base.region", + "fields": { + "rght": 123, + "code": "SLE", + "name": "Sierra Leone", + "parent": 13, + "level": 3, + "lft": 122, + "tree_id": 90, + "bbox_x0": -13.30763, + "bbox_x1": -10.28423, + "bbox_y0": 6.92868, + "bbox_y1": 10.00043 + } + }, + { + "pk": 210, + "model": "base.region", + "fields": { + "rght": 309, + "code": "SGP", + "name": "Singapore", + "parent": 7, + "level": 3, + "lft": 308, + "tree_id": 90, + "bbox_x0": 103.618248, + "bbox_x1": 104.40847, + "bbox_y0": 1.1158, + "bbox_y1": 1.47062 + } + }, + { + "pk": 211, + "model": "base.region", + "fields": { + "rght": 416, + "code": "SVK", + "name": "Slovakia", + "parent": 5, + "level": 2, + "lft": 415, + "tree_id": 90, + "bbox_x0": 16.833179, + "bbox_x1": 22.570299, + "bbox_y0": 47.728001, + "bbox_y1": 49.603001 + } + }, + { + "pk": 212, + "model": "base.region", + "fields": { + "rght": 418, + "code": "SVN", + "name": "Slovenia", + "parent": 5, + "level": 2, + "lft": 417, + "tree_id": 90, + "bbox_x0": 13.37551, + "bbox_x1": 16.59656, + "bbox_y0": 45.416, + "bbox_y1": 46.87788 + } + }, + { + "pk": 213, + "model": "base.region", + "fields": { + "rght": 504, + "code": "SLB", + "name": "Solomon Islands", + "parent": 256, + "level": 2, + "lft": 503, + "tree_id": 90, + "bbox_x0": 155.508667, + "bbox_x1": 170.200455, + "bbox_y0": -12.2919, + "bbox_y1": -5.16622 + } + }, + { + "pk": 214, + "model": "base.region", + "fields": { + "rght": 43, + "code": "SOM", + "name": "Somalia", + "parent": 12, + "level": 3, + "lft": 42, + "tree_id": 90, + "bbox_x0": 40.988628, + "bbox_x1": 51.413029, + "bbox_y0": -1.66205, + "bbox_y1": 11.9852 + } + }, + { + "pk": 215, + "model": "base.region", + "fields": { + "rght": 75, + "code": "ZAF", + "name": "South Africa", + "parent": 14, + "level": 3, + "lft": 74, + "tree_id": 90, + "bbox_x0": 16.46841, + "bbox_x1": 37.993172, + "bbox_y0": -46.990009, + "bbox_y1": -22.12472 + } + }, + { + "pk": 216, + "model": "base.region", + "fields": { + "rght": 420, + "code": "ESP", + "name": "Spain", + "parent": 5, + "level": 2, + "lft": 419, + "tree_id": 90, + "bbox_x0": -18.160789, + "bbox_x1": 4.32788, + "bbox_y0": 27.63546, + "bbox_y1": 43.789959 + } + }, + { + "pk": 217, + "model": "base.region", + "fields": { + "rght": 291, + "code": "LKA", + "name": "Sri Lanka", + "parent": 9, + "level": 3, + "lft": 290, + "tree_id": 90, + "bbox_x0": 79.516212, + "bbox_x1": 81.88121, + "bbox_y0": 5.9167, + "bbox_y1": 9.8312 + } + }, + { + "pk": 218, + "model": "base.region", + "fields": { + "rght": 59, + "code": "SDN", + "name": "Sudan", + "parent": 11, + "level": 3, + "lft": 58, + "tree_id": 90, + "bbox_x0": 21.83894, + "bbox_x1": 38.833801, + "bbox_y0": 3.48639, + "bbox_y1": 23.146891 + } + }, + { + "pk": 219, + "model": "base.region", + "fields": { + "rght": 237, + "code": "SUR", + "name": "Suriname", + "parent": 4, + "level": 3, + "lft": 236, + "tree_id": 90, + "bbox_x0": -58.086559, + "bbox_x1": -53.977489, + "bbox_y0": 1.83114, + "bbox_y1": 6.00454 + } + }, + { + "pk": 220, + "model": "base.region", + "fields": { + "rght": 422, + "code": "SJM", + "name": "Svalbard and Jan Mayen Islands", + "parent": 5, + "level": 2, + "lft": 421, + "tree_id": 90, + "bbox_x0": -9.07989, + "bbox_x1": 36.815269, + "bbox_y0": 70.82737, + "bbox_y1": 80.834061 + } + }, + { + "pk": 221, + "model": "base.region", + "fields": { + "rght": 77, + "code": "SWZ", + "name": "Swaziland", + "parent": 14, + "level": 3, + "lft": 76, + "tree_id": 90, + "bbox_x0": 30.7941, + "bbox_x1": 32.137272, + "bbox_y0": -27.317101, + "bbox_y1": -25.719641 + } + }, + { + "pk": 222, + "model": "base.region", + "fields": { + "rght": 424, + "code": "SWE", + "name": "Sweden", + "parent": 5, + "level": 2, + "lft": 423, + "tree_id": 90, + "bbox_x0": 10.9661, + "bbox_x1": 24.16634, + "bbox_y0": 55.33696, + "bbox_y1": 69.059937 + } + }, + { + "pk": 223, + "model": "base.region", + "fields": { + "rght": 426, + "code": "CHE", + "name": "Switzerland", + "parent": 5, + "level": 2, + "lft": 425, + "tree_id": 90, + "bbox_x0": 5.95587, + "bbox_x1": 10.49203, + "bbox_y0": 45.81802, + "bbox_y1": 47.80838 + } + }, + { + "pk": 224, + "model": "base.region", + "fields": { + "rght": 458, + "code": "SYR", + "name": "Syrian Arab Republic", + "parent": 15, + "level": 2, + "lft": 457, + "tree_id": 90, + "bbox_x0": 35.727001, + "bbox_x1": 42.384998, + "bbox_y0": 32.3106, + "bbox_y1": 37.319 + } + }, + { + "pk": 225, + "model": "base.region", + "fields": { + "rght": 255, + "code": "TJK", + "name": "Tajikistan", + "parent": 8, + "level": 3, + "lft": 254, + "tree_id": 90, + "bbox_x0": 67.387131, + "bbox_x1": 75.137222, + "bbox_y0": 36.674141, + "bbox_y1": 41.04224 + } + }, + { + "pk": 226, + "model": "base.region", + "fields": { + "rght": 311, + "code": "THA", + "name": "Thailand", + "parent": 7, + "level": 3, + "lft": 310, + "tree_id": 90, + "bbox_x0": 97.343964, + "bbox_x1": 105.636917, + "bbox_y0": 5.61257, + "bbox_y1": 20.464701 + } + }, + { + "pk": 227, + "model": "base.region", + "fields": { + "rght": 313, + "code": "TLS", + "name": "Timor-Leste", + "parent": 7, + "level": 3, + "lft": 312, + "tree_id": 90, + "bbox_x0": 124.075439, + "bbox_x1": 127.345337, + "bbox_y0": -9.51337, + "bbox_y1": -8.13741 + } + }, + { + "pk": 228, + "model": "base.region", + "fields": { + "rght": 125, + "code": "TGO", + "name": "Togo", + "parent": 13, + "level": 3, + "lft": 124, + "tree_id": 90, + "bbox_x0": -0.14731, + "bbox_x1": 1.80669, + "bbox_y0": 6.10441, + "bbox_y1": 11.13897 + } + }, + { + "pk": 229, + "model": "base.region", + "fields": { + "rght": 506, + "code": "TKL", + "name": "Tokelau", + "parent": 256, + "level": 2, + "lft": 505, + "tree_id": 90, + "bbox_x0": -172.517136, + "bbox_x1": -171.182083, + "bbox_y0": -9.43378, + "bbox_y1": -8.53288 + } + }, + { + "pk": 230, + "model": "base.region", + "fields": { + "rght": 508, + "code": "TON", + "name": "Tonga", + "parent": 256, + "level": 2, + "lft": 507, + "tree_id": 90, + "bbox_x0": -176.212646, + "bbox_x1": -173.702438, + "bbox_y0": -22.345711, + "bbox_y1": -15.55326 + } + }, + { + "pk": 231, + "model": "base.region", + "fields": { + "rght": 181, + "code": "TTO", + "name": "Trinidad and Tobago", + "parent": 255, + "level": 3, + "lft": 180, + "tree_id": 90, + "bbox_x0": -61.927391, + "bbox_x1": -60.49144, + "bbox_y0": 10.03648, + "bbox_y1": 11.36118 + } + }, + { + "pk": 232, + "model": "base.region", + "fields": { + "rght": 61, + "code": "TUN", + "name": "Tunisia", + "parent": 11, + "level": 3, + "lft": 60, + "tree_id": 90, + "bbox_x0": 7.52481, + "bbox_x1": 11.59827, + "bbox_y0": 30.240431, + "bbox_y1": 37.56712 + } + }, + { + "pk": 233, + "model": "base.region", + "fields": { + "rght": 428, + "code": "TUR", + "name": "Turkey", + "parent": 5, + "level": 2, + "lft": 427, + "tree_id": 90, + "bbox_x0": 25.664101, + "bbox_x1": 44.8297, + "bbox_y0": 35.809971, + "bbox_y1": 42.105499 + } + }, + { + "pk": 234, + "model": "base.region", + "fields": { + "rght": 257, + "code": "TKM", + "name": "Turkmenistan", + "parent": 8, + "level": 3, + "lft": 256, + "tree_id": 90, + "bbox_x0": 52.441429, + "bbox_x1": 66.684303, + "bbox_y0": 35.14109, + "bbox_y1": 42.795551 + } + }, + { + "pk": 235, + "model": "base.region", + "fields": { + "rght": 183, + "code": "TCA", + "name": "Turks and Caicos Islands", + "parent": 255, + "level": 3, + "lft": 182, + "tree_id": 90, + "bbox_x0": -72.483879, + "bbox_x1": -71.08033, + "bbox_y0": 21.170031, + "bbox_y1": 21.97361 + } + }, + { + "pk": 236, + "model": "base.region", + "fields": { + "rght": 510, + "code": "TUV", + "name": "Tuvalu", + "parent": 256, + "level": 2, + "lft": 509, + "tree_id": 90, + "bbox_x0": 176.06488, + "bbox_x1": 179.883789, + "bbox_y0": -10.75045, + "bbox_y1": -5.64198 + } + }, + { + "pk": 237, + "model": "base.region", + "fields": { + "rght": 45, + "code": "UGA", + "name": "Uganda", + "parent": 12, + "level": 3, + "lft": 44, + "tree_id": 90, + "bbox_x0": 29.573549, + "bbox_x1": 35.001251, + "bbox_y0": -1.47849, + "bbox_y1": 4.23403 + } + }, + { + "pk": 238, + "model": "base.region", + "fields": { + "rght": 430, + "code": "UKR", + "name": "Ukraine", + "parent": 5, + "level": 2, + "lft": 429, + "tree_id": 90, + "bbox_x0": 22.128811, + "bbox_x1": 40.218079, + "bbox_y0": 44.390411, + "bbox_y1": 52.375359 + } + }, + { + "pk": 239, + "model": "base.region", + "fields": { + "rght": 460, + "code": "ARE", + "name": "United Arab Emirates", + "parent": 15, + "level": 2, + "lft": 459, + "tree_id": 90, + "bbox_x0": 51.497978, + "bbox_x1": 56.38343, + "bbox_y0": 22.644409, + "bbox_y1": 26.28219 + } + }, + { + "pk": 240, + "model": "base.region", + "fields": { + "rght": 432, + "code": "GBR", + "name": "United Kingdom", + "parent": 5, + "level": 2, + "lft": 431, + "tree_id": 90, + "bbox_x0": -13.41393, + "bbox_x1": 1.76896, + "bbox_y0": 49.16209, + "bbox_y1": 60.854691 + } + }, + { + "pk": 241, + "model": "base.region", + "fields": { + "rght": 47, + "code": "TZA", + "name": "United Republic of Tanzania", + "parent": 12, + "level": 3, + "lft": 46, + "tree_id": 90, + "bbox_x0": 29.32716, + "bbox_x1": 40.443218, + "bbox_y0": -11.74569, + "bbox_y1": -0.99073 + } + }, + { + "pk": 242, + "model": "base.region", + "fields": { + "rght": 185, + "code": "VIR", + "name": "United States Virgin Islands", + "parent": 255, + "level": 3, + "lft": 184, + "tree_id": 90, + "bbox_x0": -65.086281, + "bbox_x1": -64.56517, + "bbox_y0": 17.681721, + "bbox_y1": 18.458139 + } + }, + { + "pk": 243, + "model": "base.region", + "fields": { + "rght": 211, + "code": "USA", + "name": "United States of America", + "parent": 2, + "level": 3, + "lft": 210, + "tree_id": 90, + "bbox_x0": -179.150558, + "bbox_x1": -66.940643, + "bbox_y0": 18.91172, + "bbox_y1": 71.441048 + } + }, + { + "pk": 244, + "model": "base.region", + "fields": { + "rght": 239, + "code": "URY", + "name": "Uruguay", + "parent": 4, + "level": 3, + "lft": 238, + "tree_id": 90, + "bbox_x0": -58.442719, + "bbox_x1": -53.073929, + "bbox_y0": -35.047939, + "bbox_y1": -30.08222 + } + }, + { + "pk": 245, + "model": "base.region", + "fields": { + "rght": 259, + "code": "UZB", + "name": "Uzbekistan", + "parent": 8, + "level": 3, + "lft": 258, + "tree_id": 90, + "bbox_x0": 55.996632, + "bbox_x1": 73.132271, + "bbox_y0": 37.18433, + "bbox_y1": 45.60519 + } + }, + { + "pk": 246, + "model": "base.region", + "fields": { + "rght": 512, + "code": "VUT", + "name": "Vanuatu", + "parent": 256, + "level": 2, + "lft": 511, + "tree_id": 90, + "bbox_x0": 166.524994, + "bbox_x1": 170.234802, + "bbox_y0": -20.25045, + "bbox_y1": -13.07345 + } + }, + { + "pk": 247, + "model": "base.region", + "fields": { + "rght": 241, + "code": "VEN", + "name": "Venezuela (Bolivarian Republic of)", + "parent": 4, + "level": 3, + "lft": 240, + "tree_id": 90, + "bbox_x0": -73.374313, + "bbox_x1": -59.803768, + "bbox_y0": 0.74368, + "bbox_y1": 12.2019 + } + }, + { + "pk": 248, + "model": "base.region", + "fields": { + "rght": 315, + "code": "VNM", + "name": "Viet Nam", + "parent": 7, + "level": 3, + "lft": 314, + "tree_id": 90, + "bbox_x0": 102.144592, + "bbox_x1": 116.521233, + "bbox_y0": 7.3116, + "bbox_y1": 23.39274 + } + }, + { + "pk": 249, + "model": "base.region", + "fields": { + "rght": 514, + "code": "WLF", + "name": "Wallis and Futuna Islands", + "parent": 256, + "level": 2, + "lft": 513, + "tree_id": 90, + "bbox_x0": -178.206787, + "bbox_x1": -176.08287, + "bbox_y0": -14.38779, + "bbox_y1": -13.17343 + } + }, + { + "pk": 250, + "model": "base.region", + "fields": { + "rght": 63, + "code": "ESH", + "name": "Western Sahara", + "parent": 11, + "level": 3, + "lft": 62, + "tree_id": 90, + "bbox_x0": -17.10317, + "bbox_x1": -8.66942, + "bbox_y0": 20.774151, + "bbox_y1": 28.219179 + } + }, + { + "pk": 251, + "model": "base.region", + "fields": { + "rght": 462, + "code": "YEM", + "name": "Yemen", + "parent": 15, + "level": 2, + "lft": 461, + "tree_id": 90, + "bbox_x0": 41.809608, + "bbox_x1": 54.535992, + "bbox_y0": 12.10717, + "bbox_y1": 19.00276 + } + }, + { + "pk": 252, + "model": "base.region", + "fields": { + "rght": 79, + "code": "ZMB", + "name": "Zambia", + "parent": 14, + "level": 3, + "lft": 78, + "tree_id": 90, + "bbox_x0": 21.99938, + "bbox_x1": 33.705711, + "bbox_y0": -18.07947, + "bbox_y1": -8.22436 + } + }, + { + "pk": 253, + "model": "base.region", + "fields": { + "rght": 81, + "code": "ZWE", + "name": "Zimbabwe", + "parent": 14, + "level": 3, + "lft": 80, + "tree_id": 90, + "bbox_x0": 25.23702, + "bbox_x1": 33.056301, + "bbox_y0": -22.41773, + "bbox_y1": -15.60883 + } + }, + { + "pk": 254, + "model": "base.region", + "fields": { + "rght": 243, + "code": "AME", + "name": "Americas", + "parent": null, + "level": 1, + "lft": 128, + "tree_id": 90, + "bbox_x0": -84.114449, + "bbox_x1": -84.097572, + "bbox_y0": 9.9313, + "bbox_y1": 9.94792 + } + }, + { + "pk": 255, + "model": "base.region", + "fields": { + "rght": 186, + "code": "CRB", + "name": "Caribbean", + "parent": 254, + "level": 2, + "lft": 129, + "tree_id": 90, + "bbox_x0": -85.260178, + "bbox_x1": -59.286541, + "bbox_y0": 10.18548, + "bbox_y1": 27.454559 + } + }, + { + "pk": 256, + "model": "base.region", + "fields": { + "rght": 515, + "code": "PAC", + "name": "Pacific", + "parent": null, + "level": 1, + "lft": 464, + "tree_id": 90, + "bbox_x0": 139.572356, + "bbox_x1": -74.531208, + "bbox_y0": -56.267241, + "bbox_y1": 62.0215969 + } + }, + { + "pk": 257, + "model": "base.region", + "fields": { + "rght": 12, + "code": "CFR", + "name": "Central Africa", + "parent": 10, + "level": 2, + "lft": 3, + "tree_id": 90, + "bbox_x0": -25.35874, + "bbox_x1": 63.525379, + "bbox_y0": -46.900452, + "bbox_y1": 37.56712 + } + }, + { + "pk": 258, + "model": "base.region", + "fields": { + "rght": 276, + "code": "EAS", + "name": "East Asia", + "parent": 6, + "level": 2, + "lft": 261, + "tree_id": 90, + "bbox_x0": 19.6381, + "bbox_x1": 180, + "bbox_y0": -12.56111, + "bbox_y1": 82.50045 + } + }, + { + "pk": 259, + "model": "base.region", + "fields": { + "rght": 59, + "code": "SSD", + "name": "South Sudan", + "parent": 11, + "level": 3, + "lft": 58, + "tree_id": 90, + "bbox_x0": 24.15192, + "bbox_x1": 35.947689, + "bbox_y0": 3.48639, + "bbox_y1": 12.21558 + } + }, + { + "model": "base.menuplaceholder", + "pk": 1, + "fields": { + "name": "TOPBAR_MENU" + } + } +] diff --git a/fixtures/sample_admin.json b/fixtures/sample_admin.json new file mode 100644 index 0000000..f9a16ec --- /dev/null +++ b/fixtures/sample_admin.json @@ -0,0 +1,18 @@ +[{ + "fields": { + "date_joined": "2011-06-09 15:15:27", + "email": "ad@m.in", + "first_name": "", + "groups": [], + "is_active": true, + "is_staff": true, + "is_superuser": true, + "last_login": "2011-06-09 15:45:34", + "last_name": "", + "password": "pbkdf2_sha256$30000$rjuGt0Obn8on$cxF75frIOSaitNklLZ0IJ/VonUW0fwEFVF96o0M+lGc=", + "user_permissions": [], + "username": "admin" + }, + "model": "people.Profile", + "pk": 1000 +}] \ No newline at end of file diff --git a/fixtures/sites_template.json b/fixtures/sites_template.json new file mode 100644 index 0000000..0e05e86 --- /dev/null +++ b/fixtures/sites_template.json @@ -0,0 +1,10 @@ +[ + { + "fields": { + "domain": "example.com", + "name": "example.com" + }, + "model": "sites.site", + "pk": 1 + } +] diff --git a/haitidata.egg-info/PKG-INFO b/haitidata.egg-info/PKG-INFO deleted file mode 100644 index 32f8408..0000000 --- a/haitidata.egg-info/PKG-INFO +++ /dev/null @@ -1,96 +0,0 @@ -Metadata-Version: 1.1 -Name: haitidata -Version: 0.2 -Summary: haitidata, based on GeoNode -Home-page: https://github.com/haitidata/haitidata -Author: UNKNOWN -Author-email: UNKNOWN -License: BSD -Description: Haitidata - ======================== - - You should write some docs, it's good for the soul. - - Installation - ------------ - - Install geonode with:: - - $ sudo add-apt-repository ppa:geonode/stable - - $ sudo apt-get update - - $ sudo apt-get install geonode - - Create a new template based on the geonode example project.:: - - $ django-admin startproject my_geonode --template=https://github.com/GeoNode/geonode-project/archive/2.6.zip -epy,rst - $ sudo pip install -e my_geonode - - .. note:: You should NOT use the name geonode for your project as it will conflict with the default geonode package name. - - Usage - ----- - - Rename the local_settings.py.sample to local_settings.py and edit it's content by setting the SITEURL and SITENAME. - - Edit the file /etc/apache2/sites-available/geonode and change the following directive from: - - WSGIScriptAlias / /var/www/geonode/wsgi/geonode.wsgi - - to: - - WSGIScriptAlias / /path/to/my_geonode/my_geonode/wsgi.py - - To avoid having to grant apache permissions (i.e. www-data user and group) to your home dir where you likely setup the geonode-project; you may want to instead copy the wsgi.py file next to geonode.wsgi and replace the file name instead of the entire path. - - $ cp /path/to/my_geonode/my_geonode/wsgi.py /var/www/geonode/wsgi/wsgi.py - - Add the "Directory" directive for your folder like the following example: - - - - Order allow,deny - - Options Indexes FollowSymLinks - - Allow from all - - Require all granted - - IndexOptions FancyIndexing - - - - Restart apache:: - - $ sudo service apache2 restart - - Edit the templates in my_geonode/templates, the css and images to match your needs. - - In the my_geonode folder run:: - - $ python manage.py collectstatic - - Github Considerations - ------------------------ - - While it is helpful to recommit your django project wrapper back to a distributed version control repository. - * It is also important to remember that production instances will store security information in the local_settings.py - * Admin/Devs should always remember to exclude this file in the .gitignore file in the same folder as the .git:: - - $ nano .gitignore - - /{project}/local_settings.py - - save, make sure the file is also removed from git cache:: - - $ git rm -f --cache //local_settings.py - - $ git status - - confirm the file is no longer staged for the next commit or that if it is as "removed" - -Keywords: haitidata geonode django -Platform: UNKNOWN -Classifier: Development Status :: 1 - Planning diff --git a/haitidata.egg-info/SOURCES.txt b/haitidata.egg-info/SOURCES.txt deleted file mode 100644 index 436dd95..0000000 --- a/haitidata.egg-info/SOURCES.txt +++ /dev/null @@ -1,11 +0,0 @@ -README.rst -haitidata/__init__.py -haitidata/settings.py -haitidata/urls.py -haitidata/wsgi.py -haitidata.egg-info/PKG-INFO -haitidata.egg-info/SOURCES.txt -haitidata.egg-info/dependency_links.txt -haitidata.egg-info/not-zip-safe -haitidata.egg-info/requires.txt -haitidata.egg-info/top_level.txt \ No newline at end of file diff --git a/haitidata.egg-info/dependency_links.txt b/haitidata.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/haitidata.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/haitidata.egg-info/not-zip-safe b/haitidata.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/haitidata.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/haitidata.egg-info/requires.txt b/haitidata.egg-info/requires.txt deleted file mode 100644 index d3f9f9e..0000000 --- a/haitidata.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -django-tastypie==0.13.0 diff --git a/haitidata.egg-info/top_level.txt b/haitidata.egg-info/top_level.txt deleted file mode 100644 index 06caf57..0000000 --- a/haitidata.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -haitidata diff --git a/haitidata/__init__.py b/haitidata/__init__.py index e69de29..f82175b 100644 --- a/haitidata/__init__.py +++ b/haitidata/__init__.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2017 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +import os + +__version__ = (2, 10, 1, 'final', 0) + + +default_app_config = "haitidata.apps.AppConfig" + + +def get_version(): + import haitidata.version + return haitidata.version.get_version(__version__) diff --git a/haitidata/apps.py b/haitidata/apps.py new file mode 100644 index 0000000..c11ecb8 --- /dev/null +++ b/haitidata/apps.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2018 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### +from django.apps import AppConfig as BaseAppConfig + + +def run_setup_hooks(*args, **kwargs): + from django.conf import settings + from .celeryapp import app as celeryapp + if celeryapp not in settings.INSTALLED_APPS: + settings.INSTALLED_APPS += (celeryapp, ) + + +class AppConfig(BaseAppConfig): + + name = "haitidata" + label = "haitidata" + + def ready(self): + super(AppConfig, self).ready() + run_setup_hooks() + diff --git a/haitidata/celeryapp.py b/haitidata/celeryapp.py new file mode 100644 index 0000000..f4eea5e --- /dev/null +++ b/haitidata/celeryapp.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2017 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +from __future__ import absolute_import + +import os +from celery import Celery + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'haitidata.settings') + +app = Celery('haitidata') + +# Using a string here means the worker will not have to +# pickle the object when using Windows. +app.config_from_object('django.conf:settings', namespace="CELERY") +app.autodiscover_tasks() + + +@app.task(bind=True) +def debug_task(self): + print("Request: {!r}".format(self.request)) diff --git a/haitidata/context_processors/clipped_geotiff.py b/haitidata/clipped_geotiff.py similarity index 100% rename from haitidata/context_processors/clipped_geotiff.py rename to haitidata/clipped_geotiff.py diff --git a/haitidata/context_processors/__init__.py b/haitidata/context_processors/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/context_processors/project_setting.py b/haitidata/context_processors/project_setting.py deleted file mode 100644 index 8948eb1..0000000 --- a/haitidata/context_processors/project_setting.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.conf import settings # import the settings file - - -def project_setting(request): - return {'GEOSERVER_BASE_URL': settings.GEOSERVER_BASE_URL} diff --git a/haitidata/local_settings.py.sample b/haitidata/local_settings.py.sample new file mode 100644 index 0000000..7c4c4d4 --- /dev/null +++ b/haitidata/local_settings.py.sample @@ -0,0 +1,641 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2018 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +""" There are 3 ways to override GeoNode settings: + 1. Using environment variables, if your changes to GeoNode are minimal. + 2. Creating a downstream project, if you are doing a lot of customization. + 3. Override settings in a local_settings.py file, legacy. +""" + +import ast +import os +from urlparse import urlparse, urlunparse +from geonode.settings import * + +PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) + +MEDIA_ROOT = os.getenv('MEDIA_ROOT', os.path.join(PROJECT_ROOT, "uploaded")) + +STATIC_ROOT = os.getenv('STATIC_ROOT', + os.path.join(PROJECT_ROOT, "static_root") + ) + +# SECRET_KEY = '************************' +# Make this unique, and don't share it with anybody. +SECRET_KEY = os.getenv('SECRET_KEY', "n(v@vf2rm!zcxaxey9(6ymhwayxnqzhlr)-f#$jkzt&2)way#*") + +# per-deployment settings should go here +SITE_HOST_NAME = os.getenv('SITE_HOST_NAME', 'localhost') +SITE_HOST_PORT = os.getenv('SITE_HOST_PORT', None) +_default_siteurl = "http://%s:%s/" % (SITE_HOST_NAME, SITE_HOST_PORT) if SITE_HOST_PORT else "http://%s/" % SITE_HOST_NAME +SITEURL = os.getenv('SITEURL', _default_siteurl) + +# we need hostname for deployed +_surl = urlparse(SITEURL) +HOSTNAME = _surl.hostname + +# add trailing slash to site url. geoserver url will be relative to this +if not SITEURL.endswith('/'): + SITEURL = '{}/'.format(SITEURL) + +try: + # try to parse python notation, default in dockerized env + ALLOWED_HOSTS = ast.literal_eval(os.getenv('ALLOWED_HOSTS')) +except ValueError: + # fallback to regular list of values separated with misc chars + ALLOWED_HOSTS = [HOSTNAME, 'localhost', 'django', 'geonode'] if os.getenv('ALLOWED_HOSTS') is None \ + else re.split(r' *[,|:|;] *', os.getenv('ALLOWED_HOSTS')) + +TIME_ZONE = 'UTC' + +# Login and logout urls override +LOGIN_URL = os.getenv('LOGIN_URL', '{}account/login/'.format(SITEURL)) +LOGOUT_URL = os.getenv('LOGOUT_URL', '{}account/logout/'.format(SITEURL)) + +ACCOUNT_LOGIN_REDIRECT_URL = os.getenv('LOGIN_REDIRECT_URL', SITEURL) +ACCOUNT_LOGOUT_REDIRECT_URL = os.getenv('LOGOUT_REDIRECT_URL', SITEURL) + +AVATAR_GRAVATAR_SSL = ast.literal_eval(os.getenv('AVATAR_GRAVATAR_SSL', 'True')) + +# Backend +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'geonode', + 'USER': 'geonode', + 'PASSWORD': 'geonode', + 'HOST': 'localhost', + 'PORT': '5432', + 'CONN_MAX_AGE': 5, + 'CONN_TOUT': 5, + 'OPTIONS': { + 'connect_timeout': 5, + } + }, + # vector datastore for uploads + 'datastore': { + 'ENGINE': 'django.contrib.gis.db.backends.postgis', + # 'ENGINE': '', # Empty ENGINE name disables + 'NAME': 'geonode_data', + 'USER': 'geonode', + 'PASSWORD': 'geonode', + 'HOST': 'localhost', + 'PORT': '5432', + 'CONN_MAX_AGE': 5, + 'CONN_TOUT': 5, + 'OPTIONS': { + 'connect_timeout': 5, + } + } +} + +GEOSERVER_LOCATION = os.getenv( + 'GEOSERVER_LOCATION', 'http://localhost:8080/geoserver/' +) + +GEOSERVER_PUBLIC_HOST = os.getenv( + 'GEOSERVER_PUBLIC_HOST', SITE_HOST_NAME +) + +GEOSERVER_PUBLIC_PORT = os.getenv( + 'GEOSERVER_PUBLIC_PORT', 8080 +) + +_default_public_location = 'http://{}:{}/geoserver/'.format(GEOSERVER_PUBLIC_HOST, GEOSERVER_PUBLIC_PORT) if GEOSERVER_PUBLIC_PORT else 'http://{}/geoserver/'.format(GEOSERVER_PUBLIC_HOST) + +GEOSERVER_WEB_UI_LOCATION = os.getenv( + 'GEOSERVER_WEB_UI_LOCATION', GEOSERVER_LOCATION +) + +GEOSERVER_PUBLIC_LOCATION = os.getenv( + 'GEOSERVER_PUBLIC_LOCATION', _default_public_location +) + +OGC_SERVER_DEFAULT_USER = os.getenv( + 'GEOSERVER_ADMIN_USER', 'admin' +) + +OGC_SERVER_DEFAULT_PASSWORD = os.getenv( + 'GEOSERVER_ADMIN_PASSWORD', 'geoserver' +) + +# OGC (WMS/WFS/WCS) Server Settings +OGC_SERVER = { + 'default': { + 'BACKEND': 'geonode.geoserver', + 'LOCATION': GEOSERVER_LOCATION, + 'WEB_UI_LOCATION': GEOSERVER_WEB_UI_LOCATION, + 'LOGIN_ENDPOINT': 'j_spring_oauth2_geonode_login', + 'LOGOUT_ENDPOINT': 'j_spring_oauth2_geonode_logout', + # PUBLIC_LOCATION needs to be kept like this because in dev mode + # the proxy won't work and the integration tests will fail + # the entire block has to be overridden in the local_settings + 'PUBLIC_LOCATION': GEOSERVER_PUBLIC_LOCATION, + 'USER': OGC_SERVER_DEFAULT_USER, + 'PASSWORD': OGC_SERVER_DEFAULT_PASSWORD, + 'MAPFISH_PRINT_ENABLED': True, + 'PRINT_NG_ENABLED': True, + 'GEONODE_SECURITY_ENABLED': True, + 'GEOFENCE_SECURITY_ENABLED': True, + 'WMST_ENABLED': False, + 'BACKEND_WRITE_ENABLED': True, + 'WPS_ENABLED': False, + 'LOG_FILE': '%s/geoserver/data/logs/geoserver.log' % os.path.abspath(os.path.join(PROJECT_ROOT, os.pardir)), + # Set to dictionary identifier of database containing spatial data in DATABASES dictionary to enable + 'DATASTORE': 'datastore', + 'TIMEOUT': int(os.getenv('OGC_REQUEST_TIMEOUT', '30')), + 'MAX_RETRIES': int(os.getenv('OGC_REQUEST_MAX_RETRIES', '5')), + 'BACKOFF_FACTOR': float(os.getenv('OGC_REQUEST_BACKOFF_FACTOR', '0.3')), + 'POOL_MAXSIZE': int(os.getenv('OGC_REQUEST_POOL_MAXSIZE', '10')), + 'POOL_CONNECTIONS': int(os.getenv('OGC_REQUEST_POOL_CONNECTIONS', '10')), + } +} + +# If you want to enable Mosaics use the following configuration +UPLOADER = { + # 'BACKEND': 'geonode.rest', + 'BACKEND': 'geonode.importer', + 'OPTIONS': { + 'TIME_ENABLED': True, + 'MOSAIC_ENABLED': False, + }, + 'SUPPORTED_CRS': [ + 'EPSG:4326', + 'EPSG:3785', + 'EPSG:3857', + 'EPSG:32647', + 'EPSG:32736' + ], + 'SUPPORTED_EXT': [ + '.shp', + '.csv', + '.kml', + '.kmz', + '.json', + '.geojson', + '.tif', + '.tiff', + '.geotiff', + '.gml', + '.xml' + ] +} + +# CSW settings +CATALOGUE = { + 'default': { + # The underlying CSW implementation + # default is pycsw in local mode (tied directly to GeoNode Django DB) + 'ENGINE': 'geonode.catalogue.backends.pycsw_local', + # pycsw in non-local mode + # 'ENGINE': 'geonode.catalogue.backends.pycsw_http', + # GeoNetwork opensource + # 'ENGINE': 'geonode.catalogue.backends.geonetwork', + # deegree and others + # 'ENGINE': 'geonode.catalogue.backends.generic', + + # The FULLY QUALIFIED base url to the CSW instance for this GeoNode + 'URL': urljoin(SITEURL, '/catalogue/csw'), + # 'URL': 'http://localhost:8080/geonetwork/srv/en/csw', + # 'URL': 'http://localhost:8080/deegree-csw-demo-3.0.4/services', + + # login credentials (for GeoNetwork) + # 'USER': 'admin', + # 'PASSWORD': 'admin', + + # 'ALTERNATES_ONLY': True, + } +} + +# pycsw settings +PYCSW = { + # pycsw configuration + 'CONFIGURATION': { + # uncomment / adjust to override server config system defaults + # 'server': { + # 'maxrecords': '10', + # 'pretty_print': 'true', + # 'federatedcatalogues': 'http://catalog.data.gov/csw' + # }, + 'server': { + 'home': '.', + 'url': CATALOGUE['default']['URL'], + 'encoding': 'UTF-8', + 'language': LANGUAGE_CODE, + 'maxrecords': '20', + 'pretty_print': 'true', + # 'domainquerytype': 'range', + 'domaincounts': 'true', + 'profiles': 'apiso,ebrim', + }, + 'manager': { + # authentication/authorization is handled by Django + 'transactions': 'false', + 'allowed_ips': '*', + # 'csw_harvest_pagesize': '10', + }, + 'metadata:main': { + 'identification_title': 'GeoNode Catalogue', + 'identification_abstract': 'GeoNode is an open source platform' \ + ' that facilitates the creation, sharing, and collaborative use' \ + ' of geospatial data', + 'identification_keywords': 'sdi, catalogue, discovery, metadata,' \ + ' GeoNode', + 'identification_keywords_type': 'theme', + 'identification_fees': 'None', + 'identification_accessconstraints': 'None', + 'provider_name': 'Organization Name', + 'provider_url': SITEURL, + 'contact_name': 'Lastname, Firstname', + 'contact_position': 'Position Title', + 'contact_address': 'Mailing Address', + 'contact_city': 'City', + 'contact_stateorprovince': 'Administrative Area', + 'contact_postalcode': 'Zip or Postal Code', + 'contact_country': 'Country', + 'contact_phone': '+xx-xxx-xxx-xxxx', + 'contact_fax': '+xx-xxx-xxx-xxxx', + 'contact_email': 'Email Address', + 'contact_url': 'Contact URL', + 'contact_hours': 'Hours of Service', + 'contact_instructions': 'During hours of service. Off on ' \ + 'weekends.', + 'contact_role': 'pointOfContact', + }, + 'metadata:inspire': { + 'enabled': 'true', + 'languages_supported': 'eng,gre', + 'default_language': 'eng', + 'date': 'YYYY-MM-DD', + 'gemet_keywords': 'Utility and governmental services', + 'conformity_service': 'notEvaluated', + 'contact_name': 'Organization Name', + 'contact_email': 'Email Address', + 'temp_extent': 'YYYY-MM-DD/YYYY-MM-DD', + } + } +} + +# -- START Client Hooksets Setup + +# GeoNode javascript client configuration + +# default map projection +# Note: If set to EPSG:4326, then only EPSG:4326 basemaps will work. +DEFAULT_MAP_CRS = os.environ.get('DEFAULT_MAP_CRS', "EPSG:3857") + +DEFAULT_LAYER_FORMAT = os.environ.get('DEFAULT_LAYER_FORMAT', "image/png8") + +# Where should newly created maps be focused? +DEFAULT_MAP_CENTER = (os.environ.get('DEFAULT_MAP_CENTER_X', 0), os.environ.get('DEFAULT_MAP_CENTER_Y', 0)) + +# How tightly zoomed should newly created maps be? +# 0 = entire world; +# maximum zoom is between 12 and 15 (for Google Maps, coverage varies by area) +DEFAULT_MAP_ZOOM = int(os.environ.get('DEFAULT_MAP_ZOOM', 3)) + +MAPBOX_ACCESS_TOKEN = os.environ.get('MAPBOX_ACCESS_TOKEN', None) +BING_API_KEY = os.environ.get('BING_API_KEY', None) +GOOGLE_API_KEY = os.environ.get('GOOGLE_API_KEY', None) + +GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY = os.getenv('GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore') + +MAP_BASELAYERS = [{}] + +""" +To enable the REACT based Client: +1. pip install pip install django-geonode-client==1.0.9 +2. enable those: +""" + +if GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY == 'react': + GEONODE_CLIENT_HOOKSET = os.getenv('GEONODE_CLIENT_HOOKSET', 'geonode.client.hooksets.ReactHookSet') + if 'geonode-client' not in INSTALLED_APPS: + INSTALLED_APPS += ('geonode-client', ) + +""" +To enable the Leaflet based Client: +1. enable those: +""" +if GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY == 'leaflet': + GEONODE_CLIENT_HOOKSET = os.getenv('GEONODE_CLIENT_HOOKSET', 'geonode.client.hooksets.LeafletHookSet') + + LEAFLET_CONFIG = { + 'TILES': [ + # Find tiles at: + # http://leaflet-extras.github.io/leaflet-providers/preview/ + + # Stamen toner lite. + ('Watercolor', + 'http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.png', + 'Map tiles by Stamen Design, \ + CC BY 3.0 \ + — Map data © \ + OpenStreetMap contributors, \ + \ + CC-BY-SA'), + ('Toner Lite', + 'http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png', + 'Map tiles by Stamen Design, \ + CC BY 3.0 \ + — Map data © \ + OpenStreetMap contributors, \ + \ + CC-BY-SA'), + ], + 'PLUGINS': { + 'esri-leaflet': { + 'js': 'lib/js/leaflet.js', + 'auto-include': True, + }, + 'leaflet-fullscreen': { + 'css': 'lib/css/leaflet.fullscreen.css', + 'js': 'lib/js/Leaflet.fullscreen.min.js', + 'auto-include': True, + }, + 'leaflet-opacity': { + 'css': 'lib/css/L.Control.Opacity.css', + 'js': 'lib/js/L.Control.Opacity.js', + 'auto-include': True, + }, + 'leaflet-navbar': { + 'css': 'lib/css/Leaflet.NavBar.css', + 'js': 'lib/js/index.js', + 'auto-include': True, + }, + 'leaflet-measure': { + 'css': 'lib/css/leaflet-measure.css', + 'js': 'lib/js/leaflet-measure.js', + 'auto-include': True, + }, + }, + 'SRID': 3857, + 'RESET_VIEW': False + } + + if not DEBUG_STATIC: + # if not DEBUG_STATIC, use minified css and js + LEAFLET_CONFIG['PLUGINS'] = { + 'leaflet-plugins': { + 'js': 'lib/js/leaflet-plugins.min.js', + 'css': 'lib/css/leaflet-plugins.min.css', + 'auto-include': True, + } + } + +""" +To enable the MapStore2 REACT based Client: +1. pip install pip install django-geonode-mapstore-client==1.0 +2. enable those: +""" +if GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY == 'mapstore': + GEONODE_CLIENT_HOOKSET = os.getenv('GEONODE_CLIENT_HOOKSET', 'geonode_mapstore_client.hooksets.MapStoreHookSet') + + if 'geonode_mapstore_client' not in INSTALLED_APPS: + INSTALLED_APPS += ( + 'mapstore2_adapter', + 'geonode_mapstore_client',) + + # This must be set to True in case you run the client in DEBUG mode with `npm run start` + MAPSTORE_DEBUG = False + + def get_geonode_catalogue_service(): + if PYCSW: + pycsw_config = PYCSW["CONFIGURATION"] + if pycsw_config: + pycsw_catalogue = { + ("%s" % pycsw_config['metadata:main']['identification_title']): { + "url": CATALOGUE['default']['URL'], + "type": "csw", + "title": pycsw_config['metadata:main']['identification_title'], + "autoload": True + } + } + return pycsw_catalogue + return None + + GEONODE_CATALOGUE_SERVICE = get_geonode_catalogue_service() + + MAPSTORE_CATALOGUE_SERVICES = { + "Demo WMS Service": { + "url": "https://demo.geo-solutions.it/geoserver/wms", + "type": "wms", + "title": "Demo WMS Service", + "autoload": False + }, + "Demo WMTS Service": { + "url": "https://demo.geo-solutions.it/geoserver/gwc/service/wmts", + "type": "wmts", + "title": "Demo WMTS Service", + "autoload": False + } + } + + MAPSTORE_CATALOGUE_SELECTED_SERVICE = "Demo WMS Service" + + if GEONODE_CATALOGUE_SERVICE: + MAPSTORE_CATALOGUE_SERVICES[list(GEONODE_CATALOGUE_SERVICE.keys())[0]] = GEONODE_CATALOGUE_SERVICE[list(GEONODE_CATALOGUE_SERVICE.keys())[0]] + MAPSTORE_CATALOGUE_SELECTED_SERVICE = list(GEONODE_CATALOGUE_SERVICE.keys())[0] + + DEFAULT_MS2_BACKGROUNDS = [ + { + "type": "tileprovider", + "title": "Stamen Watercolor", + "provider": "Stamen.Watercolor", + "name": "Stamen.Watercolor", + "source": "Stamen", + "group": "background", + "thumbURL": "https://stamen-tiles-c.a.ssl.fastly.net/watercolor/0/0/0.jpg", + "visibility": False + }, + { + "type": "tileprovider", + "title": "Stamen Terrain", + "provider": "Stamen.Terrain", + "name": "Stamen.Terrain", + "source": "Stamen", + "group": "background", + "thumbURL": "https://stamen-tiles-d.a.ssl.fastly.net/terrain/0/0/0.png", + "visibility": False + }, + { + "type": "tileprovider", + "title": "Stamen Toner", + "provider": "Stamen.Toner", + "name": "Stamen.Toner", + "source": "Stamen", + "group": "background", + "thumbURL": "https://stamen-tiles-d.a.ssl.fastly.net/toner/0/0/0.png", + "visibility": False + }, + { + "type": "osm", + "title": "Open Street Map", + "name": "mapnik", + "source": "osm", + "group": "background", + "visibility": True + }, + { + "type": "tileprovider", + "title": "OpenTopoMap", + "provider": "OpenTopoMap", + "name": "OpenTopoMap", + "source": "OpenTopoMap", + "group": "background", + "visibility": False + }, + { + "type": "wms", + "title": "Sentinel-2 cloudless - https://s2maps.eu", + "format": "image/jpeg", + "id": "s2cloudless", + "name": "s2cloudless:s2cloudless", + "url": "https://maps.geo-solutions.it/geoserver/wms", + "group": "background", + "thumbURL": "%sstatic/mapstorestyle/img/s2cloudless-s2cloudless.png" % SITEURL, + "visibility": False + }, + { + "source": "ol", + "group": "background", + "id": "none", + "name": "empty", + "title": "Empty Background", + "type": "empty", + "visibility": False, + "args": ["Empty Background", {"visibility": False}] + } + ] + + if MAPBOX_ACCESS_TOKEN: + MAPBOX_BASEMAPS = { + "type": "tileprovider", + "title": "MapBox streets-v11", + "provider": "MapBoxStyle", + "name": "MapBox streets-v11", + "accessToken": "%s" % MAPBOX_ACCESS_TOKEN, + "source": "streets-v11", + "thumbURL": "https://api.mapbox.com/styles/v1/mapbox/streets-v11/tiles/256/6/33/23?access_token=%s" % MAPBOX_ACCESS_TOKEN, + "group": "background", + "visibility": True + } + DEFAULT_MS2_BACKGROUNDS = [MAPBOX_BASEMAPS,] + DEFAULT_MS2_BACKGROUNDS + + if BING_API_KEY: + BING_BASEMAPS = [ + { + "type": "bing", + "title": "Bing Aerial", + "name": "AerialWithLabels", + "source": "bing", + "group": "background", + "apiKey": "", + "visibility": True + }, + { + "type": "bing", + "title": "Bing RoadOnDemand", + "name": "RoadOnDemand", + "source": "bing", + "group": "background", + "apiKey": "", + "thumbURL": "%sstatic/mapstorestyle/img/bing_road_on_demand.png" % SITEURL, + "visibility": False + }, + { + "type": "bing", + "title": "Bing AerialWithLabelsOnDemand", + "name": "AerialWithLabelsOnDemand", + "source": "bing", + "group": "background", + "apiKey": "", + "thumbURL": "%sstatic/mapstorestyle/img/bing_aerial_w_labels.png" % SITEURL, + "visibility": False + }, + { + "type": "bing", + "title": "Bing CanvasDark", + "name": "CanvasDark", + "source": "bing", + "group": "background", + "apiKey": "", + "thumbURL": "%sstatic/mapstorestyle/img/bing_canvas_dark.png" % SITEURL, + "visibility": False + } + ] + DEFAULT_MS2_BACKGROUNDS = [BING_BASEMAPS, ] + DEFAULT_MS2_BACKGROUNDS + + MAPSTORE_BASELAYERS = DEFAULT_MS2_BACKGROUNDS + +# -- END Client Hooksets Setup + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'formatters': { + 'verbose': { + 'format': '%(levelname)s %(asctime)s %(module)s %(process)d ' + '%(thread)d %(message)s' + }, + 'simple': { + 'format': '%(message)s', + }, + }, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + } + }, + 'handlers': { + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'simple' + }, + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler', + } + }, + "loggers": { + "django": { + "handlers": ["console"], "level": "ERROR", }, + "geonode": { + "handlers": ["console"], "level": "INFO", }, + "geonode.qgis_server": { + "handlers": ["console"], "level": "ERROR", }, + "geoserver-restconfig.catalog": { + "handlers": ["console"], "level": "ERROR", }, + "owslib": { + "handlers": ["console"], "level": "ERROR", }, + "pycsw": { + "handlers": ["console"], "level": "INFO", }, + "celery": { + 'handlers': ["console"], 'level': 'ERROR', }, + }, +} + +# Additional settings +# X_FRAME_OPTIONS = 'ALLOW-FROM %s' % SITEURL +CORS_ORIGIN_ALLOW_ALL = True + +GEOIP_PATH = "/usr/local/share/GeoIP" diff --git a/haitidata/locale/fr/LC_MESSAGES/django.mo b/haitidata/locale/fr/LC_MESSAGES/django.mo index 6e32bde..7834659 100644 Binary files a/haitidata/locale/fr/LC_MESSAGES/django.mo and b/haitidata/locale/fr/LC_MESSAGES/django.mo differ diff --git a/haitidata/locale/fr/LC_MESSAGES/django.po b/haitidata/locale/fr/LC_MESSAGES/django.po index 0d4e84b..2c8ce20 100644 --- a/haitidata/locale/fr/LC_MESSAGES/django.po +++ b/haitidata/locale/fr/LC_MESSAGES/django.po @@ -1333,7 +1333,7 @@ msgstr "Risques et Aléa en Haïti" #: haitidata/templates/site_index.html:22 msgid "River Flood" -msgstr "Inondation Riverine" +msgstr "Inondation Riveraine" #: haitidata/templates/site_index.html:26 msgid "Cyclone" diff --git a/haitidata/settings.py b/haitidata/settings.py index ec4990e..39a6b20 100644 --- a/haitidata/settings.py +++ b/haitidata/settings.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- ######################################################################### # -# Copyright (C) 2012 OpenPlans +# Copyright (C) 2017 OSGeo # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,210 +19,55 @@ ######################################################################### # Django settings for the GeoNode project. +import ast import os -from geonode.settings import * +from urlparse import urlparse, urlunparse +# Load more settings from a file called local_settings.py if it exists +try: + from haitidata.local_settings import * +# from geonode.local_settings import * +except ImportError: + from geonode.settings import * -from .utils import absolute_path # # General Django development settings # +PROJECT_NAME = 'haitidata' -SITENAME = 'haitidata' +# add trailing slash to site url. geoserver url will be relative to this +if not SITEURL.endswith('/'): + SITEURL = '{}/'.format(SITEURL) -TIME_ZONE = os.getenv('TIME_ZONE', "America/Port-au-Prince") +SITENAME = os.getenv("SITENAME", 'haitidata') # Defines the directory that contains the settings file as the LOCAL_ROOT # It is used for relative settings elsewhere. LOCAL_ROOT = os.path.abspath(os.path.dirname(__file__)) -WSGI_APPLICATION = "haitidata.wsgi.application" +WSGI_APPLICATION = "{}.wsgi.application".format(PROJECT_NAME) +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = os.getenv('LANGUAGE_CODE', "en") -# Load more settings from a file called local_settings.py if it exists -try: - from local_settings import * -except ImportError: - pass +if PROJECT_NAME not in INSTALLED_APPS: + INSTALLED_APPS += (PROJECT_NAME,) + +# Location of url mappings +ROOT_URLCONF = os.getenv('ROOT_URLCONF', '{}.urls'.format(PROJECT_NAME)) # Additional directories which hold static files STATICFILES_DIRS.append( os.path.join(LOCAL_ROOT, "static"), ) -CLIPPED_DIRECTORY = absolute_path('base', 'clipped_geotiff') - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(PROJECT_ROOT, "templates")], - 'APP_DIRS': False, - 'OPTIONS': { - # List of callables that know how to import - # templates from various sources. - 'loaders': [ - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', - ], - 'context_processors': [ - "django.contrib.auth.context_processors.auth", - "django.contrib.messages.context_processors.messages", - "django.core.context_processors.debug", - "django.core.context_processors.i18n", - "django.core.context_processors.static", - "django.core.context_processors.media", - "django.core.context_processors.request", - "django.core.context_processors.tz", - 'account.context_processors.account', - 'geonode.context_processors.resource_urls', - "geonode.geoserver.context_processors.geoserver_urls", - "haitidata.context_processors.clipped_geotiff.clipped_geotiff", - ], - }, - }, -] - -# Location of url mappings -ROOT_URLCONF = 'haitidata.urls' - # Location of locale files LOCALE_PATHS = ( os.path.join(LOCAL_ROOT, 'locale'), - os.path.join(PROJECT_ROOT, 'locale'), ) + LOCALE_PATHS -INSTALLED_APPS = INSTALLED_APPS + ( - "django.contrib.redirects", - 'haitidata', - 'osgeo_importer', - 'geonode-client', - 'charts_app', - 'wfs_harvest', - "clip-and-ship", - 'filter', - 'thumbnail' - ) - -GEOSERVER_PUBLIC_LOCATION = os.environ.get( - 'GEOSERVER_PUBLIC_LOCATION', 'http://136.243.4.93:8080/geoserver/' -) - -# dynamic setting based on domain -GEOSERVER_BASE_URL = os.environ.get( - 'GEOSERVER_BASE_URL', - 'http://136.243.4.93:8080/geoserver/' -) # change this to geoserver container location - -LAYER_PREVIEW_LIBRARY = 'react' - TEMPLATES[0]['DIRS'].insert(0, os.path.join(LOCAL_ROOT, "templates")) - -IMPORT_HANDLERS = [ - # If GeoServer handlers are enabled, you must have an instance of geoserver running. - # Warning: the order of the handlers here matters. - 'osgeo_importer.handlers.FieldConverterHandler', - 'osgeo_importer.handlers.geoserver.GeoserverPublishHandler', - 'osgeo_importer.handlers.geoserver.GeoserverPublishCoverageHandler', - 'osgeo_importer.handlers.geoserver.GeoServerTimeHandler', - 'osgeo_importer.handlers.geoserver.GeoWebCacheHandler', - 'osgeo_importer.handlers.geoserver.GeoServerBoundsHandler', - 'osgeo_importer.handlers.geoserver.GenericSLDHandler', - 'osgeo_importer.handlers.geonode.GeoNodePublishHandler', - 'osgeo_importer.handlers.mapproxy.publish_handler.MapProxyGPKGTilePublishHandler', - 'osgeo_importer.handlers.geoserver.GeoServerStyleHandler', - 'osgeo_importer.handlers.geonode.GeoNodeMetadataHandler' - ] - -OSGEO_DATASTORE = 'datastore' -OSGEO_IMPORTER_GEONODE_ENABLED = True -OSGEO_IMPORTER_VALID_EXTENSIONS = [ - 'shp', 'shx', 'prj', 'dbf', 'kml', 'geojson', 'json', 'tif', 'tiff', - 'gpkg', 'csv', 'zip', 'xml', 'sld' - ] - -LOGGING['loggers']['osgeo_importer'] = {"handlers": ["console"], "level": "DEBUG"} -#DATABASE_ROUTERS = ['.dbrouters.DefaultOnlyMigrations'] - -# # === MapProxy settings -# # This is the location to place additional configuration files for mapproxy to work from. -# # Currently it is only to allow tiles from gpkg files to be served. -MAPPROXY_CONFIG_DIR = '/opt/geonode-mapproxy-config' -# Name of the mapproxy config file to create for tile gpkg files. -MAPPROXY_CONFIG_FILENAME = 'geonode.yaml' -# This is the base URL for MapProxy WMS services -# URLs will look like this: /geonode/tms/1.0.0///0/0/0.png and a will be -# set as '_' (by conf_from_geopackage()). -MAPPROXY_SERVER_LOCATION = 'http://localhost:8088/geonode/tms/1.0.0/{layer_name}/{grid_name}/' - -#import pyproj -#PROJECTION_DIRECTORY = os.path.join(os.path.dirname(pyproj.__file__), 'data/') -PROJECTION_DIRECTORY = '/tmp/' - -try: - CELERY_IMPORTS = CELERY_IMPORTS + ('osgeo_importer.tasks',) -except: - CELERY_IMPORTS = ('osgeo_importer.tasks',) - -LOCKDOWN_GEONODE = True - -BROKER_URL = "amqp://guest@localhost:5672" -CELERY_ALWAYS_EAGER = True -IMPORT_TASK_SOFT_TIME_LIMIT = 90 - -# Force French as default language -# Needs /usr/local/lib/python2.7/dist-packages/setmydefaultlanguage/__init__.py -# See doc http://docs.geonode.org/en/master/tutorials/admin/default_lang/ - -LANGUAGE_CODE = 'fr' - -MIDDLEWARE_CLASSES += ( - 'setmydefaultlanguage.ForceDefaultLanguageMiddleware', -) - -_HAITI_LANGUAGES = ( - ('en', 'English'), - ('fr', 'Français'), -) - -LANGUAGES = os.getenv('LANGUAGES', _HAITI_LANGUAGES) - -# maximum clip size in bytes -MAXIMUM_CLIP_SIZE = '40000000' - -SOCIAL_ORIGINS = [{ - "label":"paper-plane-o", - "url":"mailto:?subject={name}&body={url}", - "css_class":"email" -}, { - "label":"facebook", - "url":"http://www.facebook.com/sharer.php?u={url}", - "css_class":"fb" -}, { - "label":"twitter", - "url":"https://twitter.com/share?url={url}&hashtags={hashtags}", - "css_class":"tw" -}, { - "label":"google-plus", - "url":"https://plus.google.com/share?url={url}", - "css_class":"gp" -}] - -WCS_DOWNLOADED_RATIO_SIZE = 1 - -MAX_CSV_RECORDS = 20000 - -UPLOADER = { - 'BACKEND': 'geonode.rest', - 'OPTIONS': { - 'TIME_ENABLED': False, - 'MOSAIC_ENABLED': True, - 'GEOGIG_ENABLED': False, - } -} - -OFFICIAL_USERS = [ - 'cnigs', 'ciat', 'ihsi', 'dpc', 'marndr', 'mairie-de-pap', 'faculte-de-science', 'undp-haiti', 'idb', - 'european-union', 'worldbank' - ] - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +loaders = TEMPLATES[0]['OPTIONS'].get('loaders') or ['django.template.loaders.filesystem.Loader','django.template.loaders.app_directories.Loader'] +# loaders.insert(0, 'apptemplates.Loader') +TEMPLATES[0]['OPTIONS']['loaders'] = loaders +TEMPLATES[0].pop('APP_DIRS', None) diff --git a/haitidata/static/README b/haitidata/static/README old mode 100644 new mode 100755 index a0fd00c..548e6b3 --- a/haitidata/static/README +++ b/haitidata/static/README @@ -1,8 +1,20 @@ +# Introduction + This directory is used to store static assets for your project. User media files (FileFields/ImageFields) are not stored here. The convention for this directory is: * css/ — stores CSS files + * less/ - stores LESS files * js/ — stores Javascript files * img/ — stores image files + +# Gulp + +Gulp can be used to automatically build css from LESS files. The gulp process will +watch you LESS files for changes and recompile. To install gulp do +the following 2 steps: + +1. cd into the project directory and install dependencies with `npm install` +2. install gulp command line globally with `sudo npm install -g gulp` diff --git a/haitidata/static/css/bootstrap.css b/haitidata/static/css/bootstrap.css deleted file mode 100755 index 811cc49..0000000 --- a/haitidata/static/css/bootstrap.css +++ /dev/null @@ -1,6723 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: 'Fira Sans', sans-serif; - font-size: 16px; - line-height: 1.42857143; - color: #37474f; - background-color: #eceff1; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #ff5722; - text-decoration: none; -} -a:hover, -a:focus { - color: #d43300; - text-decoration: underline; -} -a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #eceff1; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 22px; - margin-bottom: 22px; - border: 0; - border-top: 1px solid #eceff1; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 700; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #b0bec5; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 22px; - margin-bottom: 11px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 11px; - margin-bottom: 11px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 41px; -} -h2, -.h2 { - font-size: 34px; -} -h3, -.h3 { - font-size: 28px; -} -h4, -.h4 { - font-size: 20px; -} -h5, -.h5 { - font-size: 16px; -} -h6, -.h6 { - font-size: 14px; -} -p { - margin: 0 0 11px; -} -.lead { - margin-bottom: 22px; - font-size: 18px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 24px; - } -} -small, -.small { - font-size: 87%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #b0bec5; -} -.text-primary { - color: #ff5722; -} -a.text-primary:hover, -a.text-primary:focus { - color: #ee3900; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #ff5722; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #ee3900; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 10px; - margin: 44px 0 22px; - border-bottom: 1px solid #eceff1; -} -ul, -ol { - margin-top: 0; - margin-bottom: 11px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 22px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #b0bec5; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 11px 22px; - margin: 0 0 22px; - font-size: 20px; - border-left: 5px solid #eceff1; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #b0bec5; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eceff1; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 22px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; -} -pre { - display: block; - padding: 10.5px; - margin: 0 0 11px; - font-size: 15px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #546e7a; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .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 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .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 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .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 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #b0bec5; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 22px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #eceff1; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 16.5px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 22px; - font-size: 24px; - line-height: inherit; - color: #546e7a; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 16px; - line-height: 1.42857143; - color: #78909c; -} -.form-control { - display: block; - width: 100%; - height: 36px; - padding: 6px 12px; - font-size: 16px; - line-height: 1.42857143; - color: #78909c; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999999; -} -.form-control::-webkit-input-placeholder { - color: #999999; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eceff1; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 36px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 33px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 49px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 22px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 38px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 33px; - line-height: 33px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 33px; - line-height: 33px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 33px; - min-height: 36px; - padding: 6px 10px; - font-size: 14px; - line-height: 1.5; -} -.input-lg { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 49px; - line-height: 49px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 49px; - line-height: 49px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 49px; - min-height: 42px; - padding: 11px 16px; - font-size: 20px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 45px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 36px; - height: 36px; - line-height: 36px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 49px; - height: 49px; - line-height: 49px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 33px; - height: 33px; - line-height: 33px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 27px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #6c8a99; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 29px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 20px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 14px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 16px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #ff5722; - border-color: #ff4408; -} -.btn-primary:focus, -.btn-primary.focus { - color: #ffffff; - background-color: #ee3900; - border-color: #882100; -} -.btn-primary:hover { - color: #ffffff; - background-color: #ee3900; - border-color: #ca3100; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #ee3900; - border-color: #ca3100; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #ffffff; - background-color: #ca3100; - border-color: #882100; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #ff5722; - border-color: #ff4408; -} -.btn-primary .badge { - color: #ff5722; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #27ca3b; - border-color: #23b535; -} -.btn-success:focus, -.btn-success.focus { - color: #ffffff; - background-color: #1f9f2f; - border-color: #0e4a16; -} -.btn-success:hover { - color: #ffffff; - background-color: #1f9f2f; - border-color: #198126; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #1f9f2f; - border-color: #198126; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #ffffff; - background-color: #198126; - border-color: #0e4a16; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #27ca3b; - border-color: #23b535; -} -.btn-success .badge { - color: #27ca3b; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #1fa0a0; - border-color: #1b8b8b; -} -.btn-info:focus, -.btn-info.focus { - color: #ffffff; - background-color: #177575; - border-color: #062020; -} -.btn-info:hover { - color: #ffffff; - background-color: #177575; - border-color: #115757; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #177575; - border-color: #115757; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #ffffff; - background-color: #115757; - border-color: #062020; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #1fa0a0; - border-color: #1b8b8b; -} -.btn-info .badge { - color: #1fa0a0; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #ff8f31; - border-color: #ff8118; -} -.btn-warning:focus, -.btn-warning.focus { - color: #ffffff; - background-color: #fd7300; - border-color: #974500; -} -.btn-warning:hover { - color: #ffffff; - background-color: #fd7300; - border-color: #d96300; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #fd7300; - border-color: #d96300; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #ffffff; - background-color: #d96300; - border-color: #974500; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #ff8f31; - border-color: #ff8118; -} -.btn-warning .badge { - color: #ff8f31; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #af0900; - border-color: #960800; -} -.btn-danger:focus, -.btn-danger.focus { - color: #ffffff; - background-color: #7c0600; - border-color: #160100; -} -.btn-danger:hover { - color: #ffffff; - background-color: #7c0600; - border-color: #580500; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #7c0600; - border-color: #580500; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #ffffff; - background-color: #580500; - border-color: #160100; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #af0900; - border-color: #960800; -} -.btn-danger .badge { - color: #af0900; - background-color: #ffffff; -} -.btn-link { - color: #ff5722; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #d43300; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #b0bec5; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -.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; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 16px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 10px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #546e7a; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #4a606b; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #ff5722; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #b0bec5; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 14px; - line-height: 1.42857143; - color: #b0bec5; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 49px; - line-height: 49px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 33px; - line-height: 33px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 16px; - font-weight: normal; - line-height: 1; - color: #78909c; - text-align: center; - background-color: #eceff1; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 14px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 20px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eceff1; -} -.nav > li.disabled > a { - color: #b0bec5; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #b0bec5; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eceff1; - border-color: #ff5722; -} -.nav .nav-divider { - height: 1px; - margin: 10px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eceff1 #eceff1 #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #78909c; - background-color: #eceff1; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #eceff1; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #ff5722; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #eceff1; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 22px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 14px 15px; - font-size: 20px; - line-height: 22px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 22px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 22px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 14px; - padding-bottom: 14px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 7px; - margin-bottom: 7px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 7px; - margin-bottom: 7px; -} -.navbar-btn.btn-sm { - margin-top: 8.5px; - margin-bottom: 8.5px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 14px; - margin-bottom: 14px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #dce2e5; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #dce2e5; -} -.navbar-inverse .navbar-nav > li > a { - color: #dce2e5; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #dce2e5; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #dce2e5; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #dce2e5; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 22px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #b0bec5; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 22px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #ff5722; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #d43300; - background-color: #eceff1; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #b0bec5; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 22px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eceff1; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #b0bec5; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #b0bec5; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #93a6af; -} -.label-primary { - background-color: #ff5722; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #ee3900; -} -.label-success { - background-color: #27ca3b; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #1f9f2f; -} -.label-info { - background-color: #1fa0a0; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #177575; -} -.label-warning { - background-color: #ff8f31; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #fd7300; -} -.label-danger { - background-color: #af0900; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #7c0600; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 14px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #b0bec5; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #ff5722; - background-color: #ffffff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 2em; - padding-bottom: 2em; - margin-bottom: 2em; - color: inherit; - background-color: #ff5722; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 1em; - font-size: 24px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #ee3900; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; - padding-left: 15px; - padding-right: 15px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 3.2em; - padding-bottom: 3.2em; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 4em; - padding-right: 4em; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 72px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 22px; - line-height: 1.42857143; - background-color: #eceff1; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #ff5722; -} -.thumbnail .caption { - padding: 9px; - color: #37474f; -} -.alert { - padding: 15px; - margin-bottom: 22px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 22px; - margin-bottom: 22px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 14px; - line-height: 22px; - color: #ffffff; - text-align: center; - background-color: #ff5722; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #27ca3b; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #1fa0a0; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #ff8f31; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #af0900; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eceff1; - color: #b0bec5; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #b0bec5; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #fff2ee; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 22px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 18px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 22px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #546e7a; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #546e7a; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #ff5722; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ff5722; -} -.panel-primary > .panel-heading .badge { - color: #ff5722; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ff5722; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 24px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: 'Fira Sans', sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: 'Fira Sans', sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 16px; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 16px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -moz-transition: -moz-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - -moz-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} diff --git a/haitidata/static/css/bootstrap/bootstrap.css b/haitidata/static/css/bootstrap/bootstrap.css deleted file mode 100644 index bf50d56..0000000 --- a/haitidata/static/css/bootstrap/bootstrap.css +++ /dev/null @@ -1,6723 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333333; - background-color: #ffffff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .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 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .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 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .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 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999999; -} -.form-control::-webkit-input-placeholder { - color: #999999; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #ffffff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #ffffff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #ffffff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #ffffff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #ffffff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #ffffff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #ffffff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #ffffff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #ffffff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #ffffff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #ffffff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #ffffff; -} -.btn-link { - color: #337ab7; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -.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; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #337ab7; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #337ab7; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eeeeee; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #ffffff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; - padding-left: 15px; - padding-right: 15px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #ffffff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -moz-transition: -moz-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - -moz-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} diff --git a/haitidata/static/css/bootstrap/media.css b/haitidata/static/css/bootstrap/media.css deleted file mode 100644 index 27c7039..0000000 --- a/haitidata/static/css/bootstrap/media.css +++ /dev/null @@ -1,48 +0,0 @@ -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} diff --git a/haitidata/static/css/bootstrap/mixins.css b/haitidata/static/css/bootstrap/mixins.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/alerts.css b/haitidata/static/css/bootstrap/mixins/alerts.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/background-variant.css b/haitidata/static/css/bootstrap/mixins/background-variant.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/border-radius.css b/haitidata/static/css/bootstrap/mixins/border-radius.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/buttons.css b/haitidata/static/css/bootstrap/mixins/buttons.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/center-block.css b/haitidata/static/css/bootstrap/mixins/center-block.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/clearfix.css b/haitidata/static/css/bootstrap/mixins/clearfix.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/forms.css b/haitidata/static/css/bootstrap/mixins/forms.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/gradients.css b/haitidata/static/css/bootstrap/mixins/gradients.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/grid-framework.css b/haitidata/static/css/bootstrap/mixins/grid-framework.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/grid.css b/haitidata/static/css/bootstrap/mixins/grid.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/hide-text.css b/haitidata/static/css/bootstrap/mixins/hide-text.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/image.css b/haitidata/static/css/bootstrap/mixins/image.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/labels.css b/haitidata/static/css/bootstrap/mixins/labels.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/list-group.css b/haitidata/static/css/bootstrap/mixins/list-group.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/nav-divider.css b/haitidata/static/css/bootstrap/mixins/nav-divider.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/nav-vertical-align.css b/haitidata/static/css/bootstrap/mixins/nav-vertical-align.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/opacity.css b/haitidata/static/css/bootstrap/mixins/opacity.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/pagination.css b/haitidata/static/css/bootstrap/mixins/pagination.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/panels.css b/haitidata/static/css/bootstrap/mixins/panels.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/progress-bar.css b/haitidata/static/css/bootstrap/mixins/progress-bar.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/reset-filter.css b/haitidata/static/css/bootstrap/mixins/reset-filter.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/reset-text.css b/haitidata/static/css/bootstrap/mixins/reset-text.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/resize.css b/haitidata/static/css/bootstrap/mixins/resize.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/responsive-visibility.css b/haitidata/static/css/bootstrap/mixins/responsive-visibility.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/size.css b/haitidata/static/css/bootstrap/mixins/size.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/tab-focus.css b/haitidata/static/css/bootstrap/mixins/tab-focus.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/table-row.css b/haitidata/static/css/bootstrap/mixins/table-row.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/text-emphasis.css b/haitidata/static/css/bootstrap/mixins/text-emphasis.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/text-overflow.css b/haitidata/static/css/bootstrap/mixins/text-overflow.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/mixins/vendor-prefixes.css b/haitidata/static/css/bootstrap/mixins/vendor-prefixes.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/bootstrap/normalize.css b/haitidata/static/css/bootstrap/normalize.css deleted file mode 100644 index 8fabce7..0000000 --- a/haitidata/static/css/bootstrap/normalize.css +++ /dev/null @@ -1,178 +0,0 @@ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} diff --git a/haitidata/static/css/bootstrap/responsive-embed.css b/haitidata/static/css/bootstrap/responsive-embed.css deleted file mode 100644 index e85b4de..0000000 --- a/haitidata/static/css/bootstrap/responsive-embed.css +++ /dev/null @@ -1,26 +0,0 @@ -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} diff --git a/haitidata/static/css/bootstrap/theme.css b/haitidata/static/css/bootstrap/theme.css deleted file mode 100644 index 12a831b..0000000 --- a/haitidata/static/css/bootstrap/theme.css +++ /dev/null @@ -1,555 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-default.disabled, -.btn-primary.disabled, -.btn-success.disabled, -.btn-info.disabled, -.btn-warning.disabled, -.btn-danger.disabled, -.btn-default[disabled], -.btn-primary[disabled], -.btn-success[disabled], -.btn-info[disabled], -.btn-warning[disabled], -.btn-danger[disabled], -fieldset[disabled] .btn-default, -fieldset[disabled] .btn-primary, -fieldset[disabled] .btn-success, -fieldset[disabled] .btn-info, -fieldset[disabled] .btn-warning, -fieldset[disabled] .btn-danger { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default .badge, -.btn-primary .badge, -.btn-success .badge, -.btn-info .badge, -.btn-warning .badge, -.btn-danger .badge { - text-shadow: none; -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - text-shadow: 0 1px 0 #fff; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #e0e0e0; - background-image: none; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #245580; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #265a88; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #265a88; - border-color: #245580; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #265a88; - background-image: none; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #419641; - background-image: none; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #2aabd2; - background-image: none; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #eb9316; - background-image: none; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-color: #e8e8e8; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-color: #2e6da4; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border-radius: 4px; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -@media (max-width: 767px) { - .navbar .navbar-nav .open .dropdown-menu > .active > a, - .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); - border-color: #2b669a; -} -.list-group-item.active .badge, -.list-group-item.active:hover .badge, -.list-group-item.active:focus .badge { - text-shadow: none; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} diff --git a/haitidata/static/css/bootstrap/variables.css b/haitidata/static/css/bootstrap/variables.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/css/font-awesome.min.css b/haitidata/static/css/font-awesome.min.css deleted file mode 100755 index aa510fd..0000000 --- a/haitidata/static/css/font-awesome.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/*! - * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/haitidata/static/css/fonts.css b/haitidata/static/css/fonts.css deleted file mode 100644 index 7f3eb35..0000000 --- a/haitidata/static/css/fonts.css +++ /dev/null @@ -1,19 +0,0 @@ -/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on June 1, 2017 */ -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-light-webfont.woff2') format('woff2'), url('../fonts/firasans-light-webfont.woff') format('woff'), url('../fonts/firasans-light.otf') format("opentype"); - font-weight: 200; - font-style: normal; -} -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-book-webfont.woff2') format('woff2'), url('../fonts/firasans-book-webfont.woff') format('woff'), url('../fonts/firasans-book.otf') format("opentype"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-bold-webfont.woff2') format('woff2'), url('../fonts/firasans-bold-webfont.woff') format('woff'), url('../fonts/firasans-bold.otf') format("opentype"); - font-weight: 700; - font-style: normal; -} diff --git a/haitidata/static/css/haitidata.css b/haitidata/static/css/haitidata.css index a14b66b..6b1fb33 100644 --- a/haitidata/static/css/haitidata.css +++ b/haitidata/static/css/haitidata.css @@ -1,5 +1,8106 @@ -@import "../css/font-awesome.min.css";@import "../css/thinkhazard.css";/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. +@charset "UTF-8"; +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:'Fira Sans',sans-serif;font-size:16px;line-height:1.42857143;color:#37474f;background-color:#eceff1}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#ff5722;text-decoration:none}a:hover,a:focus{color:#d43300;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#eceff1;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #eceff1}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#b0bec5}h1,.h1,h2,.h2,h3,.h3{margin-top:22px;margin-bottom:11px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:11px;margin-bottom:11px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:41px}h2,.h2{font-size:34px}h3,.h3{font-size:28px}h4,.h4{font-size:20px}h5,.h5{font-size:16px}h6,.h6{font-size:14px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:18px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:24px}}small,.small{font-size:87%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#b0bec5}.text-primary{color:#ff5722}a.text-primary:hover,a.text-primary:focus{color:#ee3900}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#ff5722}a.bg-primary:hover,a.bg-primary:focus{background-color:#ee3900}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eceff1}ul,ol{margin-top:0;margin-bottom:11px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:22px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #b0bec5}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:11px 22px;margin:0 0 22px;font-size:20px;border-left:5px solid #eceff1}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#b0bec5}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eceff1;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:22px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:10.5px;margin:0 0 11px;font-size:15px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#546e7a;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#b0bec5;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:22px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#eceff1}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:22px;font-size:24px;line-height:inherit;color:#546e7a;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:16px;line-height:1.42857143;color:#78909c}.form-control{display:block;width:100%;height:36px;padding:6px 12px;font-size:16px;line-height:1.42857143;color:#78909c;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eceff1;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:36px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:33px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:49px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:38px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm{height:33px;line-height:33px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:33px;line-height:33px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:33px;min-height:36px;padding:6px 10px;font-size:14px;line-height:1.5}.input-lg{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-lg{height:49px;line-height:49px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:49px;line-height:49px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:49px;min-height:42px;padding:11px 16px;font-size:20px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:49px;height:49px;line-height:49px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:33px;height:33px;line-height:33px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#6c8a99}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:20px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:14px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:16px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#ff5722;border-color:#ff4408}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#ee3900;border-color:#882100}.btn-primary:hover{color:#fff;background-color:#ee3900;border-color:#ca3100}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#ee3900;border-color:#ca3100}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#ca3100;border-color:#882100}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#ff5722;border-color:#ff4408}.btn-primary .badge{color:#ff5722;background-color:#fff}.btn-success{color:#fff;background-color:#27ca3b;border-color:#23b535}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1f9f2f;border-color:#0e4a16}.btn-success:hover{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#198126;border-color:#0e4a16}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#27ca3b;border-color:#23b535}.btn-success .badge{color:#27ca3b;background-color:#fff}.btn-info{color:#fff;background-color:#1fa0a0;border-color:#1b8b8b}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#177575;border-color:#062020}.btn-info:hover{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#115757;border-color:#062020}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#1fa0a0;border-color:#1b8b8b}.btn-info .badge{color:#1fa0a0;background-color:#fff}.btn-warning{color:#fff;background-color:#ff8f31;border-color:#ff8118}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#fd7300;border-color:#974500}.btn-warning:hover{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d96300;border-color:#974500}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ff8f31;border-color:#ff8118}.btn-warning .badge{color:#ff8f31;background-color:#fff}.btn-danger{color:#fff;background-color:#af0900;border-color:#960800}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#7c0600;border-color:#160100}.btn-danger:hover{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#580500;border-color:#160100}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#af0900;border-color:#960800}.btn-danger .badge{color:#af0900;background-color:#fff}.btn-link{color:#ff5722;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#d43300;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#b0bec5;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:14px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.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}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:16px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#546e7a;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#4a606b;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#ff5722}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#b0bec5}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:14px;line-height:1.42857143;color:#b0bec5;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:49px;line-height:49px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:33px;line-height:33px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:16px;font-weight:normal;line-height:1;color:#78909c;text-align:center;background-color:#eceff1;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:14px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:20px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eceff1}.nav>li.disabled>a{color:#b0bec5}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#b0bec5;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eceff1;border-color:#ff5722}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eceff1 #eceff1 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#78909c;background-color:#eceff1;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#eceff1}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#ff5722}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#eceff1}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:22px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:7px;margin-bottom:7px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-btn.btn-sm{margin-top:8.5px;margin-bottom:8.5px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#dce2e5}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#dce2e5}.navbar-inverse .navbar-nav>li>a{color:#dce2e5}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#dce2e5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#dce2e5}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#dce2e5}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#b0bec5}.pagination{display:inline-block;padding-left:0;margin:22px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#ff5722;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#d43300;background-color:#eceff1;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#ff5722;border-color:#ff5722;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#b0bec5;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:20px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:14px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eceff1}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#b0bec5;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#b0bec5}.label-default[href]:hover,.label-default[href]:focus{background-color:#93a6af}.label-primary{background-color:#ff5722}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#ee3900}.label-success{background-color:#27ca3b}.label-success[href]:hover,.label-success[href]:focus{background-color:#1f9f2f}.label-info{background-color:#1fa0a0}.label-info[href]:hover,.label-info[href]:focus{background-color:#177575}.label-warning{background-color:#ff8f31}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#fd7300}.label-danger{background-color:#af0900}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#7c0600}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:14px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#b0bec5;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#ff5722;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:2em;padding-bottom:2em;margin-bottom:2em;color:inherit;background-color:#ff5722}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:1em;font-size:24px;font-weight:200}.jumbotron>hr{border-top-color:#ee3900}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:3.2em;padding-bottom:3.2em}.container .jumbotron,.container-fluid .jumbotron{padding-left:4em;padding-right:4em}.jumbotron h1,.jumbotron .h1{font-size:72px}}.thumbnail{display:block;padding:4px;margin-bottom:22px;line-height:1.42857143;background-color:#eceff1;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#ff5722}.thumbnail .caption{padding:9px;color:#37474f}.alert{padding:15px;margin-bottom:22px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:22px;margin-bottom:22px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:14px;line-height:22px;color:#fff;text-align:center;background-color:#ff5722;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#27ca3b}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#1fa0a0}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff8f31}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#af0900}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eceff1;color:#b0bec5;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#b0bec5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#ff5722;border-color:#ff5722}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#fff2ee}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:18px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:22px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#546e7a;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#546e7a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#ff5722}.panel-primary>.panel-heading{color:#fff;background-color:#ff5722;border-color:#ff5722}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff5722}.panel-primary>.panel-heading .badge{color:#ff5722;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff5722}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:24px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;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;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:'Fira Sans',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:'Fira Sans',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:16px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:16px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on June 1, 2017 */@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-light-webfont.woff2') format('woff2'),url('../fonts/firasans-light-webfont.woff') format('woff'),url('../fonts/firasans-light.otf') format("opentype");font-weight:200;font-style:normal}@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-book-webfont.woff2') format('woff2'),url('../fonts/firasans-book-webfont.woff') format('woff'),url('../fonts/firasans-book.otf') format("opentype");font-weight:400;font-style:normal}@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-bold-webfont.woff2') format('woff2'),url('../fonts/firasans-bold-webfont.woff') format('woff'),url('../fonts/firasans-bold.otf') format("opentype");font-weight:700;font-style:normal}html{-webkit-font-smoothing:antialiased !important}body{background:#37474f;font-family:'Fira Sans',sans-serif;font-size:16px;padding-top:60px}a{color:#ff5722}h1,h2,h3,h4,h5,h6{font-weight:700}select{background:#fff;border:1px solid #b0bec5;height:30px;line-height:30px}code{background-color:#eceff1;color:#1fa0a0;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}form label{margin-right:2.5em}form input{padding:5px}.navbar{margin-bottom:0}.navbar .toolbar{margin-left:1em}.navbar-default{background:#fff;border:0;box-shadow:1px 1px 2px rgba(0,0,0,0.1)}.navbar-default .navbar-nav>li>a{color:#546e7a;font-weight:400;padding-top:25px;padding-bottom:25px}.navbar-default .navbar-nav>li>a:hover{color:#ff5722}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#ff5722;color:#fff}.navbar-nav .dropdown-menu{background-color:#ff5722;border-top:1px solid #ff5722}.navbar-nav .dropdown-menu a{color:#fff}.navbar-nav .dropdown-menu li a:hover{background-color:#ee3900;color:#fff}.navbar-nav .dropdown-menu .divider{background-color:#ee3900}.navbar-nav .search{left:15px;position:relative;color:#444;top:20px;margin-right:25px}.navbar-nav .search .fa-search{position:absolute;top:8px;left:10px}.navbar-nav .search input{background:#eceff1;width:120px;height:32px;border:1px solid #eceff1;border-radius:5px;outline-width:0;text-indent:32px;-webkit-transition:width .2s;transition:width .2s}.navbar-nav .search input:focus{width:240px}.navbar-nav .avatar img{border-radius:50%;margin-bottom:-15px;margin-right:10px;margin-top:-15px;height:42px;width:42px}.navbar-nav .fa-angle-down{margin-left:10px}.navbar-brand{background:url("../img/logo.png") 0 12px no-repeat;background-size:100%;margin-right:2em;text-indent:-9999px;height:65px;width:200px}.navbar-collapse{max-height:none}.navbar-header i{color:#ff5722;font-size:2em}.navbar-header button{border:0;margin-top:.75em}header{background:#ff5722;color:#fff;margin-bottom:2em;padding-top:1em;padding-bottom:1em}header .btn-primary{background:#ee3900;border:1px solid #ee3900}header .btn-primary:hover{background:#d43300}header .btn-icon{background:#d43300;border:1px solid #d43300}header .btn-icon:hover{background:#bb2d00}#wrap{background:#fbfbfc;padding-bottom:2.5em;width:100%}article.tab-pane{padding:20px 0}.no-style-list{list-style-type:none;margin-top:20px}.dl-horizontal dt{text-overflow:clip;white-space:normal;overflow:hidden}.page-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}section#subheader{background:#fff;border-bottom:1px solid #eceff1;margin-bottom:1em;margin-top:-2em;padding-bottom:.4em;padding-top:0}section#subheader p{color:#78909c;display:inline-block}section#subheader .btn-group{margin-top:-1em}section#contact{background:#0e4b4b;color:#fff;padding-bottom:3em;padding-top:1em}section#contact h3{font-weight:400}footer{background:#37474f;color:#fff;padding-bottom:3em;padding-top:2em}footer a{color:#ff5722}footer img{margin-right:-10px;width:50%}footer select{color:#37474f}.home #wrap{margin-top:0;padding-bottom:0}.home .jumbotron{background:#ff5722;color:#fff;margin-bottom:0;padding:5em 0;text-shadow:2px 2px 2px rgba(0,0,0,0.4)}.home .jumbotron a{color:#37474f}.home .jumbotron p{font-weight:400;margin-bottom:0}.home .jumbotron .btn-default{background:rgba(0,0,0,0.4);border:2px solid #fff;color:#fff;font-weight:600;margin-top:1em;min-width:320px}.home .jumbotron .btn-default:hover{background:rgba(128,0,0,0.4)}.home .big-search{background:#546e7a;color:#fff;padding-bottom:3em;padding-top:1em}.home .big-search h1,.home .big-search p{text-align:center}.home .big-search a{color:#ff5722}.home .big-search .search{left:0;position:relative;color:#444;top:20px;padding-bottom:2em;margin:auto;width:50%}.home .big-search .search input{width:100%;height:56px;border:1px solid #546e7a;border-radius:5px;outline-width:0;font-size:1.5em}.home .big-search .search input{text-indent:64px}.home .big-search .search .fa-search{position:absolute;top:10px;left:15px}.home .big-search .btn-default{background:transparent;border:none}.home .big-search .btn-default:hover{text-decoration:underline}.home #datasets{background:#ff5722;color:#fff;padding:1em 0}.home #datasets p{font-size:14px}.home #datasets h4{text-transform:uppercase;font-size:14px}.home #datasets a{color:#fff}.home #datasets a:hover{text-decoration:none}.home #datasets a .category{background:#ff5722;border-radius:4px;margin:0 -15px;padding:2em 0}.home #datasets a .category:hover{background:#d43300}.home #datasets a span{font-size:4em}.home #hazards{background:#37474f;color:#fff;padding:2em 0 3em;text-align:center}.home #hazards h2{margin-bottom:1em}.home #hazards .keywords{border-radius:.6em;color:#fff}.home #hazards .keywords:hover{background:#ff5722;color:#fff;text-decoration:none;transition:1s all;-webkit-transition:1s all;-moz-transition:1s all;-o-transition:1s all;-ms-transition:1s all}.home #hazards .keywords a{color:#fff}.home #hazards .keywords a:hover{background:#ff5722;color:#fff;text-decoration:none}.home #hazards span{font-size:4em}.home #imagery{background:linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.2)),url('../img/jumbotron.jpg') no-repeat;background-position:center;background-size:cover;color:#fff;margin-bottom:0;padding:5em 0;text-shadow:2px 2px 2px rgba(0,0,0,0.4)}.home #imagery h3{padding-top:2em}.home #imagery a{color:#37474f}.home #imagery p{font-weight:400;margin-bottom:0}.home #imagery .btn-default{background:rgba(0,0,0,0.4);color:#fff;text-shadow:none;margin-top:8px}.home #imagery .btn-default:hover{background:#ff5722;border-color:#bb2d00}.home #showcase{background:#eceff1;padding-bottom:2em;padding-top:1em;text-align:center}.home #showcase .col-md-3{padding:2em 1em}.home #showcase .col-md-3 img{box-shadow:2px 2px 2px rgba(0,0,0,0.125);height:180px;width:100%}.home #showcase p{font-size:18px}.home #osm{background:linear-gradient(to right, rgba(0,0,0,0) 0, rgba(0,0,0,0) 50%, #ff5722 50%, #ff5722 100%),url("../img/osm-02.jpg") no-repeat;min-height:320px;padding:0}.home #osm .col-md-8{background:#ff5722;color:#fff;min-height:320px;padding:1em 2em}.home #osm .col-md-8 .btn-primary{border-color:#fff;width:160px}.home #osm p{font-size:18px}.yourlabs-autocomplete{top:100%}.input-group .yourlabs-autocomplete{top:30px !important}.actions .fa,.filter .fa{margin-right:8px}.actions .input-group .fa,.filter .input-group .fa{margin-right:0}.items-list{padding:10px 0}.items-list .btn{margin-right:5px;margin-top:10px}.items-list .item-info{border-top:1px solid #eceff1}.items-list h4{font-weight:400;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.items-list h4 a{color:#37474f}.items-list h4 a:hover{color:#af0900;text-decoration:none}.items-list .owner{color:#37474f;font-size:14px}.items-list .owner a{color:#37474f}.items-list .owner a:hover{color:#af0900;text-decoration:none}.items-list .thumb img{border:1px solid #eceff1;width:100%}.items-list .abstract{color:#b0bec5;font-weight:300;min-height:80px}.items-list .actions{color:#b0bec5;font-weight:300}.items-list .actions i{margin-right:.75em}.items-list .actions a{color:#b0bec5;margin-right:.5em}.items-list .actions a:hover{color:#78909c;text-decoration:none}.item-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #b0bec5;padding:0}.profile-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .list-inline{margin:.5em 0}.item-thumb{padding-left:0;padding-right:0}.item-thumb img{width:100%}.item-thumb .cnigs-logo{border-radius:50%;position:absolute;top:5px;right:5px;height:42px;width:42px;z-index:99}.item-details{background:#fff;color:#37474f;position:relative;height:200px}.item-details h4{margin-bottom:.25em;margin-top:.25em}.item-details p{margin-bottom:.25em}.item-details p.abstract{font-size:.875em}.item-details .item-meta{font-size:.75em;margin-top:1em}.item-details .item-meta .item-category{text-transform:uppercase}.item-details .item-meta a{color:#37474f}.item-details .btn-xs{border-color:#eceff1;border-bottom-right-radius:0;border-top-left-radius:0;margin-right:-16px;margin-top:-1px;padding:.25em .5em}.item-details .item-items{border-top:1px solid #eceff1;position:absolute;bottom:0;font-size:.875em}.item-details .item-items ul{margin:0 0 0 -15px;padding:.5em}.item-details .item-items ul i{margin-right:.5em}.detail-page-actions{margin-top:20px}.detail-page-actions i{padding-right:3px}.layer-actions{margin-top:20px}.layer-actions i{padding-right:3px}.edit-modal{text-align:center}.arcgis-legend>li{text-align:right}.arcgis-legend>li>img{padding-right:25px}.grid-spacer{margin-top:30px}#accordion .panel{border-radius:0;border-top:2px solid #b0bec5;line-height:1em}#accordion .panel-heading{background:none;border:0}#accordion .panel-body img{margin-bottom:1em}#accordion .panel-body small{color:#78909c;font-size:.825em}#accordion .panel-body form{font-size:.825em}#accordion .panel-body form .form-control{background:none;color:#546e7a;font-size:.825em;height:24px;line-height:1;-webkit-box-shadow:none;box-shadow:none}#create-chart small{color:#78909c;font-size:.825em}#create-chart form{font-size:.825em}#create-chart form .form-control{background:none;color:#546e7a;font-size:.825em;height:24px;line-height:1;-webkit-box-shadow:none;box-shadow:none}body.importer h4{margin-bottom:1.5em}body.importer .well{background:#fff;border:1px solid #b0bec5;padding:1.25em 1.5em .5em 1em}body.importer .well p{line-height:.5em}body.importer .well hr{margin:.5em 0}body.importer .well .layer-in-upload{background-color:#fff;padding:.5em}body.importer .well .table-condensed{font-size:.75em}.controls{width:320px}.controls>div,.controls>input,.controls>select,.controls>textarea{width:320px}.map-actions{margin-top:20px}.map-actions i{padding-right:3px}.documents-actions{margin-top:20px}.documents-actions i{padding-right:3px}.profile-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #eceff1;padding:0}.profile-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items{border-top:1px solid #eceff1;color:#78909c}.profile-avatar .profile-items i{margin-left:0;margin-right:.125em}.profile-avatar .profile-items i a:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items .list-inline{margin:.5em 0}.profile-avatar li a{color:#78909c;margin-right:.5em}.profile-avatar li a:hover{color:#af0900;text-decoration:none}.profile-avatar img{margin:0;width:100%}.profile-image{padding-left:0;padding-right:0}.profile-image img{width:100%}.profile-details{background:#fff;color:#37474f}.profile-details .group-logo{margin:.5em;padding:0}.profile-details .group-logo img{width:60px}.btn-tools{font-size:.75em}nav.filter h4{background:#546e7a;font-size:14px;font-weight:600;padding:10px 0;text-transform:uppercase;border-radius:3px}nav.filter h4 a{color:#fff}nav.filter h4 a.toggle{text-decoration:none}nav.filter h4 i{margin-left:8px}nav.filter li a{color:#78909c}nav.filter .active{color:#ff5722}nav.filter .active .badge{background:#ff5722}nav.filter .closed{display:none}nav.filter li a{border-bottom:1px solid #eceff1;cursor:pointer;font-size:14px;padding:5px 10px}.selections h5{font-weight:400}.selections .thumb{float:left}#sort{cursor:pointer}#sort a{color:#b0bec5}#sort .selected{font-weight:700}.group-container{padding:1em}.group-avatar{border:1px solid #eceff1;padding:0}.group-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-avatar h5 a:hover{color:#af0900;text-decoration:none}.group-avatar h5 a i{margin-left:.75em}.group-avatar h5 a i:hover{color:#af0900;text-decoration:none}.group-items{border-top:1px solid #eceff1;color:#78909c}.group-items i{margin-left:0;margin-right:.125em}.group-items i a:hover{color:#af0900;text-decoration:none}.group-items .list-inline{margin:.5em 0}.group-image{height:120px;overflow:hidden}.group-container .group-logo{padding:1em 0;width:100%}.group-details .group-logo img{width:100%}span#overview,span#filters,span#clip,span#share,span#odk,span#styling,span#graphs,span#maps,span#users,span#rancher{display:block;position:relative;top:-76px;visibility:hidden}#drop-zone{background:#eceff1;margin-bottom:10px;padding:5px;border:2px dashed #b0bec5}#drop-zone h3{color:#b0bec5;margin:20px 0;text-align:center}#drop-zone h3 i{font-size:3em}#clear-button,#upload-button{margin-top:20px}#upload_form input[type="text"]{display:block;margin:0;width:480px;appearance:none;box-shadow:none;border-radius:none;transition:box-shadow .3s,border .3s}#upload_form input[type="text"]:focus{border:solid 1px #707070;box-shadow:0 0 5px 1px #969696;outline:none}#upload_form #id_doc_file{padding:.5em;width:480px}#upload_form #id_doc_url{display:block;width:480px}#upload_form #s2id_resource{display:block;width:480px}@media (max-width:991px){#upload_form input[type="text"]{width:360px}#upload_form #id_doc_file,#upload_form #id_doc_url,#upload_form #s2id_resource{width:360px}}.rotate-45{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.select2-container-multi .select2-choices .select2-search-field input{font-family:'Fira Sans',sans-serif;height:auto}.datepicker{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.filter input.datepicker{width:100%}#composerCart{font-size:14px}#composerCart .list-group i{margin-right:0}.selections{margin-top:1em}.form-horizontal .form-group{margin-left:0;margin-right:0}.comment{padding:1em 0 .5em}.comment .avatar img{border-radius:50%}.comment small{font-weight:bold;color:#777;margin-left:10px}.comment button,.comment p{margin-left:58px;margin-top:-0.5em}.list-group-item .avatar img{border-radius:50%;margin-right:.5em}.no-style-list{list-style-type:none;margin-top:20px}.activity-item{border-bottom:1px solid #b0bec5;border-left:1px solid #b0bec5;color:#b0bec5;margin-top:-10px;padding:20px 18px}.activity-item .comment{content:"\f086"}.activity-item .comment:before{content:"\f086"}.activity-item .delete{content:"\f014"}.activity-item .delete:before{content:"\f014"}.activity-item .edit{content:"\f14b"}.activity-item .edit:before{content:"\f14b"}.activity-item .layer{content:"\f096";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.activity-item .layer:before{content:"\f096"}.activity-item .map{content:"\f041"}.activity-item .map:before{content:"\f041"}.activity-item .upload{content:"\f093"}.activity-item .upload:before{content:"\f093"}.icon-activity{background:#b0bec5;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;border:2px solid #fff;color:#fff;float:left;font-family:FontAwesome;font-weight:normal;font-size:1.3em;font-style:normal;height:35px;line-height:1.25em;margin:0 10px 10px -35px;padding:4px;text-align:center;text-decoration:inherit;width:35px}.thumb-activity{clear:both;height:60px}.thumb-activity img{border:1px solid #78909c;float:left;margin-right:5px;width:60px}.activity{content:"\f045"}.activity:before{content:"\f045"}.activity-timestamp{margin-top:-10px}#permission_form .select2-container{width:250px}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin .checkbox,.form-signin .form-signin-heading{margin-bottom:10px}.form-signin .checkbox{font-weight:normal}.form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:1em}.form-signin .form-control:focus{z-index:2}.form-signin input[type="username"]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.form-signin input[type="password"]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.modal-body .list-unstyled a{color:#37474f;font-size:1.14285714em;line-height:2em}.modal-body .list-unstyled a i{margin-right:8px}.modal-body .list-unstyled a:hover{color:#1fa0a0;text-decoration:none}.modal-divider{padding-top:1px;margin:5px 1px 6px;border-bottom:1px solid #e1e8ed}.list-group i{margin-right:8px}@media (max-width:991px){.navbar-header{float:none}.navbar-toggle{display:block}.navbar-collapse{border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1)}.navbar-collapse.collapse{display:none !important}.navbar-nav{float:none !important;margin:7.5px -15px}.navbar-nav>li{float:none}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-collapse.collapse.in{display:block !important}.collapsing{overflow:hidden !important}.home .navbar-inverse{background-color:#546e7a}.navbar-inverse .navbar-nav>li>a{padding-bottom:.75em;padding-top:.75em}.navbar-inverse .navbar-nav .search{padding-bottom:.75em;top:0}.navbar-inverse .navbar-nav .search input{width:100%}}#member_form_container .select2-container{padding:0}.table-user-profile-attribute{font-weight:bold}body.blog h1{margin-top:-0.5em}.page-content p{font-size:1.125em;line-height:1.5em}ul.links{margin:0 0 1.5em;padding:5px 0}ul.links .category{text-transform:uppercase}ul.links li{color:#b0bec5;font-size:1em;margin-right:.875em;display:inline-block}ul.links li ul{display:inline;padding:0}ul.sidebar{border-bottom:1px solid #eceff1;border-left:1px solid #eceff1;padding:1.5em;margin-bottom:0;list-style:none}ul.sidebar h4{font-size:1em;color:#37474f;margin-bottom:1.25em;margin-top:0}ul.sidebar li{margin:0 4px 10px 0;list-style:none}ul.sidebar li.tag{display:inline-block;background-color:#ff5722;padding:3px 10px}ul.sidebar li.tag a{color:#fff;font-size:.875em}ul.sidebar li a{font-size:.875em;color:#546e7a}ul.sidebar ul li i{color:#546e7a}ul.sidebar li>ul{padding-left:0}ul.sidebar ul li>ul li{padding-left:1.25em}a{transition:.5s all;-webkit-transition:.5s all;-moz-transition:.5s all;-o-transition:.5s all;-ms-transition:.5s all}a:hover{color:#ff5722}.blog_btn{border-radius:0}.blog_btn.continue{display:block;margin-bottom:50px;text-align:right;background-color:transparent;color:#ff5722;padding:10px 0}.blog_btn.continue:focus,.blog_btn.continue:hover{text-decoration:none}.blog_btn.continue:active{outline:inherit}span img{width:100%;margin-bottom:2em}.responsive-object{padding-bottom:10px !important}.blog_sidebar{padding:0 1.5em 0 0}.blog_sidebar ul>ul{padding:0}.blog_sidebar form.search_form{margin-bottom:0}.blog_sidebar form.search_form input[type="search"]{width:100%;border:1px solid #eceff1;padding:6px 10px}.blog_sidebar .input-group-btn{background:#ff5722;-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.blog_sidebar .input-group-btn .btn.btn-default{border-color:transparent;background-color:transparent}.blog_sidebar .input-group-btn .btn.btn-default i{color:#fff}.blog_sidebar .rss-sitemap{margin-bottom:1em;text-align:right}.blog_sidebar .rss-sitemap a{color:#b0bec5;font-size:.875em;text-decoration:none}.blog_sidebar .rss-sitemap i{color:#ff5722}.blog_sidebar .rss-sitemap span{font-size:.875em;color:#b0bec5}.post-summary{margin-bottom:1.25em}.post-summary ul{margin-top:-0.5em;padding:0}.post-summary ul li{margin-bottom:0}.relatedPosts{margin:50px 0 100px}.relatedPosts img{width:100%;height:auto;margin-bottom:15px}.lateralPosts h4{margin:0}.lateralPosts .boxCircle{width:80px;height:80px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lateralPosts li{font-size:.875em;display:inline-block;color:#78909c}.searchTerm{margin:10px 0 30px;padding:20px;background-color:#ededed;color:#666}.blog_grid{position:relative;border-bottom:0}.blog_grid p{color:#546e7a;font-size:1em;line-height:1.5em;margin-top:1em}.rich-text{margin-bottom:5%;margin-top:10px}.rich-text h3{margin-bottom:10px}.itemPosts{margin-top:10px;padding-top:1em;border-top:1px solid #eceff1}.itemPosts h3{font-size:16px;margin-bottom:5px}.itemPosts p{font-size:15px}.itemPosts .box.feature a{color:#ff5722}.pagination{width:100%;margin:30px 0;text-align:center}.pagination .endless_separator{background:transparent;color:#358c8b;font-size:18px}.pagination .endless_page_link,.pagination span.endless_page_current{padding:7px 11px;color:#ff5722}.menu li{margin:0 0 3px}.menu ul{padding-left:0}.menu li a{background-color:#f2f2f2;background-color:rgba(0,0,0,0.05);color:#1e1e1e;display:block;padding:9px 9px 9px 60px;position:relative;text-decoration:none;-webkit-transition:all .2s linear;transition:all .2s linear}.menu li a:before{background:#e1e1e1;background:rgba(255,255,255,0.4);bottom:0;content:"";display:block;left:45px;position:absolute;top:0;width:1px}.menu li a:hover{background-color:#e9e9e9;background-color:rgba(0,0,0,0.1);-webkit-transition:all .2s linear;transition:all .2s linear}.menu li.active>a{background-color:#ff5722;color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.menu li.active>a:before{background:#444;background:rgba(255,255,255,0.2)}.menu li.parent>a .open-sub{bottom:0;display:block;left:0;position:absolute;top:0;width:45px}.menu li.parent>a .open-sub:after,.menu li.parent>a .open-sub:before{background:#ff5722;content:"";display:block;height:2px;left:0;margin:19px 0 0 15px;position:absolute;top:0;width:16px}.menu li.parent>a .open-sub:after{height:16px;margin:12px 0 0 22px;width:2px}.menu li.parent.active>a .open-sub:after,.menu li.parent.active>a .open-sub:before{background:#fff}.menu li.parent.active>a .open-sub:after{display:none}.menu .sub{background-color:#f2f2f2;background-color:rgba(0,0,0,0.05);padding:7px 0 4px 5px}.menu .sub li{margin:0}.menu .sub a{background:none;color:#7f7f7f;margin:0;padding:4px 9px 4px 60px}.menu .sub a:before{display:none}.menu .sub a:hover{background-color:#e9e9e9;background-color:rgba(0,0,0,0.05)}.menu .sub .active>a{background:none;color:#000}.menu .sub .sub{background:none}.menu .sub li.parent>a .open-sub{left:10px}.menu .sub li.parent>a .open-sub:after,.menu .sub li.parent>a .open-sub:before{background:#7f7f7f;margin:14px 0 0 22px;width:12px}.menu .sub li.parent>a .open-sub:after{height:12px;margin:9px 0 0 27px;width:2px}.menu .sub li{padding:0}.menu li>a .item-icon{left:15px;position:absolute;top:13px}.menu li:not(.active)>a .item-icon{opacity:.5;filter:alpha(opacity=50)}@media (max-width:991px){.blog_sidebar{padding:5px 5px 0 20px}}@media (max-width:768px){.blog_sidebar{padding:5px 10px 0}} \ No newline at end of file + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active, +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + box-sizing: content-box; + height: 0; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type=button], +input[type=reset], +input[type=submit] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input { + line-height: normal; +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + height: auto; +} + +input[type=search] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type=search]::-webkit-search-cancel-button, +input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, +*:before, +*:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + + a, +a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + a[href^="#"]:after, +a[href^="javascript:"]:after { + content: ""; + } + + pre, +blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; + } + + tr, +img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, +h2, +h3 { + orphans: 3; + widows: 3; + } + + h2, +h3 { + page-break-after: avoid; + } + + .navbar { + display: none; + } + + .btn > .caret, +.dropup > .btn > .caret { + border-top-color: #000 !important; + } + + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + } + .table td, +.table th { + background-color: #fff !important; + } + + .table-bordered th, +.table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: "Glyphicons Halflings"; + src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot"); + src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: "Glyphicons Halflings"; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.glyphicon-asterisk:before { + content: "*"; +} + +.glyphicon-plus:before { + content: "+"; +} + +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "€"; +} + +.glyphicon-minus:before { + content: "−"; +} + +.glyphicon-cloud:before { + content: "☁"; +} + +.glyphicon-envelope:before { + content: "✉"; +} + +.glyphicon-pencil:before { + content: "✏"; +} + +.glyphicon-glass:before { + content: ""; +} + +.glyphicon-music:before { + content: ""; +} + +.glyphicon-search:before { + content: ""; +} + +.glyphicon-heart:before { + content: ""; +} + +.glyphicon-star:before { + content: ""; +} + +.glyphicon-star-empty:before { + content: ""; +} + +.glyphicon-user:before { + content: ""; +} + +.glyphicon-film:before { + content: ""; +} + +.glyphicon-th-large:before { + content: ""; +} + +.glyphicon-th:before { + content: ""; +} + +.glyphicon-th-list:before { + content: ""; +} + +.glyphicon-ok:before { + content: ""; +} + +.glyphicon-remove:before { + content: ""; +} + +.glyphicon-zoom-in:before { + content: ""; +} + +.glyphicon-zoom-out:before { + content: ""; +} + +.glyphicon-off:before { + content: ""; +} + +.glyphicon-signal:before { + content: ""; +} + +.glyphicon-cog:before { + content: ""; +} + +.glyphicon-trash:before { + content: ""; +} + +.glyphicon-home:before { + content: ""; +} + +.glyphicon-file:before { + content: ""; +} + +.glyphicon-time:before { + content: ""; +} + +.glyphicon-road:before { + content: ""; +} + +.glyphicon-download-alt:before { + content: ""; +} + +.glyphicon-download:before { + content: ""; +} + +.glyphicon-upload:before { + content: ""; +} + +.glyphicon-inbox:before { + content: ""; +} + +.glyphicon-play-circle:before { + content: ""; +} + +.glyphicon-repeat:before { + content: ""; +} + +.glyphicon-refresh:before { + content: ""; +} + +.glyphicon-list-alt:before { + content: ""; +} + +.glyphicon-lock:before { + content: ""; +} + +.glyphicon-flag:before { + content: ""; +} + +.glyphicon-headphones:before { + content: ""; +} + +.glyphicon-volume-off:before { + content: ""; +} + +.glyphicon-volume-down:before { + content: ""; +} + +.glyphicon-volume-up:before { + content: ""; +} + +.glyphicon-qrcode:before { + content: ""; +} + +.glyphicon-barcode:before { + content: ""; +} + +.glyphicon-tag:before { + content: ""; +} + +.glyphicon-tags:before { + content: ""; +} + +.glyphicon-book:before { + content: ""; +} + +.glyphicon-bookmark:before { + content: ""; +} + +.glyphicon-print:before { + content: ""; +} + +.glyphicon-camera:before { + content: ""; +} + +.glyphicon-font:before { + content: ""; +} + +.glyphicon-bold:before { + content: ""; +} + +.glyphicon-italic:before { + content: ""; +} + +.glyphicon-text-height:before { + content: ""; +} + +.glyphicon-text-width:before { + content: ""; +} + +.glyphicon-align-left:before { + content: ""; +} + +.glyphicon-align-center:before { + content: ""; +} + +.glyphicon-align-right:before { + content: ""; +} + +.glyphicon-align-justify:before { + content: ""; +} + +.glyphicon-list:before { + content: ""; +} + +.glyphicon-indent-left:before { + content: ""; +} + +.glyphicon-indent-right:before { + content: ""; +} + +.glyphicon-facetime-video:before { + content: ""; +} + +.glyphicon-picture:before { + content: ""; +} + +.glyphicon-map-marker:before { + content: ""; +} + +.glyphicon-adjust:before { + content: ""; +} + +.glyphicon-tint:before { + content: ""; +} + +.glyphicon-edit:before { + content: ""; +} + +.glyphicon-share:before { + content: ""; +} + +.glyphicon-check:before { + content: ""; +} + +.glyphicon-move:before { + content: ""; +} + +.glyphicon-step-backward:before { + content: ""; +} + +.glyphicon-fast-backward:before { + content: ""; +} + +.glyphicon-backward:before { + content: ""; +} + +.glyphicon-play:before { + content: ""; +} + +.glyphicon-pause:before { + content: ""; +} + +.glyphicon-stop:before { + content: ""; +} + +.glyphicon-forward:before { + content: ""; +} + +.glyphicon-fast-forward:before { + content: ""; +} + +.glyphicon-step-forward:before { + content: ""; +} + +.glyphicon-eject:before { + content: ""; +} + +.glyphicon-chevron-left:before { + content: ""; +} + +.glyphicon-chevron-right:before { + content: ""; +} + +.glyphicon-plus-sign:before { + content: ""; +} + +.glyphicon-minus-sign:before { + content: ""; +} + +.glyphicon-remove-sign:before { + content: ""; +} + +.glyphicon-ok-sign:before { + content: ""; +} + +.glyphicon-question-sign:before { + content: ""; +} + +.glyphicon-info-sign:before { + content: ""; +} + +.glyphicon-screenshot:before { + content: ""; +} + +.glyphicon-remove-circle:before { + content: ""; +} + +.glyphicon-ok-circle:before { + content: ""; +} + +.glyphicon-ban-circle:before { + content: ""; +} + +.glyphicon-arrow-left:before { + content: ""; +} + +.glyphicon-arrow-right:before { + content: ""; +} + +.glyphicon-arrow-up:before { + content: ""; +} + +.glyphicon-arrow-down:before { + content: ""; +} + +.glyphicon-share-alt:before { + content: ""; +} + +.glyphicon-resize-full:before { + content: ""; +} + +.glyphicon-resize-small:before { + content: ""; +} + +.glyphicon-exclamation-sign:before { + content: ""; +} + +.glyphicon-gift:before { + content: ""; +} + +.glyphicon-leaf:before { + content: ""; +} + +.glyphicon-fire:before { + content: ""; +} + +.glyphicon-eye-open:before { + content: ""; +} + +.glyphicon-eye-close:before { + content: ""; +} + +.glyphicon-warning-sign:before { + content: ""; +} + +.glyphicon-plane:before { + content: ""; +} + +.glyphicon-calendar:before { + content: ""; +} + +.glyphicon-random:before { + content: ""; +} + +.glyphicon-comment:before { + content: ""; +} + +.glyphicon-magnet:before { + content: ""; +} + +.glyphicon-chevron-up:before { + content: ""; +} + +.glyphicon-chevron-down:before { + content: ""; +} + +.glyphicon-retweet:before { + content: ""; +} + +.glyphicon-shopping-cart:before { + content: ""; +} + +.glyphicon-folder-close:before { + content: ""; +} + +.glyphicon-folder-open:before { + content: ""; +} + +.glyphicon-resize-vertical:before { + content: ""; +} + +.glyphicon-resize-horizontal:before { + content: ""; +} + +.glyphicon-hdd:before { + content: ""; +} + +.glyphicon-bullhorn:before { + content: ""; +} + +.glyphicon-bell:before { + content: ""; +} + +.glyphicon-certificate:before { + content: ""; +} + +.glyphicon-thumbs-up:before { + content: ""; +} + +.glyphicon-thumbs-down:before { + content: ""; +} + +.glyphicon-hand-right:before { + content: ""; +} + +.glyphicon-hand-left:before { + content: ""; +} + +.glyphicon-hand-up:before { + content: ""; +} + +.glyphicon-hand-down:before { + content: ""; +} + +.glyphicon-circle-arrow-right:before { + content: ""; +} + +.glyphicon-circle-arrow-left:before { + content: ""; +} + +.glyphicon-circle-arrow-up:before { + content: ""; +} + +.glyphicon-circle-arrow-down:before { + content: ""; +} + +.glyphicon-globe:before { + content: ""; +} + +.glyphicon-wrench:before { + content: ""; +} + +.glyphicon-tasks:before { + content: ""; +} + +.glyphicon-filter:before { + content: ""; +} + +.glyphicon-briefcase:before { + content: ""; +} + +.glyphicon-fullscreen:before { + content: ""; +} + +.glyphicon-dashboard:before { + content: ""; +} + +.glyphicon-paperclip:before { + content: ""; +} + +.glyphicon-heart-empty:before { + content: ""; +} + +.glyphicon-link:before { + content: ""; +} + +.glyphicon-phone:before { + content: ""; +} + +.glyphicon-pushpin:before { + content: ""; +} + +.glyphicon-usd:before { + content: ""; +} + +.glyphicon-gbp:before { + content: ""; +} + +.glyphicon-sort:before { + content: ""; +} + +.glyphicon-sort-by-alphabet:before { + content: ""; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: ""; +} + +.glyphicon-sort-by-order:before { + content: ""; +} + +.glyphicon-sort-by-order-alt:before { + content: ""; +} + +.glyphicon-sort-by-attributes:before { + content: ""; +} + +.glyphicon-sort-by-attributes-alt:before { + content: ""; +} + +.glyphicon-unchecked:before { + content: ""; +} + +.glyphicon-expand:before { + content: ""; +} + +.glyphicon-collapse-down:before { + content: ""; +} + +.glyphicon-collapse-up:before { + content: ""; +} + +.glyphicon-log-in:before { + content: ""; +} + +.glyphicon-flash:before { + content: ""; +} + +.glyphicon-log-out:before { + content: ""; +} + +.glyphicon-new-window:before { + content: ""; +} + +.glyphicon-record:before { + content: ""; +} + +.glyphicon-save:before { + content: ""; +} + +.glyphicon-open:before { + content: ""; +} + +.glyphicon-saved:before { + content: ""; +} + +.glyphicon-import:before { + content: ""; +} + +.glyphicon-export:before { + content: ""; +} + +.glyphicon-send:before { + content: ""; +} + +.glyphicon-floppy-disk:before { + content: ""; +} + +.glyphicon-floppy-saved:before { + content: ""; +} + +.glyphicon-floppy-remove:before { + content: ""; +} + +.glyphicon-floppy-save:before { + content: ""; +} + +.glyphicon-floppy-open:before { + content: ""; +} + +.glyphicon-credit-card:before { + content: ""; +} + +.glyphicon-transfer:before { + content: ""; +} + +.glyphicon-cutlery:before { + content: ""; +} + +.glyphicon-header:before { + content: ""; +} + +.glyphicon-compressed:before { + content: ""; +} + +.glyphicon-earphone:before { + content: ""; +} + +.glyphicon-phone-alt:before { + content: ""; +} + +.glyphicon-tower:before { + content: ""; +} + +.glyphicon-stats:before { + content: ""; +} + +.glyphicon-sd-video:before { + content: ""; +} + +.glyphicon-hd-video:before { + content: ""; +} + +.glyphicon-subtitles:before { + content: ""; +} + +.glyphicon-sound-stereo:before { + content: ""; +} + +.glyphicon-sound-dolby:before { + content: ""; +} + +.glyphicon-sound-5-1:before { + content: ""; +} + +.glyphicon-sound-6-1:before { + content: ""; +} + +.glyphicon-sound-7-1:before { + content: ""; +} + +.glyphicon-copyright-mark:before { + content: ""; +} + +.glyphicon-registration-mark:before { + content: ""; +} + +.glyphicon-cloud-download:before { + content: ""; +} + +.glyphicon-cloud-upload:before { + content: ""; +} + +.glyphicon-tree-conifer:before { + content: ""; +} + +.glyphicon-tree-deciduous:before { + content: ""; +} + +.glyphicon-cd:before { + content: ""; +} + +.glyphicon-save-file:before { + content: ""; +} + +.glyphicon-open-file:before { + content: ""; +} + +.glyphicon-level-up:before { + content: ""; +} + +.glyphicon-copy:before { + content: ""; +} + +.glyphicon-paste:before { + content: ""; +} + +.glyphicon-alert:before { + content: ""; +} + +.glyphicon-equalizer:before { + content: ""; +} + +.glyphicon-king:before { + content: ""; +} + +.glyphicon-queen:before { + content: ""; +} + +.glyphicon-pawn:before { + content: ""; +} + +.glyphicon-bishop:before { + content: ""; +} + +.glyphicon-knight:before { + content: ""; +} + +.glyphicon-baby-formula:before { + content: ""; +} + +.glyphicon-tent:before { + content: "⛺"; +} + +.glyphicon-blackboard:before { + content: ""; +} + +.glyphicon-bed:before { + content: ""; +} + +.glyphicon-apple:before { + content: ""; +} + +.glyphicon-erase:before { + content: ""; +} + +.glyphicon-hourglass:before { + content: "⌛"; +} + +.glyphicon-lamp:before { + content: ""; +} + +.glyphicon-duplicate:before { + content: ""; +} + +.glyphicon-piggy-bank:before { + content: ""; +} + +.glyphicon-scissors:before { + content: ""; +} + +.glyphicon-bitcoin:before { + content: ""; +} + +.glyphicon-btc:before { + content: ""; +} + +.glyphicon-xbt:before { + content: ""; +} + +.glyphicon-yen:before { + content: "¥"; +} + +.glyphicon-jpy:before { + content: "¥"; +} + +.glyphicon-ruble:before { + content: "₽"; +} + +.glyphicon-rub:before { + content: "₽"; +} + +.glyphicon-scale:before { + content: ""; +} + +.glyphicon-ice-lolly:before { + content: ""; +} + +.glyphicon-ice-lolly-tasted:before { + content: ""; +} + +.glyphicon-education:before { + content: ""; +} + +.glyphicon-option-horizontal:before { + content: ""; +} + +.glyphicon-option-vertical:before { + content: ""; +} + +.glyphicon-menu-hamburger:before { + content: ""; +} + +.glyphicon-modal-window:before { + content: ""; +} + +.glyphicon-oil:before { + content: ""; +} + +.glyphicon-grain:before { + content: ""; +} + +.glyphicon-sunglasses:before { + content: ""; +} + +.glyphicon-text-size:before { + content: ""; +} + +.glyphicon-text-color:before { + content: ""; +} + +.glyphicon-text-background:before { + content: ""; +} + +.glyphicon-object-align-top:before { + content: ""; +} + +.glyphicon-object-align-bottom:before { + content: ""; +} + +.glyphicon-object-align-horizontal:before { + content: ""; +} + +.glyphicon-object-align-left:before { + content: ""; +} + +.glyphicon-object-align-vertical:before { + content: ""; +} + +.glyphicon-object-align-right:before { + content: ""; +} + +.glyphicon-triangle-right:before { + content: ""; +} + +.glyphicon-triangle-left:before { + content: ""; +} + +.glyphicon-triangle-bottom:before { + content: ""; +} + +.glyphicon-triangle-top:before { + content: ""; +} + +.glyphicon-console:before { + content: ""; +} + +.glyphicon-superscript:before { + content: ""; +} + +.glyphicon-subscript:before { + content: ""; +} + +.glyphicon-menu-left:before { + content: ""; +} + +.glyphicon-menu-right:before { + content: ""; +} + +.glyphicon-menu-down:before { + content: ""; +} + +.glyphicon-menu-up:before { + content: ""; +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 1.428571429; + color: #37474F; + background-color: #ECEFF1; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #ff5722; + text-decoration: none; +} +a:hover, a:focus { + color: #d53300; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + padding: 4px; + line-height: 1.428571429; + background-color: #ECEFF1; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 22px; + margin-bottom: 22px; + border: 0; + border-top: 1px solid #ECEFF1; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +[role=button] { + cursor: pointer; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: inherit; + font-weight: 700; + line-height: 1.1; + color: inherit; +} +h1 small, +h1 .small, h2 small, +h2 .small, h3 small, +h3 .small, h4 small, +h4 .small, h5 small, +h5 .small, h6 small, +h6 .small, +.h1 small, +.h1 .small, .h2 small, +.h2 .small, .h3 small, +.h3 .small, .h4 small, +.h4 .small, .h5 small, +.h5 .small, .h6 small, +.h6 .small { + font-weight: 400; + line-height: 1; + color: #B0BEC5; +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: 22px; + margin-bottom: 11px; +} +h1 small, +h1 .small, .h1 small, +.h1 .small, +h2 small, +h2 .small, .h2 small, +.h2 .small, +h3 small, +h3 .small, .h3 small, +.h3 .small { + font-size: 65%; +} + +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: 11px; + margin-bottom: 11px; +} +h4 small, +h4 .small, .h4 small, +.h4 .small, +h5 small, +h5 .small, .h5 small, +.h5 .small, +h6 small, +h6 .small, .h6 small, +.h6 .small { + font-size: 75%; +} + +h1, .h1 { + font-size: 41px; +} + +h2, .h2 { + font-size: 34px; +} + +h3, .h3 { + font-size: 28px; +} + +h4, .h4 { + font-size: 20px; +} + +h5, .h5 { + font-size: 16px; +} + +h6, .h6 { + font-size: 14px; +} + +p { + margin: 0 0 11px; +} + +.lead { + margin-bottom: 22px; + font-size: 18px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 24px; + } +} + +small, +.small { + font-size: 87%; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-nowrap { + white-space: nowrap; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase, .initialism { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-muted { + color: #B0BEC5; +} + +.text-primary { + color: #ff5722; +} + +a.text-primary:hover, +a.text-primary:focus { + color: #ee3900; +} + +.text-success { + color: #3c763d; +} + +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} + +.text-info { + color: #31708f; +} + +a.text-info:hover, +a.text-info:focus { + color: #245269; +} + +.text-warning { + color: #8a6d3b; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} + +.text-danger { + color: #a94442; +} + +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} + +.bg-primary { + color: #fff; +} + +.bg-primary { + background-color: #ff5722; +} + +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #ee3900; +} + +.bg-success { + background-color: #dff0d8; +} + +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} + +.bg-info { + background-color: #d9edf7; +} + +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} + +.bg-warning { + background-color: #fcf8e3; +} + +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} + +.bg-danger { + background-color: #f2dede; +} + +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} + +.page-header { + padding-bottom: 10px; + margin: 44px 0 22px; + border-bottom: 1px solid #ECEFF1; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 11px; +} +ul ul, +ul ol, +ol ul, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-top: 0; + margin-bottom: 22px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: 700; +} + +dd { + margin-left: 0; +} + +.dl-horizontal dd:before, .dl-horizontal dd:after { + display: table; + content: " "; +} +.dl-horizontal dd:after { + clear: both; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; +} + +.initialism { + font-size: 90%; +} + +blockquote { + padding: 11px 22px; + margin: 0 0 22px; + font-size: 20px; + border-left: 5px solid #ECEFF1; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.428571429; + color: #B0BEC5; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: "— "; +} + +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #ECEFF1; + border-left: 0; +} +.blockquote-reverse footer:before, +.blockquote-reverse small:before, +.blockquote-reverse .small:before, +blockquote.pull-right footer:before, +blockquote.pull-right small:before, +blockquote.pull-right .small:before { + content: ""; +} +.blockquote-reverse footer:after, +.blockquote-reverse small:after, +.blockquote-reverse .small:after, +blockquote.pull-right footer:after, +blockquote.pull-right small:after, +blockquote.pull-right .small:after { + content: " —"; +} + +address { + margin-bottom: 22px; + font-style: normal; + line-height: 1.428571429; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + box-shadow: none; +} + +pre { + display: block; + padding: 10.5px; + margin: 0 0 11px; + font-size: 15px; + line-height: 1.428571429; + color: #546E7A; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.container:before, .container:after { + display: table; + content: " "; +} +.container:after { + clear: both; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} + +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: " "; +} +.container-fluid:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} +.row:before, .row:after { + display: table; + content: " "; +} +.row:after { + clear: both; +} + +.row-no-gutters { + margin-right: 0; + margin-left: 0; +} +.row-no-gutters [class*=col-] { + padding-right: 0; + padding-left: 0; +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-1 { + width: 8.3333333333%; +} + +.col-xs-2 { + width: 16.6666666667%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.3333333333%; +} + +.col-xs-5 { + width: 41.6666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.3333333333%; +} + +.col-xs-8 { + width: 66.6666666667%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.3333333333%; +} + +.col-xs-11 { + width: 91.6666666667%; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-pull-1 { + right: 8.3333333333%; +} + +.col-xs-pull-2 { + right: 16.6666666667%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-4 { + right: 33.3333333333%; +} + +.col-xs-pull-5 { + right: 41.6666666667%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-7 { + right: 58.3333333333%; +} + +.col-xs-pull-8 { + right: 66.6666666667%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-10 { + right: 83.3333333333%; +} + +.col-xs-pull-11 { + right: 91.6666666667%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-push-1 { + left: 8.3333333333%; +} + +.col-xs-push-2 { + left: 16.6666666667%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-4 { + left: 33.3333333333%; +} + +.col-xs-push-5 { + left: 41.6666666667%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-7 { + left: 58.3333333333%; +} + +.col-xs-push-8 { + left: 66.6666666667%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-10 { + left: 83.3333333333%; +} + +.col-xs-push-11 { + left: 91.6666666667%; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-offset-0 { + margin-left: 0%; +} + +.col-xs-offset-1 { + margin-left: 8.3333333333%; +} + +.col-xs-offset-2 { + margin-left: 16.6666666667%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-4 { + margin-left: 33.3333333333%; +} + +.col-xs-offset-5 { + margin-left: 41.6666666667%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-7 { + margin-left: 58.3333333333%; +} + +.col-xs-offset-8 { + margin-left: 66.6666666667%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-10 { + margin-left: 83.3333333333%; +} + +.col-xs-offset-11 { + margin-left: 91.6666666667%; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 768px) { + .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 { + float: left; + } + + .col-sm-1 { + width: 8.3333333333%; + } + + .col-sm-2 { + width: 16.6666666667%; + } + + .col-sm-3 { + width: 25%; + } + + .col-sm-4 { + width: 33.3333333333%; + } + + .col-sm-5 { + width: 41.6666666667%; + } + + .col-sm-6 { + width: 50%; + } + + .col-sm-7 { + width: 58.3333333333%; + } + + .col-sm-8 { + width: 66.6666666667%; + } + + .col-sm-9 { + width: 75%; + } + + .col-sm-10 { + width: 83.3333333333%; + } + + .col-sm-11 { + width: 91.6666666667%; + } + + .col-sm-12 { + width: 100%; + } + + .col-sm-pull-0 { + right: auto; + } + + .col-sm-pull-1 { + right: 8.3333333333%; + } + + .col-sm-pull-2 { + right: 16.6666666667%; + } + + .col-sm-pull-3 { + right: 25%; + } + + .col-sm-pull-4 { + right: 33.3333333333%; + } + + .col-sm-pull-5 { + right: 41.6666666667%; + } + + .col-sm-pull-6 { + right: 50%; + } + + .col-sm-pull-7 { + right: 58.3333333333%; + } + + .col-sm-pull-8 { + right: 66.6666666667%; + } + + .col-sm-pull-9 { + right: 75%; + } + + .col-sm-pull-10 { + right: 83.3333333333%; + } + + .col-sm-pull-11 { + right: 91.6666666667%; + } + + .col-sm-pull-12 { + right: 100%; + } + + .col-sm-push-0 { + left: auto; + } + + .col-sm-push-1 { + left: 8.3333333333%; + } + + .col-sm-push-2 { + left: 16.6666666667%; + } + + .col-sm-push-3 { + left: 25%; + } + + .col-sm-push-4 { + left: 33.3333333333%; + } + + .col-sm-push-5 { + left: 41.6666666667%; + } + + .col-sm-push-6 { + left: 50%; + } + + .col-sm-push-7 { + left: 58.3333333333%; + } + + .col-sm-push-8 { + left: 66.6666666667%; + } + + .col-sm-push-9 { + left: 75%; + } + + .col-sm-push-10 { + left: 83.3333333333%; + } + + .col-sm-push-11 { + left: 91.6666666667%; + } + + .col-sm-push-12 { + left: 100%; + } + + .col-sm-offset-0 { + margin-left: 0%; + } + + .col-sm-offset-1 { + margin-left: 8.3333333333%; + } + + .col-sm-offset-2 { + margin-left: 16.6666666667%; + } + + .col-sm-offset-3 { + margin-left: 25%; + } + + .col-sm-offset-4 { + margin-left: 33.3333333333%; + } + + .col-sm-offset-5 { + margin-left: 41.6666666667%; + } + + .col-sm-offset-6 { + margin-left: 50%; + } + + .col-sm-offset-7 { + margin-left: 58.3333333333%; + } + + .col-sm-offset-8 { + margin-left: 66.6666666667%; + } + + .col-sm-offset-9 { + margin-left: 75%; + } + + .col-sm-offset-10 { + margin-left: 83.3333333333%; + } + + .col-sm-offset-11 { + margin-left: 91.6666666667%; + } + + .col-sm-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 992px) { + .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 { + float: left; + } + + .col-md-1 { + width: 8.3333333333%; + } + + .col-md-2 { + width: 16.6666666667%; + } + + .col-md-3 { + width: 25%; + } + + .col-md-4 { + width: 33.3333333333%; + } + + .col-md-5 { + width: 41.6666666667%; + } + + .col-md-6 { + width: 50%; + } + + .col-md-7 { + width: 58.3333333333%; + } + + .col-md-8 { + width: 66.6666666667%; + } + + .col-md-9 { + width: 75%; + } + + .col-md-10 { + width: 83.3333333333%; + } + + .col-md-11 { + width: 91.6666666667%; + } + + .col-md-12 { + width: 100%; + } + + .col-md-pull-0 { + right: auto; + } + + .col-md-pull-1 { + right: 8.3333333333%; + } + + .col-md-pull-2 { + right: 16.6666666667%; + } + + .col-md-pull-3 { + right: 25%; + } + + .col-md-pull-4 { + right: 33.3333333333%; + } + + .col-md-pull-5 { + right: 41.6666666667%; + } + + .col-md-pull-6 { + right: 50%; + } + + .col-md-pull-7 { + right: 58.3333333333%; + } + + .col-md-pull-8 { + right: 66.6666666667%; + } + + .col-md-pull-9 { + right: 75%; + } + + .col-md-pull-10 { + right: 83.3333333333%; + } + + .col-md-pull-11 { + right: 91.6666666667%; + } + + .col-md-pull-12 { + right: 100%; + } + + .col-md-push-0 { + left: auto; + } + + .col-md-push-1 { + left: 8.3333333333%; + } + + .col-md-push-2 { + left: 16.6666666667%; + } + + .col-md-push-3 { + left: 25%; + } + + .col-md-push-4 { + left: 33.3333333333%; + } + + .col-md-push-5 { + left: 41.6666666667%; + } + + .col-md-push-6 { + left: 50%; + } + + .col-md-push-7 { + left: 58.3333333333%; + } + + .col-md-push-8 { + left: 66.6666666667%; + } + + .col-md-push-9 { + left: 75%; + } + + .col-md-push-10 { + left: 83.3333333333%; + } + + .col-md-push-11 { + left: 91.6666666667%; + } + + .col-md-push-12 { + left: 100%; + } + + .col-md-offset-0 { + margin-left: 0%; + } + + .col-md-offset-1 { + margin-left: 8.3333333333%; + } + + .col-md-offset-2 { + margin-left: 16.6666666667%; + } + + .col-md-offset-3 { + margin-left: 25%; + } + + .col-md-offset-4 { + margin-left: 33.3333333333%; + } + + .col-md-offset-5 { + margin-left: 41.6666666667%; + } + + .col-md-offset-6 { + margin-left: 50%; + } + + .col-md-offset-7 { + margin-left: 58.3333333333%; + } + + .col-md-offset-8 { + margin-left: 66.6666666667%; + } + + .col-md-offset-9 { + margin-left: 75%; + } + + .col-md-offset-10 { + margin-left: 83.3333333333%; + } + + .col-md-offset-11 { + margin-left: 91.6666666667%; + } + + .col-md-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 1200px) { + .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 { + float: left; + } + + .col-lg-1 { + width: 8.3333333333%; + } + + .col-lg-2 { + width: 16.6666666667%; + } + + .col-lg-3 { + width: 25%; + } + + .col-lg-4 { + width: 33.3333333333%; + } + + .col-lg-5 { + width: 41.6666666667%; + } + + .col-lg-6 { + width: 50%; + } + + .col-lg-7 { + width: 58.3333333333%; + } + + .col-lg-8 { + width: 66.6666666667%; + } + + .col-lg-9 { + width: 75%; + } + + .col-lg-10 { + width: 83.3333333333%; + } + + .col-lg-11 { + width: 91.6666666667%; + } + + .col-lg-12 { + width: 100%; + } + + .col-lg-pull-0 { + right: auto; + } + + .col-lg-pull-1 { + right: 8.3333333333%; + } + + .col-lg-pull-2 { + right: 16.6666666667%; + } + + .col-lg-pull-3 { + right: 25%; + } + + .col-lg-pull-4 { + right: 33.3333333333%; + } + + .col-lg-pull-5 { + right: 41.6666666667%; + } + + .col-lg-pull-6 { + right: 50%; + } + + .col-lg-pull-7 { + right: 58.3333333333%; + } + + .col-lg-pull-8 { + right: 66.6666666667%; + } + + .col-lg-pull-9 { + right: 75%; + } + + .col-lg-pull-10 { + right: 83.3333333333%; + } + + .col-lg-pull-11 { + right: 91.6666666667%; + } + + .col-lg-pull-12 { + right: 100%; + } + + .col-lg-push-0 { + left: auto; + } + + .col-lg-push-1 { + left: 8.3333333333%; + } + + .col-lg-push-2 { + left: 16.6666666667%; + } + + .col-lg-push-3 { + left: 25%; + } + + .col-lg-push-4 { + left: 33.3333333333%; + } + + .col-lg-push-5 { + left: 41.6666666667%; + } + + .col-lg-push-6 { + left: 50%; + } + + .col-lg-push-7 { + left: 58.3333333333%; + } + + .col-lg-push-8 { + left: 66.6666666667%; + } + + .col-lg-push-9 { + left: 75%; + } + + .col-lg-push-10 { + left: 83.3333333333%; + } + + .col-lg-push-11 { + left: 91.6666666667%; + } + + .col-lg-push-12 { + left: 100%; + } + + .col-lg-offset-0 { + margin-left: 0%; + } + + .col-lg-offset-1 { + margin-left: 8.3333333333%; + } + + .col-lg-offset-2 { + margin-left: 16.6666666667%; + } + + .col-lg-offset-3 { + margin-left: 25%; + } + + .col-lg-offset-4 { + margin-left: 33.3333333333%; + } + + .col-lg-offset-5 { + margin-left: 41.6666666667%; + } + + .col-lg-offset-6 { + margin-left: 50%; + } + + .col-lg-offset-7 { + margin-left: 58.3333333333%; + } + + .col-lg-offset-8 { + margin-left: 66.6666666667%; + } + + .col-lg-offset-9 { + margin-left: 75%; + } + + .col-lg-offset-10 { + margin-left: 83.3333333333%; + } + + .col-lg-offset-11 { + margin-left: 91.6666666667%; + } + + .col-lg-offset-12 { + margin-left: 100%; + } +} +table { + background-color: transparent; +} +table col[class*=col-] { + position: static; + display: table-column; + float: none; +} +table td[class*=col-], +table th[class*=col-] { + position: static; + display: table-cell; + float: none; +} + +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #B0BEC5; + text-align: left; +} + +th { + text-align: left; +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 22px; +} +.table > thead > tr > th, +.table > thead > tr > td, +.table > tbody > tr > th, +.table > tbody > tr > td, +.table > tfoot > tr > th, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > th, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #ECEFF1; +} + +.table-condensed > thead > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > th, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > th, +.table-condensed > tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > th, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > th, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} + +.table > thead > tr > td.active, +.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, +.table > tbody > tr > td.active, +.table > tbody > tr > th.active, +.table > tbody > tr.active > td, +.table > tbody > tr.active > th, +.table > tfoot > tr > td.active, +.table > tfoot > tr > th.active, +.table > tfoot > tr.active > td, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} + +.table > thead > tr > td.success, +.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th, +.table > tbody > tr > td.success, +.table > tbody > tr > th.success, +.table > tbody > tr.success > td, +.table > tbody > tr.success > th, +.table > tfoot > tr > td.success, +.table > tfoot > tr > th.success, +.table > tfoot > tr.success > td, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} + +.table > thead > tr > td.info, +.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th, +.table > tbody > tr > td.info, +.table > tbody > tr > th.info, +.table > tbody > tr.info > td, +.table > tbody > tr.info > th, +.table > tfoot > tr > td.info, +.table > tfoot > tr > th.info, +.table > tfoot > tr.info > td, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} + +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} + +.table > thead > tr > td.warning, +.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th, +.table > tbody > tr > td.warning, +.table > tbody > tr > th.warning, +.table > tbody > tr.warning > td, +.table > tbody > tr.warning > th, +.table > tfoot > tr > td.warning, +.table > tfoot > tr > th.warning, +.table > tfoot > tr.warning > td, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} + +.table > thead > tr > td.danger, +.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th, +.table > tbody > tr > td.danger, +.table > tbody > tr > th.danger, +.table > tbody > tr.danger > td, +.table > tbody > tr.danger > th, +.table > tfoot > tr > td.danger, +.table > tfoot > tr > th.danger, +.table > tfoot > tr.danger > td, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} + +.table-responsive { + min-height: 0.01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 16.5px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, +.table-responsive > .table > thead > tr > td, +.table-responsive > .table > tbody > tr > th, +.table-responsive > .table > tbody > tr > td, +.table-responsive > .table > tfoot > tr > th, +.table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, +.table-responsive > .table-bordered > thead > tr > td:first-child, +.table-responsive > .table-bordered > tbody > tr > th:first-child, +.table-responsive > .table-bordered > tbody > tr > td:first-child, +.table-responsive > .table-bordered > tfoot > tr > th:first-child, +.table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, +.table-responsive > .table-bordered > thead > tr > td:last-child, +.table-responsive > .table-bordered > tbody > tr > th:last-child, +.table-responsive > .table-bordered > tbody > tr > td:last-child, +.table-responsive > .table-bordered > tfoot > tr > th:last-child, +.table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, +.table-responsive > .table-bordered > tbody > tr:last-child > td, +.table-responsive > .table-bordered > tfoot > tr:last-child > th, +.table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 22px; + font-size: 24px; + line-height: inherit; + color: #546E7A; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700; +} + +input[type=search] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + appearance: none; +} + +input[type=radio], +input[type=checkbox] { + margin: 4px 0 0; + margin-top: 1px \9 ; + line-height: normal; +} +input[type=radio][disabled], input[type=radio].disabled, fieldset[disabled] input[type=radio], +input[type=checkbox][disabled], +input[type=checkbox].disabled, +fieldset[disabled] input[type=checkbox] { + cursor: not-allowed; +} + +input[type=file] { + display: block; +} + +input[type=range] { + display: block; + width: 100%; +} + +select[multiple], +select[size] { + height: auto; +} + +input[type=file]:focus, +input[type=radio]:focus, +input[type=checkbox]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +output { + display: block; + padding-top: 7px; + font-size: 16px; + line-height: 1.428571429; + color: #78909C; +} + +.form-control { + display: block; + width: 100%; + height: 36px; + padding: 6px 12px; + font-size: 16px; + line-height: 1.428571429; + color: #78909C; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #ECEFF1; + opacity: 1; +} +.form-control[disabled], fieldset[disabled] .form-control { + cursor: not-allowed; +} + +textarea.form-control { + height: auto; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type=date].form-control, +input[type=time].form-control, +input[type=datetime-local].form-control, +input[type=month].form-control { + line-height: 36px; + } + input[type=date].input-sm, +.input-group-sm > .input-group-btn > input[type=date].btn, .input-group-sm input[type=date], +input[type=time].input-sm, +.input-group-sm > .input-group-btn > input[type=time].btn, +.input-group-sm input[type=time], +input[type=datetime-local].input-sm, +.input-group-sm > .input-group-btn > input[type=datetime-local].btn, +.input-group-sm input[type=datetime-local], +input[type=month].input-sm, +.input-group-sm > .input-group-btn > input[type=month].btn, +.input-group-sm input[type=month] { + line-height: 33px; + } + input[type=date].input-lg, +.input-group-lg > .input-group-btn > input[type=date].btn, .input-group-lg input[type=date], +input[type=time].input-lg, +.input-group-lg > .input-group-btn > input[type=time].btn, +.input-group-lg input[type=time], +input[type=datetime-local].input-lg, +.input-group-lg > .input-group-btn > input[type=datetime-local].btn, +.input-group-lg input[type=datetime-local], +input[type=month].input-lg, +.input-group-lg > .input-group-btn > input[type=month].btn, +.input-group-lg input[type=month] { + line-height: 49px; + } +} +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio.disabled label, fieldset[disabled] .radio label, +.checkbox.disabled label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.radio label, +.checkbox label { + min-height: 22px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} + +.radio input[type=radio], +.radio-inline input[type=radio], +.checkbox input[type=checkbox], +.checkbox-inline input[type=checkbox] { + position: absolute; + margin-top: 4px \9 ; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + vertical-align: middle; + cursor: pointer; +} +.radio-inline.disabled, fieldset[disabled] .radio-inline, +.checkbox-inline.disabled, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +.form-control-static { + min-height: 38px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.input-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 33px; + padding: 5px 10px; + font-size: 14px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm, .input-group-sm > select.form-control, +.input-group-sm > select.input-group-addon, +.input-group-sm > .input-group-btn > select.btn { + height: 33px; + line-height: 33px; +} + +textarea.input-sm, .input-group-sm > textarea.form-control, +.input-group-sm > textarea.input-group-addon, +.input-group-sm > .input-group-btn > textarea.btn, +select[multiple].input-sm, +.input-group-sm > select[multiple].form-control, +.input-group-sm > select[multiple].input-group-addon, +.input-group-sm > .input-group-btn > select[multiple].btn { + height: auto; +} + +.form-group-sm .form-control { + height: 33px; + padding: 5px 10px; + font-size: 14px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 33px; + line-height: 33px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 33px; + min-height: 36px; + padding: 6px 10px; + font-size: 14px; + line-height: 1.5; +} + +.input-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 49px; + padding: 10px 16px; + font-size: 20px; + line-height: 1.3333333; + border-radius: 6px; +} + +select.input-lg, .input-group-lg > select.form-control, +.input-group-lg > select.input-group-addon, +.input-group-lg > .input-group-btn > select.btn { + height: 49px; + line-height: 49px; +} + +textarea.input-lg, .input-group-lg > textarea.form-control, +.input-group-lg > textarea.input-group-addon, +.input-group-lg > .input-group-btn > textarea.btn, +select[multiple].input-lg, +.input-group-lg > select[multiple].form-control, +.input-group-lg > select[multiple].input-group-addon, +.input-group-lg > .input-group-btn > select[multiple].btn { + height: auto; +} + +.form-group-lg .form-control { + height: 49px; + padding: 10px 16px; + font-size: 20px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 49px; + line-height: 49px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 49px; + min-height: 42px; + padding: 11px 16px; + font-size: 20px; + line-height: 1.3333333; +} + +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 45px; +} + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 36px; + height: 36px; + line-height: 36px; + text-align: center; + pointer-events: none; +} + +.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, +.input-group-lg > .input-group-addon + .form-control-feedback, +.input-group-lg > .input-group-btn > .btn + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 49px; + height: 49px; + line-height: 49px; +} + +.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, +.input-group-sm > .input-group-addon + .form-control-feedback, +.input-group-sm > .input-group-btn > .btn + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 33px; + height: 33px; + line-height: 33px; +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} + +.has-feedback label ~ .form-control-feedback { + top: 27px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #6c8a99; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, +.form-inline .input-group .input-group-btn, +.form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, +.form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, +.form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type=radio], +.form-inline .checkbox input[type=checkbox] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 29px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +.form-horizontal .form-group:before, .form-horizontal .form-group:after { + display: table; + content: " "; +} +.form-horizontal .form-group:after { + clear: both; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 20px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 14px; + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + padding: 6px 12px; + font-size: 16px; + line-height: 1.428571429; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, .btn:focus, .btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, .btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + opacity: 0.65; + -webkit-box-shadow: none; + box-shadow: none; +} + +a.btn.disabled, fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, .btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { + color: #333; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} +.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} + +.btn-primary { + color: #fff; + background-color: #ff5722; + border-color: #ff4409; +} +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #ee3900; + border-color: #882100; +} +.btn-primary:hover { + color: #fff; + background-color: #ee3900; + border-color: #ca3100; +} +.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #ee3900; + background-image: none; + border-color: #ca3100; +} +.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, .open > .btn-primary.dropdown-toggle:hover, .open > .btn-primary.dropdown-toggle:focus, .open > .btn-primary.dropdown-toggle.focus { + color: #fff; + background-color: #ca3100; + border-color: #882100; +} +.btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary.focus { + background-color: #ff5722; + border-color: #ff4409; +} +.btn-primary .badge { + color: #ff5722; + background-color: #fff; +} + +.btn-success { + color: #fff; + background-color: #27ca3b; + border-color: #23b535; +} +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #1f9f2f; + border-color: #0e4a16; +} +.btn-success:hover { + color: #fff; + background-color: #1f9f2f; + border-color: #198126; +} +.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1f9f2f; + background-image: none; + border-color: #198126; +} +.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, .open > .btn-success.dropdown-toggle:hover, .open > .btn-success.dropdown-toggle:focus, .open > .btn-success.dropdown-toggle.focus { + color: #fff; + background-color: #198126; + border-color: #0e4a16; +} +.btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success.focus { + background-color: #27ca3b; + border-color: #23b535; +} +.btn-success .badge { + color: #27ca3b; + background-color: #fff; +} + +.btn-info { + color: #fff; + background-color: #1fa0a0; + border-color: #1b8b8b; +} +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #177575; + border-color: #062020; +} +.btn-info:hover { + color: #fff; + background-color: #177575; + border-color: #115757; +} +.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { + color: #fff; + background-color: #177575; + background-image: none; + border-color: #115757; +} +.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, .open > .btn-info.dropdown-toggle:hover, .open > .btn-info.dropdown-toggle:focus, .open > .btn-info.dropdown-toggle.focus { + color: #fff; + background-color: #115757; + border-color: #062020; +} +.btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info.focus { + background-color: #1fa0a0; + border-color: #1b8b8b; +} +.btn-info .badge { + color: #1fa0a0; + background-color: #fff; +} + +.btn-warning { + color: #fff; + background-color: #ff8f31; + border-color: #ff8118; +} +.btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #fd7300; + border-color: #974500; +} +.btn-warning:hover { + color: #fff; + background-color: #fd7300; + border-color: #d96300; +} +.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #fd7300; + background-image: none; + border-color: #d96300; +} +.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, .open > .btn-warning.dropdown-toggle:hover, .open > .btn-warning.dropdown-toggle:focus, .open > .btn-warning.dropdown-toggle.focus { + color: #fff; + background-color: #d96300; + border-color: #974500; +} +.btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning.focus { + background-color: #ff8f31; + border-color: #ff8118; +} +.btn-warning .badge { + color: #ff8f31; + background-color: #fff; +} + +.btn-danger { + color: #fff; + background-color: #af0900; + border-color: #960800; +} +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #7c0600; + border-color: #160100; +} +.btn-danger:hover { + color: #fff; + background-color: #7c0600; + border-color: #580500; +} +.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #7c0600; + background-image: none; + border-color: #580500; +} +.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, .open > .btn-danger.dropdown-toggle:hover, .open > .btn-danger.dropdown-toggle:focus, .open > .btn-danger.dropdown-toggle.focus { + color: #fff; + background-color: #580500; + border-color: #160100; +} +.btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger.focus { + background-color: #af0900; + border-color: #960800; +} +.btn-danger .badge { + color: #af0900; + background-color: #fff; +} + +.btn-link { + font-weight: 400; + color: #ff5722; + border-radius: 0; +} +.btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent; +} +.btn-link:hover, .btn-link:focus { + color: #d53300; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus { + color: #B0BEC5; + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 20px; + line-height: 1.3333333; + border-radius: 6px; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 14px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 14px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type=submit].btn-block, +input[type=reset].btn-block, +input[type=button].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} +.collapse.in { + display: block; +} + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +.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; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 16px; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.428571429; + color: #546E7A; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + color: #4a606b; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #ff5722; + outline: 0; +} + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #B0BEC5; +} +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} + +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 14px; + line-height: 1.428571429; + color: #B0BEC5; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9 ; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar:before, .btn-toolbar:after { + display: table; + content: " "; +} +.btn-toolbar:after { + clear: both; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} +.btn-group-vertical > .btn-group:after { + clear: both; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} + +[data-toggle=buttons] > .btn input[type=radio], +[data-toggle=buttons] > .btn input[type=checkbox], +[data-toggle=buttons] > .btn-group > .btn input[type=radio], +[data-toggle=buttons] > .btn-group > .btn input[type=checkbox] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*=col-] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 16px; + font-weight: 400; + line-height: 1; + color: #78909C; + text-align: center; + background-color: #ECEFF1; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 5px 10px; + font-size: 14px; + border-radius: 3px; +} +.input-group-addon.input-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 10px 16px; + font-size: 20px; + border-radius: 6px; +} +.input-group-addon input[type=radio], +.input-group-addon input[type=checkbox] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav:before, .nav:after { + display: table; + content: " "; +} +.nav:after { + clear: both; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #ECEFF1; +} +.nav > li.disabled > a { + color: #B0BEC5; +} +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #B0BEC5; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #ECEFF1; + border-color: #ff5722; +} +.nav .nav-divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #ECEFF1 #ECEFF1 #ddd; +} +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #78909C; + cursor: default; + background-color: #ECEFF1; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #ff5722; +} + +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified, .nav-tabs.nav-justified { + width: 100%; +} +.nav-justified > li, .nav-tabs.nav-justified > li { + float: none; +} +.nav-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li, .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs-justified, .nav-tabs.nav-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border-bottom-color: #ECEFF1; + } +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 22px; + border: 1px solid transparent; +} +.navbar:before, .navbar:after { + display: table; + content: " "; +} +.navbar:after { + clear: both; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, .navbar-header:after { + display: table; + content: " "; +} +.navbar-header:after { + clear: both; +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse:before, .navbar-collapse:after { + display: table; + content: " "; +} +.navbar-collapse:after { + clear: both; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +@media (min-width: 768px) { + .navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +.container > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-header, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-header, +.container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-brand { + float: left; + height: 50px; + padding: 14px 15px; + font-size: 20px; + line-height: 22px; +} +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-right: 15px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, +.navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 22px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 14px; + padding-bottom: 14px; + } +} + +.navbar-form { + padding: 10px 15px; + margin-right: -15px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 7px; + margin-bottom: 7px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, +.navbar-form .input-group .input-group-btn, +.navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, +.navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, +.navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type=radio], +.navbar-form .checkbox input[type=checkbox] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-btn { + margin-top: 7px; + margin-bottom: 7px; +} +.navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn { + margin-top: 8.5px; + margin-bottom: 8.5px; +} +.navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn { + margin-top: 14px; + margin-bottom: 14px; +} + +.navbar-text { + margin-top: 14px; + margin-bottom: 14px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, .navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:hover, fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} + +.navbar-inverse { + background-color: #222; + border-color: #090909; +} +.navbar-inverse .navbar-brand { + color: #dce2e5; +} +.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #dce2e5; +} +.navbar-inverse .navbar-nav > li > a { + color: #dce2e5; +} +.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #090909; +} +.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #090909; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #dce2e5; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-link { + color: #dce2e5; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #dce2e5; +} +.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:hover, fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 22px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/ "; +} +.breadcrumb > .active { + color: #B0BEC5; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 22px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + color: #ff5722; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li > a:hover, .pagination > li > a:focus, +.pagination > li > span:hover, +.pagination > li > span:focus { + z-index: 2; + color: #d53300; + background-color: #ECEFF1; + border-color: #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, +.pagination > .active > span, +.pagination > .active > span:hover, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #ff5722; + border-color: #ff5722; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #B0BEC5; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 20px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 14px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 22px 0; + text-align: center; + list-style: none; +} +.pager:before, .pager:after { + display: table; + content: " "; +} +.pager:after { + clear: both; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #ECEFF1; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #B0BEC5; + cursor: not-allowed; + background-color: #fff; +} + +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} + +a.label:hover, a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label-default { + background-color: #B0BEC5; +} +.label-default[href]:hover, .label-default[href]:focus { + background-color: #93a6af; +} + +.label-primary { + background-color: #ff5722; +} +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #ee3900; +} + +.label-success { + background-color: #27ca3b; +} +.label-success[href]:hover, .label-success[href]:focus { + background-color: #1f9f2f; +} + +.label-info { + background-color: #1fa0a0; +} +.label-info[href]:hover, .label-info[href]:focus { + background-color: #177575; +} + +.label-warning { + background-color: #ff8f31; +} +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #fd7300; +} + +.label-danger { + background-color: #af0900; +} +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #7c0600; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 14px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #B0BEC5; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, .btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #ff5722; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #ECEFF1; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 24px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #cfd6db; +} +.container .jumbotron, .container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, +.jumbotron .h1 { + font-size: 72px; + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 22px; + line-height: 1.428571429; + background-color: #ECEFF1; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + display: block; + max-width: 100%; + height: auto; + margin-right: auto; + margin-left: auto; +} +.thumbnail .caption { + padding: 9px; + color: #37474F; +} + +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #ff5722; +} + +.alert { + padding: 15px; + margin-bottom: 22px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 22px; + margin-bottom: 22px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 14px; + line-height: 22px; + color: #fff; + text-align: center; + background-color: #ff5722; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #27ca3b; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #1fa0a0; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #ff8f31; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #af0900; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media-body { + width: 10000px; +} + +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} + +.media-right, +.media > .pull-right { + padding-left: 10px; +} + +.media-left, +.media > .pull-left { + padding-right: 10px; +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { + color: #B0BEC5; + cursor: not-allowed; + background-color: #ECEFF1; +} +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { + color: #B0BEC5; +} +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #ff5722; + border-color: #ff5722; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { + color: #fff2ee; +} + +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, a.list-group-item:focus, +button.list-group-item:hover, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} + +button.list-group-item { + width: 100%; + text-align: left; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, a.list-group-item-success:focus, +button.list-group-item-success:hover, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus, +button.list-group-item-success.active, +button.list-group-item-success.active:hover, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, a.list-group-item-info:focus, +button.list-group-item-info:hover, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus, +button.list-group-item-info.active, +button.list-group-item-info.active:hover, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, a.list-group-item-warning:focus, +button.list-group-item-warning:hover, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, +button.list-group-item-warning.active, +button.list-group-item-warning.active:hover, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, a.list-group-item-danger:focus, +button.list-group-item-danger:hover, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, +button.list-group-item-danger.active, +button.list-group-item-danger.active:hover, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 22px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} +.panel-body:before, .panel-body:after { + display: table; + content: " "; +} +.panel-body:after { + clear: both; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 18px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.list-group + .panel-footer { + border-top-width: 0; +} + +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} + +.panel-group { + margin-bottom: 22px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} + +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #546E7A; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #546E7A; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} + +.panel-primary { + border-color: #ff5722; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #ff5722; + border-color: #ff5722; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ff5722; +} +.panel-primary > .panel-heading .badge { + color: #ff5722; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ff5722; +} + +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} + +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} + +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 24px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: 0.2; +} +.close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: 0.5; +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 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 { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: 0.5; +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header:before, .modal-header:after { + display: table; + content: " "; +} +.modal-header:after { + clear: both; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: " "; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.428571429; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 14px; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: 0.9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.428571429; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 16px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 16px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -moz-transition: -moz-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + -moz-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: 0.5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000", endColorstr="#00000000", GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#80000000", GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, .carousel-control:focus { + color: #fff; + text-decoration: none; + outline: 0; + filter: alpha(opacity=90); + opacity: 0.9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: "‹"; +} +.carousel-control .icon-next:before { + content: "›"; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9 ; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + 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; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right, +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, +.carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, +.carousel-control .icon-next { + margin-right: -10px; + } + + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, .clearfix:after { + display: table; + content: " "; +} +.clearfix:after { + clear: both; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.hidden { + display: none !important; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} +.visible-xs { + display: none !important; +} + +.visible-sm { + display: none !important; +} + +.visible-md { + display: none !important; +} + +.visible-lg { + display: none !important; +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + + table.visible-xs { + display: table !important; + } + + tr.visible-xs { + display: table-row !important; + } + + th.visible-xs, +td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + + table.visible-sm { + display: table !important; + } + + tr.visible-sm { + display: table-row !important; + } + + th.visible-sm, +td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + + table.visible-md { + display: table !important; + } + + tr.visible-md { + display: table-row !important; + } + + th.visible-md, +td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + + table.visible-lg { + display: table !important; + } + + tr.visible-lg { + display: table-row !important; + } + + th.visible-lg, +td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + + table.visible-print { + display: table !important; + } + + tr.visible-print { + display: table-row !important; + } + + th.visible-print, +td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +@font-face { + font-family: "thinkhazard"; + src: url("../fonts/thinkhazard.eot?p4sbt7"); + src: url("../fonts/thinkhazard.eot?p4sbt7#iefix") format("embedded-opentype"), url("../fonts/thinkhazard.ttf?p4sbt7") format("truetype"), url("../fonts/thinkhazard.woff?p4sbt7") format("woff"), url("../fonts/thinkhazard.svg?p4sbt7#thinkhazard") format("svg"); + font-weight: normal; + font-style: normal; +} +[class^=icon-], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "thinkhazard" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-Pollution2c:before { + content: ""; +} + +.icon-Earthquake:before { + content: ""; +} + +.icon-Flood:before { + content: ""; +} + +.icon-Landslide:before { + content: ""; +} + +.icon-StormSurge:before { + content: ""; +} + +.icon-Tsunami:before { + content: ""; +} + +.icon-VolcanicAsh:before { + content: ""; +} + +.icon-Cyclone:before { + content: ""; +} + +.icon-cross:before { + content: ""; +} + +.icon-download-arrow:before { + content: ""; +} + +.icon-house:before { + content: ""; +} + +.icon-list-arrow:before { + content: ""; +} + +.icon-magnifying-glass:before { + content: ""; +} + +.icon-pin:before { + content: ""; +} + +.icon-selector-arrow:before { + content: ""; +} + +.icon-separator:before { + content: ""; +} + +.icon-zoom-in:before { + content: ""; +} + +.icon-zoom-out:before { + content: ""; +} + +.icon-extreme_heat:before { + content: ""; +} + +.icon-urban_flood:before { + content: ""; +} + +.icon-wildfire:before { + content: ""; +} + +.icon-water_scarcity:before { + content: ""; +} + +.icon-Overview:before { + content: ""; +} + +.icon-stop:before { + content: ""; +} + +.icon-spinner:before { + content: ""; +} + +/* Basics +----------------------- */ +html { + -webkit-font-smoothing: antialiased !important; +} + +body { + background: #37474F; + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 16px; + padding-top: 60px; +} + +select { + background: white; + border: 1px solid #B0BEC5; + height: 30px; + line-height: 30px; +} + +/* ------ Nav +------------------------------ */ +.navbar { + margin-bottom: 0; +} +.navbar .toolbar { + margin-left: 1em; +} + +.navbar-default { + background: white; + border: 0; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); +} +.navbar-default .navbar-nav > li > a { + color: #546E7A; + font-weight: 400; + padding-top: 25px; + padding-bottom: 25px; +} +.navbar-default .navbar-nav > li > a:hover { + color: #ff5722; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:focus, +.navbar-default .navbar-nav > .open > a:hover { + background-color: #ff5722; + color: white; +} + +.navbar-nav .dropdown-menu { + background-color: #ff5722; + border-top: 1px solid #ff5722; +} +.navbar-nav .dropdown-menu a { + color: white; +} +.navbar-nav .dropdown-menu li a:hover { + background-color: #ee3900; + color: white; +} +.navbar-nav .dropdown-menu .divider { + background-color: #ee3900; +} +.navbar-nav .search { + left: 15px; + position: relative; + color: #444; + top: 20px; + margin-right: 25px; +} +.navbar-nav .search .fa-search { + position: absolute; + top: 8px; + left: 10px; +} +.navbar-nav .search input { + background: #ECEFF1; + width: 120px; + height: 32px; + border: 1px solid #ECEFF1; + border-radius: 5px; + outline-width: 0; + text-indent: 32px; + -webkit-transition: width 0.2s; + transition: width 0.2s; +} +.navbar-nav .search input:focus { + width: 240px; +} +.navbar-nav .avatar img { + border-radius: 50%; + margin-bottom: -15px; + margin-right: 10px; + margin-top: -15px; + height: 42px; + width: 42px; +} +.navbar-nav .fa-angle-down { + margin-left: 10px; +} + +.navbar-brand { + background: url("../img/logo.png") 0 12px no-repeat; + background-size: 100%; + margin-right: 2em; + text-indent: -9999px; + height: 65px; + width: 200px; +} + +.navbar-collapse { + max-height: none; +} + +.navbar-header i { + color: #ff5722; + font-size: 2em; +} +.navbar-header button { + border: 0; + margin-top: 0.75em; +} + +/* ------ Layout +------------------------------ */ +header { + background: #ff5722; + color: white; + margin-bottom: 2em; + padding-top: 1em; + padding-bottom: 1em; +} +header .btn-primary { + background: #ee3900; + border: 1px solid #ee3900; +} +header .btn-primary:hover { + background: #d53300; +} +header .btn-icon { + background: #d53300; + border: 1px solid #d53300; +} +header .btn-icon:hover { + background: #bb2d00; +} + +#wrap { + background: #fbfbfc; + padding-bottom: 2.5em; + width: 100%; +} + +/* ------ Article +------------------------------ */ +article.tab-pane { + padding: 20px 0; +} + +.no-style-list { + list-style-type: none; + margin-top: 20px; +} + +.dl-horizontal dt { + text-overflow: clip; + white-space: normal; + overflow: hidden; +} + +.page-title { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +section#subheader { + background: white; + /*box-shadow: 1px 1px 2px rgba(0,0,0,0.1);*/ + border-bottom: 1px solid #ECEFF1; + margin-bottom: 1em; + margin-top: -2em; + padding-bottom: 0.4em; + padding-top: 0; +} +section#subheader p { + color: #78909C; + display: inline-block; +} +section#subheader .btn-group { + margin-top: -1em; +} + +/* ------ Footer +------------------------------ */ +section#contact { + background: #0e4b4b; + color: white; + padding-bottom: 3em; + padding-top: 1em; +} +section#contact h3 { + font-weight: 400; +} + +footer { + background: #37474F; + color: white; + padding-bottom: 3em; + padding-top: 2em; +} +footer a { + color: #ff5722; +} +footer img { + margin-right: -10px; + width: 50%; +} +footer select { + color: #37474F; +} + +/* ------ Home +------------------------------ */ +.home #wrap { + margin-top: 0; + padding-bottom: 0; +} +.home .jumbotron { + background: #ff5722; + /*background: linear-gradient( rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2) ), url('../img/jumbotron.jpg') no-repeat;*/ + /*background: $brand-primary url('../img/haiti.png') no-repeat; + background-position: right center; + background-size: 50%; */ + color: white; + margin-bottom: 0; + padding: 5em 0; + text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); +} +.home .jumbotron a { + color: #37474F; +} +.home .jumbotron p { + font-weight: 400; + margin-bottom: 0; +} +.home .jumbotron .btn-default { + background: rgba(0, 0, 0, 0.4); + border: 2px solid white; + color: white; + font-weight: 600; + margin-top: 1em; + min-width: 320px; +} +.home .jumbotron .btn-default:hover { + background: rgba(128, 0, 0, 0.4); +} +.home .big-search { + background: #546E7A; + color: white; + padding-bottom: 3em; + padding-top: 1em; +} +.home .big-search h1, +.home .big-search p { + text-align: center; +} +.home .big-search a { + color: #ff5722; +} +.home .big-search .search { + left: 0; + position: relative; + color: #444; + top: 20px; + padding-bottom: 2em; + margin: auto; + width: 50%; +} +.home .big-search .search input { + width: 100%; + height: 56px; + border: 1px solid #546E7A; + border-radius: 5px; + outline-width: 0; + font-size: 1.5em; +} +.home .big-search .search input { + text-indent: 64px; +} +.home .big-search .search .fa-search { + position: absolute; + top: 10px; + left: 15px; +} +.home .big-search .btn-default { + background: transparent; + border: none; +} +.home .big-search .btn-default:hover { + text-decoration: underline; +} +.home #datasets { + background: #ff5722; + color: white; + padding: 1em 0; +} +.home #datasets p { + font-size: 14px; +} +.home #datasets h4 { + text-transform: uppercase; + font-size: 14px; +} +.home #datasets a { + color: white; +} +.home #datasets a:hover { + text-decoration: none; +} +.home #datasets a .category { + background: #ff5722; + border-radius: 4px; + margin: 0 -15px; + padding: 2em 0; +} +.home #datasets a .category:hover { + background: #d53300; +} +.home #datasets a span { + font-size: 4em; +} +.home #hazards { + background: #37474F; + color: white; + padding: 2em 0 3em; + text-align: center; +} +.home #hazards h2 { + margin-bottom: 1em; +} +.home #hazards .keywords { + border-radius: 0.6em; + color: white; +} +.home #hazards .keywords:hover { + background: #ff5722; + color: white; + text-decoration: none; + transition: 1s all; + -webkit-transition: 1s all; + -moz-transition: 1s all; + -o-transition: 1s all; + -ms-transition: 1s all; +} +.home #hazards .keywords a { + color: white; +} +.home #hazards .keywords a:hover { + background: #ff5722; + color: white; + text-decoration: none; +} +.home #hazards span { + font-size: 4em; +} +.home #imagery { + background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url("../img/jumbotron.jpg") no-repeat; + background-position: center; + background-size: cover; + color: white; + margin-bottom: 0; + padding: 5em 0; + text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); +} +.home #imagery h3 { + padding-top: 2em; +} +.home #imagery a { + color: #37474F; +} +.home #imagery p { + font-weight: 400; + margin-bottom: 0; +} +.home #imagery .btn-default { + background: rgba(0, 0, 0, 0.4); + color: white; + text-shadow: none; + margin-top: 8px; +} +.home #imagery .btn-default:hover { + background: #ff5722; + border-color: #bb2d00; +} +.home #showcase { + background: #ECEFF1; + padding-bottom: 2em; + padding-top: 1em; + text-align: center; +} +.home #showcase .col-md-3 { + padding: 2em 1em; +} +.home #showcase .col-md-3 img { + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.125); + height: 180px; + width: 100%; +} +.home #showcase p { + font-size: 18px; +} +.home #osm { + background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 50%, #ff5722 50%, #ff5722 100%), url("../img/osm-02.jpg") no-repeat; + /*background-size: cover;*/ + min-height: 320px; + padding: 0; +} +.home #osm .col-md-8 { + background: #ff5722; + color: white; + min-height: 320px; + padding: 1em 2em; +} +.home #osm .col-md-8 .btn-primary { + border-color: white; + width: 160px; +} +.home #osm p { + font-size: 18px; +} + +/* Layers +----------------------- */ +.item-container { + padding: 1em; +} + +.profile-avatar { + background: white; + border: 1px solid #B0BEC5; + padding: 0; +} +.profile-avatar h5 a { + color: #37474F; + display: block; + margin-bottom: -0.5em; + margin-top: 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.profile-avatar h5 a:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar h5 a i { + margin-left: 0.75em; +} +.profile-avatar h5 a i:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar .list-inline { + margin: 0.5em 0; +} + +.item-thumb { + padding-left: 0; + padding-right: 0; +} +.item-thumb img { + width: 100%; +} +.item-thumb .cnigs-logo { + border-radius: 50%; + position: absolute; + top: 5px; + right: 5px; + height: 42px; + width: 42px; + z-index: 99; +} + +.item-details { + background: white; + color: #37474F; + position: relative; + height: 200px; +} +.item-details h4 { + margin-bottom: 0.25em; + margin-top: 0.25em; +} +.item-details p { + margin-bottom: 0.25em; +} +.item-details p.abstract { + font-size: 0.875em; +} +.item-details .item-meta { + font-size: 0.75em; + margin-top: 1em; +} +.item-details .item-meta .item-category { + text-transform: uppercase; +} +.item-details .item-meta a { + color: #37474F; +} +.item-details .btn-xs, .item-details .btn-group-xs > .btn { + border-color: #ECEFF1; + border-bottom-right-radius: 0; + border-top-left-radius: 0; + margin-right: -16px; + margin-top: -1px; + padding: 0.25em 0.5em; +} +.item-details .item-items { + border-top: 1px solid #ECEFF1; + position: absolute; + bottom: 0; + font-size: 0.875em; +} +.item-details .item-items ul { + margin: 0 0 0 -15px; + padding: 0.5em; +} +.item-details .item-items ul i { + margin-right: 0.5em; +} + +.detail-page-actions, .layer-actions { + margin-top: 20px; +} +.detail-page-actions i, .layer-actions i { + padding-right: 3px; +} + +.edit-modal { + text-align: center; +} + +.arcgis-legend > li { + text-align: right; +} + +.arcgis-legend > li > img { + padding-right: 25px; +} + +.grid-spacer { + margin-top: 30px; +} + +#accordion .panel { + border-radius: 0; + border-top: 2px solid #B0BEC5; + line-height: 1em; +} +#accordion .panel-heading { + background: none; + border: 0; +} +#accordion .panel-body img { + margin-bottom: 1em; +} +#accordion .panel-body small { + color: #78909C; + font-size: 0.825em; +} +#accordion .panel-body form { + font-size: 0.825em; +} +#accordion .panel-body form .form-control { + background: none; + color: #546E7A; + font-size: 0.825em; + height: 24px; + line-height: 1; + -webkit-box-shadow: none; + box-shadow: none; +} + +#create-chart small { + color: #78909C; + font-size: 0.825em; +} +#create-chart form { + font-size: 0.825em; +} +#create-chart form .form-control { + background: none; + color: #546E7A; + font-size: 0.825em; + height: 24px; + line-height: 1; + -webkit-box-shadow: none; + box-shadow: none; +} + +/* People +----------------------- */ +.profile-container { + padding: 1em; +} + +.profile-avatar { + background: white; + border: 1px solid #ECEFF1; + padding: 0; +} +.profile-avatar h5 a { + color: #37474F; + display: block; + margin-bottom: -0.5em; + margin-top: 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.profile-avatar h5 a:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar h5 a i { + margin-left: 0.75em; +} +.profile-avatar h5 a i:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar .profile-items { + border-top: 1px solid #ECEFF1; + color: #78909C; +} +.profile-avatar .profile-items i { + margin-left: 0; + margin-right: 0.125em; +} +.profile-avatar .profile-items i a:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar .profile-items .list-inline { + margin: 0.5em 0; +} +.profile-avatar li a { + color: #78909C; + margin-right: 0.5em; +} +.profile-avatar li a:hover { + color: #af0900; + text-decoration: none; +} +.profile-avatar img { + margin: 0; + width: 100%; +} + +.profile-image { + padding-left: 0; + padding-right: 0; +} +.profile-image img { + width: 100%; +} + +.profile-details { + background: white; + color: #37474F; +} +.profile-details .group-logo { + margin: 0.5em; + padding: 0; +} +.profile-details .group-logo img { + width: 60px; +} + +/*# sourceMappingURL=haitidata.css.map */ diff --git a/haitidata/static/css/haitidata.css.map b/haitidata/static/css/haitidata.css.map new file mode 100644 index 0000000..c6e483f --- /dev/null +++ b/haitidata/static/css/haitidata.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/_bootstrap.scss","../scss/bootstrap/_normalize.scss","../scss/bootstrap/_print.scss","../scss/bootstrap/_glyphicons.scss","../scss/bootstrap/_scaffolding.scss","../scss/bootstrap/mixins/_vendor-prefixes.scss","../scss/_variables.scss","../scss/bootstrap/mixins/_tab-focus.scss","../scss/bootstrap/mixins/_image.scss","../scss/bootstrap/_type.scss","../scss/bootstrap/mixins/_text-emphasis.scss","../scss/bootstrap/mixins/_background-variant.scss","../scss/bootstrap/mixins/_clearfix.scss","../scss/bootstrap/mixins/_text-overflow.scss","../scss/bootstrap/_code.scss","../scss/bootstrap/_grid.scss","../scss/bootstrap/mixins/_grid.scss","../scss/bootstrap/mixins/_grid-framework.scss","../scss/bootstrap/_tables.scss","../scss/bootstrap/mixins/_table-row.scss","../scss/bootstrap/_forms.scss","../scss/bootstrap/mixins/_forms.scss","../scss/bootstrap/_buttons.scss","../scss/bootstrap/mixins/_buttons.scss","../scss/bootstrap/mixins/_opacity.scss","../scss/bootstrap/_component-animations.scss","../scss/bootstrap/_dropdowns.scss","../scss/bootstrap/mixins/_nav-divider.scss","../scss/bootstrap/mixins/_reset-filter.scss","../scss/bootstrap/_button-groups.scss","../scss/bootstrap/mixins/_border-radius.scss","../scss/bootstrap/_input-groups.scss","../scss/bootstrap/_navs.scss","../scss/bootstrap/_navbar.scss","../scss/bootstrap/mixins/_nav-vertical-align.scss","../scss/bootstrap/_breadcrumbs.scss","../scss/bootstrap/_pagination.scss","../scss/bootstrap/mixins/_pagination.scss","../scss/bootstrap/_pager.scss","../scss/bootstrap/_labels.scss","../scss/bootstrap/mixins/_labels.scss","../scss/bootstrap/_badges.scss","../scss/bootstrap/_jumbotron.scss","../scss/bootstrap/_thumbnails.scss","../scss/bootstrap/_alerts.scss","../scss/bootstrap/mixins/_alerts.scss","../scss/bootstrap/_progress-bars.scss","../scss/bootstrap/mixins/_gradients.scss","../scss/bootstrap/mixins/_progress-bar.scss","../scss/bootstrap/_media.scss","../scss/bootstrap/_list-group.scss","../scss/bootstrap/mixins/_list-group.scss","../scss/bootstrap/_panels.scss","../scss/bootstrap/mixins/_panels.scss","../scss/bootstrap/_responsive-embed.scss","../scss/bootstrap/_wells.scss","../scss/bootstrap/_close.scss","../scss/bootstrap/_modals.scss","../scss/bootstrap/_tooltip.scss","../scss/bootstrap/mixins/_reset-text.scss","../scss/bootstrap/_popovers.scss","../scss/bootstrap/_carousel.scss","../scss/bootstrap/_utilities.scss","../scss/bootstrap/mixins/_center-block.scss","../scss/bootstrap/mixins/_hide-text.scss","../scss/bootstrap/_responsive-utilities.scss","../scss/bootstrap/mixins/_responsive-visibility.scss","../scss/fonts.scss","../scss/haitidata.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;ACAA;AAQA;EACE;EACA;EACA;;;AAOF;EACE;;;AAaF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAaE;;;AAQF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAQF;EACE;EACA;;;AAQF;AAAA;EAEE;;;AAUF;EACE;;;AAQF;AAAA;EAEE;;;AAWF;EACE;EACA;EACA;;;AAOF;AAAA;EAEE;;;AAOF;EACE;;;AAQF;EACE;EACA;;;AAOF;EACE;EACA;;;AAOF;EACE;;;AAOF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAUF;EACE;;;AAOF;EACE;;;AAUF;EACE;;;AAOF;EACE;EACA;;;AAOF;EACE;;;AAOF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAkBF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;;;AAOF;EACE;;;AAUF;AAAA;EAEE;;;AAWF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAOF;AAAA;EAEE;;;AAOF;AAAA;EAEE;EACA;;;AAQF;EACE;;;AAWF;AAAA;EAEE;EACA;;;AASF;AAAA;EAEE;;;AAQF;EACE;EACA;;;AASF;AAAA;EAEE;;;AAOF;EACE;EACA;EACA;;;AAQF;EACE;EACA;;;AAOF;EACE;;;AAQF;EACE;;;AAUF;EACE;EACA;;;AAGF;AAAA;EAEE;;;ACzaF;AAOA;EACE;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;EAGF;AAAA;IAEE;;;EAGF;IACE;;;EAGF;IACE;;;EAKF;AAAA;IAEE;;;EAGF;AAAA;IAEE;IACA;;;EAGF;IACE;;;EAGF;AAAA;IAEE;;;EAGF;IACE;;;EAGF;AAAA;AAAA;IAGE;IACA;;;EAGF;AAAA;IAEE;;;EAMF;IACE;;;EAIA;AAAA;IACE;;;EAGJ;IACE;;;EAGF;IACE;;EAEA;AAAA;IAEE;;;EAIF;AAAA;IAEE;;;ACpFJ;EACE;EACA;EACA;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIkC;EAAW;;;AACX;EAAW;;;AAEX;AAAA;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AASX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;ACxS/C;ECgEE,oBD/DoB;ECgEjB,iBDhEiB;ECiEZ,YDjEY;;;AAEtB;AAAA;EC6DE,oBD3DoB;EC4DjB,iBD5DiB;EC6DZ,YD7DY;;;AAMtB;EACE;EACA;;;AAGF;EACE,aEkBwB;EFjBxB,WEuBwB;EFtBxB,aEkCwB;EFjCxB,OEnBuB;EFoBvB,kBEhBuB;;;AFoBzB;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAMF;EACE,OE/BsB;EFgCtB;;AAEA;EAEE,OEjBoB;EFkBpB,iBEhBoB;;AFmBtB;EGnDA;EACA;;;AH6DF;EACE;;;AAMF;EACE;;;AAIF;EI5EE,SAD8B;EAE9B;EACA;;;AJ+EF;EACE,eEwB0B;;;AFlB5B;EACE,SEgpB4B;EF/oB5B,aE/BwB;EFgCxB,kBEhFuB;EFiFvB;EACA,eEY0B;ED4E1B,oBDvFA;ECwFK,eDxFL;ECyFQ,YDzFR;EI9FA,SJiGwB;EIhGxB;EACA;;;AJmGF;EACE;;;AAMF;EACE,YEhDwB;EFiDxB,eEjDwB;EFkDxB;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAWJ;EACE;;;AKvJF;AAAA;EAEE,aH0DwB;EGzDxB,aH0DwB;EGzDxB,aH0DwB;EGzDxB,OH0DwB;;AGxDxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA,OHLqB;;;AGSzB;AAAA;AAAA;EAGE,YHuCwB;EGtCxB;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAGJ;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAIJ;EAAU,WHSgB;;;AGR1B;EAAU,WHSgB;;;AGR1B;EAAU,WHSgB;;;AGR1B;EAAU,WHSgB;;;AGR1B;EAAU,WHCgB;;;AGA1B;EAAU,WHSgB;;;AGH1B;EACE;;;AAGF;EACE,eHGwB;EGFxB;EACA;EACA;;AAEA;EANF;IAOI;;;;AASJ;AAAA;EAEE;;;AAGF;AAAA;EAEE;EACA,kBH2a+B;;;AGvajC;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAuB;;;AAGvB;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAuB;;;AAGvB;EACE,OHxFuB;;;AIVvB;EACE,OJYoB;;;AIVtB;AAAA;EAEE;;;AALF;EACE,OJkf6B;;;AIhf/B;AAAA;EAEE;;;AALF;EACE,OJsf6B;;;AIpf/B;AAAA;EAEE;;;AALF;EACE,OJ0f6B;;;AIxf/B;AAAA;EAEE;;;AALF;EACE,OJ8f6B;;;AI5f/B;AAAA;EAEE;;;AD6GJ;EAGE;;;AErHA;EACE,kBLYoB;;;AKVtB;AAAA;EAEE;;;AALF;EACE,kBLmf6B;;;AKjf/B;AAAA;EAEE;;;AALF;EACE,kBLuf6B;;;AKrf/B;AAAA;EAEE;;;AALF;EACE,kBL2f6B;;;AKzf/B;AAAA;EAEE;;;AALF;EACE,kBL+f6B;;;AK7f/B;AAAA;EAEE;;;AFgIJ;EACE;EACA;EACA;;;AAQF;AAAA;EAEE;EACA;;AACA;AAAA;AAAA;AAAA;EAEE;;;AAYJ;EAJE;EACA;;;AASF;EAVE;EACA;EAWA;;AAEA;EACE;EACA;EACA;;;AAKJ;EACE;EACA,eHzHwB;;;AG2H1B;AAAA;EAEE,aH/HwB;;;AGiI1B;EACE;;;AAEF;EACE;;;AGvLA;EAEE;EACA;;AAEF;EACE;;AH8LF;EACE;IACE;IACA;IACA;IACA;IIlNJ;IACA;IACA;;EJmNE;IACE,aH2nBwB;;;;AGhnB9B;AAAA;EAEE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA,WH4mB4B;EG3mB5B;;AAKE;AAAA;AAAA;EACE;;AAMJ;AAAA;AAAA;EAGE;EACA;EACA,aHtMsB;EGuMtB,OHxPqB;;AG0PrB;AAAA;AAAA;EACE;;;AAQN;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAME;AAAA;AAAA;AAAA;AAAA;AAAA;EAAW;;AACX;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AAMN;EACE,eHrOwB;EGsOxB;EACA,aHzOwB;;;AQzD1B;AAAA;AAAA;AAAA;EAIE,aRsCwB;;;AQlC1B;EACE;EACA;EACA,ORmzB4B;EQlzB5B,kBRmzB4B;EQlzB5B,eR0F0B;;;AQtF5B;EACE;EACA;EACA,OR6yB4B;EQ5yB5B,kBR6yB4B;EQ5yB5B,eRmF0B;EQlF1B;;AAEA;EACE;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EACA,aRkBwB;EQjBxB,ORlCuB;EQmCvB;EACA;EACA,kBRyxB4B;EQxxB5B;EACA,eR0D0B;;AQvD1B;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE,YR2wB4B;EQ1wB5B;;;AC1DF;ECHE;EACA;EACA;EACA;;AJIA;EAEE;EACA;;AAEF;EACE;;AGPF;EAHF;IAII,OT2U2B;;;ASzU7B;EANF;IAOI,OT6U2B;;;AS3U7B;EATF;IAUI,OT+U2B;;;;ASrU/B;ECvBE;EACA;EACA;EACA;;AJIA;EAEE;EACA;;AAEF;EACE;;;AGmBJ;ECvBE;EACA;;AJHA;EAEE;EACA;;AAEF;EACE;;;AGuBJ;EACE;EACA;;AAEA;EACE;EACA;;;AEtCF;EACE;EAEA;EAEA;EACA;;;AAUF;EACE;;;AAOA;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAmBF;EACE;;;AANF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AANF;EACE;;;AANF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAmBF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AFaN;EE/CE;IACE;;;EAOA;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EANF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;AFsBN;EExDE;IACE;;;EAOA;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EANF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;AF+BN;EEjEE;IACE;;;EAOA;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EANF;IACE;;;EANF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EAmBF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;EADF;IACE;;;ACvDN;EACE,kBZgI8B;;AY1H9B;EACE;EACA;EACA;;AAKA;AAAA;EACE;EACA;EACA;;;AAKN;EACE,aZoG8B;EYnG9B,gBZmG8B;EYlG9B,OZjBuB;EYkBvB;;;AAGF;EACE;;;AAMF;EACE;EACA;EACA,eZoBwB;;AYdpB;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE,SZ4EwB;EY3ExB,aZSkB;EYRlB;EACA;;AAKN;EACE;EACA;;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKN;EACE;;AAIF;EACE,kBZpEqB;;;AYgFnB;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE,SZkCwB;;;AYvBhC;EACE;;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKJ;AAAA;EAEE;;;AAWJ;EACE,kBZC4B;;;AYS9B;EACE,kBZR4B;;;AalI5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE,kBb8H0B;;;AavH5B;AAAA;EAKE;;;AAhBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE,kBb4e2B;;;Aare7B;AAAA;EAKE;;;AAhBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE,kBbgf2B;;;Aaze7B;AAAA;EAKE;;;AAhBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE,kBbof2B;;;Aa7e7B;AAAA;EAKE;;;AAhBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE,kBbwf2B;;;Aajf7B;AAAA;EAKE;;;ADkJN;EACE;EACA;;AAEA;EAJF;IAKI;IACA;IACA;IACA;IACA;;EAGA;IACE;;EAOI;AAAA;AAAA;AAAA;AAAA;AAAA;IAEE;;EAOR;IACE;;EAOI;AAAA;AAAA;AAAA;AAAA;AAAA;IAEE;;EAEF;AAAA;AAAA;AAAA;AAAA;AAAA;IAEE;;EAWF;AAAA;AAAA;AAAA;IAEE;;;;AEzNZ;EAIE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA,ed0CwB;EczCxB;EACA;EACA,OdduB;EcevB;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAUF;Ef6BE,oBe3BoB;Ef4BjB,iBe5BiB;Ef6BZ,Ye7BY;EAQpB;EACA;;;AAIF;AAAA;EAEE;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;EAGE,Qd8J6B;;;Ac1JjC;EACE;;;AAIF;EACE;EACA;;;AAIF;AAAA;EAEE;;;AAIF;AAAA;AAAA;EbxFE;EACA;;;Aa8FF;EACE;EACA;EACA,WdrDwB;EcsDxB,ad1CwB;Ec2CxB,Od7FuB;;;AcuHzB;EACE;EACA;EACA,Qd8E+B;Ec7E/B;EACA,WdtFwB;EcuFxB,ad3EwB;Ec4ExB,Od9HuB;Ec+HvB,kBdgD+B;Ec/C/B;EACA;EACA,edlC0B;EDzC1B,oBe4EA;Ef3EQ,Ye2ER;EfyCA,oBexCA;EfyCK,eezCL;Ef0CQ,Ye1CR;;ACzFA;EACE,cfsJ6B;EerJ7B;EhBUF,oBgBTE;EhBUM,YgBVN;;AhB2CF;EACE,OC2G6B;ED1G7B;;AAEF;EAA0B,OCwGK;;ADvG/B;EAAgC,OCuGD;;AcxD/B;EACE;EACA;;AAQF;EAGE,kBdxJqB;EcyJrB;;AAGF;EAEE,Qd0D6B;;;AcnDjC;EACE;;;AAaF;EAKI;AAAA;AAAA;AAAA;IACE,ada2B;;EcV7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAEE,adY2B;;EcT7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAEE,adK2B;;;AcMjC;EACE,edF+B;;;AcUjC;AAAA;EAEE;EACA;EACA;EACA;;AAKE;AAAA;AAAA;EACE,QdV2B;;Acc/B;AAAA;EACE,YdrLsB;EcsLtB;EACA;EACA;EACA;;;AAGJ;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAIF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;EAEE,QdlD6B;;;AcqDjC;AAAA;EAEE;EACA;;;AASF;EACE;EAEA;EACA;EAEA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;;AC7OF;AAAA;AAAA;EACE,QfkJ6B;EejJ7B;EACA,WfpBsB;EeqBtB,afiCwB;EehCxB,efoCwB;;;AejC1B;AAAA;AAAA;EACE,Qf0I6B;EezI7B,afyI6B;;;AetI/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AD6OF;EACE,Qd1G6B;Ec2G7B;EACA,WdhRsB;EciRtB,ad3NwB;Ec4NxB,edxNwB;;Ac0N1B;EACE,QdjH6B;EckH7B,adlH6B;;AcoH/B;AAAA;EAEE;;AAEF;EACE,QdzH6B;Ec0H7B;EACA;EACA,WdhSsB;EciStB,ad3OwB;;;AerC1B;AAAA;AAAA;EACE,QfgJ6B;Ee/I7B;EACA,WfrBsB;EesBtB,afgCwB;Ee/BxB,efmCwB;;;AehC1B;AAAA;AAAA;EACE,QfwI6B;EevI7B,afuI6B;;;AepI/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;ADuQF;EACE,QdtI6B;EcuI7B;EACA,Wd3SsB;Ec4StB,adtPwB;EcuPxB,ednPwB;;AcqP1B;EACE,Qd7I6B;Ec8I7B,ad9I6B;;AcgJ/B;AAAA;EAEE;;AAEF;EACE,QdrJ6B;EcsJ7B;EACA;EACA,Wd3TsB;Ec4TtB,adtQwB;;;Ac+Q5B;EAEE;;AAGA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,OdpL+B;EcqL/B,QdrL+B;EcsL/B,adtL+B;EcuL/B;EACA;;;AAEF;AAAA;AAAA;AAAA;AAAA;EAGE,Od3L+B;Ec4L/B,Qd5L+B;Ec6L/B,ad7L+B;;;Ac+LjC;AAAA;AAAA;AAAA;AAAA;EAGE,OdhM+B;EciM/B,QdjM+B;EckM/B,adlM+B;;;AelN/B;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE,Ofse6B;;Aene/B;EACE,cfke6B;EDnb/B,oBgB9CE;EhB+CM,YgB/CN;;AACA;EACE;EhB4CJ,oBgB1CI;EhB2CI,YgB3CJ;;AAIJ;EACE,Ofwd6B;Eevd7B,kBfwd6B;Eevd7B,cfsd6B;;Aend/B;EACE,Ofkd6B;;;Aehf/B;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE,Of8e6B;;Ae3e/B;EACE,cf0e6B;ED3b/B,oBgB9CE;EhB+CM,YgB/CN;;AACA;EACE;EhB4CJ,oBgB1CI;EhB2CI,YgB3CJ;;AAIJ;EACE,Ofge6B;Ee/d7B,kBfge6B;Ee/d7B,cf8d6B;;Ae3d/B;EACE,Of0d6B;;;Aexf/B;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE,Ofkf6B;;Ae/e/B;EACE,cf8e6B;ED/b/B,oBgB9CE;EhB+CM,YgB/CN;;AACA;EACE;EhB4CJ,oBgB1CI;EhB2CI,YgB3CJ;;AAIJ;EACE,Ofoe6B;Eene7B,kBfoe6B;Eene7B,cfke6B;;Ae/d/B;EACE,Of8d6B;;;AcvF/B;EACE;;AAEF;EACE;;;AAUJ;EACE;EACA;EACA;EACA;;;AAmBA;EAEE;IACE;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAIF;IACE;;EAGF;IACE;IACA;;EAEA;AAAA;AAAA;IAGE;;EAKJ;IACE;;EAGF;IACE;IACA;;EAKF;AAAA;IAEE;IACA;IACA;IACA;;EAEA;AAAA;IACE;;EAGJ;AAAA;IAEE;IACA;;EAIF;IACE;;;;AAqBJ;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;AAIF;AAAA;EAEE;;AAIF;EJriBA;EACA;;AJHA;EAEE;EACA;;AAEF;EACE;;AQuiBF;EACE;IACE;IACA;IACA;;;AAQJ;EACE;;AAQA;EACE;IACE;IACA,Wd9hBkB;;;AcmiBtB;EACE;IACE;IACA,WdriBkB;;;;AgB7C1B;EACE;EACA;EACA,ahB0I+B;EgBzI/B;EACA;EACA;EACA;EACA;EACA;EACA;ECsCA;EACA,WjBNwB;EiBOxB,ajBKwB;EiBJxB,ejBkD0B;ED4G1B,qBiBrMqB;EjBsMlB,kBiBtMkB;EjBuMjB,iBiBvMiB;EjBwMb,aiBxMa;;AAKnB;EfnBF;EACA;;AewBA;EAGE,OhBqH6B;EgBpH7B;;AAGF;EAEE;EACA;EjB2BF,oBiB1BE;EjB2BM,YiB3BN;;AAGF;EAGE,QhBuL6B;EkBnO/B;EACA,SF4CmB;EjBmBnB,oBiBlBE;EjBmBM,YiBnBN;;;AAOF;EAEE;;;AAQJ;EC7DE,OjBiJ+B;EiBhJ/B,kBjBiJ+B;EiBhJ/B,cjBiJ+B;;AiB/I/B;EAEE,OjB2I6B;EiB1I7B;EACA;;AAEF;EACE,OjBsI6B;EiBrI7B;EACA;;AAEF;EAGE,OjB+H6B;EiB9H7B;EACA;EACA;;AAEA;EAGE,OjBuH2B;EiBtH3B;EACA;;AAMF;EAGE,kBjB6G2B;EiB5G3B,cjB6G2B;;AiBzG/B;EACE,OjBuG6B;EiBtG7B,kBjBqG6B;;;AgBjFjC;EChEE,OjBqJ+B;EiBpJ/B,kBjBUsB;EiBTtB,cjBqJ+B;;AiBnJ/B;EAEE,OjB+I6B;EiB9I7B;EACA;;AAEF;EACE,OjB0I6B;EiBzI7B;EACA;;AAEF;EAGE,OjBmI6B;EiBlI7B;EACA;EACA;;AAEA;EAGE,OjB2H2B;EiB1H3B;EACA;;AAMF;EAGE,kBjB1BkB;EiB2BlB,cjBiH2B;;AiB7G/B;EACE,OjBhCoB;EiBiCpB,kBjByG6B;;;AgBjFjC;ECpEE,OjByJ+B;EiBxJ/B,kBjBWsB;EiBVtB,cjByJ+B;;AiBvJ/B;EAEE,OjBmJ6B;EiBlJ7B;EACA;;AAEF;EACE,OjB8I6B;EiB7I7B;EACA;;AAEF;EAGE,OjBuI6B;EiBtI7B;EACA;EACA;;AAEA;EAGE,OjB+H2B;EiB9H3B;EACA;;AAMF;EAGE,kBjBzBkB;EiB0BlB,cjBqH2B;;AiBjH/B;EACE,OjB/BoB;EiBgCpB,kBjB6G6B;;;AgBjFjC;ECxEE,OjB6J+B;EiB5J/B,kBjBYsB;EiBXtB,cjB6J+B;;AiB3J/B;EAEE,OjBuJ6B;EiBtJ7B;EACA;;AAEF;EACE,OjBkJ6B;EiBjJ7B;EACA;;AAEF;EAGE,OjB2I6B;EiB1I7B;EACA;EACA;;AAEA;EAGE,OjBmI2B;EiBlI3B;EACA;;AAMF;EAGE,kBjBxBkB;EiByBlB,cjByH2B;;AiBrH/B;EACE,OjB9BoB;EiB+BpB,kBjBiH6B;;;AgBjFjC;EC5EE,OjBiK+B;EiBhK/B,kBjBasB;EiBZtB,cjBiK+B;;AiB/J/B;EAEE,OjB2J6B;EiB1J7B;EACA;;AAEF;EACE,OjBsJ6B;EiBrJ7B;EACA;;AAEF;EAGE,OjB+I6B;EiB9I7B;EACA;EACA;;AAEA;EAGE,OjBuI2B;EiBtI3B;EACA;;AAMF;EAGE,kBjBvBkB;EiBwBlB,cjB6H2B;;AiBzH/B;EACE,OjB7BoB;EiB8BpB,kBjBqH6B;;;AgBjFjC;EChFE,OjBqK+B;EiBpK/B,kBjBcsB;EiBbtB,cjBqK+B;;AiBnK/B;EAEE,OjB+J6B;EiB9J7B;EACA;;AAEF;EACE,OjB0J6B;EiBzJ7B;EACA;;AAEF;EAGE,OjBmJ6B;EiBlJ7B;EACA;EACA;;AAEA;EAGE,OjB2I2B;EiB1I3B;EACA;;AAMF;EAGE,kBjBtBkB;EiBuBlB,cjBiI2B;;AiB7H/B;EACE,OjB5BoB;EiB6BpB,kBjByH6B;;;AgB5EjC;EACE;EACA,OhBhFsB;EgBiFtB;;AAEA;EAKE;EjBrCF,oBiBsCE;EjBrCM,YiBqCN;;AAEF;EAIE;;AAEF;EAEE,OhBhFoB;EgBiFpB,iBhB/EoB;EgBgFpB;;AAIA;EAEE,OhB9GmB;EgB+GnB;;;AASN;EC9EE;EACA,WjBLwB;EiBMxB,ajBgD0B;EiB/C1B,ejBmD0B;;;AgB4B5B;EClFE;EACA,WjBJwB;EiBKxB,ajBiD0B;EiBhD1B,ejBoD0B;;;AgB+B5B;ECtFE;EACA,WjBJwB;EiBKxB,ajBiD0B;EiBhD1B,ejBoD0B;;;AgBuC5B;EACE;EACA;;;AAIF;EACE;;;AAOA;AAAA;AAAA;EACE;;;AG5JJ;EACE;EpB+KA,oBoB9KA;EpB+KK,eoB/KL;EpBgLQ,YoBhLR;;AAEA;EACE;;;AAIJ;EACE;;AAEA;EAAY;;;AAKd;EAAoB;;;AAEpB;EAAoB;;;AAEpB;EACE;EACA;EACA;EpB6JA,6BoB5JA;EpB6JQ,qBoB7JR;EpBoKA,6BoBnKA;EpBoKQ,qBoBpKR;EpBuKA,oCoBtKoC;EpBuK5B,4BoBvK4B;;;AC9BtC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AAAA;EAEE;;;AAIF;EACE;;;AAIF;EACE;EACA;EACA;EACA,SpBmPyB;EoBlPzB;EACA;EACA;EACA;EACA;EACA,WpBWwB;EoBVxB;EACA;EACA,kBpBoM+B;EoBnM/B;EACA;EACA;EACA,epB8D0B;EDzC1B,oBqBpBA;ErBqBQ,YqBrBR;;AAKA;EACE;EACA;;AAIF;ECtDA;EACA;EACA;EACA,kBrB6O+B;;AoBrL/B;EACE;EACA;EACA;EACA;EACA,apBNsB;EoBOtB,OpB1DqB;EoB2DrB;;AAEA;EAEE,OpB+K2B;EoB9K3B;EACA,kBpB+K2B;;;AoBxK/B;EAGE,OpB2BwB;EoB1BxB;EACA,kBpBxEoB;EoByEpB;;;AASF;EAGE,OpBxFqB;;AoB4FvB;EAEE;EACA,QpB0H6B;EoBzH7B;EACA;EEzGF;;;AFiHA;EACE;;AAIF;EACE;;;AAQJ;EACE;EACA;;;AAQF;EACE;EACA;;;AAIF;EACE;EACA;EACA,WpBnGwB;EoBoGxB,apB1FwB;EoB2FxB,OpB5IuB;EoB6IvB;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;;;AAWA;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;EACA;;;AASJ;EAEI;IACE;IAAU;;EAIZ;IACE;IAAS;;;AG5Mf;AAAA;EAEE;EACA;EACA;;AACA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAIE;;;AAOJ;AAAA;AAAA;AAAA;EAIE;;;AAKJ;EACE;;AjBtBA;EAEE;EACA;;AAEF;EACE;;AiBmBF;AAAA;AAAA;EAGE;;AAEF;AAAA;AAAA;EAGE;;;AAIJ;EACE;;;AAIF;EACE;;AACA;EClDA,yBDmD+B;EClD/B,4BDkD+B;;;AAIjC;AAAA;EC/CE,wBDiD4B;EChD5B,2BDgD4B;;;AAI9B;EACE;;;AAEF;EACE;;;AAGA;AAAA;ECpEA,yBDsE+B;ECrE/B,4BDqE+B;;;AAGjC;ECjEE,wBDkE4B;ECjE5B,2BDiE4B;;;AAI9B;AAAA;EAEE;;;AAiBF;EACE;EACA;;;AAEF;EACE;EACA;;;AAKF;ExB/CE,oBwBgDA;ExB/CQ,YwB+CR;;AAGA;ExBnDA,oBwBoDE;ExBnDM,YwBmDN;;;AAMJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAQA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AjBzIF;EAEE;EACA;;AAEF;EACE;;AiByIA;EACE;;AAIJ;AAAA;AAAA;AAAA;EAIE;EACA;;;AAKF;EACE;;AAEF;EC3KA,wBxB0G0B;EwBzG1B,yBxByG0B;EwBlG1B,4BDqKgC;ECpKhC,2BDoKgC;;AAEhC;EC/KA,wBDgL6B;EC/K7B,yBD+K6B;ECxK7B,4BxBkG0B;EwBjG1B,2BxBiG0B;;;AuB0E5B;EACE;;;AAGA;AAAA;EChLA,4BDkLgC;ECjLhC,2BDiLgC;;;AAGlC;EC7LE,wBD8L2B;EC7L3B,yBD6L2B;;;AAO7B;EACE;EACA;EACA;EACA;;AACA;AAAA;EAEE;EACA;EACA;;AAEF;EACE;;AAGF;EACE;;;AAoBA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;;AE1ON;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAGF;EAGE;EACA;EAKA;EAEA;EACA;;AAEA;EACE;;;AAwBN;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;;;AAKF;EACE;EACA,WzB3BwB;EyB4BxB;EACA;EACA,OzBpEuB;EyBqEvB;EACA,kBzBpEuB;EyBqEvB;EACA,ezBwB0B;;AyBrB1B;AAAA;AAAA;EACE;EACA,WzBrCsB;EyBsCtB,ezBoBwB;;AyBlB1B;AAAA;AAAA;EACE;EACA,WzB3CsB;EyB4CtB,ezBcwB;;AyBV1B;AAAA;EAEE;;;AAKJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDpGE,yBC2G6B;ED1G7B,4BC0G6B;;;AAE/B;EACE;;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EDxGE,wBC+G4B;ED9G5B,2BC8G4B;;;AAE9B;EACE;;;AAKF;EACE;EAGA;EACA;;AAIA;EACE;;AACA;EACE;;AAGF;EAGE;;AAMF;AAAA;EAEE;;AAIF;AAAA;EAEE;EACA;;;AC/JN;EACE;EACA;EACA;;ApBEA;EAEE;EACA;;AAEF;EACE;;AoBLF;EACE;EACA;;AAEA;EACE;EACA;EACA,S1BqZsC;;A0BpZtC;EAEE;EACA,kB1BViB;;A0BerB;EACE,O1BjBmB;;A0BmBnB;EAEE,O1BrBiB;E0BsBjB;EACA,Q1BkMyB;E0BjMzB;;AAOJ;EAGE,kB1BjCmB;E0BkCnB,c1BhCkB;;A0ByCtB;ELrDA;EACA;EACA;EACA,kBAJyB;;AK6DzB;EACE;;;AASJ;EACE;;AACA;EACE;EAEA;;AAGA;EACE;EACA,a1BtBoB;E0BuBpB;EACA;;AACA;EACE;;AAMF;EAGE,O1BrFiB;E0BsFjB;EACA,kB1BrFiB;E0BsFjB;EACA;;AAeN;EACE;;AAGA;EACE,e1BbsB;;A0BexB;EACE;;AAKA;EAGE,O1BnBoB;E0BoBpB,kB1BrHgB;;;A0B8HtB;EACE;;AACA;EACE;EACA;;;AAYN;EACE;;AAEA;EACE;;AACA;EACE;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;IACE;IACA;;EACA;IACE;;;;AASR;EACE;;AAEA;EAEE;EACA,e1BtFwB;;A0ByF1B;AAAA;AAAA;EAGE;;AAGF;EACE;IACE;IACA;;EAEF;AAAA;AAAA;IAGE,qB1BrMmB;;;;A0BgNvB;EACE;;AAEF;EACE;;;AASJ;EAEE;EF3OA,wBE6O2B;EF5O3B,yBE4O2B;;;ACtO7B;EACE;EACA,Y3BgWiC;E2B/VjC,e3BoDwB;E2BnDxB;;ArBDA;EAEE;EACA;;AAEF;EACE;;AqBAF;EATF;IAUI,e3ByFwB;;;;AMhG1B;EAEE;EACA;;AAEF;EACE;;AqBcF;EAHF;IAII;;;;AAeJ;EACE,e3B6TiC;E2B5TjC,c3B4TiC;E2B3TjC;EACA;EACA;EAEA;;ArB3CA;EAEE;EACA;;AAEF;EACE;;AqBuCF;EACE;;AAGF;EAbF;IAcI;IACA;IACA;;EAEA;IACE;IACA;IACA;IACA;;EAGF;IACE;;EAKF;IAGE;IACA;;;;AAKN;AAAA;EAWE;EACA;EACA;EACA,S3BiLyB;;A2B7LzB;AAAA;EACE,Y3BqR+B;;A2BnR/B;EAHF;AAAA;IAII;;;AAWJ;EAjBF;AAAA;IAkBI;;;;AAIJ;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAUA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEA;EALF;AAAA;AAAA;AAAA;IAMI;IACA;;;;AAaN;EACE,S3B+HyB;E2B9HzB;;AAEA;EAJF;IAKI;;;;AAOJ;EACE;EACA,Q3B0MiC;E2BzMjC;EACA,W3BhHwB;E2BiHxB,a3BpGwB;;A2BsGxB;EAEE;;AAGF;EACE;;AAGF;EACE;IAEE;;;;AAWN;EACE;EACA;EACA;EACA,c3B6KiC;E4BzWjC;EACA;ED6LA;EACA;EACA;EACA,e3B1F0B;;A2B8F1B;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AAGF;EA5BF;IA6BI;;;;AAUJ;EACE;;AAEA;EACE;EACA;EACA,a3B1KsB;;A2B6KxB;EAEE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EACA;AAAA;IAEE;;EAEF;IACE,a3B5LkB;;E2B6LlB;IAEE;;;AAOR;EAlCF;IAmCI;IACA;;EAEA;IACE;;EACA;IACE,a3BkG2B;I2BjG3B,gB3BiG2B;;;;A2BrFnC;EACE;EACA;EACA;EACA;EACA;E5B5NA,oB4B8NA;E5B7NQ,Y4B6NR;EC5RA;EACA;;Ad0cA;EAEE;IACE;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAIF;IACE;;EAGF;IACE;IACA;;EAEA;AAAA;AAAA;IAGE;;EAKJ;IACE;;EAGF;IACE;IACA;;EAKF;AAAA;IAEE;IACA;IACA;IACA;;EAEA;AAAA;IACE;;EAGJ;AAAA;IAEE;IACA;;EAIF;IACE;;;AavOF;EADF;IAEI;;EAEA;IACE;;;AASN;EA1BF;IA2BI;IACA;IACA;IACA;IACA;IACA;I5BvPF,oB4BwPE;I5BvPM,Y4BuPN;;;;AAQJ;EACE;EHlUA,wBGmU2B;EHlU3B,yBGkU2B;;;AAG7B;EACE;EHvUA,wBxB0G0B;EwBzG1B,yBxByG0B;EwBlG1B,4BGiU8B;EHhU9B,2BGgU8B;;;AAQhC;EC9UE;EACA;;ADgVA;ECjVA;EACA;;ADmVA;ECpVA;EACA;;;AD6VF;EC9VE;EACA;;ADgWA;EAHF;IAII;IACA,c3BM+B;I2BL/B,a3BK+B;;;;A2BQnC;EACE;IACE;;;EAEF;IACE;IACF;;EAEE;IACE;;;AAUN;EACE,kB3BvBiC;E2BwBjC,c3BvBiC;;A2ByBjC;EACE,O3BvBuC;;A2BwBvC;EAEE,O3BhBqC;E2BiBrC,kB3BhBqC;;A2BoBzC;EACE,O3BrC+B;;A2ByC/B;EACE,O3BrCqC;;A2BuCrC;EAEE,O3BxCmC;E2ByCnC,kB3BxCmC;;A2B4CrC;EAGE,O3B9CmC;E2B+CnC,kB3B9CmC;;A2BkDrC;EAGE,O3BpDmC;E2BqDnC,kB3BpDmC;;A2B2DrC;EAGE,O3BjEmC;E2BkEnC,kB3BjEmC;;A2BqEvC;EAGI;IACE,O3B7EiC;;E2B8EjC;IAEE,O3B/E+B;I2BgF/B,kB3B/E+B;;E2BmFjC;IAGE,O3BrF+B;I2BsF/B,kB3BrF+B;;E2ByFjC;IAGE,O3B3F+B;I2B4F/B,kB3B3F+B;;;A2BkGzC;EACE,c3BzFuC;;A2B0FvC;EAEE,kB3B9FqC;;A2BgGvC;EACE,kB3BhGqC;;A2BoGzC;AAAA;EAEE,c3BxH+B;;A2BgIjC;EACE,O3B9HuC;;A2B+HvC;EACE,O3B/HqC;;A2BmIzC;EACE,O3BrIuC;;A2BsIvC;EAEE,O3BvIqC;;A2B2IrC;EAEE,O3BzImC;;;A2BiJ3C;EACE,kB3BjI0C;E2BkI1C,c3BjI0C;;A2BmI1C;EACE,O3BjIwC;;A2BkIxC;EAEE,O3B1HsC;E2B2HtC,kB3B1HsC;;A2B8H1C;EACE,O3B/IwC;;A2BmJxC;EACE,O3B/IsC;;A2BiJtC;EAEE,O3BlJoC;E2BmJpC,kB3BlJoC;;A2BsJtC;EAGE,O3B1JoC;E2B2JpC,kB3BxJoC;;A2B4JtC;EAGE,O3B9JoC;E2B+JpC,kB3B9JoC;;A2BoKtC;EAGE,O3B5KoC;E2B6KpC,kB3B1KoC;;A2B8KxC;EAGI;IACE,c3BzLkC;;E2B2LpC;IACE,kB3B5LkC;;E2B8LpC;IACE,O3B5LkC;;E2B6LlC;IAEE,O3B9LgC;I2B+LhC,kB3B9LgC;;E2BkMlC;IAGE,O3BtMgC;I2BuMhC,kB3BpMgC;;E2BwMlC;IAGE,O3B1MgC;I2B2MhC,kB3B1MgC;;;A2BkN1C;EACE,c3BzMwC;;A2B0MxC;EAEE,kB3B9MsC;;A2BgNxC;EACE,kB3BhNsC;;A2BoN1C;AAAA;EAEE;;AAGF;EACE,O3BzOwC;;A2B0OxC;EACE,O3B1OsC;;A2B8O1C;EACE,O3BhPwC;;A2BiPxC;EAEE,O3BlPsC;;A2BsPtC;EAEE,O3BpPoC;;;A6BlZ5C;EACE;EACA,e7B0DwB;E6BzDxB;EACA,kB7BoxB8B;E6BnxB9B,e7BmG0B;;A6BjG1B;EACE;;AAEA;EACE;EACA,O7B8wB0B;E6B3wB1B;;AAIJ;EACE,O7BXqB;;;A8BXzB;EACE;EACA;EACA;EACA,e9BsG0B;;A8BpG1B;EACE;;AACA;AAAA;EAEE;EACA;EACA;EACA;EACA,a9B8CoB;E8B7CpB,O9BDkB;E8BElB;EACA,kB9BmbiC;E8BlbjC;;AAEA;AAAA;AAAA;EAEE;EACA,O9BUgB;E8BThB,kB9BZiB;E8BajB,c9Bgb+B;;A8B5ajC;AAAA;EAEE;ENnBN,wBxB8F0B;EwB7F1B,2BxB6F0B;;A8BtEtB;AAAA;ENhCJ,yBxBsG0B;EwBrG1B,4BxBqG0B;;A8B7DxB;AAAA;AAAA;AAAA;EAGE;EACA,O9B0ZiC;E8BzZjC;EACA,kB9BrCkB;E8BsClB,c9BtCkB;;A8B2CpB;AAAA;AAAA;AAAA;AAAA;AAAA;EAME,O9BpDmB;E8BqDnB,Q9BoK2B;E8BnK3B,kB9B+YiC;E8B9YjC,c9B+YiC;;;A+BhdnC;AAAA;EAEE;EACA,W/B6CoB;E+B5CpB,a/BkGsB;;A+B/FtB;AAAA;EPIJ,wBxB+F0B;EwB9F1B,2BxB8F0B;;A+B7FtB;AAAA;EPVJ,yBxBuG0B;EwBtG1B,4BxBsG0B;;;A+B1GxB;AAAA;EAEE;EACA,W/B8CoB;E+B7CpB,a/BmGsB;;A+BhGtB;AAAA;EPIJ,wBxBgG0B;EwB/F1B,2BxB+F0B;;A+B9FtB;AAAA;EPVJ,yBxBwG0B;EwBvG1B,4BxBuG0B;;;AgC1G5B;EACE;EACA;EACA;EACA;;A1BIA;EAEE;EACA;;AAEF;EACE;;A0BRF;EACE;;AACA;AAAA;EAEE;EACA;EACA,kBhCsbiC;EgCrbjC;EACA,ehC0ciC;;AgCvcnC;AAAA;EAEE;EACA,kBhCVmB;;AgCerB;AAAA;EAEE;;AAKF;AAAA;EAEE;;AAKF;AAAA;AAAA;AAAA;EAIE,OhClCmB;EgCmCnB,QhCsL2B;EgCrL3B,kBhCqZiC;;;AiCncvC;EACE;EACA;EACA;EACA;EACA;EACA,OjC+jB4B;EiC9jB5B;EACA;EACA;EACA;;AAKA;EACE;;AAIF;EACE;EACA;;;AAMF;EAEE,OjCyiB0B;EiCxiB1B;EACA;;;AAOJ;ECxCE,kBlCWuB;;AkCRrB;EAEE;;;ADuCN;EC5CE,kBlCcsB;;AkCXpB;EAEE;;;AD2CN;EChDE,kBlCesB;;AkCZpB;EAEE;;;AD+CN;ECpDE,kBlCgBsB;;AkCbpB;EAEE;;;ADmDN;ECxDE,kBlCiBsB;;AkCdpB;EAEE;;;ADuDN;EC5DE,kBlCkBsB;;AkCfpB;EAEE;;;ACFN;EACE;EACA;EACA;EACA,WnC2CwB;EmC1CxB,anCswB4B;EmCrwB5B,anCswB4B;EmCrwB5B,OnC0vB4B;EmCzvB5B;EACA;EACA;EACA,kBnCHuB;EmCIvB,enCiwB4B;;AmC9vB5B;EACE;;AAIF;EACE;EACA;;AAGF;EAEE;EACA;;AAMF;EAEE,OnCzBoB;EmC0BpB,kBnCouB0B;;AmCjuB5B;EACE;;AAGF;EACE;;AAGF;EACE;;;AAMF;EAEE,OnC0sB0B;EmCzsB1B;EACA;;;AC5DJ;EACE,apCqe+B;EoCpe/B,gBpCoe+B;EoCne/B,epCme+B;EoCle/B,OpCme+B;EoCle/B,kBpCKuB;;AoCHvB;AAAA;EAEE,OpCge6B;;AoC7d/B;EACE;EACA,WpC4d6B;EoC3d7B;;AAGF;EACE;;AAGF;EAEE;EACA;EACA,epC+EwB;;AoC5E1B;EACE;;AAGF;EAjCF;IAkCI;IACA;;EAEA;IAEE;IACA;;EAGF;AAAA;IAEE,WpC8b2B;;;;AqC1ejC;EACE;EACA,SrCquB4B;EqCpuB5B,erCwDwB;EqCvDxB,arCqDwB;EqCpDxB,kBrCIuB;EqCHvB;EACA,erCgG0B;ED4E1B,oBsC3KA;EtC4KK,esC5KL;EtC6KQ,YsC7KR;;AAEA;AAAA;EnCZA,SAD8B;EAE9B;EACA;EmCaE;EACA;;AAMF;EACE,SrC6tB0B;EqC5tB1B,OrCjBqB;;;AqCsBzB;AAAA;AAAA;EAGE,crCnBsB;;;AsCTxB;EACE,StC0mB4B;EsCzmB5B,etCuDwB;EsCtDxB;EACA,etCiG0B;;AsC9F1B;EACE;EACA;;AAIF;EACE,atC+lB0B;;AsC3lB5B;AAAA;EAEE;;AAGF;EACE;;;AASJ;AAAA;EAEE;;AAGA;AAAA;EACE;EACA;EACA;EACA;;;AAQJ;ECvDE,OvCof+B;EuCnf/B,kBvCof+B;EuCnf/B,cvCof+B;;AuClf/B;EACE;;AAGF;EACE;;;ADkDJ;EC3DE,OvCwf+B;EuCvf/B,kBvCwf+B;EuCvf/B,cvCwf+B;;AuCtf/B;EACE;;AAGF;EACE;;;ADsDJ;EC/DE,OvC4f+B;EuC3f/B,kBvC4f+B;EuC3f/B,cvC4f+B;;AuC1f/B;EACE;;AAGF;EACE;;;AD0DJ;ECnEE,OvCggB+B;EuC/f/B,kBvCggB+B;EuC/f/B,cvCggB+B;;AuC9f/B;EACE;;AAGF;EACE;;;ACHJ;EACE;IAAQ;;EACR;IAAQ;;;AAIV;EACE;IAAQ;;EACR;IAAQ;;;AAQV;EACE,QxCuCwB;EwCtCxB,exCsCwB;EwCrCxB;EACA,kBxCgnB4B;EwC/mB5B,exC+E0B;EDzC1B,oByCrCA;EzCsCQ,YyCtCR;;;AAIF;EACE;EACA;EACA;EACA,WxCcwB;EwCbxB,axCyBwB;EwCxBxB,OxCsmB4B;EwCrmB5B;EACA,kBxC1BsB;EDmDtB,oByCxBA;EzCyBQ,YyCzBR;EzC6IA,oByC5IA;EzC6IK,eyC7IL;EzC8IQ,YyC9IR;;;AAQF;AAAA;ECDE;EACA;EACA;EDEA;;;AAOF;AAAA;EzC5CE,mByC8CmB;EzC7Cd,cyC6Cc;EzC5CX,WyC4CW;;;AAOrB;EErEE,kB1CesB;;A0CZtB;ED8CA;EACA;EACA;;;ADsBF;EEzEE,kB1CgBsB;;A0CbtB;ED8CA;EACA;EACA;;;AD0BF;EE7EE,kB1CiBsB;;A0CdtB;ED8CA;EACA;EACA;;;AD8BF;EEjFE,kB1CkBsB;;A0CftB;ED8CA;EACA;EACA;;;AEtDF;EAEE;;AAEA;EACE;;;AAIJ;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAGF;EACE;;AAGA;EACE;;;AAIJ;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAMF;EACE;EACA;;;ACvDF;EAEE;EACA;;;AAQF;EACE;EACA;EACA;EAEA;EACA,kB5C0oB8B;E4CzoB9B;;AAGA;EpB3BA,wBxB0G0B;EwBzG1B,yBxByG0B;;A4C5E1B;EACE;EpBvBF,4BxBkG0B;EwBjG1B,2BxBiG0B;;A4CtE1B;EAGE,O5C5BqB;E4C6BrB,Q5C4L6B;E4C3L7B,kB5C7BqB;;A4CgCrB;EACE;;AAEF;EACE,O5CrCmB;;A4C0CvB;EAGE;EACA,O5CsDwB;E4CrDxB,kB5C5CoB;E4C6CpB,c5C7CoB;;A4CgDpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEF;EACE,O5C4mB0B;;;A4CjmBhC;AAAA;EAEE,O5CwmB8B;;A4CtmB9B;AAAA;EACE,O5CumB4B;;A4CnmB9B;AAAA;AAAA;EAEE,O5C+lB4B;E4C9lB5B;EACA,kB5C4kB4B;;;A4CxkBhC;EACE;EACA;;;AClGA;EACE,O7Cmf6B;E6Clf7B,kB7Cmf6B;;;A6C9e/B;AAAA;EAEE,O7C2e6B;;A6Cze7B;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,O7Cme2B;E6Cle3B;;AAEF;AAAA;AAAA;AAAA;EAGE;EACA,kB7C4d2B;E6C3d3B,c7C2d2B;;;A6Cpf/B;EACE,O7Cuf6B;E6Ctf7B,kB7Cuf6B;;;A6Clf/B;AAAA;EAEE,O7C+e6B;;A6C7e7B;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,O7Cue2B;E6Cte3B;;AAEF;AAAA;AAAA;AAAA;EAGE;EACA,kB7Cge2B;E6C/d3B,c7C+d2B;;;A6Cxf/B;EACE,O7C2f6B;E6C1f7B,kB7C2f6B;;;A6Ctf/B;AAAA;EAEE,O7Cmf6B;;A6Cjf7B;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,O7C2e2B;E6C1e3B;;AAEF;AAAA;AAAA;AAAA;EAGE;EACA,kB7Coe2B;E6Cne3B,c7Cme2B;;;A6C5f/B;EACE,O7C+f6B;E6C9f7B,kB7C+f6B;;;A6C1f/B;AAAA;EAEE,O7Cuf6B;;A6Crf7B;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,O7C+e2B;E6C9e3B;;AAEF;AAAA;AAAA;AAAA;EAGE;EACA,kB7Cwe2B;E6Cve3B,c7Cue2B;;;A4C3YjC;EACE;EACA;;;AAEF;EACE;EACA;;;AExHF;EACE,e9C0DwB;E8CzDxB,kB9C6rB4B;E8C5rB5B;EACA,e9CmG0B;EDzC1B,oB+CzDA;E/C0DQ,Y+C1DR;;;AAIF;EACE,S9CsrB4B;;AMzrB5B;EAEE;EACA;;AAEF;EACE;;;AwCEJ;EACE,S9CirB4B;E8ChrB5B;EtBpBA,wBsBqB2B;EtBpB3B,yBsBoB2B;;AAE3B;EACE;;;AAKJ;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAKJ;EACE,S9CspB4B;E8CrpB5B,kB9C2pB4B;E8C1pB5B;EtBxCA,4BsByC8B;EtBxC9B,2BsBwC8B;;;AAU9B;AAAA;EAEE;;AAEA;AAAA;EACE;EACA;;AAKA;AAAA;EACE;EtBvEN,wBsBwEiC;EtBvEjC,yBsBuEiC;;AAM7B;AAAA;EACE;EtBvEN,4BsBwEoC;EtBvEpC,2BsBuEoC;;AAKlC;EtBrFF,wBsBsF+B;EtBrF/B,yBsBqF+B;;;AAM/B;EACE;;;AAGJ;EACE;;;AASA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;EACE,e9CmlBwB;E8CllBxB,c9CklBwB;;A8C9kB5B;AAAA;EtBrHA,wBsBuH6B;EtBtH7B,yBsBsH6B;;AAIzB;AAAA;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAMR;AAAA;EtBnIA,4BsBqIgC;EtBpIhC,2BsBoIgC;;AAI5B;AAAA;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKR;AAAA;AAAA;AAAA;EAIE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EAEE;;AAKI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAOF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAOF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKR;EACE;EACA;;;AAUJ;EACE,e9C7JwB;;A8CgKxB;EACE;EACA,e9CtHwB;;A8CwHxB;EACE;;AAIJ;EACE;;AAEA;AAAA;EAEE;;AAIJ;EACE;;AACA;EACE;;;AAON;EC1PE,c/C6sB4B;;A+C3sB5B;EACE,O/CMqB;E+CLrB,kB/C0sB0B;E+CzsB1B,c/CwsB0B;;A+CtsB1B;EACE,kB/CqsBwB;;A+CnsB1B;EACE,O/CmsBwB;E+ClsBxB,kB/CHmB;;A+COrB;EACE,qB/C4rBwB;;;A8Chd9B;EC7PE,c/CcsB;;A+CZtB;EACE,O/C6sB0B;E+C5sB1B,kB/CUoB;E+CTpB,c/CSoB;;A+CPpB;EACE,kB/CMkB;;A+CJpB;EACE,O/CGkB;E+CFlB,kB/CosBwB;;A+ChsB1B;EACE,qB/CHkB;;;A8CkPxB;EChQE,c/Csf+B;;A+Cpf/B;EACE,O/Cif6B;E+Chf7B,kB/Cif6B;E+Chf7B,c/Cif6B;;A+C/e7B;EACE,kB/C8e2B;;A+C5e7B;EACE,O/C0e2B;E+Cze3B,kB/Cwe2B;;A+Cpe7B;EACE,qB/Cqe2B;;;A8CnPjC;ECnQE,c/C0f+B;;A+Cxf/B;EACE,O/Cqf6B;E+Cpf7B,kB/Cqf6B;E+Cpf7B,c/Cqf6B;;A+Cnf7B;EACE,kB/Ckf2B;;A+Chf7B;EACE,O/C8e2B;E+C7e3B,kB/C4e2B;;A+Cxe7B;EACE,qB/Cye2B;;;A8CpPjC;ECtQE,c/C8f+B;;A+C5f/B;EACE,O/Cyf6B;E+Cxf7B,kB/Cyf6B;E+Cxf7B,c/Cyf6B;;A+Cvf7B;EACE,kB/Csf2B;;A+Cpf7B;EACE,O/Ckf2B;E+Cjf3B,kB/Cgf2B;;A+C5e7B;EACE,qB/C6e2B;;;A8CrPjC;ECzQE,c/CkgB+B;;A+ChgB/B;EACE,O/C6f6B;E+C5f7B,kB/C6f6B;E+C5f7B,c/C6f6B;;A+C3f7B;EACE,kB/C0f2B;;A+Cxf7B;EACE,O/Csf2B;E+Crf3B,kB/Cof2B;;A+Chf7B;EACE,qB/Cif2B;;;AgDjgBjC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;;;AAIF;EACE;;;AC3BF;EACE;EACA;EACA;EACA,kBjDqvB4B;EiDpvB5B;EACA,ejDiG0B;EDzC1B,oBkDvDA;ElDwDQ,YkDxDR;;AACA;EACE;EACA;;;AAKJ;EACE;EACA,ejDuF0B;;;AiDrF5B;EACE;EACA,ejDoF0B;;;AkD1G5B;EACE;EACA;EACA,alDmzB4B;EkDlzB5B;EACA,OlDkzB4B;EkDjzB5B,alDkzB4B;EkBzzB5B;EACA,SgCOiB;;AAEjB;EAEE,OlD4yB0B;EkD3yB1B;EACA;EhCdF;EACA,SgCcmB;;;AAUrB;EACE;EACA;EACA;EACA;EACA;EACA;;;ACzBF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,SnDqQyB;EmDpQzB;EACA;EACA;EAIA;;AAGA;EpD0GA;EACI;EACC;EACG;EAkER;EACG;EACE;EACG;;AoD9KR;EpDsGA;EACI;EACC;EACG;;;AoDvGV;EACE;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA,kBnDuiB6C;EmDtiB7C;EACA;EACA;EACA,enDsD0B;ED1C1B,oBoDXA;EpDYQ,YoDZR;EAEA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,SnDoNyB;EmDnNzB,kBnD4hB4B;;AmD1hB5B;EjCpEA;EACA,SiCmE0B;;AAC1B;EjCrEA;EACA,SlB+lB4B;;;AmDthB9B;EACE,SnDugB4B;EmDtgB5B;;A7CnEA;EAEE;EACA;;AAEF;EACE;;;A6CiEJ;EACE;;;AAIF;EACE;EACA,anD5BwB;;;AmDiC1B;EACE;EACA,SnDif4B;;;AmD7e9B;EACE,SnD4e4B;EmD3e5B;EACA;;A7C5FA;EAEE;EACA;;AAEF;EACE;;A6C0FF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AAKJ;EACE;EACA;EACA;EACA;EACA;;;AAIF;EAEE;IACE,OnDme0B;ImDle1B;;;EAEF;IpDvEA,oBoDwEE;IpDvEM,YoDuEN;;;EAIF;IAAY,OnD4dgB;;;AmDzd9B;EACE;IAAY,OnDsdgB;;;AoDpmB9B;EACE;EACA,SpD+QyB;EoD9QzB;ECRA,arD4CwB;EqD1CxB;EACA;EACA,arD0DwB;EqDzDxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDHA,WpDwCwB;EkBjDxB;EACA,SkCUiB;;AAEjB;ElCbA;EACA,SlB6gB4B;;AoDhgB5B;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA,kBpDwe0B;;AoDte5B;EACE,OpDye0B;EoDxe1B;EACA;EACA;EACA,kBpDie0B;;AoD/d5B;EACE;EACA,MpDie0B;EoDhe1B;EACA;EACA,kBpD0d0B;;AoDxd5B;EACE;EACA;EACA;EACA;EACA,oBpDmd0B;;AoDjd5B;EACE;EACA;EACA;EACA;EACA,mBpD4c0B;;AoD1c5B;EACE;EACA;EACA;EACA;EACA,qBpDqc0B;;AoDnc5B;EACE;EACA,OpDqc0B;EoDpc1B;EACA;EACA,qBpD8b0B;;AoD5b5B;EACE;EACA,MpD8b0B;EoD7b1B;EACA;EACA,qBpDub0B;;;AoDlb9B;EACE,WpD6a4B;EoD5a5B;EACA,OpD6a4B;EoD5a5B;EACA,kBpD6a4B;EoD5a5B,epDQ0B;;;AoDJ5B;EACE;EACA;EACA;EACA;EACA;;;AEzGF;EACE;EACA;EACA;EACA,StD6QyB;EsD5QzB;EACA,WtDshBoC;EsDrhBpC;EDXA,arD4CwB;EqD1CxB;EACA;EACA,arD0DwB;EqDzDxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ECAA,WtDmCwB;EsDlCxB,kBtD8gBoC;EsD7gBpC;EACA;EACA;EACA,etDyF0B;ED1C1B,oBuD9CA;EvD+CQ,YuD/CR;;AAGA;EAAQ;;AACR;EAAU,atDihB0B;;AsDhhBpC;EAAW,YtDghByB;;AsD/gBpC;EAAS;;AAIT;EACE,ctD+gBkC;;AsD7gBlC;EAEE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA,ctD4fgC;;AsDxfpC;EACE;EACA;EACA;EACA,kBtD6fkC;EsD5flC,kBtD0fkC;EsDzflC;;AACA;EACE;EACA;EACA;EACA,kBtDiegC;EsDhehC;;AAGJ;EACE;EACA;EACA;EACA,oBtD8ekC;EsD7elC,oBtD2ekC;EsD1elC;;AACA;EACE;EACA;EACA;EACA,oBtDkdgC;EsDjdhC;;AAGJ;EACE;EACA;EACA;EACA;EACA,qBtD8dkC;EsD7dlC,qBtD2dkC;;AsD1dlC;EACE;EACA;EACA;EACA;EACA,qBtDkcgC;;AsD9bpC;EACE;EACA;EACA;EACA;EACA,mBtD8ckC;EsD7clC,mBtD2ckC;;AsD1clC;EACE;EACA;EACA;EACA;EACA,mBtDkbgC;;;AsD7atC;EACE;EACA;EACA,WtDlEwB;EsDmExB,kBtDkboC;EsDjbpC;EACA;;;AAGF;EACE;;;ACtHF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;ExDwKF,oBwDvKE;ExDwKG,ewDxKH;ExDyKM,YwDzKN;;AAGA;AAAA;ErDjBF,SAD8B;EAE9B;EACA;EqDkBI;;AAIF;EAbF;IxD+LA;IACG;IACE;IACG;IAxJR,6BwD3BiC;IxD4B9B,0BwD5B8B;IxD6BzB,qBwD7ByB;IxDuIjC,qBwDtIyB;IxDuItB,kBwDvIsB;IxDwIjB,awDxIiB;;EAErB;IxD8GJ;IACQ;IwD5GF;;EAEF;IxDyGJ;IACQ;IwDvGF;;EAEF;IxDoGJ;IACQ;IwDjGF;;;AAKN;AAAA;AAAA;EAGE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;AAEF;AAAA;EAEE;;AAGF;EACE;;AAEF;EACE;;;AAQJ;EACE;EACA;EACA;EACA;EACA,OvD4sB4C;EuD3sB5C,WvD6sB4C;EuD5sB5C,OvDysB4C;EuDxsB5C;EACA,avDqsB4C;EuDpsB5C;ErClGA;EACA,SlByyB4C;;AuDlsB5C;EdrGA;EACA;EACA;EACA;EACA;;AcoGA;EACE;EACA;Ed1GF;EACA;EACA;EACA;EACA;;Ac2GA;EAEE,OvDorB0C;EuDnrB1C;EACA;ErCtHF;EACA,SqCsHmB;;AAInB;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;;AAEF;AAAA;EAEE;EACA;;AAEF;AAAA;EAEE;EACA;;AAEF;AAAA;EAEE;EACA;EACA;EACA;;AAIA;EACE;;AAIF;EACE;;;AAUN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EAUA;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA,kBvD+lB0C;;;AuDxlB9C;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OvDmlB4C;EuDllB5C;EACA,avDukB4C;;AuDrkB5C;EACE;;;AAMJ;EAII;AAAA;AAAA;AAAA;IAIE;IACA;IACA;IACA;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;EAKJ;IACE;IACA;IACA;;;EAIF;IACE;;;AjD/PF;EAEE;EACA;;AAEF;EACE;;;AkDRJ;ECRE;EACA;EACA;;;ADSF;EACE;;;AAEF;EACE;;;AAQF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EEzBE;EACA;EACA;EACA;EACA;;;AF8BF;EACE;;;AAOF;EACE;;;AGhCA;EACE;;ACTF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ADqBJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYE;;;AAGF;EChDE;IACE;;;EAEF;IAAmB;;;EACnB;IAAmB;;;EACnB;AAAA;IACmB;;;AD8CnB;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIJ;ECnEE;IACE;;;EAEF;IAAmB;;;EACnB;IAAmB;;;EACnB;AAAA;IACmB;;;ADiEnB;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIJ;ECtFE;IACE;;;EAEF;IAAmB;;;EACnB;IAAmB;;;EACnB;AAAA;IACmB;;;ADoFnB;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIJ;ECzGE;IACE;;;EAEF;IAAmB;;;EACnB;IAAmB;;;EACnB;AAAA;IACmB;;;ADuGnB;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIF;EADF;IAEI;;;;AAIJ;ECjHE;IACE;;;ADoHJ;ECrHE;IACE;;;ADwHJ;ECzHE;IACE;;;AD4HJ;EC7HE;IACE;;;AADF;EACE;;;ADyIJ;ECrJE;IACE;;;EAEF;IAAmB;;;EACnB;IAAmB;;;EACnB;AAAA;IACmB;;;ADkJrB;EACE;;AAEA;EAHF;IAII;;;;AAGJ;EACE;;AAEA;EAHF;IAII;;;;AAGJ;EACE;;AAEA;EAHF;IAII;;;;AAIJ;ECnKE;IACE;;;ACdJ;EACE;EACA;EACA;EAIA;EACA;;AAGF;AACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACtHF;AAAA;AAEA;EACC;;;AAGD;EACC;EACA,a9DiCyB;E8DhCzB,W9DsCyB;E8DrCzB;;;AAED;EACC;EACA;EACA;EACA;;;AAGD;AAAA;AAEA;EACC;;AAEA;EACC;;;AAIF;EACC;EACA;EACA;;AAEA;EACC,O9D3BuB;E8D4BvB;EACA;EACA;;AAEA;EACC,O9D5BqB;;;A8DiCxB;AAAA;AAAA;EAGC,kB9DpCuB;E8DqCvB;;;AAIA;EACC,kB9D1CsB;E8D2CtB;;AAEA;EACC;;AAIA;EACC;EACA;;AAIF;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAIF;EACC,Y9D9EuB;E8D+EvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAIA;EACC,O9DxHsB;E8DyHtB;;AAGD;EACC;EACA;;;AAGF;AAAA;AAEA;EACC,Y9DpIuB;E8DqIvB;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC;;AAIF;EACC;EACA;;AAEA;EACC;;;AAKH;EACC;EACA;EACA;;;AAED;AAAA;AAEA;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;AACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,O9DxMuB;E8DyMvB;;AAGD;EACC;;;AAGF;AAAA;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;;AAIF;EACC,Y9DhOwB;E8DiOxB;EACA;EACA;;AAEA;EACC,O9DhOsB;;A8DmOvB;EACC;EACA;;AAGD;EACC,O9D/OuB;;;A8DkPzB;AAAA;AAGC;EACC;EACA;;AAGD;EACC,Y9DrPsB;A8DsPtB;AACA;AAAA;AAAA;EAGA;EACA;EACA;EACA;;AAEA;EACC,O9DtQsB;;A8DyQvB;EACC;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAKH;EACC,Y9D5RuB;E8D6RvB;EAMA;EACA;;AALA;AAAA;EAEC;;AAKD;EACC,O9DlSqB;;A8DqStB;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAEA;EACC;;AAKH;EACC,Y9D7UsB;E8D8UtB;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AAGD;EACC;;AAEA;EACC;;AAGD;EACC,Y9DlWoB;E8DmWpB;EACA;EACA;;AAEA;EACC,Y9DrVmB;;A8DyVrB;EACC;;AAKH;EACC,Y9DzXuB;E8D0XvB;EACA;EACA;;AACA;EACC;;AAED;EACC;EACA;;AACA;EACC,Y9D9XoB;E8D+XpB;EACA;EACQ;EACR;EACG;EACE;EACD;;AAGN;EACC;;AACA;EACC,Y9D3YoB;E8D4YpB;EACA;;AAGF;EACC;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;;AAGD;EACC,O9DxaqB;;A8D2atB;EACC;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EACC,Y9D/amB;E8DgbnB;;AAKJ;EACC,Y9DxbuB;E8DybvB;EACA;EACA;;AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAIF;EACC;;AAIF;EACC;AACA;EACA;EACA;;AAEA;EACC,Y9DjdqB;E8DkdrB;EACA;EACA;;AAEA;EACC;EACA;;AAIF;EACC;;;AAKH;AAAA;AAEA;EACC;;;AAGD;EACC;EACA;EACA;;AAEA;EACC,O9DpfuB;E8DqfvB;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,O9DnfqB;E8DofrB;;AAGD;EACC;;AAEA;EACC,O9D3foB;E8D4fpB;;AAKH;EACC;;;AAIF;EACC;EACA;;AACA;EACC;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACC;EACA,O9DniBwB;E8DoiBxB;EACA;;AACC;EACA;EACA;;AAED;EAAI;;AACJ;EACC;;AAED;EACC;EACA;;AACA;EACC;;AAED;EACC,O9DrjBsB;;A8DwjBxB;EACC,c9DrjBuB;E8DsjBvB;EACA;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AACA;EACC;EACA;;AAEA;EACC;;;AAMJ;EACC;;AAEA;EACC;;;AAQF;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAIA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAGA;EACC;;AAED;EACA,O9DznBuB;E8D0nBvB;;AAEA;EACC;;AACA;EACC;EACA,O9DjoBqB;E8DkoBrB;EACA;EACA;EACA;EACQ;;;AAOX;EACC,O9D7oBuB;E8D8oBvB;;AAED;EACC;;AACA;EACC;EACA,O9DrpBsB;E8DspBtB;EACA;EACA;EACA;EACO;;;AAKV;AAAA;AAEA;EACC;;;AAGD;EACC;EACA;EACA;;AAEA;EACC,O9D5qBuB;E8D6qBvB;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,O9D3qBqB;E8D4qBrB;;AAGD;EACC;;AAEA;EACC,O9DnrBoB;E8DorBpB;;AAKH;EACC;EACA,O9DnsBuB;;A8DqsBvB;EACC;EACA;;AAGC;EACC,O9DnsBmB;E8DosBnB;;AAKH;EACC;;AAIF;EACC,O9DvtBuB;E8DwtBvB;;AAEA;EACC,O9DntBqB;E8DotBrB;;AAIF;EACC;EACA;;;AAIF;EACC;EACA;;AAEA;EACC;;;AAIF;EACC;EACA,O9DnvBwB;;A8DqvBxB;EACC;EACA;;AAEA;EACC","file":"haitidata.css"} \ No newline at end of file diff --git a/haitidata/static/css/index.css b/haitidata/static/css/index.css deleted file mode 100644 index 11cc3ff..0000000 --- a/haitidata/static/css/index.css +++ /dev/null @@ -1,39 +0,0 @@ -/* Add shadow effect to chart. If you don't like it, get rid of it. */ -svg { - -webkit-filter: drop-shadow( 0px 3px 3px rgba(0,0,0,.3) ); - filter: drop-shadow( 0px 3px 3px rgba(0,0,0,.25) ); -} - -/*Styling for the lines connecting the labels to the slices*/ -polyline{ - opacity: .3; - stroke: black; - stroke-width: 2px; - fill: none; -} - -/* Make the percentage on the text labels bold*/ -.labelName tspan { - font-style: normal; - font-weight: 700; -} - -/* In biology we generally italicise species names. */ -.labelName { - font-size: 0.9em; - font-style: italic; -} - -/* Tooltip for line chart */ - -div.tooltip { - position: absolute; - text-align: center; - width: 60px; - height: 28px; - padding: 2px; - background: lightsteelblue; - border: 0px; - border-radius: 8px; - pointer-events: none; -} diff --git a/haitidata/static/css/leaflet.draw.css b/haitidata/static/css/leaflet.draw.css deleted file mode 100755 index 9a6f261..0000000 --- a/haitidata/static/css/leaflet.draw.css +++ /dev/null @@ -1,9 +0,0 @@ -.leaflet-draw-section{position:relative}.leaflet-draw-toolbar{margin-top:12px}.leaflet-draw-toolbar-top{margin-top:0}.leaflet-draw-toolbar-notop a:first-child{border-top-right-radius:0}.leaflet-draw-toolbar-nobottom a:last-child{border-bottom-right-radius:0}.leaflet-draw-toolbar a{background-image:url('images/spritesheet.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg');background-repeat:no-repeat;background-size:270px 30px;background-clip:padding-box}.leaflet-retina .leaflet-draw-toolbar a{background-image:url('images/spritesheet-2x.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg')} -.leaflet-draw a{display:block;text-align:center;text-decoration:none}.leaflet-draw a .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.leaflet-draw-actions{display:none;list-style:none;margin:0;padding:0;position:absolute;left:26px;top:0;white-space:nowrap}.leaflet-touch .leaflet-draw-actions{left:32px}.leaflet-right .leaflet-draw-actions{right:26px;left:auto}.leaflet-touch .leaflet-right .leaflet-draw-actions{right:32px;left:auto}.leaflet-draw-actions li{display:inline-block} -.leaflet-draw-actions li:first-child a{border-left:0}.leaflet-draw-actions li:last-child a{-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.leaflet-right .leaflet-draw-actions li:last-child a{-webkit-border-radius:0;border-radius:0}.leaflet-right .leaflet-draw-actions li:first-child a{-webkit-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.leaflet-draw-actions a{background-color:#919187;border-left:1px solid #AAA;color:#FFF;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:28px;text-decoration:none;padding-left:10px;padding-right:10px;height:28px} -.leaflet-touch .leaflet-draw-actions a{font-size:12px;line-height:30px;height:30px}.leaflet-draw-actions-bottom{margin-top:0}.leaflet-draw-actions-top{margin-top:1px}.leaflet-draw-actions-top a,.leaflet-draw-actions-bottom a{height:27px;line-height:27px}.leaflet-draw-actions a:hover{background-color:#a0a098}.leaflet-draw-actions-top.leaflet-draw-actions-bottom a{height:26px;line-height:26px}.leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:-2px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:0 -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-31px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-29px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-62px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-60px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-92px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-90px -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-122px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-120px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-152px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-150px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-182px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-180px -1px} -.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-212px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-210px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-242px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-240px -2px}.leaflet-mouse-marker{background-color:#fff;cursor:crosshair}.leaflet-draw-tooltip{background:#363636;background:rgba(0,0,0,0.5);border:1px solid transparent;-webkit-border-radius:4px;border-radius:4px;color:#fff;font:12px/18px "Helvetica Neue",Arial,Helvetica,sans-serif;margin-left:20px;margin-top:-21px;padding:4px 8px;position:absolute;visibility:hidden;white-space:nowrap;z-index:6} -.leaflet-draw-tooltip:before{border-right:6px solid black;border-right-color:rgba(0,0,0,0.5);border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:7px;left:-7px}.leaflet-error-draw-tooltip{background-color:#f2dede;border:1px solid #e6b6bd;color:#b94a48}.leaflet-error-draw-tooltip:before{border-right-color:#e6b6bd}.leaflet-draw-tooltip-single{margin-top:-12px}.leaflet-draw-tooltip-subtext{color:#f8d5e4}.leaflet-draw-guide-dash{font-size:1%;opacity:.6;position:absolute;width:5px;height:5px} -.leaflet-edit-marker-selected{background-color:rgba(254,87,161,0.1);border:4px dashed rgba(254,87,161,0.6);-webkit-border-radius:4px;border-radius:4px;box-sizing:content-box}.leaflet-edit-move{cursor:move}.leaflet-edit-resize{cursor:pointer}.leaflet-oldie .leaflet-draw-toolbar{border:1px solid #999} \ No newline at end of file diff --git a/haitidata/static/css/map_geoexplorer.css b/haitidata/static/css/map_geoexplorer.css deleted file mode 100755 index c62ea77..0000000 --- a/haitidata/static/css/map_geoexplorer.css +++ /dev/null @@ -1,16 +0,0 @@ -body {font-family: 'Source Sans Pro', sans-serif;} -#aboutbutton { - display: none; -} -#paneltbar { - margin-top: 72px; -} -button.logout { - display: none; -} -button.login { - display:none; -} -.map-title-header { - margin-right: 10px; -} \ No newline at end of file diff --git a/haitidata/static/css/variables.css b/haitidata/static/css/variables.css deleted file mode 100644 index e69de29..0000000 diff --git a/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.eot b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.eot differ diff --git a/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.svg b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.ttf b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.ttf differ diff --git a/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff differ diff --git a/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/haitidata/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 differ diff --git a/haitidata/static/fonts/firaSans-light.otf b/haitidata/static/fonts/firaSans-light.otf deleted file mode 100755 index 1445a4a..0000000 Binary files a/haitidata/static/fonts/firaSans-light.otf and /dev/null differ diff --git a/haitidata/static/fonts/firasans-bold-webfont.woff b/haitidata/static/fonts/firasans-bold-webfont.woff deleted file mode 100755 index bed5036..0000000 Binary files a/haitidata/static/fonts/firasans-bold-webfont.woff and /dev/null differ diff --git a/haitidata/static/fonts/firasans-bold-webfont.woff2 b/haitidata/static/fonts/firasans-bold-webfont.woff2 deleted file mode 100755 index 81ad21d..0000000 Binary files a/haitidata/static/fonts/firasans-bold-webfont.woff2 and /dev/null differ diff --git a/haitidata/static/fonts/firasans-bold.otf b/haitidata/static/fonts/firasans-bold.otf deleted file mode 100755 index 0182159..0000000 Binary files a/haitidata/static/fonts/firasans-bold.otf and /dev/null differ diff --git a/haitidata/static/fonts/firasans-book-webfont.woff b/haitidata/static/fonts/firasans-book-webfont.woff deleted file mode 100755 index df44cda..0000000 Binary files a/haitidata/static/fonts/firasans-book-webfont.woff and /dev/null differ diff --git a/haitidata/static/fonts/firasans-book-webfont.woff2 b/haitidata/static/fonts/firasans-book-webfont.woff2 deleted file mode 100755 index e5d0f8c..0000000 Binary files a/haitidata/static/fonts/firasans-book-webfont.woff2 and /dev/null differ diff --git a/haitidata/static/fonts/firasans-book.otf b/haitidata/static/fonts/firasans-book.otf deleted file mode 100755 index cae4127..0000000 Binary files a/haitidata/static/fonts/firasans-book.otf and /dev/null differ diff --git a/haitidata/static/fonts/firasans-light-webfont.woff b/haitidata/static/fonts/firasans-light-webfont.woff deleted file mode 100755 index 802b4d5..0000000 Binary files a/haitidata/static/fonts/firasans-light-webfont.woff and /dev/null differ diff --git a/haitidata/static/fonts/firasans-light-webfont.woff2 b/haitidata/static/fonts/firasans-light-webfont.woff2 deleted file mode 100755 index 21878dd..0000000 Binary files a/haitidata/static/fonts/firasans-light-webfont.woff2 and /dev/null differ diff --git a/haitidata/static/fonts/fontawesome-webfont.eot b/haitidata/static/fonts/fontawesome-webfont.eot deleted file mode 100644 index a30335d..0000000 Binary files a/haitidata/static/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/haitidata/static/fonts/fontawesome-webfont.svg b/haitidata/static/fonts/fontawesome-webfont.svg deleted file mode 100644 index 6fd19ab..0000000 --- a/haitidata/static/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,640 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/haitidata/static/fonts/fontawesome-webfont.ttf b/haitidata/static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index d7994e1..0000000 Binary files a/haitidata/static/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/haitidata/static/fonts/fontawesome-webfont.woff b/haitidata/static/fonts/fontawesome-webfont.woff deleted file mode 100644 index 6fd4ede..0000000 Binary files a/haitidata/static/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/haitidata/static/fonts/fontawesome-webfont.woff2 b/haitidata/static/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 5560193..0000000 Binary files a/haitidata/static/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/haitidata/static/fonts/thinkhazard.eot b/haitidata/static/fonts/thinkhazard.eot old mode 100755 new mode 100644 diff --git a/haitidata/static/fonts/thinkhazard.svg b/haitidata/static/fonts/thinkhazard.svg old mode 100755 new mode 100644 diff --git a/haitidata/static/fonts/thinkhazard.ttf b/haitidata/static/fonts/thinkhazard.ttf old mode 100755 new mode 100644 diff --git a/haitidata/static/fonts/thinkhazard.woff b/haitidata/static/fonts/thinkhazard.woff old mode 100755 new mode 100644 diff --git a/haitidata/static/geonode/css/images/layers-2x.png b/haitidata/static/geonode/css/images/layers-2x.png deleted file mode 100755 index 200c333..0000000 Binary files a/haitidata/static/geonode/css/images/layers-2x.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/layers.png b/haitidata/static/geonode/css/images/layers.png deleted file mode 100755 index 1a72e57..0000000 Binary files a/haitidata/static/geonode/css/images/layers.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/marker-icon-2x.png b/haitidata/static/geonode/css/images/marker-icon-2x.png deleted file mode 100755 index e4abba3..0000000 Binary files a/haitidata/static/geonode/css/images/marker-icon-2x.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/marker-icon.png b/haitidata/static/geonode/css/images/marker-icon.png deleted file mode 100755 index 950edf2..0000000 Binary files a/haitidata/static/geonode/css/images/marker-icon.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/marker-shadow.png b/haitidata/static/geonode/css/images/marker-shadow.png deleted file mode 100755 index 9fd2979..0000000 Binary files a/haitidata/static/geonode/css/images/marker-shadow.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/spritesheet-2x.png b/haitidata/static/geonode/css/images/spritesheet-2x.png deleted file mode 100755 index 1525c9f..0000000 Binary files a/haitidata/static/geonode/css/images/spritesheet-2x.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/spritesheet.png b/haitidata/static/geonode/css/images/spritesheet.png deleted file mode 100755 index f7035a1..0000000 Binary files a/haitidata/static/geonode/css/images/spritesheet.png and /dev/null differ diff --git a/haitidata/static/geonode/css/images/spritesheet.svg b/haitidata/static/geonode/css/images/spritesheet.svg deleted file mode 100755 index 5423793..0000000 --- a/haitidata/static/geonode/css/images/spritesheet.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/haitidata/static/geonode/css/leaflet.draw.css b/haitidata/static/geonode/css/leaflet.draw.css deleted file mode 100644 index aefad51..0000000 --- a/haitidata/static/geonode/css/leaflet.draw.css +++ /dev/null @@ -1,9 +0,0 @@ -.leaflet-draw-section{position:relative}.leaflet-draw-toolbar{margin-top:12px}.leaflet-draw-toolbar-top{margin-top:0}.leaflet-draw-toolbar-notop a:first-child{border-top-right-radius:0}.leaflet-draw-toolbar-nobottom a:last-child{border-bottom-right-radius:0}.leaflet-draw-toolbar a{background-image:url('images/spritesheet.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg');background-repeat:no-repeat;background-size:270px 30px;background-clip:padding-box}.leaflet-retina .leaflet-draw-toolbar a{background-image:url('images/spritesheet-2x.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg')} -.leaflet-draw a{display:block;text-align:center;text-decoration:none}.leaflet-draw a .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.leaflet-draw-actions{display:none;list-style:none;margin:0;padding:0;position:absolute;left:26px;top:0;white-space:nowrap}.leaflet-touch .leaflet-draw-actions{left:32px}.leaflet-right .leaflet-draw-actions{right:26px;left:auto}.leaflet-touch .leaflet-right .leaflet-draw-actions{right:32px;left:auto}.leaflet-draw-actions li{display:inline-block} -.leaflet-draw-actions li:first-child a{border-left:0}.leaflet-draw-actions li:last-child a{-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.leaflet-right .leaflet-draw-actions li:last-child a{-webkit-border-radius:0;border-radius:0}.leaflet-right .leaflet-draw-actions li:first-child a{-webkit-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.leaflet-draw-actions a{background-color:#919187;border-left:1px solid #AAA;color:#FFF;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:28px;text-decoration:none;padding-left:10px;padding-right:10px;height:28px} -.leaflet-touch .leaflet-draw-actions a{font-size:12px;line-height:30px;height:30px}.leaflet-draw-actions-bottom{margin-top:0}.leaflet-draw-actions-top{margin-top:1px}.leaflet-draw-actions-top a,.leaflet-draw-actions-bottom a{height:27px;line-height:27px}.leaflet-draw-actions a:hover{background-color:#a0a098}.leaflet-draw-actions-top.leaflet-draw-actions-bottom a{height:26px;line-height:26px}.leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:-2px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:0 -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-31px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-29px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-62px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-60px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-92px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-90px -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-122px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-120px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-152px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-150px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-182px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-180px -1px} -.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-212px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-210px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-242px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-240px -2px}.leaflet-mouse-marker{background-color:#fff;cursor:crosshair}.leaflet-draw-tooltip{background:#363636;background:rgba(0,0,0,0.5);border:1px solid transparent;-webkit-border-radius:4px;border-radius:4px;color:#fff;font:12px/18px "Helvetica Neue",Arial,Helvetica,sans-serif;margin-left:20px;margin-top:-21px;padding:4px 8px;position:absolute;visibility:hidden;white-space:nowrap;z-index:6} -.leaflet-draw-tooltip:before{border-right:6px solid black;border-right-color:rgba(0,0,0,0.5);border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:7px;left:-7px}.leaflet-error-draw-tooltip{background-color:#f2dede;border:1px solid #e6b6bd;color:#b94a48}.leaflet-error-draw-tooltip:before{border-right-color:#e6b6bd}.leaflet-draw-tooltip-single{margin-top:-12px}.leaflet-draw-tooltip-subtext{color:#f8d5e4}.leaflet-draw-guide-dash{font-size:1%;opacity:.6;position:absolute;width:5px;height:5px} -.leaflet-edit-marker-selected{background-color:rgba(254,87,161,0.1);border:4px dashed rgba(254,87,161,0.6);-webkit-border-radius:4px;border-radius:4px;box-sizing:content-box}.leaflet-edit-move{cursor:move}.leaflet-edit-resize{cursor:pointer}.leaflet-oldie .leaflet-draw-toolbar{border:1px solid #999} diff --git a/haitidata/static/geonode/js/draw/leaflet.draw.js b/haitidata/static/geonode/js/draw/leaflet.draw.js deleted file mode 100755 index 070f9b2..0000000 --- a/haitidata/static/geonode/js/draw/leaflet.draw.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Leaflet.draw 0.4.10, a plugin that adds drawing and editing tools to Leaflet powered maps. - (c) 2012-2017, Jacob Toye, Jon West, Smartrak, Leaflet - - https://github.com/Leaflet/Leaflet.draw - http://leafletjs.com - */ -!function(t,e,i){L.drawVersion="0.4.10",L.Draw={},L.drawLocal={draw:{toolbar:{actions:{title:"Cancel drawing",text:"Cancel"},finish:{title:"Finish drawing",text:"Finish"},undo:{title:"Delete last point drawn",text:"Delete last point"},buttons:{polyline:"Draw a polyline",polygon:"Draw a polygon",rectangle:"Draw a rectangle",circle:"Draw a circle",marker:"Draw a marker"}},handlers:{circle:{tooltip:{start:"Click and drag to draw circle."},radius:"Radius"},marker:{tooltip:{start:"Click map to place marker."}},polygon:{tooltip:{start:"Click to start drawing shape.",cont:"Click to continue drawing shape.",end:"Click first point to close this shape."}},polyline:{error:"Error: shape edges cannot cross!",tooltip:{start:"Click to start drawing line.",cont:"Click to continue drawing line.",end:"Click last point to finish line."}},rectangle:{tooltip:{start:"Click and drag to draw rectangle."}},simpleshape:{tooltip:{end:"Release mouse to finish drawing."}}}},edit:{toolbar:{actions:{save:{title:"Save changes.",text:"Save"},cancel:{title:"Cancel editing, discards all changes.",text:"Cancel"},clearAll:{title:"clear all layers.",text:"Clear All"}},buttons:{edit:"Edit layers.",editDisabled:"No layers to edit.",remove:"Delete layers.",removeDisabled:"No layers to delete."}},handlers:{edit:{tooltip:{text:"Drag handles, or marker to edit feature.",subtext:"Click cancel to undo changes."}},remove:{tooltip:{text:"Click on a feature to remove"}}}}},L.Draw.Event={},L.Draw.Event.CREATED="draw:created",L.Draw.Event.EDITED="draw:edited",L.Draw.Event.DELETED="draw:deleted",L.Draw.Event.DRAWSTART="draw:drawstart",L.Draw.Event.DRAWSTOP="draw:drawstop",L.Draw.Event.DRAWVERTEX="draw:drawvertex",L.Draw.Event.EDITSTART="draw:editstart",L.Draw.Event.EDITMOVE="draw:editmove",L.Draw.Event.EDITRESIZE="draw:editresize",L.Draw.Event.EDITVERTEX="draw:editvertex",L.Draw.Event.EDITSTOP="draw:editstop",L.Draw.Event.DELETESTART="draw:deletestart",L.Draw.Event.DELETESTOP="draw:deletestop",L.Draw=L.Draw||{},L.Draw.Feature=L.Handler.extend({includes:L.Mixin.Events,initialize:function(t,e){this._map=t,this._container=t._container,this._overlayPane=t._panes.overlayPane,this._popupPane=t._panes.popupPane,e&&e.shapeOptions&&(e.shapeOptions=L.Util.extend({},this.options.shapeOptions,e.shapeOptions)),L.setOptions(this,e)},enable:function(){this._enabled||(L.Handler.prototype.enable.call(this),this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.DRAWSTART,{layerType:this.type}))},disable:function(){this._enabled&&(L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DRAWSTOP,{layerType:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(L.DomUtil.disableTextSelection(),t.getContainer().focus(),this._tooltip=new L.Draw.Tooltip(this._map),L.DomEvent.on(this._container,"keyup",this._cancelDrawing,this))},removeHooks:function(){this._map&&(L.DomUtil.enableTextSelection(),this._tooltip.dispose(),this._tooltip=null,L.DomEvent.off(this._container,"keyup",this._cancelDrawing,this))},setOptions:function(t){L.setOptions(this,t)},_fireCreatedEvent:function(t){this._map.fire(L.Draw.Event.CREATED,{layer:t,layerType:this.type})},_cancelDrawing:function(t){this._map.fire("draw:canceled",{layerType:this.type}),27===t.keyCode&&this.disable()}}),L.Draw.Polyline=L.Draw.Feature.extend({statics:{TYPE:"polyline"},Poly:L.Polyline,options:{allowIntersection:!0,repeatMode:!1,drawError:{color:"#b00b00",timeout:2500},icon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"}),touchIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-touch-icon"}),guidelineDistance:20,maxGuideLineLength:4e3,shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!1,clickable:!0},metric:!0,feet:!0,nautic:!1,showLength:!0,zIndexOffset:2e3},initialize:function(t,e){L.Browser.touch&&(this.options.icon=this.options.touchIcon),this.options.drawError.message=L.drawLocal.draw.handlers.polyline.error,e&&e.drawError&&(e.drawError=L.Util.extend({},this.options.drawError,e.drawError)),this.type=L.Draw.Polyline.TYPE,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._markers=[],this._markerGroup=new L.LayerGroup,this._map.addLayer(this._markerGroup),this._poly=new L.Polyline([],this.options.shapeOptions),this._tooltip.updateContent(this._getTooltipText()),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:"leaflet-mouse-marker",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on("mouseout",this._onMouseOut,this).on("mousemove",this._onMouseMove,this).on("mousedown",this._onMouseDown,this).on("mouseup",this._onMouseUp,this).addTo(this._map),this._map.on("mouseup",this._onMouseUp,this).on("mousemove",this._onMouseMove,this).on("zoomlevelschange",this._onZoomEnd,this).on("touchstart",this._onTouch,this).on("zoomend",this._onZoomEnd,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._clearHideErrorTimeout(),this._cleanUpShape(),this._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers,this._map.removeLayer(this._poly),delete this._poly,this._mouseMarker.off("mousedown",this._onMouseDown,this).off("mouseout",this._onMouseOut,this).off("mouseup",this._onMouseUp,this).off("mousemove",this._onMouseMove,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._clearGuides(),this._map.off("mouseup",this._onMouseUp,this).off("mousemove",this._onMouseMove,this).off("zoomlevelschange",this._onZoomEnd,this).off("zoomend",this._onZoomEnd,this).off("touchstart",this._onTouch,this).off("click",this._onTouch,this)},deleteLastVertex:function(){if(!(this._markers.length<=1)){var t=this._markers.pop(),e=this._poly,i=e.getLatLngs(),o=i.splice(-1,1)[0];this._poly.setLatLngs(i),this._markerGroup.removeLayer(t),e.getLatLngs().length<2&&this._map.removeLayer(e),this._vertexChanged(o,!1)}},addVertex:function(t){if(this._markers.length>=2&&!this.options.allowIntersection&&this._poly.newLatLngIntersects(t))return void this._showErrorTooltip();this._errorShown&&this._hideErrorTooltip(),this._markers.push(this._createMarker(t)),this._poly.addLatLng(t),2===this._poly.getLatLngs().length&&this._map.addLayer(this._poly),this._vertexChanged(t,!0)},completeShape:function(){this._markers.length<=1||(this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable())},_finishShape:function(){var t=this._poly._defaultShape?this._poly._defaultShape():this._poly.getLatLngs(),e=this._poly.newLatLngIntersects(t[t.length-1]);if(!this.options.allowIntersection&&e||!this._shapeIsValid())return void this._showErrorTooltip();this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()},_shapeIsValid:function(){return!0},_onZoomEnd:function(){null!==this._markers&&this._updateGuide()},_onMouseMove:function(t){var e=this._map.mouseEventToLayerPoint(t.originalEvent),i=this._map.layerPointToLatLng(e);this._currentLatLng=i,this._updateTooltip(i),this._updateGuide(e),this._mouseMarker.setLatLng(i),L.DomEvent.preventDefault(t.originalEvent)},_vertexChanged:function(t,e){this._map.fire(L.Draw.Event.DRAWVERTEX,{layers:this._markerGroup}),this._updateFinishHandler(),this._updateRunningMeasure(t,e),this._clearGuides(),this._updateTooltip()},_onMouseDown:function(t){if(!this._clickHandled&&!this._touchHandled&&!this._disableMarkers){this._onMouseMove(t),this._clickHandled=!0,this._disableNewMarkers();var e=t.originalEvent,i=e.clientX,o=e.clientY;this._startPoint.call(this,i,o)}},_startPoint:function(t,e){this._mouseDownOrigin=L.point(t,e)},_onMouseUp:function(t){var e=t.originalEvent,i=e.clientX,o=e.clientY;this._endPoint.call(this,i,o,t),this._clickHandled=null},_endPoint:function(e,i,o){if(this._mouseDownOrigin){var n=L.point(e,i).distanceTo(this._mouseDownOrigin);this._calculateFinishDistance(o.latlng)<10&&L.Browser.touch?this._finishShape():Math.abs(n)<9*(t.devicePixelRatio||1)&&this.addVertex(o.latlng),this._enableNewMarkers()}this._mouseDownOrigin=null},_onTouch:function(t){var e,i,o=t.originalEvent;!o.touches||!o.touches[0]||this._clickHandled||this._touchHandled||this._disableMarkers||(e=o.touches[0].clientX,i=o.touches[0].clientY,this._disableNewMarkers(),this._touchHandled=!0,this._startPoint.call(this,e,i),this._endPoint.call(this,e,i,t),this._touchHandled=null),this._clickHandled=null},_onMouseOut:function(){this._tooltip&&this._tooltip._onMouseOut.call(this._tooltip)},_calculateFinishDistance:function(t){var e;if(this._markers.length>0){var i;if(this.type===L.Draw.Polyline.TYPE)i=this._markers[this._markers.length-1];else{if(this.type!==L.Draw.Polygon.TYPE)return 1/0;i=this._markers[0]}var o=this._map.latLngToContainerPoint(i.getLatLng()),n=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset}),s=this._map.latLngToContainerPoint(n.getLatLng());e=o.distanceTo(s)}else e=1/0;return e},_updateFinishHandler:function(){var t=this._markers.length;t>1&&this._markers[t-1].on("click",this._finishShape,this),t>2&&this._markers[t-2].off("click",this._finishShape,this)},_createMarker:function(t){var e=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset});return this._markerGroup.addLayer(e),e},_updateGuide:function(t){var e=this._markers?this._markers.length:0;e>0&&(t=t||this._map.latLngToLayerPoint(this._currentLatLng),this._clearGuides(),this._drawGuide(this._map.latLngToLayerPoint(this._markers[e-1].getLatLng()),t))},_updateTooltip:function(t){var e=this._getTooltipText();t&&this._tooltip.updatePosition(t),this._errorShown||this._tooltip.updateContent(e)},_drawGuide:function(t,e){var i,o,n,s=Math.floor(Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))),a=this.options.guidelineDistance,r=this.options.maxGuideLineLength,l=s>r?s-r:a;for(this._guidesContainer||(this._guidesContainer=L.DomUtil.create("div","leaflet-draw-guides",this._overlayPane));l1&&this._markers[this._markers.length-1].off("click",this._finishShape,this)},_fireCreatedEvent:function(){var t=new this.Poly(this._poly.getLatLngs(),this.options.shapeOptions);L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Draw.Polygon=L.Draw.Polyline.extend({statics:{TYPE:"polygon"},Poly:L.Polygon,options:{showArea:!1,showLength:!1,shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},metric:!0,feet:!0,nautic:!1,precision:{}},initialize:function(t,e){L.Draw.Polyline.prototype.initialize.call(this,t,e),this.type=L.Draw.Polygon.TYPE},_updateFinishHandler:function(){var t=this._markers.length;1===t&&this._markers[0].on("click",this._finishShape,this),t>2&&(this._markers[t-1].on("dblclick",this._finishShape,this),t>3&&this._markers[t-2].off("dblclick",this._finishShape,this))},_getTooltipText:function(){var t,e;return 0===this._markers.length?t=L.drawLocal.draw.handlers.polygon.tooltip.start:this._markers.length<3?(t=L.drawLocal.draw.handlers.polygon.tooltip.cont,e=this._getMeasurementString()):(t=L.drawLocal.draw.handlers.polygon.tooltip.end,e=this._getMeasurementString()),{text:t,subtext:e}},_getMeasurementString:function(){var t=this._area,e="";return t||this.options.showLength?(this.options.showLength&&(e=L.Draw.Polyline.prototype._getMeasurementString.call(this)),t&&(e+="
"+L.GeometryUtil.readableArea(t,this.options.metric,this.options.precision)),e):null},_shapeIsValid:function(){return this._markers.length>=3},_vertexChanged:function(t,e){var i;!this.options.allowIntersection&&this.options.showArea&&(i=this._poly.getLatLngs(),this._area=L.GeometryUtil.geodesicArea(i)),L.Draw.Polyline.prototype._vertexChanged.call(this,t,e)},_cleanUpShape:function(){var t=this._markers.length;t>0&&(this._markers[0].off("click",this._finishShape,this),t>2&&this._markers[t-1].off("dblclick",this._finishShape,this))}}),L.SimpleShape={},L.Draw.SimpleShape=L.Draw.Feature.extend({options:{repeatMode:!1},initialize:function(t,e){this._endLabelText=L.drawLocal.draw.handlers.simpleshape.tooltip.end,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._mapDraggable=this._map.dragging.enabled(),this._mapDraggable&&this._map.dragging.disable(),this._container.style.cursor="crosshair",this._tooltip.updateContent({text:this._initialLabelText}),this._map.on("mousedown",this._onMouseDown,this).on("mousemove",this._onMouseMove,this).on("touchstart",this._onMouseDown,this).on("touchmove",this._onMouseMove,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._mapDraggable&&this._map.dragging.enable(),this._container.style.cursor="",this._map.off("mousedown",this._onMouseDown,this).off("mousemove",this._onMouseMove,this).off("touchstart",this._onMouseDown,this).off("touchmove",this._onMouseMove,this),L.DomEvent.off(e,"mouseup",this._onMouseUp,this),L.DomEvent.off(e,"touchend",this._onMouseUp,this),this._shape&&(this._map.removeLayer(this._shape),delete this._shape)),this._isDrawing=!1},_getTooltipText:function(){return{text:this._endLabelText}},_onMouseDown:function(t){this._isDrawing=!0,this._startLatLng=t.latlng,L.DomEvent.on(e,"mouseup",this._onMouseUp,this).on(e,"touchend",this._onMouseUp,this).preventDefault(t.originalEvent)},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._isDrawing&&(this._tooltip.updateContent(this._getTooltipText()),this._drawShape(e))},_onMouseUp:function(){this._shape&&this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()}}),L.Draw.Rectangle=L.Draw.SimpleShape.extend({statics:{TYPE:"rectangle"},options:{shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,showArea:!0,clickable:!0},metric:!0},initialize:function(t,e){this.type=L.Draw.Rectangle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.rectangle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},_drawShape:function(t){this._shape?this._shape.setBounds(new L.LatLngBounds(this._startLatLng,t)):(this._shape=new L.Rectangle(new L.LatLngBounds(this._startLatLng,t),this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Rectangle(this._shape.getBounds(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_getTooltipText:function(){var t,e,i,o=L.Draw.SimpleShape.prototype._getTooltipText.call(this),n=this._shape,s=this.options.showArea;return n&&(t=this._shape._defaultShape?this._shape._defaultShape():this._shape.getLatLngs(),e=L.GeometryUtil.geodesicArea(t),i=s?L.GeometryUtil.readableArea(e,this.options.metric):""),{text:o.text,subtext:i}}}),L.Draw.Circle=L.Draw.SimpleShape.extend({statics:{TYPE:"circle"},options:{shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},showRadius:!0,metric:!0,feet:!0,nautic:!1},initialize:function(t,e){this.type=L.Draw.Circle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.circle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},_drawShape:function(t){this._shape?this._shape.setRadius(this._startLatLng.distanceTo(t)):(this._shape=new L.Circle(this._startLatLng,this._startLatLng.distanceTo(t),this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Circle(this._startLatLng,this._shape.getRadius(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_onMouseMove:function(t){var e,i=t.latlng,o=this.options.showRadius,n=this.options.metric;if(this._tooltip.updatePosition(i),this._isDrawing){this._drawShape(i),e=this._shape.getRadius().toFixed(1);var s="";o&&(s=L.drawLocal.draw.handlers.circle.radius+": "+L.GeometryUtil.readableDistance(e,n,this.options.feet,this.options.nautic)),this._tooltip.updateContent({text:this._endLabelText,subtext:s})}}}),L.Draw.Marker=L.Draw.Feature.extend({statics:{TYPE:"marker"},options:{icon:new L.Icon.Default,repeatMode:!1,zIndexOffset:2e3},initialize:function(t,e){this.type=L.Draw.Marker.TYPE,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._tooltip.updateContent({text:L.drawLocal.draw.handlers.marker.tooltip.start}),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:"leaflet-mouse-marker",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on("click",this._onClick,this).addTo(this._map),this._map.on("mousemove",this._onMouseMove,this),this._map.on("click",this._onTouch,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._marker&&(this._marker.off("click",this._onClick,this),this._map.off("click",this._onClick,this).off("click",this._onTouch,this).removeLayer(this._marker),delete this._marker),this._mouseMarker.off("click",this._onClick,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._map.off("mousemove",this._onMouseMove,this))},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._mouseMarker.setLatLng(e),this._marker?(e=this._mouseMarker.getLatLng(),this._marker.setLatLng(e)):(this._marker=new L.Marker(e,{icon:this.options.icon,zIndexOffset:this.options.zIndexOffset}),this._marker.on("click",this._onClick,this),this._map.on("click",this._onClick,this).addLayer(this._marker))},_onClick:function(){this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()},_onTouch:function(t){this._onMouseMove(t),this._onClick()},_fireCreatedEvent:function(){var t=new L.Marker.Touch(this._marker.getLatLng(),{icon:this.options.icon});L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Edit=L.Edit||{},L.Edit.Marker=L.Handler.extend({initialize:function(t,e){this._marker=t,L.setOptions(this,e)},addHooks:function(){var t=this._marker;t.dragging.enable(),t.on("dragend",this._onDragEnd,t),this._toggleMarkerHighlight()},removeHooks:function(){var t=this._marker;t.dragging.disable(),t.off("dragend",this._onDragEnd,t),this._toggleMarkerHighlight()},_onDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_toggleMarkerHighlight:function(){var t=this._marker._icon;t&&(t.style.display="none",L.DomUtil.hasClass(t,"leaflet-edit-marker-selected")?(L.DomUtil.removeClass(t,"leaflet-edit-marker-selected"),this._offsetMarker(t,-4)):(L.DomUtil.addClass(t,"leaflet-edit-marker-selected"),this._offsetMarker(t,4)),t.style.display="")},_offsetMarker:function(t,e){var i=parseInt(t.style.marginTop,10)-e,o=parseInt(t.style.marginLeft,10)-e;t.style.marginTop=i+"px",t.style.marginLeft=o+"px"}}),L.Marker.addInitHook(function(){L.Edit.Marker&&(this.editing=new L.Edit.Marker(this),this.options.editable&&this.editing.enable())}),L.Edit=L.Edit||{},L.Edit.Poly=L.Handler.extend({options:{},initialize:function(t,e){this.latlngs=[t._latlngs],t._holes&&(this.latlngs=this.latlngs.concat(t._holes)),this._poly=t,L.setOptions(this,e),this._poly.on("revert-edited",this._updateLatLngs,this)},_defaultShape:function(){return L.Polyline._flat?L.Polyline._flat(this._poly._latlngs)?this._poly._latlngs:this._poly._latlngs[0]:this._poly._latlngs},_eachVertexHandler:function(t){for(var e=0;et&&(i._index+=e)})},_createMiddleMarker:function(t,e){var i,o,n,s=this._getMiddleLatLng(t,e),a=this._createMarker(s);a.setOpacity(.6),t._middleRight=e._middleLeft=a,o=function(){a.off("touchmove",o,this);var n=e._index;a._index=n,a.off("click",i,this).on("click",this._onMarkerClick,this),s.lat=a.getLatLng().lat,s.lng=a.getLatLng().lng,this._spliceLatLngs(n,0,s),this._markers.splice(n,0,a),a.setOpacity(1),this._updateIndexes(n,1),e._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,e),this._poly.fire("editstart")},n=function(){a.off("dragstart",o,this),a.off("dragend",n,this),a.off("touchmove",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,e)},i=function(){o.call(this),n.call(this),this._fireEdit()},a.on("click",i,this).on("dragstart",o,this).on("dragend",n,this).on("touchmove",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,e){t&&(t._next=e),e&&(e._prev=t)},_getMiddleLatLng:function(t,e){var i=this._poly._map,o=i.project(t.getLatLng()),n=i.project(e.getLatLng());return i.unproject(o._add(n)._divideBy(2))}}),L.Polyline.addInitHook(function(){this.editing||(L.Edit.Poly&&(this.editing=new L.Edit.Poly(this,this.options.poly),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()}))}),L.Edit=L.Edit||{},L.Edit.SimpleShape=L.Handler.extend({options:{moveIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-move"}),resizeIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize"}),touchMoveIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-move leaflet-touch-icon"}),touchResizeIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize leaflet-touch-icon"})},initialize:function(t,e){L.Browser.touch&&(this.options.moveIcon=this.options.touchMoveIcon,this.options.resizeIcon=this.options.touchResizeIcon),this._shape=t,L.Util.setOptions(this,e)},addHooks:function(){var t=this._shape;this._shape._map&&(this._map=this._shape._map,t.setStyle(t.options.editing),t._map&&(this._map=t._map,this._markerGroup||this._initMarkers(),this._map.addLayer(this._markerGroup)))},removeHooks:function(){var t=this._shape;if(t.setStyle(t.options.original),t._map){this._unbindMarker(this._moveMarker);for(var e=0,i=this._resizeMarkers.length;e100&&i<500||t.target._simulatedClick&&!t._simulated?(L.DomEvent.stop(t),!1):(L.DomEvent._lastClick=e,!0)},_onTouchStart:function(t){if(this._map._loaded){this._touchEvent(t,"touchstart")}},_onTouchEnd:function(t){if(this._map._loaded){this._touchEvent(t,"touchend")}},_onTouchCancel:function(t){if(this._map._loaded){var e="touchcancel";this._detectIE()&&(e="pointercancel"),this._touchEvent(t,e)}},_onTouchLeave:function(t){if(this._map._loaded){this._touchEvent(t,"touchleave")}},_onTouchMove:function(t){if(this._map._loaded){this._touchEvent(t,"touchmove")}},_detectIE:function(){var e=t.navigator.userAgent,i=e.indexOf("MSIE ");if(i>0)return parseInt(e.substring(i+5,e.indexOf(".",i)),10);if(e.indexOf("Trident/")>0){var o=e.indexOf("rv:");return parseInt(e.substring(o+3,e.indexOf(".",o)),10)}var n=e.indexOf("Edge/");return n>0&&parseInt(e.substring(n+5,e.indexOf(".",n)),10)}}),L.Map.addInitHook("addHandler","touchExtend",L.Map.TouchExtend),L.Marker.Touch=L.Marker.extend({_initInteraction:function(){return this.addInteractiveTarget?L.Marker.prototype._initInteraction.apply(this):this._initInteractionLegacy()},_initInteractionLegacy:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu","touchstart","touchend","touchmove"];this._detectIE?e.concat(["MSPointerDown","MSPointerUp","MSPointerMove","MSPointerCancel"]):e.concat(["touchcancel"]),L.DomUtil.addClass(t,"leaflet-clickable"),L.DomEvent.on(t,"click",this._onMouseClick,this),L.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;i0)return parseInt(e.substring(i+5,e.indexOf(".",i)),10);if(e.indexOf("Trident/")>0){var o=e.indexOf("rv:");return parseInt(e.substring(o+3,e.indexOf(".",o)),10)}var n=e.indexOf("Edge/");return n>0&&parseInt(e.substring(n+5,e.indexOf(".",n)),10)}}),L.LatLngUtil={cloneLatLngs:function(t){for(var e=[],i=0,o=t.length;i2){for(var a=0;a1&&(i=i+a+r[1])}return i},readableArea:function(e,i,o){var n,s,o=L.Util.extend({},t,o);return i?(s=["ha","m"],type=typeof i,"string"===type?s=[i]:"boolean"!==type&&(s=i),n=e>=1e6&&-1!==s.indexOf("km")?L.GeometryUtil.formattedNumber(1e-6*e,o.km)+" km²":e>=1e4&&-1!==s.indexOf("ha")?L.GeometryUtil.formattedNumber(1e-4*e,o.ha)+" ha":L.GeometryUtil.formattedNumber(e,o.m)+" m²"):(e/=.836127,n=e>=3097600?L.GeometryUtil.formattedNumber(e/3097600,o.mi)+" mi²":e>=4840?L.GeometryUtil.formattedNumber(e/4840,o.ac)+" acres":L.GeometryUtil.formattedNumber(e,o.yd)+" yd²"),n},readableDistance:function(e,i,o,n,s){var a,s=L.Util.extend({},t,s);switch(i?"string"==typeof i?i:"metric":o?"feet":n?"nauticalMile":"yards"){case"metric":a=e>1e3?L.GeometryUtil.formattedNumber(e/1e3,s.km)+" km":L.GeometryUtil.formattedNumber(e,s.m)+" m";break;case"feet":e*=3.28083,a=L.GeometryUtil.formattedNumber(e,s.ft)+" ft";break;case"nauticalMile":e*=.53996,a=L.GeometryUtil.formattedNumber(e/1e3,s.nm)+" nm";break;case"yards":default:e*=1.09361,a=e>1760?L.GeometryUtil.formattedNumber(e/1760,s.mi)+" miles":L.GeometryUtil.formattedNumber(e,s.yd)+" yd"}return a}})}(),L.Util.extend(L.LineUtil,{segmentsIntersect:function(t,e,i,o){return this._checkCounterclockwise(t,i,o)!==this._checkCounterclockwise(e,i,o)&&this._checkCounterclockwise(t,e,i)!==this._checkCounterclockwise(t,e,o)},_checkCounterclockwise:function(t,e,i){return(i.y-t.y)*(e.x-t.x)>(e.y-t.y)*(i.x-t.x)}}),L.Polyline.include({intersects:function(){var t,e,i,o=this._getProjectedPoints(),n=o?o.length:0;if(this._tooFewPointsForIntersection())return!1;for(t=n-1;t>=3;t--)if(e=o[t-1],i=o[t],this._lineSegmentsIntersectsRange(e,i,t-2))return!0;return!1},newLatLngIntersects:function(t,e){return!!this._map&&this.newPointIntersects(this._map.latLngToLayerPoint(t),e)},newPointIntersects:function(t,e){var i=this._getProjectedPoints(),o=i?i.length:0,n=i?i[o-1]:null,s=o-2;return!this._tooFewPointsForIntersection(1)&&this._lineSegmentsIntersectsRange(n,t,s,e?1:0)},_tooFewPointsForIntersection:function(t){var e=this._getProjectedPoints(),i=e?e.length:0;return i+=t||0,!e||i<=3},_lineSegmentsIntersectsRange:function(t,e,i,o){var n,s,a=this._getProjectedPoints();o=o||0;for(var r=i;r>o;r--)if(n=a[r-1],s=a[r],L.LineUtil.segmentsIntersect(t,e,n,s))return!0;return!1},_getProjectedPoints:function(){if(!this._defaultShape)return this._originalPoints;for(var t=[],e=this._defaultShape(),i=0;i0&&this._singleLineLabel&&(L.DomUtil.removeClass(this._container,"leaflet-draw-tooltip-single"),this._singleLineLabel=!1):(L.DomUtil.addClass(this._container,"leaflet-draw-tooltip-single"),this._singleLineLabel=!0),this._container.innerHTML=(t.subtext.length>0?''+t.subtext+"
":"")+""+t.text+"",t.text||t.subtext?(this._visible=!0,this._container.style.visibility="inherit"):(this._visible=!1,this._container.style.visibility="hidden"),this):this},updatePosition:function(t){var e=this._map.latLngToLayerPoint(t),i=this._container;return this._container&&(this._visible&&(i.style.visibility="inherit"),L.DomUtil.setPosition(i,e)),this},showAsError:function(){return this._container&&L.DomUtil.addClass(this._container,"leaflet-error-draw-tooltip"),this},removeError:function(){return this._container&&L.DomUtil.removeClass(this._container,"leaflet-error-draw-tooltip"),this},_onMouseOut:function(){this._container&&(this._container.style.visibility="hidden")}}),L.DrawToolbar=L.Toolbar.extend({statics:{TYPE:"draw"},options:{polyline:{},polygon:{},rectangle:{},circle:{},marker:{}},initialize:function(t){for(var e in this.options)this.options.hasOwnProperty(e)&&t[e]&&(t[e]=L.extend({},this.options[e],t[e]));this._toolbarClass="leaflet-draw-draw",L.Toolbar.prototype.initialize.call(this,t)},getModeHandlers:function(t){return[{enabled:this.options.polyline,handler:new L.Draw.Polyline(t,this.options.polyline),title:L.drawLocal.draw.toolbar.buttons.polyline},{enabled:this.options.polygon,handler:new L.Draw.Polygon(t,this.options.polygon),title:L.drawLocal.draw.toolbar.buttons.polygon},{enabled:this.options.rectangle,handler:new L.Draw.Rectangle(t,this.options.rectangle),title:L.drawLocal.draw.toolbar.buttons.rectangle},{enabled:this.options.circle,handler:new L.Draw.Circle(t,this.options.circle),title:L.drawLocal.draw.toolbar.buttons.circle},{enabled:this.options.marker,handler:new L.Draw.Marker(t,this.options.marker),title:L.drawLocal.draw.toolbar.buttons.marker}]},getActions:function(t){return[{enabled:t.completeShape,title:L.drawLocal.draw.toolbar.finish.title,text:L.drawLocal.draw.toolbar.finish.text,callback:t.completeShape,context:t},{enabled:t.deleteLastVertex,title:L.drawLocal.draw.toolbar.undo.title,text:L.drawLocal.draw.toolbar.undo.text,callback:t.deleteLastVertex,context:t},{title:L.drawLocal.draw.toolbar.actions.title,text:L.drawLocal.draw.toolbar.actions.text,callback:this.disable,context:this}]},setOptions:function(t){L.setOptions(this,t);for(var e in this._modes)this._modes.hasOwnProperty(e)&&t.hasOwnProperty(e)&&this._modes[e].handler.setOptions(t[e])}}),L.EditToolbar=L.Toolbar.extend({statics:{TYPE:"edit"},options:{edit:{selectedPathOptions:{dashArray:"10, 10",fill:!0,fillColor:"#fe57a1",fillOpacity:.1,maintainColor:!1}},remove:{},poly:null,featureGroup:null},initialize:function(t){t.edit&&(void 0===t.edit.selectedPathOptions&&(t.edit.selectedPathOptions=this.options.edit.selectedPathOptions),t.edit.selectedPathOptions=L.extend({},this.options.edit.selectedPathOptions,t.edit.selectedPathOptions)),t.remove&&(t.remove=L.extend({},this.options.remove,t.remove)),t.poly&&(t.poly=L.extend({},this.options.poly,t.poly)),this._toolbarClass="leaflet-draw-edit",L.Toolbar.prototype.initialize.call(this,t),this._selectedFeatureCount=0},getModeHandlers:function(t){var e=this.options.featureGroup;return[{enabled:this.options.edit,handler:new L.EditToolbar.Edit(t,{featureGroup:e,selectedPathOptions:this.options.edit.selectedPathOptions,poly:this.options.poly}),title:L.drawLocal.edit.toolbar.buttons.edit},{enabled:this.options.remove,handler:new L.EditToolbar.Delete(t,{featureGroup:e}),title:L.drawLocal.edit.toolbar.buttons.remove}]},getActions:function(){return[{title:L.drawLocal.edit.toolbar.actions.save.title,text:L.drawLocal.edit.toolbar.actions.save.text,callback:this._save,context:this},{title:L.drawLocal.edit.toolbar.actions.cancel.title,text:L.drawLocal.edit.toolbar.actions.cancel.text,callback:this.disable,context:this},{title:L.drawLocal.edit.toolbar.actions.clearAll.title,text:L.drawLocal.edit.toolbar.actions.clearAll.text,callback:this._clearAllLayers,context:this}]},addToolbar:function(t){var e=L.Toolbar.prototype.addToolbar.call(this,t);return this._checkDisabled(),this.options.featureGroup.on("layeradd layerremove",this._checkDisabled,this),e},removeToolbar:function(){this.options.featureGroup.off("layeradd layerremove",this._checkDisabled,this),L.Toolbar.prototype.removeToolbar.call(this)},disable:function(){this.enabled()&&(this._activeMode.handler.revertLayers(),L.Toolbar.prototype.disable.call(this))},_save:function(){this._activeMode.handler.save(),this._activeMode&&this._activeMode.handler.disable()},_clearAllLayers:function(){this._activeMode.handler.removeAllLayers(),this._activeMode&&this._activeMode.handler.disable()},_checkDisabled:function(){var t,e=this.options.featureGroup,i=0!==e.getLayers().length;this.options.edit&&(t=this._modes[L.EditToolbar.Edit.TYPE].button,i?L.DomUtil.removeClass(t,"leaflet-disabled"):L.DomUtil.addClass(t,"leaflet-disabled"),t.setAttribute("title",i?L.drawLocal.edit.toolbar.buttons.edit:L.drawLocal.edit.toolbar.buttons.editDisabled)),this.options.remove&&(t=this._modes[L.EditToolbar.Delete.TYPE].button,i?L.DomUtil.removeClass(t,"leaflet-disabled"):L.DomUtil.addClass(t,"leaflet-disabled"),t.setAttribute("title",i?L.drawLocal.edit.toolbar.buttons.remove:L.drawLocal.edit.toolbar.buttons.removeDisabled))}}),L.EditToolbar.Edit=L.Handler.extend({statics:{TYPE:"edit"},includes:L.Mixin.Events,initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.setOptions(this,e),this._featureGroup=e.featureGroup,!(this._featureGroup instanceof L.FeatureGroup))throw new Error("options.featureGroup must be a L.FeatureGroup");this._uneditedLayerProps={},this.type=L.EditToolbar.Edit.TYPE},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.EDITSTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._featureGroup.on("layeradd",this._enableLayerEdit,this).on("layerremove",this._disableLayerEdit,this))},disable:function(){this._enabled&&(this._featureGroup.off("layeradd",this._enableLayerEdit,this).off("layerremove",this._disableLayerEdit,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.EDITSTOP,{handler:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._featureGroup.eachLayer(this._enableLayerEdit,this),this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}),t._editTooltip=this._tooltip,this._updateTooltip(),this._map.on("mousemove",this._onMouseMove,this).on("touchmove",this._onMouseMove,this).on("MSPointerMove",this._onMouseMove,this).on(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},removeHooks:function(){this._map&&(this._featureGroup.eachLayer(this._disableLayerEdit,this),this._uneditedLayerProps={},this._tooltip.dispose(),this._tooltip=null,this._map.off("mousemove",this._onMouseMove,this).off("touchmove",this._onMouseMove,this).off("MSPointerMove",this._onMouseMove,this).off(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},revertLayers:function(){this._featureGroup.eachLayer(function(t){this._revertLayer(t)},this)},save:function(){var t=new L.LayerGroup;this._featureGroup.eachLayer(function(e){e.edited&&(t.addLayer(e),e.edited=!1)}),this._map.fire(L.Draw.Event.EDITED,{layers:t})},_backupLayer:function(t){var e=L.Util.stamp(t);this._uneditedLayerProps[e]||(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?this._uneditedLayerProps[e]={latlngs:L.LatLngUtil.cloneLatLngs(t.getLatLngs())}:t instanceof L.Circle?this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng()),radius:t.getRadius()}:t instanceof L.Marker&&(this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng())}))},_getTooltipText:function(){return{text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}},_updateTooltip:function(){this._tooltip.updateContent(this._getTooltipText())},_revertLayer:function(t){var e=L.Util.stamp(t);t.edited=!1,this._uneditedLayerProps.hasOwnProperty(e)&&(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?t.setLatLngs(this._uneditedLayerProps[e].latlngs):t instanceof L.Circle?(t.setLatLng(this._uneditedLayerProps[e].latlng),t.setRadius(this._uneditedLayerProps[e].radius)):t instanceof L.Marker&&t.setLatLng(this._uneditedLayerProps[e].latlng),t.fire("revert-edited",{layer:t}))},_enableLayerEdit:function(t){var e,i,o=t.layer||t.target||t;this._backupLayer(o),this.options.poly&&(i=L.Util.extend({},this.options.poly),o.options.poly=i),this.options.selectedPathOptions&&(e=L.Util.extend({},this.options.selectedPathOptions),e.maintainColor&&(e.color=o.options.color,e.fillColor=o.options.fillColor),o.options.original=L.extend({},o.options),o.options.editing=e),o instanceof L.Marker?(o.editing&&o.editing.enable(),o.dragging.enable(),o.on("dragend",this._onMarkerDragEnd).on("touchmove",this._onTouchMove,this).on("MSPointerMove",this._onTouchMove,this).on("touchend",this._onMarkerDragEnd,this).on("MSPointerUp",this._onMarkerDragEnd,this)):o.editing.enable()},_disableLayerEdit:function(t){var e=t.layer||t.target||t;e.edited=!1,e.editing&&e.editing.disable(),delete e.options.editing,delete e.options.original,this._selectedPathOptions&&(e instanceof L.Marker?this._toggleMarkerHighlight(e):(e.setStyle(e.options.previousOptions),delete e.options.previousOptions)),e instanceof L.Marker?(e.dragging.disable(),e.off("dragend",this._onMarkerDragEnd,this).off("touchmove",this._onTouchMove,this).off("MSPointerMove",this._onTouchMove,this).off("touchend",this._onMarkerDragEnd,this).off("MSPointerUp",this._onMarkerDragEnd,this)):e.editing.disable()},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_onMarkerDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_onTouchMove:function(t){var e=t.originalEvent.changedTouches[0],i=this._map.mouseEventToLayerPoint(e),o=this._map.layerPointToLatLng(i);t.target.setLatLng(o)},_hasAvailableLayers:function(){return 0!==this._featureGroup.getLayers().length}}),L.EditToolbar.Delete=L.Handler.extend({statics:{TYPE:"remove"},includes:L.Mixin.Events,initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.Util.setOptions(this,e),this._deletableLayers=this.options.featureGroup,!(this._deletableLayers instanceof L.FeatureGroup))throw new Error("options.featureGroup must be a L.FeatureGroup");this.type=L.EditToolbar.Delete.TYPE},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.DELETESTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._deletableLayers.on("layeradd",this._enableLayerDelete,this).on("layerremove",this._disableLayerDelete,this))},disable:function(){this._enabled&&(this._deletableLayers.off("layeradd",this._enableLayerDelete,this).off("layerremove",this._disableLayerDelete,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DELETESTOP,{handler:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._deletableLayers.eachLayer(this._enableLayerDelete,this),this._deletedLayers=new L.LayerGroup,this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.remove.tooltip.text}),this._map.on("mousemove",this._onMouseMove,this))},removeHooks:function(){this._map&&(this._deletableLayers.eachLayer(this._disableLayerDelete,this),this._deletedLayers=null,this._tooltip.dispose(),this._tooltip=null,this._map.off("mousemove",this._onMouseMove,this))},revertLayers:function(){this._deletedLayers.eachLayer(function(t){this._deletableLayers.addLayer(t),t.fire("revert-deleted",{layer:t})},this)},save:function(){this._map.fire(L.Draw.Event.DELETED,{layers:this._deletedLayers})},removeAllLayers:function(){this._deletableLayers.eachLayer(function(t){this._removeLayer({layer:t})},this),this.save()},_enableLayerDelete:function(t){(t.layer||t.target||t).on("click",this._removeLayer,this)},_disableLayerDelete:function(t){var e=t.layer||t.target||t;e.off("click",this._removeLayer,this),this._deletedLayers.removeLayer(e)},_removeLayer:function(t){var e=t.layer||t.target||t;this._deletableLayers.removeLayer(e),this._deletedLayers.addLayer(e),e.fire("deleted")},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_hasAvailableLayers:function(){return 0!==this._deletableLayers.getLayers().length}})}(window,document); \ No newline at end of file diff --git a/haitidata/static/gulpfile.js b/haitidata/static/gulpfile.js new file mode 100755 index 0000000..a6f9fb5 --- /dev/null +++ b/haitidata/static/gulpfile.js @@ -0,0 +1,23 @@ +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var pkg = require('./package.json'); +var concat = require('gulp-concat'); +var less = require('gulp-less'); +var del = require('del'); + +gulp.task('clean:site_base.css', [], function () { + return del([ './css/site_base.css' ]); +}); + +gulp.task('compile:site_base.css', [], function() { + return gulp.src(["./less/site_base.less"], {base: './'}) + .pipe(less({})) + .pipe(concat("site_base.css")) + .pipe(gulp.dest("./css")); +}); + +gulp.task('watch', function() { + gulp.watch("./less/**/*", ['clean:site_base.css', 'compile:site_base.css']); +}); + +gulp.task('default', ['watch', 'clean:site_base.css', 'compile:site_base.css']); diff --git a/haitidata/static/img/README b/haitidata/static/img/README old mode 100644 new mode 100755 diff --git a/haitidata/static/img/bing_aerial_w_labels.png b/haitidata/static/img/bing_aerial_w_labels.png new file mode 100755 index 0000000..131c8b8 Binary files /dev/null and b/haitidata/static/img/bing_aerial_w_labels.png differ diff --git a/haitidata/static/img/bing_canvas_dark.png b/haitidata/static/img/bing_canvas_dark.png new file mode 100755 index 0000000..d643423 Binary files /dev/null and b/haitidata/static/img/bing_canvas_dark.png differ diff --git a/haitidata/static/img/bing_road_on_demand.png b/haitidata/static/img/bing_road_on_demand.png new file mode 100755 index 0000000..0da3163 Binary files /dev/null and b/haitidata/static/img/bing_road_on_demand.png differ diff --git a/haitidata/static/img/favicon-114.png b/haitidata/static/img/favicon-114.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-120.png b/haitidata/static/img/favicon-120.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-144.png b/haitidata/static/img/favicon-144.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-150.png b/haitidata/static/img/favicon-150.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-152.png b/haitidata/static/img/favicon-152.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-16.png b/haitidata/static/img/favicon-16.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-160.png b/haitidata/static/img/favicon-160.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-180.png b/haitidata/static/img/favicon-180.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-192.png b/haitidata/static/img/favicon-192.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-310.png b/haitidata/static/img/favicon-310.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-32.png b/haitidata/static/img/favicon-32.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-57.png b/haitidata/static/img/favicon-57.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-60.png b/haitidata/static/img/favicon-60.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-64.png b/haitidata/static/img/favicon-64.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-70.png b/haitidata/static/img/favicon-70.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-72.png b/haitidata/static/img/favicon-72.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-76.png b/haitidata/static/img/favicon-76.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon-96.png b/haitidata/static/img/favicon-96.png old mode 100755 new mode 100644 diff --git a/haitidata/static/img/favicon.ico b/haitidata/static/img/favicon.ico old mode 100755 new mode 100644 diff --git a/haitidata/static/js/README b/haitidata/static/js/README old mode 100644 new mode 100755 diff --git a/haitidata/static/js/bar.js b/haitidata/static/js/bar.js deleted file mode 100644 index 29b6eb6..0000000 --- a/haitidata/static/js/bar.js +++ /dev/null @@ -1,185 +0,0 @@ -function barChart(cat, qnt, title,id){ - var width = function(){ return document.getElementById(id).offsetWidth}, - height = 500, - padding = 5, - xScale = d3.scaleBand(), - yScale = d3.scaleLinear(), - colour = d3.scaleOrdinal(d3.schemeCategory20), - x, - y, - margin = { top: 30, bottom: 30, left: 30, right: 120 }, - floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), - xAxis = d3.axisBottom(xScale), - yAxis = d3.axisLeft(yScale); - - function my(selection){ - - selection.each(function(data) { - - var svg_name = "chart_svg" + id; - var svg = selection.append('svg') - .attr("id", svg_name) - .attr("width", width()) - .attr("height", height); - - var g = svg.selectAll("g") - .data([1]); - g = g.enter().append("g") - .merge(g) - .attr("class", svg_name) - .attr("transform", - "translate(" + margin.left + "," + margin.top +")"); - - - var innerWidth = width() - margin.left - margin.right ; - var innerHeight = function(){ return height - margin.top - margin.bottom} ; - - - xScale - .domain(data.map(function (d){ return d[x]; })) - .range([0, (innerWidth - margin.right)]); - - - // X axis - var xAxis_name = "x-axis_" + id; - var xAxis_call = "." + xAxis_name; - var xAxisG = g.selectAll(xAxis_call).data([1]); - xAxisG.enter().append("g") - .attr("class", xAxis_name) - .merge(xAxisG) - .attr("transform", "translate(0," + innerHeight() +")") - .call(xAxis); - - // labels X axis - // rotate text if is longer than... - var rotate = 0; - d3.select(this).select(xAxis_call).selectAll("text").each(function(){ - if (this.getBBox().width > (xScale.bandwidth() - (padding*2))){ - rotate = 1; - d3.select(xAxis_call).selectAll("text").attr("transform", "rotate(-90)") - .attr("y", 0) - .attr("x", -10) - .attr("dy", ".35em") - .style("text-anchor", "end"); - }}); - - // adjust margin and x axis title - var maxh = 15; - if (rotate == 1) { - d3.select(this).select(xAxis_call).selectAll("text").each(function(){ - if (this.getBBox().width > maxh) - maxh = this.getBBox().width; - });}; - margin.bottom = margin.bottom + maxh; - d3.select(xAxis_call).attr("transform", "translate(0," + (innerHeight()) + ")"); - - var text_name = "text_" + id; - g.append("text") - .attr("class", text_name) - .attr("transform", "translate(" + (innerWidth/2) + ", " + (innerHeight() + margin.bottom - 5) + ")") - .style("font-size", "12px") - .style("text-anchor", "middle") - .text(cat); - - yScale - .domain([0, d3.max(data, function (d){ return d[y] ;})]) - .range([innerHeight(), 0]); - - // Y axis - var yAxis_name = "y-axis_" + id; - var yAxis_call = "." + yAxis_name; - var yAxisG = g.selectAll(yAxis_call).data([1]); - yAxisG.enter().append("g") - .attr("class", yAxis_name) - .merge(yAxisG) - .call(yAxis); - - //labels Y axis - var maxw = 0; - d3.select(this).select(yAxis_call).selectAll("text").each(function(){ - if (this.getBBox().width > maxw) { - maxw = this.getBBox().width; - } - }); - margin.left = margin.left + maxw; - g.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - - var yLabel = function(){ - if (title == "Count"){ - return "Count"; - } else { - return qnt; - }}; - - g.append("text") - .attr("class", text_name) - .attr("transform", "rotate(-90)") - .attr("x", 0 - (innerHeight()/2)) - .attr("y", 0 - (margin.left)) - .attr("dy", "1em") - .style("font-size", "12px") - .style("text-anchor", "middle") - .text(yLabel); - - // bars - var rects = g.selectAll("rect") - .data(data); - rects.exit().remove(); - rects.enter().append("rect") - .merge(rects) - .attr("x", function (d){ return xScale(d[x]) + padding; }) - .attr("y", function (d){ return yScale(d[y]); }) - .attr("fill", function(d) { return colour(xScale(d[x])); }) - .attr("width", xScale.bandwidth() - (padding*2)) - .attr("height", function (d){ - return innerHeight() - yScale(d.value); - }); - - //chart legend - var leg_name = "legend" + id; - var leg_call = "." + leg_name; - var legend = svg.selectAll("leg_call") - .data(data) - .enter().append("g") - .attr("class", leg_name) - .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; }); - - legend.append("rect") - .attr("x", width() - 18) - .attr("width", 18) - .attr("height", 18) - .style("fill", function(d) { return colour(xScale(d[x]))} ); - - legend.append("text") - .attr("class", text_name) - .attr("x", width() - 24) - .attr("y", 9) - .attr("dy", ".35em") - .style("text-anchor", "end") - .text(function (d){ return d[x] + ": " + floatFormat(d[y]); }); - - }); - } - - my.x = function (_){ - return arguments.length ? (x = _, my) : x; - }; - - my.y = function (_){ - return arguments.length ? (y = _, my) : y; - }; - - my.width = function (_){ - return arguments.length ? (width = _, my) : width; - }; - - my.height = function (_){ - return arguments.length ? (height = _, my) : height; - }; - - my.padding = function (_){ - return arguments.length ? (xScale.padding(_), my) : xScale.padding(); - }; - - return my; - } diff --git a/haitidata/static/js/bootstrap.js b/haitidata/static/js/bootstrap.js deleted file mode 100644 index 8a2e99a..0000000 --- a/haitidata/static/js/bootstrap.js +++ /dev/null @@ -1,2377 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ - -if (typeof jQuery === 'undefined') { - throw new Error('Bootstrap\'s JavaScript requires jQuery') -} - -+function ($) { - 'use strict'; - var version = $.fn.jquery.split(' ')[0].split('.') - if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { - throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') - } -}(jQuery); - -/* ======================================================================== - * Bootstrap: transition.js v3.3.7 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - WebkitTransition : 'webkitTransitionEnd', - MozTransition : 'transitionend', - OTransition : 'oTransitionEnd otransitionend', - transition : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false - var $el = this - $(this).one('bsTransitionEnd', function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - - if (!$.support.transition) return - - $.event.special.bsTransitionEnd = { - bindType: $.support.transition.end, - delegateType: $.support.transition.end, - handle: function (e) { - if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) - } - } - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.3.7 - * http://getbootstrap.com/javascript/#alerts - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.VERSION = '3.3.7' - - Alert.TRANSITION_DURATION = 150 - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector === '#' ? [] : selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.closest('.alert') - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - // detach from parent, fire event then clean up data - $parent.detach().trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one('bsTransitionEnd', removeElement) - .emulateTransitionEnd(Alert.TRANSITION_DURATION) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.alert - - $.fn.alert = Plugin - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.3.7 - * http://getbootstrap.com/javascript/#buttons - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - this.isLoading = false - } - - Button.VERSION = '3.3.7' - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state += 'Text' - - if (data.resetText == null) $el.data('resetText', $el[val]()) - - // push to event loop to allow forms to submit - setTimeout($.proxy(function () { - $el[val](data[state] == null ? this.options[state] : data[state]) - - if (state == 'loadingText') { - this.isLoading = true - $el.addClass(d).attr(d, d).prop(d, true) - } else if (this.isLoading) { - this.isLoading = false - $el.removeClass(d).removeAttr(d).prop(d, false) - } - }, this), 0) - } - - Button.prototype.toggle = function () { - var changed = true - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - if ($input.prop('type') == 'radio') { - if ($input.prop('checked')) changed = false - $parent.find('.active').removeClass('active') - this.$element.addClass('active') - } else if ($input.prop('type') == 'checkbox') { - if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false - this.$element.toggleClass('active') - } - $input.prop('checked', this.$element.hasClass('active')) - if (changed) $input.trigger('change') - } else { - this.$element.attr('aria-pressed', !this.$element.hasClass('active')) - this.$element.toggleClass('active') - } - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - var old = $.fn.button - - $.fn.button = Plugin - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document) - .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { - var $btn = $(e.target).closest('.btn') - Plugin.call($btn, 'toggle') - if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { - // Prevent double click on radios, and the double selections (so cancellation) on checkboxes - e.preventDefault() - // The target component still receive the focus - if ($btn.is('input,button')) $btn.trigger('focus') - else $btn.find('input:visible,button:visible').first().trigger('focus') - } - }) - .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { - $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.3.7 - * http://getbootstrap.com/javascript/#carousel - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = null - this.sliding = null - this.interval = null - this.$active = null - this.$items = null - - this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) - - this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element - .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) - .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) - } - - Carousel.VERSION = '3.3.7' - - Carousel.TRANSITION_DURATION = 600 - - Carousel.DEFAULTS = { - interval: 5000, - pause: 'hover', - wrap: true, - keyboard: true - } - - Carousel.prototype.keydown = function (e) { - if (/input|textarea/i.test(e.target.tagName)) return - switch (e.which) { - case 37: this.prev(); break - case 39: this.next(); break - default: return - } - - e.preventDefault() - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getItemIndex = function (item) { - this.$items = item.parent().children('.item') - return this.$items.index(item || this.$active) - } - - Carousel.prototype.getItemForDirection = function (direction, active) { - var activeIndex = this.getItemIndex(active) - var willWrap = (direction == 'prev' && activeIndex === 0) - || (direction == 'next' && activeIndex == (this.$items.length - 1)) - if (willWrap && !this.options.wrap) return active - var delta = direction == 'prev' ? -1 : 1 - var itemIndex = (activeIndex + delta) % this.$items.length - return this.$items.eq(itemIndex) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || this.getItemForDirection(type, $active) - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var that = this - - if ($next.hasClass('active')) return (this.sliding = false) - - var relatedTarget = $next[0] - var slideEvent = $.Event('slide.bs.carousel', { - relatedTarget: relatedTarget, - direction: direction - }) - this.$element.trigger(slideEvent) - if (slideEvent.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) - $nextIndicator && $nextIndicator.addClass('active') - } - - var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one('bsTransitionEnd', function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { - that.$element.trigger(slidEvent) - }, 0) - }) - .emulateTransitionEnd(Carousel.TRANSITION_DURATION) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger(slidEvent) - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - var old = $.fn.carousel - - $.fn.carousel = Plugin - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - var clickHandler = function (e) { - var href - var $this = $(this) - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 - if (!$target.hasClass('carousel')) return - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - Plugin.call($target, options) - - if (slideIndex) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - } - - $(document) - .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) - .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - Plugin.call($carousel, $carousel.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.3.7 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - -/* jshint latedef: false */ - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + - '[data-toggle="collapse"][data-target="#' + element.id + '"]') - this.transitioning = null - - if (this.options.parent) { - this.$parent = this.getParent() - } else { - this.addAriaAndCollapsedClass(this.$element, this.$trigger) - } - - if (this.options.toggle) this.toggle() - } - - Collapse.VERSION = '3.3.7' - - Collapse.TRANSITION_DURATION = 350 - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var activesData - var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') - - if (actives && actives.length) { - activesData = actives.data('bs.collapse') - if (activesData && activesData.transitioning) return - } - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - if (actives && actives.length) { - Plugin.call(actives, 'hide') - activesData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing')[dimension](0) - .attr('aria-expanded', true) - - this.$trigger - .removeClass('collapsed') - .attr('aria-expanded', true) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in')[dimension]('') - this.transitioning = 0 - this.$element - .trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element[dimension](this.$element[dimension]())[0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse in') - .attr('aria-expanded', false) - - this.$trigger - .addClass('collapsed') - .attr('aria-expanded', false) - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .removeClass('collapsing') - .addClass('collapse') - .trigger('hidden.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one('bsTransitionEnd', $.proxy(complete, this)) - .emulateTransitionEnd(Collapse.TRANSITION_DURATION) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - Collapse.prototype.getParent = function () { - return $(this.options.parent) - .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') - .each($.proxy(function (i, element) { - var $element = $(element) - this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) - }, this)) - .end() - } - - Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { - var isOpen = $element.hasClass('in') - - $element.attr('aria-expanded', isOpen) - $trigger - .toggleClass('collapsed', !isOpen) - .attr('aria-expanded', isOpen) - } - - function getTargetFromTrigger($trigger) { - var href - var target = $trigger.attr('data-target') - || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 - - return $(target) - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.collapse - - $.fn.collapse = Plugin - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { - var $this = $(this) - - if (!$this.attr('data-target')) e.preventDefault() - - var $target = getTargetFromTrigger($this) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - - Plugin.call($target, option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.3.7 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle="dropdown"]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.VERSION = '3.3.7' - - function getParent($this) { - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = selector && $(selector) - - return $parent && $parent.length ? $parent : $this.parent() - } - - function clearMenus(e) { - if (e && e.which === 3) return - $(backdrop).remove() - $(toggle).each(function () { - var $this = $(this) - var $parent = getParent($this) - var relatedTarget = { relatedTarget: this } - - if (!$parent.hasClass('open')) return - - if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return - - $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this.attr('aria-expanded', 'false') - $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) - }) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $(document.createElement('div')) - .addClass('dropdown-backdrop') - .insertAfter($(this)) - .on('click', clearMenus) - } - - var relatedTarget = { relatedTarget: this } - $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) - - if (e.isDefaultPrevented()) return - - $this - .trigger('focus') - .attr('aria-expanded', 'true') - - $parent - .toggleClass('open') - .trigger($.Event('shown.bs.dropdown', relatedTarget)) - } - - return false - } - - Dropdown.prototype.keydown = function (e) { - if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return - - var $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - if (!isActive && e.which != 27 || isActive && e.which == 27) { - if (e.which == 27) $parent.find(toggle).trigger('focus') - return $this.trigger('click') - } - - var desc = ' li:not(.disabled):visible a' - var $items = $parent.find('.dropdown-menu' + desc) - - if (!$items.length) return - - var index = $items.index(e.target) - - if (e.which == 38 && index > 0) index-- // up - if (e.which == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items.eq(index).trigger('focus') - } - - - // DROPDOWN PLUGIN DEFINITION - // ========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.dropdown') - - if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - var old = $.fn.dropdown - - $.fn.dropdown = Plugin - $.fn.dropdown.Constructor = Dropdown - - - // DROPDOWN NO CONFLICT - // ==================== - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - // APPLY TO STANDARD DROPDOWN ELEMENTS - // =================================== - - $(document) - .on('click.bs.dropdown.data-api', clearMenus) - .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) - .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) - .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: modal.js v3.3.7 - * http://getbootstrap.com/javascript/#modals - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // MODAL CLASS DEFINITION - // ====================== - - var Modal = function (element, options) { - this.options = options - this.$body = $(document.body) - this.$element = $(element) - this.$dialog = this.$element.find('.modal-dialog') - this.$backdrop = null - this.isShown = null - this.originalBodyPad = null - this.scrollbarWidth = 0 - this.ignoreBackdropClick = false - - if (this.options.remote) { - this.$element - .find('.modal-content') - .load(this.options.remote, $.proxy(function () { - this.$element.trigger('loaded.bs.modal') - }, this)) - } - } - - Modal.VERSION = '3.3.7' - - Modal.TRANSITION_DURATION = 300 - Modal.BACKDROP_TRANSITION_DURATION = 150 - - Modal.DEFAULTS = { - backdrop: true, - keyboard: true, - show: true - } - - Modal.prototype.toggle = function (_relatedTarget) { - return this.isShown ? this.hide() : this.show(_relatedTarget) - } - - Modal.prototype.show = function (_relatedTarget) { - var that = this - var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.checkScrollbar() - this.setScrollbar() - this.$body.addClass('modal-open') - - this.escape() - this.resize() - - this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) - - this.$dialog.on('mousedown.dismiss.bs.modal', function () { - that.$element.one('mouseup.dismiss.bs.modal', function (e) { - if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true - }) - }) - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(that.$body) // don't move modals dom position - } - - that.$element - .show() - .scrollTop(0) - - that.adjustDialog() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element.addClass('in') - - that.enforceFocus() - - var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) - - transition ? - that.$dialog // wait for modal to slide in - .one('bsTransitionEnd', function () { - that.$element.trigger('focus').trigger(e) - }) - .emulateTransitionEnd(Modal.TRANSITION_DURATION) : - that.$element.trigger('focus').trigger(e) - }) - } - - Modal.prototype.hide = function (e) { - if (e) e.preventDefault() - - e = $.Event('hide.bs.modal') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - this.resize() - - $(document).off('focusin.bs.modal') - - this.$element - .removeClass('in') - .off('click.dismiss.bs.modal') - .off('mouseup.dismiss.bs.modal') - - this.$dialog.off('mousedown.dismiss.bs.modal') - - $.support.transition && this.$element.hasClass('fade') ? - this.$element - .one('bsTransitionEnd', $.proxy(this.hideModal, this)) - .emulateTransitionEnd(Modal.TRANSITION_DURATION) : - this.hideModal() - } - - Modal.prototype.enforceFocus = function () { - $(document) - .off('focusin.bs.modal') // guard against infinite focus loop - .on('focusin.bs.modal', $.proxy(function (e) { - if (document !== e.target && - this.$element[0] !== e.target && - !this.$element.has(e.target).length) { - this.$element.trigger('focus') - } - }, this)) - } - - Modal.prototype.escape = function () { - if (this.isShown && this.options.keyboard) { - this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { - e.which == 27 && this.hide() - }, this)) - } else if (!this.isShown) { - this.$element.off('keydown.dismiss.bs.modal') - } - } - - Modal.prototype.resize = function () { - if (this.isShown) { - $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) - } else { - $(window).off('resize.bs.modal') - } - } - - Modal.prototype.hideModal = function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.$body.removeClass('modal-open') - that.resetAdjustments() - that.resetScrollbar() - that.$element.trigger('hidden.bs.modal') - }) - } - - Modal.prototype.removeBackdrop = function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - Modal.prototype.backdrop = function (callback) { - var that = this - var animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $(document.createElement('div')) - .addClass('modal-backdrop ' + animate) - .appendTo(this.$body) - - this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { - if (this.ignoreBackdropClick) { - this.ignoreBackdropClick = false - return - } - if (e.target !== e.currentTarget) return - this.options.backdrop == 'static' - ? this.$element[0].focus() - : this.hide() - }, this)) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop - .one('bsTransitionEnd', callback) - .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - var callbackRemove = function () { - that.removeBackdrop() - callback && callback() - } - $.support.transition && this.$element.hasClass('fade') ? - this.$backdrop - .one('bsTransitionEnd', callbackRemove) - .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : - callbackRemove() - - } else if (callback) { - callback() - } - } - - // these following methods are used to handle overflowing modals - - Modal.prototype.handleUpdate = function () { - this.adjustDialog() - } - - Modal.prototype.adjustDialog = function () { - var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight - - this.$element.css({ - paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', - paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' - }) - } - - Modal.prototype.resetAdjustments = function () { - this.$element.css({ - paddingLeft: '', - paddingRight: '' - }) - } - - Modal.prototype.checkScrollbar = function () { - var fullWindowWidth = window.innerWidth - if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 - var documentElementRect = document.documentElement.getBoundingClientRect() - fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) - } - this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth - this.scrollbarWidth = this.measureScrollbar() - } - - Modal.prototype.setScrollbar = function () { - var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) - this.originalBodyPad = document.body.style.paddingRight || '' - if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) - } - - Modal.prototype.resetScrollbar = function () { - this.$body.css('padding-right', this.originalBodyPad) - } - - Modal.prototype.measureScrollbar = function () { // thx walsh - var scrollDiv = document.createElement('div') - scrollDiv.className = 'modal-scrollbar-measure' - this.$body.append(scrollDiv) - var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth - this.$body[0].removeChild(scrollDiv) - return scrollbarWidth - } - - - // MODAL PLUGIN DEFINITION - // ======================= - - function Plugin(option, _relatedTarget) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.modal') - var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option](_relatedTarget) - else if (options.show) data.show(_relatedTarget) - }) - } - - var old = $.fn.modal - - $.fn.modal = Plugin - $.fn.modal.Constructor = Modal - - - // MODAL NO CONFLICT - // ================= - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - // MODAL DATA-API - // ============== - - $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - var href = $this.attr('href') - var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 - var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) - - if ($this.is('a')) e.preventDefault() - - $target.one('show.bs.modal', function (showEvent) { - if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown - $target.one('hidden.bs.modal', function () { - $this.is(':visible') && $this.trigger('focus') - }) - }) - Plugin.call($target, option, this) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: tooltip.js v3.3.7 - * http://getbootstrap.com/javascript/#tooltip - * Inspired by the original jQuery.tipsy by Jason Frame - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TOOLTIP PUBLIC CLASS DEFINITION - // =============================== - - var Tooltip = function (element, options) { - this.type = null - this.options = null - this.enabled = null - this.timeout = null - this.hoverState = null - this.$element = null - this.inState = null - - this.init('tooltip', element, options) - } - - Tooltip.VERSION = '3.3.7' - - Tooltip.TRANSITION_DURATION = 150 - - Tooltip.DEFAULTS = { - animation: true, - placement: 'top', - selector: false, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - container: false, - viewport: { - selector: 'body', - padding: 0 - } - } - - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) - this.inState = { click: false, hover: false, focus: false } - - if (this.$element[0] instanceof document.constructor && !this.options.selector) { - throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') - } - - var triggers = this.options.trigger.split(' ') - - for (var i = triggers.length; i--;) { - var trigger = triggers[i] - - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' - - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } - - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay, - hide: options.delay - } - } - - return options - } - - Tooltip.prototype.getDelegateOptions = function () { - var options = {} - var defaults = this.getDefaults() - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) - - return options - } - - Tooltip.prototype.enter = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - if (obj instanceof $.Event) { - self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true - } - - if (self.tip().hasClass('in') || self.hoverState == 'in') { - self.hoverState = 'in' - return - } - - clearTimeout(self.timeout) - - self.hoverState = 'in' - - if (!self.options.delay || !self.options.delay.show) return self.show() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - Tooltip.prototype.isInStateTrue = function () { - for (var key in this.inState) { - if (this.inState[key]) return true - } - - return false - } - - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget).data('bs.' + this.type) - - if (!self) { - self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) - $(obj.currentTarget).data('bs.' + this.type, self) - } - - if (obj instanceof $.Event) { - self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false - } - - if (self.isInStateTrue()) return - - clearTimeout(self.timeout) - - self.hoverState = 'out' - - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.' + this.type) - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - - var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) - if (e.isDefaultPrevented() || !inDom) return - var that = this - - var $tip = this.tip() - - var tipId = this.getUID(this.type) - - this.setContent() - $tip.attr('id', tipId) - this.$element.attr('aria-describedby', tipId) - - if (this.options.animation) $tip.addClass('fade') - - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - var autoToken = /\s?auto?\s?/i - var autoPlace = autoToken.test(placement) - if (autoPlace) placement = placement.replace(autoToken, '') || 'top' - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - .addClass(placement) - .data('bs.' + this.type, this) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - this.$element.trigger('inserted.bs.' + this.type) - - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (autoPlace) { - var orgPlacement = placement - var viewportDim = this.getPosition(this.$viewport) - - placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : - placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : - placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : - placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : - placement - - $tip - .removeClass(orgPlacement) - .addClass(placement) - } - - var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) - - this.applyPlacement(calculatedOffset, placement) - - var complete = function () { - var prevHoverState = that.hoverState - that.$element.trigger('shown.bs.' + that.type) - that.hoverState = null - - if (prevHoverState == 'out') that.leave(that) - } - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : - complete() - } - } - - Tooltip.prototype.applyPlacement = function (offset, placement) { - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight - - // manually read margins because getBoundingClientRect includes difference - var marginTop = parseInt($tip.css('margin-top'), 10) - var marginLeft = parseInt($tip.css('margin-left'), 10) - - // we must check for NaN for ie 8/9 - if (isNaN(marginTop)) marginTop = 0 - if (isNaN(marginLeft)) marginLeft = 0 - - offset.top += marginTop - offset.left += marginLeft - - // $.fn.offset doesn't round pixel values - // so we use setOffset directly with our own function B-0 - $.offset.setOffset($tip[0], $.extend({ - using: function (props) { - $tip.css({ - top: Math.round(props.top), - left: Math.round(props.left) - }) - } - }, offset), 0) - - $tip.addClass('in') - - // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - } - - var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) - - if (delta.left) offset.left += delta.left - else offset.top += delta.top - - var isVertical = /top|bottom/.test(placement) - var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight - var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' - - $tip.offset(offset) - this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) - } - - Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { - this.arrow() - .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') - .css(isVertical ? 'top' : 'left', '') - } - - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - Tooltip.prototype.hide = function (callback) { - var that = this - var $tip = $(this.$tip) - var e = $.Event('hide.bs.' + this.type) - - function complete() { - if (that.hoverState != 'in') $tip.detach() - if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. - that.$element - .removeAttr('aria-describedby') - .trigger('hidden.bs.' + that.type) - } - callback && callback() - } - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - $.support.transition && $tip.hasClass('fade') ? - $tip - .one('bsTransitionEnd', complete) - .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : - complete() - - this.hoverState = null - - return this - } - - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } - - Tooltip.prototype.getPosition = function ($element) { - $element = $element || this.$element - - var el = $element[0] - var isBody = el.tagName == 'BODY' - - var elRect = el.getBoundingClientRect() - if (elRect.width == null) { - // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 - elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) - } - var isSvg = window.SVGElement && el instanceof window.SVGElement - // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. - // See https://github.com/twbs/bootstrap/issues/20280 - var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) - var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } - var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null - - return $.extend({}, elRect, scroll, outerDims, elOffset) - } - - Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { - return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : - /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } - - } - - Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { - var delta = { top: 0, left: 0 } - if (!this.$viewport) return delta - - var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 - var viewportDimensions = this.getPosition(this.$viewport) - - if (/right|left/.test(placement)) { - var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll - var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight - if (topEdgeOffset < viewportDimensions.top) { // top overflow - delta.top = viewportDimensions.top - topEdgeOffset - } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow - delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset - } - } else { - var leftEdgeOffset = pos.left - viewportPadding - var rightEdgeOffset = pos.left + viewportPadding + actualWidth - if (leftEdgeOffset < viewportDimensions.left) { // left overflow - delta.left = viewportDimensions.left - leftEdgeOffset - } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow - delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset - } - } - - return delta - } - - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - Tooltip.prototype.getUID = function (prefix) { - do prefix += ~~(Math.random() * 1000000) - while (document.getElementById(prefix)) - return prefix - } - - Tooltip.prototype.tip = function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - if (this.$tip.length != 1) { - throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') - } - } - return this.$tip - } - - Tooltip.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) - } - - Tooltip.prototype.enable = function () { - this.enabled = true - } - - Tooltip.prototype.disable = function () { - this.enabled = false - } - - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } - - Tooltip.prototype.toggle = function (e) { - var self = this - if (e) { - self = $(e.currentTarget).data('bs.' + this.type) - if (!self) { - self = new this.constructor(e.currentTarget, this.getDelegateOptions()) - $(e.currentTarget).data('bs.' + this.type, self) - } - } - - if (e) { - self.inState.click = !self.inState.click - if (self.isInStateTrue()) self.enter(self) - else self.leave(self) - } else { - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } - } - - Tooltip.prototype.destroy = function () { - var that = this - clearTimeout(this.timeout) - this.hide(function () { - that.$element.off('.' + that.type).removeData('bs.' + that.type) - if (that.$tip) { - that.$tip.detach() - } - that.$tip = null - that.$arrow = null - that.$viewport = null - that.$element = null - }) - } - - - // TOOLTIP PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option - - if (!data && /destroy|hide/.test(option)) return - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tooltip - - $.fn.tooltip = Plugin - $.fn.tooltip.Constructor = Tooltip - - - // TOOLTIP NO CONFLICT - // =================== - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(jQuery); - -/* ======================================================================== - * Bootstrap: popover.js v3.3.7 - * http://getbootstrap.com/javascript/#popovers - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // POPOVER PUBLIC CLASS DEFINITION - // =============================== - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') - - Popover.VERSION = '3.3.7' - - Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover - - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS - } - - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events - this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' - ](content) - - $tip.removeClass('fade top bottom left right in') - - // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do - // this manually by checking the contents. - if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() - } - - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } - - Popover.prototype.getContent = function () { - var $e = this.$element - var o = this.options - - return $e.attr('data-content') - || (typeof o.content == 'function' ? - o.content.call($e[0]) : - o.content) - } - - Popover.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.arrow')) - } - - - // POPOVER PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option - - if (!data && /destroy|hide/.test(option)) return - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.popover - - $.fn.popover = Plugin - $.fn.popover.Constructor = Popover - - - // POPOVER NO CONFLICT - // =================== - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(jQuery); - -/* ======================================================================== - * Bootstrap: scrollspy.js v3.3.7 - * http://getbootstrap.com/javascript/#scrollspy - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // SCROLLSPY CLASS DEFINITION - // ========================== - - function ScrollSpy(element, options) { - this.$body = $(document.body) - this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target || '') + ' .nav li > a' - this.offsets = [] - this.targets = [] - this.activeTarget = null - this.scrollHeight = 0 - - this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) - this.refresh() - this.process() - } - - ScrollSpy.VERSION = '3.3.7' - - ScrollSpy.DEFAULTS = { - offset: 10 - } - - ScrollSpy.prototype.getScrollHeight = function () { - return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - } - - ScrollSpy.prototype.refresh = function () { - var that = this - var offsetMethod = 'offset' - var offsetBase = 0 - - this.offsets = [] - this.targets = [] - this.scrollHeight = this.getScrollHeight() - - if (!$.isWindow(this.$scrollElement[0])) { - offsetMethod = 'position' - offsetBase = this.$scrollElement.scrollTop() - } - - this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#./.test(href) && $(href) - - return ($href - && $href.length - && $href.is(':visible') - && [[$href[offsetMethod]().top + offsetBase, href]]) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - that.offsets.push(this[0]) - that.targets.push(this[1]) - }) - } - - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.getScrollHeight() - var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i - - if (this.scrollHeight != scrollHeight) { - this.refresh() - } - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) - } - - if (activeTarget && scrollTop < offsets[0]) { - this.activeTarget = null - return this.clear() - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) - && this.activate(targets[i]) - } - } - - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target - - this.clear() - - var selector = this.selector + - '[data-target="' + target + '"],' + - this.selector + '[href="' + target + '"]' - - var active = $(selector) - .parents('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active - .closest('li.dropdown') - .addClass('active') - } - - active.trigger('activate.bs.scrollspy') - } - - ScrollSpy.prototype.clear = function () { - $(this.selector) - .parentsUntil(this.options.target, '.active') - .removeClass('active') - } - - - // SCROLLSPY PLUGIN DEFINITION - // =========================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.scrollspy - - $.fn.scrollspy = Plugin - $.fn.scrollspy.Constructor = ScrollSpy - - - // SCROLLSPY NO CONFLICT - // ===================== - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - // SCROLLSPY DATA-API - // ================== - - $(window).on('load.bs.scrollspy.data-api', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - Plugin.call($spy, $spy.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: tab.js v3.3.7 - * http://getbootstrap.com/javascript/#tabs - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // TAB CLASS DEFINITION - // ==================== - - var Tab = function (element) { - // jscs:disable requireDollarBeforejQueryAssignment - this.element = $(element) - // jscs:enable requireDollarBeforejQueryAssignment - } - - Tab.VERSION = '3.3.7' - - Tab.TRANSITION_DURATION = 150 - - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.data('target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - if ($this.parent('li').hasClass('active')) return - - var $previous = $ul.find('.active:last a') - var hideEvent = $.Event('hide.bs.tab', { - relatedTarget: $this[0] - }) - var showEvent = $.Event('show.bs.tab', { - relatedTarget: $previous[0] - }) - - $previous.trigger(hideEvent) - $this.trigger(showEvent) - - if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return - - var $target = $(selector) - - this.activate($this.closest('li'), $ul) - this.activate($target, $target.parent(), function () { - $previous.trigger({ - type: 'hidden.bs.tab', - relatedTarget: $this[0] - }) - $this.trigger({ - type: 'shown.bs.tab', - relatedTarget: $previous[0] - }) - }) - } - - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - .end() - .find('[data-toggle="tab"]') - .attr('aria-expanded', false) - - element - .addClass('active') - .find('[data-toggle="tab"]') - .attr('aria-expanded', true) - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if (element.parent('.dropdown-menu').length) { - element - .closest('li.dropdown') - .addClass('active') - .end() - .find('[data-toggle="tab"]') - .attr('aria-expanded', true) - } - - callback && callback() - } - - $active.length && transition ? - $active - .one('bsTransitionEnd', next) - .emulateTransitionEnd(Tab.TRANSITION_DURATION) : - next() - - $active.removeClass('in') - } - - - // TAB PLUGIN DEFINITION - // ===================== - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') - - if (!data) $this.data('bs.tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.tab - - $.fn.tab = Plugin - $.fn.tab.Constructor = Tab - - - // TAB NO CONFLICT - // =============== - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - // TAB DATA-API - // ============ - - var clickHandler = function (e) { - e.preventDefault() - Plugin.call($(this), 'show') - } - - $(document) - .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) - .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: affix.js v3.3.7 - * http://getbootstrap.com/javascript/#affix - * ======================================================================== - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - - this.$target = $(this.options.target) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = null - this.unpin = null - this.pinnedOffset = null - - this.checkPosition() - } - - Affix.VERSION = '3.3.7' - - Affix.RESET = 'affix affix-top affix-bottom' - - Affix.DEFAULTS = { - offset: 0, - target: window - } - - Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - var targetHeight = this.$target.height() - - if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false - - if (this.affixed == 'bottom') { - if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' - return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' - } - - var initializing = this.affixed == null - var colliderTop = initializing ? scrollTop : position.top - var colliderHeight = initializing ? targetHeight : height - - if (offsetTop != null && scrollTop <= offsetTop) return 'top' - if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' - - return false - } - - Affix.prototype.getPinnedOffset = function () { - if (this.pinnedOffset) return this.pinnedOffset - this.$element.removeClass(Affix.RESET).addClass('affix') - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - return (this.pinnedOffset = position.top - scrollTop) - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var height = this.$element.height() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - var scrollHeight = Math.max($(document).height(), $(document.body).height()) - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) - - var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) - - if (this.affixed != affix) { - if (this.unpin != null) this.$element.css('top', '') - - var affixType = 'affix' + (affix ? '-' + affix : '') - var e = $.Event(affixType + '.bs.affix') - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null - - this.$element - .removeClass(Affix.RESET) - .addClass(affixType) - .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') - } - - if (affix == 'bottom') { - this.$element.offset({ - top: scrollHeight - height - offsetBottom - }) - } - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.affix - - $.fn.affix = Plugin - $.fn.affix.Constructor = Affix - - - // AFFIX NO CONFLICT - // ================= - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom - if (data.offsetTop != null) data.offset.top = data.offsetTop - - Plugin.call($spy, data) - }) - }) - -}(jQuery); diff --git a/haitidata/static/js/bootstrap.min.js b/haitidata/static/js/bootstrap.min.js deleted file mode 100644 index be9574d..0000000 --- a/haitidata/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); diff --git a/haitidata/static/js/csv.js b/haitidata/static/js/csv.js deleted file mode 100644 index 226e8a0..0000000 --- a/haitidata/static/js/csv.js +++ /dev/null @@ -1,167 +0,0 @@ -var getCsv = function(csv_link, category, quantity, agg, chartType, id){ - var data = []; - d3.csv(csv_link, function(error, csv) { - if (error) throw error; - csv.forEach(function(row){ - var qnty_v; var ctgy_v; var i = 0; - while (i < Object.keys(row).length){ - if (Object.keys(row)[i] == quantity){ - qnty_v = +Object.values(row)[i] - } else if (Object.keys(row)[i] == category){ - if (Object.values(row)[i].length >= 20){ - - ctgy_v = Object.values(row)[i].substring(0, 17) + "..."; - } else { - ctgy_v = Object.values(row)[i]; - }; - } - i++; - }; - data.push({qnty : qnty_v , ctgy : ctgy_v }); - }) - - - var dropZeros = function(dato){ - return dato.filter(function(d){ - if (d.qnty !== 0){ - return d.qnty; - }}) - }; - - function groupData_sum(dato){ - return d3.nest().key(function(d) {return d.ctgy;}) - .rollup(function(v) {return d3.sum(v, function(d) {return d.qnty;});}) - .entries(dato); - }; - - function groupData_mean(dato){ - return d3.nest().key(function(d) {return d.ctgy;}) - .rollup(function(v) {return d3.mean(v, function(d) {return d.qnty;});}) - .entries(dato); - }; - - function groupData_min(dato){ - return d3.nest().key(function(d) {return d.ctgy;}) - .rollup(function(v) {return d3.min(v, function(d) {return d.qnty;});}) - .entries(dato); - }; - - function groupData_max(dato){ - return d3.nest().key(function(d) {return d.ctgy;}) - .rollup(function(v) {return d3.max(v, function(d) {return d.qnty;});}) - .entries(dato); - }; - - function groupData_count(dato){ - return d3.nest().key(function(d) {return d.ctgy;}) - .rollup(function(v) { return v.length;}) - .entries(dato); - }; - - function descendent(a,b){ - if (a.value < b.value) return 1; - if (a.value > b.value) return -1; - return 0; - } - - - var title; - var dati; - function aggregateData(data, agg){ - - if (agg == 0){ - dati = groupData_sum(dropZeros(data)).sort(descendent); - title = "Sum"; - } else if (agg == 1){ - dati = groupData_mean(data).sort(descendent); - title = "Mean"; - } else if (agg == 2){ - dati = groupData_count(data).sort(descendent); - title = "Count"; - } else if (agg == 3){ - dati = groupData_max(dropZeros(data)).sort(descendent); - title = "Maximum"; - } else if (agg == 4){ - dati = groupData_min(dropZeros(data)).sort(descendent);; - title = "Minimum"; - }; - return dati; - }; - - function create(chartType){ - if (chartType == 0){ - aggregateData(data, agg); - if (dati.length > 20){ - var firstSet = dati.slice(0,19); - var lastSet = dati.slice(19,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); - firstSet.push(lastSet); - dati = firstSet; - }; - var chartArea = "#" + id; - var bar = barChart(category, quantity, title, id) - .x('key') - .y('value') - d3.select(chartArea) - .datum(dati) - .call(bar); - } else if (chartType == 1){ - aggregateData(data, agg) - if (dati.length > 10){ - var firstSet = dati.slice(0,9); - var lastSet = dati.slice(9,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); - firstSet.push(lastSet); - dati = firstSet; - }; - var chartArea = "#" + id; - var pie = pieChart(category, quantity, title, id) - .variable('value') - .category('key') - d3.select(chartArea) - .datum(dati) - .call(pie); - } else if (chartType == 2){ - aggregateData(data, agg) - if (dati.length > 10){ - var firstSet = dati.slice(0,9); - var lastSet = dati.slice(9,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); - firstSet.push(lastSet); - dati = firstSet; - }; - var chartArea = "#" + id; - var donut = donutChart(category, quantity, title, id) - .variable('value') - .category('key') - d3.select(chartArea) - .datum(dati) - .call(donut); - } else if (chartType == 3){ - aggregateData(data, agg) - if (dati.length > 20){ - var firstSet = dati.slice(0,19); - var lastSet = dati.slice(19,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); - firstSet.push(lastSet); - dati = firstSet; - }; - var chartArea = "#" + id; - var line = lineChart(category, quantity, title, id) - .x('key') - .y('value') - d3.select(chartArea) - .datum(dati) - .call(line); - } - loading = false; - var cog = document.getElementById("rotella"); - cog.parentNode.removeChild(cog); - document.getElementById("preview_btn").disabled = false; - }; - - create(chartType); - }); -}; - - - - - - diff --git a/haitidata/static/js/donut.js b/haitidata/static/js/donut.js deleted file mode 100644 index 9312517..0000000 --- a/haitidata/static/js/donut.js +++ /dev/null @@ -1,419 +0,0 @@ -function donutChart(cat, qnt, title, id){ - var width = function(){ return document.getElementById(id).parentNode.offsetWidth}, - height = 500, - margin = {top: 80, right: 10, bottom: 10, left: 10}, - colour = d3.scaleOrdinal(d3.schemeCategory20c), // colour scheme - variable, // value in data that will dictate proportions on chart - category, // compare data by - padAngle = 0.015, // effectively dictates the gap between slices - transTime, // transition time - updateData, - floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), - cornerRadius = 3; // sets how rounded the corners are on each slice - - function chart(selection){ - selection.each(function() { - // generate chart - // =========================================================================================== - // Set up constructors for making donut. See https://github.com/d3/d3-shape/blob/master/README.md - var radius = Math.min(width(), (height - margin.top)) / 2; - - // creates a new pie generator - var pie = d3.pie() - .value(function(d) { return floatFormat(d[variable]); }) - .sort(null); - - // contructs and arc generator. This will be used for the donut. The difference between outer and inner - // radius will dictate the thickness of the donut - var arc = d3.arc() - .outerRadius(radius * 0.8) - .innerRadius(radius * 0.6) - .cornerRadius(cornerRadius) - .padAngle(padAngle); - - // this arc is used for aligning the text labels - var outerArc = d3.arc() - .outerRadius(radius * 0.83) - .innerRadius(radius * 0.83); - // =========================================================================================== - - // =========================================================================================== - // append the svg object to the selection - // var svg = selection.append('svg') - var svg = selection.append('svg') - .attr("id", "chart_svg") - .attr('width', width() + margin.left + margin.right) - .attr('height', height + margin.top + margin.bottom) - .append('g') - .attr('transform', 'translate(' + width() / 2 + ',' + height / 2 + ')'); - // =========================================================================================== - - // =========================================================================================== - // g elements to keep elements within svg modular - svg.append('g').attr('class', 'slices'); - svg.append('g').attr('class', 'labelName'); - svg.append('g').attr('class', 'lines'); - // =========================================================================================== - - // =========================================================================================== - // add and colour the donut slices - var path = svg.select('.slices') - .selectAll('path') - .data(pie) - .enter().append('path') - .attr('fill', function(d) { return colour(d.data[category]); }) - .attr('d', arc); - // =========================================================================================== - - // =========================================================================================== - // add text labels - var occupedLabel = []; - var label = svg.select('.labelName').selectAll('text') - .data(pie) - .enter().append('text') - .attr('dy', '.35em') - .html(updateLabelText) - .attr('transform', labelTransform) - .style('text-anchor', function(d) { - // if slice centre is on the left, anchor text to start, otherwise anchor to end - return (midAngle(d)) < Math.PI ? 'start' : 'end'; - }); - // =========================================================================================== - - // =========================================================================================== - // add lines connecting labels to slice. A polyline creates straight lines connecting several points - var occupedPoint = []; - var polyline = svg.select('.lines') - .selectAll('polyline') - .data(pie) - .enter().append('polyline') - .attr('points', calculatePoints) - .style('opacity', 0.3) - .style('stroke', 'black') - .style('width', '2px') - .style('fill', 'none'); - // =========================================================================================== - - // =========================================================================================== - // add tooltip to mouse events on slices and labels - d3.selectAll('.labelName text, .slices path').call(toolTip); - // =========================================================================================== - - // =========================================================================================== - // FUNCTION TO UPDATE CHART - updateData = function() { - - var updatePath = d3.select('.slices').selectAll('path'); - var updateLines = d3.select('.lines').selectAll('polyline'); - var updateLabels = d3.select('.labelName').selectAll('text'); - - var data0 = path.data(), // store the current data before updating to the new - data1 = pie(data); - - // update data attached to the slices, labels, and polylines. the key function assigns the data to - // the correct element, rather than in order of how the data appears. This means that if a category - // already exists in the chart, it will have its data updated rather than removed and re-added. - updatePath = updatePath.data(data1, key); - updateLines = updateLines.data(data1, key); - updateLabels = updateLabels.data(data1, key); - - // adds new slices/lines/labels - updatePath.enter().append('path') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .attr('fill', function(d) { return colour(d.data[category]); }) - .attr('d', arc); - - updateLines.enter().append('polyline') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .attr('points', calculatePoints); - - updateLabels.enter().append('text') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .html(updateLabelText) - .attr('transform', labelTransform) - .style('text-anchor', function(d) { return (midAngle(d)) < Math.PI ? 'start' : 'end'; }); - - // removes slices/labels/lines that are not in the current dataset - updatePath.exit() - .transition() - .duration(transTime) - .attrTween("d", arcTween) - .remove(); - - updateLines.exit() - .transition() - .duration(transTime) - .attrTween("points", pointTween) - .remove(); - - updateLabels.exit() - .remove(); - - // animates the transition from old angle to new angle for slices/lines/labels - updatePath.transition().duration(transTime) - .attrTween('d', arcTween); - - updateLines.transition().duration(transTime) - .attrTween('points', pointTween); - - updateLabels.transition().duration(transTime) - .attrTween('transform', labelTween) - .styleTween('text-anchor', labelStyleTween); - - updateLabels.html(updateLabelText); // update the label text - - // add tooltip to mouse events on slices and labels - d3.selectAll('.labelName text, .slices path').call(toolTip); - - }; - // =========================================================================================== - // Functions - // calculates the angle for the middle of a slice - function midAngle(d) { return d.startAngle + (d.endAngle - d.startAngle) / 2; } - - // function that creates and adds the tool tip to a selected element - function toolTip(selection) { - - // add tooltip (svg circle element) when mouse enters label or slice - selection.on('mouseenter', function (data) { - - svg.append('text') - .attr('class', 'toolCircle') - .attr('dy', -15) // hard-coded. can adjust this to adjust text vertical alignment in tooltip - .html(toolTipHTML(data)) // add text to the circle. - .style('font-size', '.9em') - .style('text-anchor', 'middle'); // centres text in tooltip - - svg.append('circle') - .attr('class', 'toolCircle') - .attr('r', radius * 0.55) // radius of tooltip circle - .style('fill', colour(data.data[category])) // colour based on category mouse is over - .style('fill-opacity', 0.35); - - }); - - // remove the tooltip when mouse leaves the slice/label - selection.on('mouseout', function () { - d3.selectAll('.toolCircle').remove(); - }); - } - - // function to create the HTML string for the tool tip. Loops through each key in data object - // and returns the html string key: value - function toolTipHTML(data) { - - var tip = '', - i = 0; - - for (var key in data.data) { - - // if value is a number, format it as float - var value = (!isNaN(parseFloat(data.data[key]))) ? parseFloat(data.data[key]) : data.data[key]; - qnt = (title == "Count" ? "Count" : qnt); - - // leave off 'dy' attr for first tspan so the 'dy' attr on text element works. The 'dy' attr on - // tspan effectively imitates a line break. - if (i === 0) tip += '' + cat + ': ' + value + ''; - else tip += '' + qnt + ': ' + value + ''; - i++; - } - - return tip; - } - - // calculate the points for the polyline to pass through - function calculatePoints(d) { - // see label transform function for explanations of these three lines. - var pos = outerArc.centroid(d); - var rev_pos = outerArc.centroid(d); - pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); - // verify label conflict: if overlaps move up of 10 - if (pos[0] < 0 && pos[1] < 0) { - var i = 0; - if (occupedPoint.length >= 1){ - for (i = 0; i < occupedPoint.length; i++){ - if (pos[1] <= (occupedPoint[i] + 10) && (pos[1] >= (occupedPoint[i] - 10))){ - pos[1] = pos[1] - 20; - rev_pos[1] = rev_pos[1] - 20; - } - } - } occupedPoint.push(pos[1]); - } - return [arc.centroid(d), rev_pos, pos] - } - - function labelTransform(d) { - // effectively computes the centre of the slice. - // see https://github.com/d3/d3-shape/blob/master/README.md#arc_centroid - var pos = outerArc.centroid(d); - // verify label conflict: if overlaps move up of 10 - if (pos[0] < 0 && pos[1] < 0) { - var i = 0; - if (occupedLabel.length >= 1){ - for (i = 0; i < occupedLabel.length; i++){ - if (pos[1] <= (occupedLabel[i] + 10) && (pos[1] >= (occupedLabel[i] - 10))){ - pos[1] = pos[1] - 20; - } - } - } occupedLabel.push(pos[1]); - } - // changes the point to be on left or right depending on where label is. - pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); - return 'translate(' + pos + ')'; - } - - function updateLabelText(d) { - return d.data[category] + ': ' + floatFormat(d.data[variable]) + ''; - } - - // function that calculates transition path for label and also it's text anchoring - function labelStyleTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t); - return midAngle(d2) < Math.PI ? 'start':'end'; - }; - } - - function labelTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t), - pos = outerArc.centroid(d2); // computes the midpoint [x,y] of the centre line that would be - // generated by the given arguments. It is defined as startangle + endangle/2 and innerR + outerR/2 - pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1); // aligns the labels on the sides - return 'translate(' + pos + ')'; - }; - } - - function pointTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t), - pos = outerArc.centroid(d2); - pos[0] = radius * 0.95 * (midAngle(d2) < Math.PI ? 1 : -1); - return [arc.centroid(d2), outerArc.centroid(d2), pos]; - }; - } - - // function to calculate the tween for an arc's transition. - // see http://bl.ocks.org/mbostock/5100636 for a thorough explanation. - function arcTween(d) { - var i = d3.interpolate(this._current, d); - this._current = i(0); - return function(t) { return arc(i(t)); }; - } - - function findNeighborArc(i, data0, data1, key) { - var d; - return (d = findPreceding(i, data0, data1, key)) ? {startAngle: d.endAngle, endAngle: d.endAngle} - : (d = findFollowing(i, data0, data1, key)) ? {startAngle: d.startAngle, endAngle: d.startAngle} - : null; - } - // Find the element in data0 that joins the highest preceding element in data1. - function findPreceding(i, data0, data1, key) { - var m = data0.length; - while (--i >= 0) { - var k = key(data1[i]); - for (var j = 0; j < m; ++j) { - if (key(data0[j]) === k) return data0[j]; - } - } - } - - function key(d) { - return d.data[category]; - } - - // Find the element in data0 that joins the lowest following element in data1. - function findFollowing(i, data0, data1, key) { - var n = data1.length, m = data0.length; - while (++i < n) { - var k = key(data1[i]); - for (var j = 0; j < m; ++j) { - if (key(data0[j]) === k) return data0[j]; - } - } - } - - // =========================================================================================== - - }); - } - - // getter and setter functions. See Mike Bostocks post "Towards Reusable Charts" for a tutorial on how this works. - chart.width = function(value) { - if (!arguments.length) return width; - width = value; - return chart; - }; - - chart.height = function(value) { - if (!arguments.length) return height; - height = value; - return chart; - }; - - chart.margin = function(value) { - if (!arguments.length) return margin; - margin = value; - return chart; - }; - - chart.radius = function(value) { - if (!arguments.length) return radius; - radius = value; - return chart; - }; - - chart.padAngle = function(value) { - if (!arguments.length) return padAngle; - padAngle = value; - return chart; - }; - - chart.cornerRadius = function(value) { - if (!arguments.length) return cornerRadius; - cornerRadius = value; - return chart; - }; - - chart.colour = function(value) { - if (!arguments.length) return colour; - colour = value; - return chart; - }; - - chart.variable = function(value) { - if (!arguments.length) return variable; - variable = value; - return chart; - }; - - chart.category = function(value) { - if (!arguments.length) return category; - category = value; - return chart; - }; - - chart.transTime = function(value) { - if (!arguments.length) return transTime; - transTime = value; - return chart; - }; - - chart.data = function(value) { - if (!arguments.length) return data; - data = value; - if (typeof updateData === 'function') updateData(); - return chart; - }; - - return chart; -} diff --git a/haitidata/static/js/getChart.js b/haitidata/static/js/getChart.js deleted file mode 100644 index 6e6d8f0..0000000 --- a/haitidata/static/js/getChart.js +++ /dev/null @@ -1,74 +0,0 @@ -var dict_title_tc = {0:"Bar",1:"Pie", 2:"Donut", 3:"Line"}; -var dict_title_agg = {0:"Sum",1:"Mean",2:"Count", 3:"Max", 4:"Min"}; - -var loading = false; - -function get_chart_detail(){ - var id = "chart_area_plain" - //create area for chart - var createChartArea = function() { - var chartArea = document.getElementById(id); - chartArea.style= "display:table; height:100%; width:100%"; - }; - - // update chart - var replaceChart = function(){ - doc_chart = document.getElementById(id); - if(doc_chart.childElementCount >= 1){ - doc_chart.removeChild(doc_chart.childNodes[1]); - createChartArea(); - }; - }; - - var chartArea = document.getElementById(id); - createChartArea(); - replaceChart(); - console.log("son qui") - getCsv(csv_url, category, quantity, agg, chart_type, id); -} - -function title_detail(){ - - chart_type = dict_title_tc[chart_type] - return document.getElementById("title_detail").innerHTML = chart_type + " chart based on " + lyr + " layer (Category field: " + category + ", Quantity field: " + quantity + ")"; -} - -function get_chart_popup(){ - var id = "chart_area"; - //create area for chart - var createChartArea = function() { - var chartArea = document.getElementById(id); - chartArea.style= "display:table; width:100%"; - }; - // update chart - var replaceChart = function(){ - doc_chart = document.getElementById(id); - if(doc_chart.childElementCount >= 1){ - doc_chart.removeChild(doc_chart.childNodes[1]); - createChartArea(); - }; - }; - - var createCog = function(){ - var cog_div = document.createElement("div"); - cog_div.innerHTML = 'Loading data...'; - cog_div.setAttribute("id", "rotella"); - cog_div.setAttribute("style", "display:flex;justify-content:center;align-items:center;"); - var doc_chart = document.getElementById(id); - element = doc_chart.parentNode; - element.insertBefore(cog_div, doc_chart); - - }; - - if (document.getElementById("id_title").value == ""){ - document.getElementById("chart_title").innerHTML = suggestedTitle; - }else document.getElementById("chart_title").innerHTML = document.getElementById("id_title").value; -if (loading == false) { - loading = true; - createCog(); - createChartArea(); - replaceChart(); - attachAbstract(); - getCsv(csv_url, category, quantity, agg, chart_type, id); -} -} diff --git a/haitidata/static/js/line.js b/haitidata/static/js/line.js deleted file mode 100644 index 7eb3266..0000000 --- a/haitidata/static/js/line.js +++ /dev/null @@ -1,192 +0,0 @@ -function lineChart(cat, qnt, title, id){ - var width = function(){ return document.getElementById(id).offsetWidth}, - height = 500, - xScale = d3.scaleBand(), - yScale = d3.scaleLinear(), - colour = "steelblue", - x, - y, - margin = { top: 30, bottom: 30, left: 30, right: 30 }, - floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), - xAxis = d3.axisBottom(xScale), - yAxis = d3.axisLeft(yScale); - - function my(selection){ - - selection.each(function(data) { - - var svg_name = "chart_svg" + id; - var svg = selection.append('svg') - .attr("id", svg_name) - .attr("width", width()) - .attr("height", height); - - var g = svg.selectAll("g") - .data([1]); - g = g.enter().append("g") - .merge(g) - .attr("class", svg_name) - .attr("transform", - "translate(" + margin.left + "," + margin.top +")"); - - - var innerWidth = width() - margin.left - margin.right ; - var innerHeight = function(){ return height - margin.top - margin.bottom} ; - - - xScale - .domain(data.map(function (d){ return d[x]; })) - .range([0, (innerWidth - margin.right)]); - - - // X axis - var xAxis_name = "x-axis_" + id; - var xAxis_call = "." + xAxis_name; - var xAxisG = g.selectAll(xAxis_call).data([1]); - xAxisG.enter().append("g") - .attr("class", xAxis_name) - .merge(xAxisG) - .attr("transform", "translate(0," + innerHeight() +")") - .call(xAxis); - - // labels X ax,is - // rotate text if is longer than... - var rotate = 0; - d3.select(this).select(xAxis_call).selectAll("text").each(function(){ - if (this.getBBox().width > xScale.bandwidth()){ - rotate = 1 - d3.select(xAxis_call).selectAll("text").attr("transform", "rotate(-90)") - .attr("y", 0) - .attr("x", -10) - .attr("dy", ".35em") - .style("text-anchor", "end"); - }}); - - // adjust margin and x axis title - var maxh = 15; - if (rotate == 1) { - d3.select(this).select(".x-axis").selectAll("text").each(function(){ - if (this.getBBox().width > maxh) - maxh = this.getBBox().width; - });}; - margin.bottom = margin.bottom + maxh; - d3.select(xAxis_call).attr("transform", "translate(0," + (innerHeight()) + ")"); - - var text_name = "text_" + id; - g.append("text") - .attr("class", text_name) - .attr("transform", "translate(" + (innerWidth/2) + ", " + (innerHeight() + margin.bottom - 5) + ")") - .style("font-size", "12px") - .style("text-anchor", "middle") - .text(cat); - - yScale - .domain([0, d3.max(data, function (d){ return d[y] ;})]) - .range([innerHeight(), 0]); - - // Y axis - var yAxis_name = "y-axis_" + id; - var yAxis_call = "." + yAxis_name; - var yAxisG = g.selectAll(yAxis_call).data([1]); - yAxisG.enter().append("g") - .attr("class", yAxis_name) - .merge(yAxisG) - .call(yAxis); - - //labels Y axis - var maxw = 0; - d3.select(this).select(yAxis_call).selectAll("text").each(function(){ - if (this.getBBox().width > maxw) { - maxw = this.getBBox().width; - } - }); - margin.left = margin.left + maxw; - g.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - - var yLabel = function(){ - if (title == "Count"){ - return "Count"; - } else { - return qnt; - }}; - - g.append("text") - .attr("class", text_name) - .attr("transform", "rotate(-90)") - .attr("x", 0 - (innerHeight()/2)) - .attr("y", 0 - (margin.left)) - .attr("dy", "1em") - .style("font-size", "12px") - .style("text-anchor", "middle") - .text(yLabel); - - //div for tooltip - var div = d3.select("body").append("div") - .style("width","auto") - .style("height", "auto") - .attr("class", "tooltip") - .style("opacity", 0); - - - // lines - var line = d3.line() - .x(function(d) { return xScale(d[x]); }) - .y(function(d) { return yScale(d[y]); }); - - - g.append("path") - .data([data]) - .attr("fill", "none") - .attr("stroke", "steelblue") - .attr("stroke-linejoin", "round") - .attr("stroke-linecap", "round") - .attr("stroke-width", 1.5) - .attr("transform", "translate(" + (xScale.bandwidth() /2) + ", 0)") - .attr("d", line); - - g.selectAll("dot") - .data(data) - .enter().append("circle") - .attr("r", 3.5) - .attr("transform", "translate(" + (xScale.bandwidth() /2) + ", 0)") - .attr("cx", function(d) { return xScale(d[x]); }) - .attr("cy", function(d) { return yScale(d[y]); }) - .on("mouseover", function(d){ - div.transition() - .duration(200) - .style("opacity", 1); - div.html(cat + ": " + d.key + "
" + yLabel() + ": " + d.value) - .style("left", (d3.event.pageX) + "px") - .style("top", (d3.event.pageY - 40) + "px"); - }) - .on("mouseout", function(d) { - div.transition() - .duration(500) - .style("opacity", 0); - }); - - }); - } - - my.x = function (_){ - return arguments.length ? (x = _, my) : x; - }; - - my.y = function (_){ - return arguments.length ? (y = _, my) : y; - }; - - my.width = function (_){ - return arguments.length ? (width = _, my) : width; - }; - - my.height = function (_){ - return arguments.length ? (height = _, my) : height; - }; - - my.padding = function (_){ - return arguments.length ? (xScale.padding(_), my) : xScale.padding(); - }; - - return my; - } \ No newline at end of file diff --git a/haitidata/static/js/npm.js b/haitidata/static/js/npm.js deleted file mode 100644 index 81f0121..0000000 --- a/haitidata/static/js/npm.js +++ /dev/null @@ -1,13 +0,0 @@ -// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. -require('../../js/transition.js') -require('../../js/alert.js') -require('../../js/button.js') -require('../../js/carousel.js') -require('../../js/collapse.js') -require('../../js/dropdown.js') -require('../../js/modal.js') -require('../../js/tooltip.js') -require('../../js/popover.js') -require('../../js/scrollspy.js') -require('../../js/tab.js') -require('../../js/affix.js') diff --git a/haitidata/static/js/pie.js b/haitidata/static/js/pie.js deleted file mode 100644 index 1a75114..0000000 --- a/haitidata/static/js/pie.js +++ /dev/null @@ -1,419 +0,0 @@ -function pieChart(cat, qnt, title, id){ - var width = function(){ return document.getElementById(id).parentNode.offsetWidth}, - height = 500, - margin = {top: 80, right: 100, bottom: 10, left: 10}, - colour = d3.scaleOrdinal(d3.schemeCategory20c), // colour scheme - variable, // value in data that will dictate proportions on chart - category, // compare data by - padAngle = 0.015, // effectively dictates the gap between slices - transTime, // transition time - updateData, - floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), - cornerRadius = 3; // sets how rounded the corners are on each slice - - function chart(selection){ - selection.each(function() { - // generate chart - // =========================================================================================== - // Set up constructors for making donut. See https://github.com/d3/d3-shape/blob/master/README.md - var radius = Math.min(width(), (height - margin.top)) / 2; - - // creates a new pie generator - var pie = d3.pie() - .value(function(d) { return floatFormat(d[variable]); }) - .sort(null); - - // contructs and arc generator. This will be used for the donut. The difference between outer and inner - // radius will dictate the thickness of the donut - var arc = d3.arc() - .outerRadius(radius * 0.8) - .innerRadius(2) - .cornerRadius(cornerRadius) - .padAngle(padAngle); - - // this arc is used for aligning the text labels - var outerArc = d3.arc() - .outerRadius(radius * 0.83) - .innerRadius(radius * 0.83); - // =========================================================================================== - - // =========================================================================================== - // append the svg object to the selection - var svg = selection.append('svg') - .attr("id", "chart_svg") - .attr('width', width() + margin.left + margin.right) - .attr('height', height + margin.top + margin.bottom) - .append('g') - .attr('transform', 'translate(' + width() / 2 + ',' + height / 2 + ')'); - // =========================================================================================== - - // =========================================================================================== - // g elements to keep elements within svg modular - svg.append('g').attr('class', 'slices'); - svg.append('g').attr('class', 'labelName'); - svg.append('g').attr('class', 'lines'); - // =========================================================================================== - - // =========================================================================================== - // add and colour the donut slices - var path = svg.select('.slices') - .selectAll('path') - .data(pie) - .enter().append('path') - .attr('fill', function(d) { return colour(d.data[category]); }) - .attr('d', arc); - // =========================================================================================== - - // =========================================================================================== - // add text labels - var occupedLabel = []; - var label = svg.select('.labelName').selectAll('text') - .data(pie) - .enter().append('text') - .attr('dy', '.35em') - .html(updateLabelText) - .attr('transform', labelTransform) - .style('text-anchor', function(d) { - // if slice centre is on the left, anchor text to start, otherwise anchor to end - return (midAngle(d)) < Math.PI ? 'start' : 'end'; - }); - // =========================================================================================== - - // =========================================================================================== - // add lines connecting labels to slice. A polyline creates straight lines connecting several points - var occupedPoint = []; - var polyline = svg.select('.lines') - .selectAll('polyline') - .data(pie) - .enter().append('polyline') - .attr('points', calculatePoints) - .style('opacity', .3) - .style('stroke', 'black') - .style('width', '2px') - .style('fill', 'none'); - // =========================================================================================== - - // =========================================================================================== - // add tooltip to mouse events on slices and labels - d3.selectAll('.labelName text, .slices path').call(toolTip); - // =========================================================================================== - - // =========================================================================================== - // FUNCTION TO UPDATE CHART - updateData = function() { - - var updatePath = d3.select('.slices').selectAll('path'); - var updateLines = d3.select('.lines').selectAll('polyline'); - var updateLabels = d3.select('.labelName').selectAll('text'); - - var data0 = path.data(), // store the current data before updating to the new - data1 = pie(data); - - // update data attached to the slices, labels, and polylines. the key function assigns the data to - // the correct element, rather than in order of how the data appears. This means that if a category - // already exists in the chart, it will have its data updated rather than removed and re-added. - updatePath = updatePath.data(data1, key); - updateLines = updateLines.data(data1, key); - updateLabels = updateLabels.data(data1, key); - - // adds new slices/lines/labels - updatePath.enter().append('path') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .attr('fill', function(d) { return colour(d.data[category]); }) - .attr('d', arc); - - updateLines.enter().append('polyline') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .attr('points', calculatePoints); - - updateLabels.enter().append('text') - .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) - .html(updateLabelText) - .attr('transform', labelTransform) - .style('text-anchor', function(d) { return (midAngle(d)) < Math.PI ? 'start' : 'end'; }); - - // removes slices/labels/lines that are not in the current dataset - updatePath.exit() - .transition() - .duration(transTime) - .attrTween("d", arcTween) - .remove(); - - updateLines.exit() - .transition() - .duration(transTime) - .attrTween("points", pointTween) - .remove(); - - updateLabels.exit() - .remove(); - - // animates the transition from old angle to new angle for slices/lines/labels - updatePath.transition().duration(transTime) - .attrTween('d', arcTween); - - updateLines.transition().duration(transTime) - .attrTween('points', pointTween); - - updateLabels.transition().duration(transTime) - .attrTween('transform', labelTween) - .styleTween('text-anchor', labelStyleTween); - - updateLabels.html(updateLabelText); // update the label text - - // add tooltip to mouse events on slices and labels - d3.selectAll('.labelName text, .slices path').call(toolTip); - - }; - // =========================================================================================== - // Functions - // calculates the angle for the middle of a slice - function midAngle(d) { return d.startAngle + (d.endAngle - d.startAngle) / 2}; - - // function that creates and adds the tool tip to a selected element - function toolTip(selection) { - - // add tooltip (svg circle element) when mouse enters label or slice - selection.on('mouseenter', function (data) { - - svg.append('rect') - .attr('transform', "translate(-320, 230)") - .attr('class', 'toolRect') - .attr("width", 190) - .attr("height", 60) - .style('fill', colour(data.data[category])) // colour based on category mouse is over - .style('fill-opacity', 0.35); - - svg.append('text') - .attr('transform', "translate(-310, 255)") - .attr('class', 'toolRect') - .html(toolTipHTML(data)) // add text to the rect - .style('font-size', '.9em'); // centres text in tooltip - }); - - // remove the tooltip when mouse leaves the slice/label - selection.on('mouseout', function () { - d3.selectAll('.toolRect').remove(); - }); - } - - // function to create the HTML string for the tool tip. Loops through each key in data object - // and returns the html string key: value - function toolTipHTML(data) { - - var tip = '', - i = 0; - - for (var key in data.data) { - - // if value is a number, format it as a float - var value = (!isNaN(data.data[key])) ? parseFloat(data.data[key]) : data.data[key]; - qnt = (title == "Count" ? "Count" : qnt); - - // leave off 'dy' attr for first tspan so the 'dy' attr on text element works. The 'dy' attr on - // tspan effectively imitates a line break. - if (i === 0) tip += '' + cat + ': ' + value + ''; - else tip += '' + qnt + ': ' + floatFormat(value) + ''; - i++; - } - - return tip; - } - - // calculate the points for the polyline to pass through - function calculatePoints(d) { - // see label transform function for explanations of these three lines. - var pos = outerArc.centroid(d); - var rev_pos = outerArc.centroid(d); - pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); - // verify label conflict: if overlaps move up of 10 - if (pos[0] < 0 && pos[1] < 0) { - var i = 0; - if (occupedPoint.length >= 1){ - for (i = 0; i < occupedPoint.length; i++){ - if (pos[1] <= (occupedPoint[i] + 10) && (pos[1] >= (occupedPoint[i] - 10))){ - pos[1] = pos[1] - 20; - rev_pos[1] = rev_pos[1] - 20; - } - } - } occupedPoint.push(pos[1]); - } - return [arc.centroid(d), rev_pos, pos] - } - - - function labelTransform(d) { - // effectively computes the centre of the slice. - // see https://github.com/d3/d3-shape/blob/master/README.md#arc_centroid - var pos = outerArc.centroid(d); - // verify label conflict: if overlaps move up of 10 - if (pos[0] < 0 && pos[1] < 0) { - var i = 0; - if (occupedLabel.length >= 1){ - for (i = 0; i < occupedLabel.length; i++){ - if (pos[1] <= (occupedLabel[i] + 10) && (pos[1] >= (occupedLabel[i] - 10))){ - pos[1] = pos[1] - 20; - } - } - } occupedLabel.push(pos[1]); - } - // changes the point to be on left or right depending on where label is. - pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); - return 'translate(' + pos + ')'; - } - - function updateLabelText(d) { - return d.data[category] + ': ' + floatFormat(d.data[variable]) + ''; - } - - // function that calculates transition path for label and also it's text anchoring - function labelStyleTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t); - return midAngle(d2) < Math.PI ? 'start':'end'; - }; - } - - function labelTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t), - pos = outerArc.centroid(d2); // computes the midpoint [x,y] of the centre line that would be - // generated by the given arguments. It is defined as startangle + endangle/2 and innerR + outerR/2 - pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1); // aligns the labels on the sides - return 'translate(' + pos + ')'; - }; - } - - function pointTween(d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function(t){ - var d2 = interpolate(t), - pos = outerArc.centroid(d2); - pos[0] = radius * 0.95 * (midAngle(d2) < Math.PI ? 1 : -1); - return [arc.centroid(d2), outerArc.centroid(d2), pos]; - }; - } - - // function to calculate the tween for an arc's transition. - // see http://bl.ocks.org/mbostock/5100636 for a thorough explanation. - function arcTween(d) { - var i = d3.interpolate(this._current, d); - this._current = i(0); - return function(t) { return arc(i(t)); }; - } - - function findNeighborArc(i, data0, data1, key) { - var d; - return (d = findPreceding(i, data0, data1, key)) ? {startAngle: d.endAngle, endAngle: d.endAngle} - : (d = findFollowing(i, data0, data1, key)) ? {startAngle: d.startAngle, endAngle: d.startAngle} - : null; - } - // Find the element in data0 that joins the highest preceding element in data1. - function findPreceding(i, data0, data1, key) { - var m = data0.length; - while (--i >= 0) { - var k = key(data1[i]); - for (var j = 0; j < m; ++j) { - if (key(data0[j]) === k) return data0[j]; - } - } - } - - function key(d) { - return d.data[category]; - } - - // Find the element in data0 that joins the lowest following element in data1. - function findFollowing(i, data0, data1, key) { - var n = data1.length, m = data0.length; - while (++i < n) { - var k = key(data1[i]); - for (var j = 0; j < m; ++j) { - if (key(data0[j]) === k) return data0[j]; - } - } - } - - // =========================================================================================== - - }); - } - - // getter and setter functions. See Mike Bostocks post "Towards Reusable Charts" for a tutorial on how this works. - chart.width = function(value) { - if (!arguments.length) return width; - width = value; - return chart; - }; - - chart.height = function(value) { - if (!arguments.length) return height; - height = value; - return chart; - }; - - chart.margin = function(value) { - if (!arguments.length) return margin; - margin = value; - return chart; - }; - - chart.radius = function(value) { - if (!arguments.length) return radius; - radius = value; - return chart; - }; - - chart.padAngle = function(value) { - if (!arguments.length) return padAngle; - padAngle = value; - return chart; - }; - - chart.cornerRadius = function(value) { - if (!arguments.length) return cornerRadius; - cornerRadius = value; - return chart; - }; - - chart.colour = function(value) { - if (!arguments.length) return colour; - colour = value; - return chart; - }; - - chart.variable = function(value) { - if (!arguments.length) return variable; - variable = value; - return chart; - }; - - chart.category = function(value) { - if (!arguments.length) return category; - category = value; - return chart; - }; - - chart.transTime = function(value) { - if (!arguments.length) return transTime; - transTime = value; - return chart; - }; - - chart.data = function(value) { - if (!arguments.length) return data; - data = value; - if (typeof updateData === 'function') updateData(); - return chart; - }; - - return chart; -} diff --git a/haitidata/static/js/search/cart.js b/haitidata/static/js/search/cart.js deleted file mode 100644 index 2bdc9d6..0000000 --- a/haitidata/static/js/search/cart.js +++ /dev/null @@ -1,125 +0,0 @@ -'use strict'; - -(function(){ - angular.module('cart', []) - .controller('CartList', function($scope, cart){ - $scope.cart = cart; - $scope.layers_params = ''; - - $scope.newMap = function(){ - var items = cart.getCart().items; - var params = ''; - for(var i=0; i 0){ - message.find('.message').html('Autorisations correctement enregistrées, bien que les ressources suivantes aient été'+ - ' sauté parce que vous n\'avez pas le droit de modifier leurs autorisations'); - message.find('.extra_content').html(not_changed.join('
')); - message.addClass('alert-warning').removeClass('alert-success alert-danger hidden'); - } - else{ - message.find('.message').html('Autorisations correctement enregistrées.'); - message.addClass('alert-success').removeClass('alert-warning alert-danger hidden'); - } - }, - error: function(data){ - message.find('.message').html($.parseJSON(data).error); - message.addClass('alert-danger').removeClass('alert-success alert-warning hidden'); - } - } - ); - }; - }) - - .directive('resourceCart', [function(){ - return { - restrict: 'E', - templateUrl: "/static/geonode/js/templates/cart.html" - }; - }]) - - .service('cart', function(){ - - this.init = function(){ - this.$cart = { - items: [] - }; - }; - - this.getCart = function(){ - return this.$cart; - } - - this.addItem = function(item){ - if(this.getItemById(item.id) === null){ - this.getCart().items.push(item); - } - } - - this.removeItem = function(item){ - if(this.getItemById(item.id) !== null){ - var cart = this.getCart(); - angular.forEach(cart.items, function(cart_item, index){ - if(cart_item.id === item.id){ - cart.items.splice(index, 1); - } - }); - } - } - - this.toggleItem = function(item){ - if(this.getItemById(item.id) === null){ - this.addItem(item); - }else{ - this.removeItem(item); - } - } - - this.getItemById = function (itemId) { - var items = this.getCart().items; - var the_item = null; - angular.forEach(items, function(item){ - if(item.id === itemId){ - the_item = item; - } - }); - return the_item; - } - - this.getFaClass = function(id){ - if(this.getItemById(id) === null){ - return 'fa-cart-plus'; - }else{ - return 'fa-remove' - } - } - }) - - .run(['cart', function(cart){ - cart.init(); - }]) -})(); diff --git a/haitidata/static/js/search/explore.js b/haitidata/static/js/search/explore.js deleted file mode 100644 index 65e0cb6..0000000 --- a/haitidata/static/js/search/explore.js +++ /dev/null @@ -1,40 +0,0 @@ -$(function() { - - $(".datepicker").datetimepicker({autoclose:true}); - - $("#slide-pane a.toggle-pane").click(function(e) { - e.preventDefault(); - var span$ = $("#slide-pane").parents(".col-md-3"); - if(!span$.is('.hidden')) { - span$.addClass("hidden").animate({ - marginLeft: "-310px" - }, 500, function() { - setContentWidth(); - }); - $(this).find("i").attr("class", "fa fa-chevron-right"); - } else { - span$.removeClass("hidden").animate({ - marginLeft: "0px" - }, 500, function() { - setContentWidth(); - }); - $(this).find("i").attr("class", "fa fa-chevron-left"); - } - }); - $("nav a.toggle-nav").click(function(e) { - e.preventDefault(); - if ($(this).parents("h4").siblings(".nav").is(":visible")) { - $(this).parents("h4").siblings(".nav").slideUp(); - $(this).find("i").attr("class", "fa fa-chevron-right"); - } else { - $(this).parents("h4").siblings(".nav").slideDown(); - $(this).find("i").attr("class", "fa fa-chevron-down"); - } - }); -}); - -function setContentWidth() { - var lm = parseInt($("#slide-pane").parents(".col-md-3").css("marginLeft").replace("px", "")) + 51; - var w = $("#contain-slider").width() - ($("#slide-pane").outerWidth() + lm); - $(".tab-content").css('width', w + "px"); -} \ No newline at end of file diff --git a/haitidata/static/js/search/search.js b/haitidata/static/js/search/search.js index 2eb06e3..dcad477 100644 --- a/haitidata/static/js/search/search.js +++ b/haitidata/static/js/search/search.js @@ -32,16 +32,41 @@ if ($location.search().hasOwnProperty('title__icontains')){ params['title__icontains'] = $location.search()['title__icontains']; } - $http.get(CATEGORIES_ENDPOINT, {params: params}).success(function(data){ - if($location.search().hasOwnProperty('category__identifier__in')){ - data.objects = module.set_initial_filters_from_query(data.objects, - $location.search()['category__identifier__in'], 'identifier'); - } - $rootScope.categories = data.objects; - if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { - module.haystack_facets($http, $rootScope, $location); - } - }); + $http.get(CATEGORIES_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + if($location.search().hasOwnProperty('category__identifier__in')){ + data.data.objects = module.set_initial_filters_from_query(data.data.objects, + $location.search()['category__identifier__in'], 'identifier'); + } + $rootScope.categories = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; + } + + // Load group categories + module.load_group_categories = function ($http, $rootScope, $location){ + var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; + $http.get(GROUP_CATEGORIES_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + $rootScope.groupCategories = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; } module.load_keywords = function ($http, $rootScope, $location){ @@ -49,24 +74,40 @@ if ($location.search().hasOwnProperty('title__icontains')){ params['title__icontains'] = $location.search()['title__icontains']; } - $http.get(KEYWORDS_ENDPOINT, {params: params}).success(function(data){ - if($location.search().hasOwnProperty('keywords__slug__in')){ - data.objects = module.set_initial_filters_from_query(data.objects, - $location.search()['keywords__slug__in'], 'slug'); - } - $rootScope.keywords = data.objects; - if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { - module.haystack_facets($http, $rootScope, $location); - } - }); + $http.get(KEYWORDS_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + debugger; + if($location.search().hasOwnProperty('keywords__slug__in')){ + data.data.objects = module.set_initial_filters_from_query(data.data.objects, + $location.search()['keywords__slug__in'], 'slug'); + } + $rootScope.keywords = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; } + module.load_h_keywords = function($http, $rootScope, $location){ var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; - $http.get(H_KEYWORDS_ENDPOINT, {params: params}).success(function(data){ + $http.get(H_KEYWORDS_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code $('#treeview').treeview({ - data: data, + data: data.data, multiSelect: true, + showIcon: true, + showCheckbox: false, + showTags: true, + tagsClass: 'badge', onNodeSelected: function($event, node) { $rootScope.$broadcast('select_h_keyword', node); if(node.nodes){ @@ -85,108 +126,168 @@ } } }); - }); + }; + + function errorCallback(error) { + //error code + }; }; module.load_t_keywords = function ($http, $rootScope, $location){ - var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; - if ($location.search().hasOwnProperty('title__icontains')){ - params['title__icontains'] = $location.search()['title__icontains']; - } - $http.get(T_KEYWORDS_ENDPOINT, {params: params}).success(function(data){ - if($location.search().hasOwnProperty('tkeywords__id__in')){ - data.objects = module.set_initial_filters_from_query(data.objects, - $location.search()['tkeywords__id__in'], 'id'); - } - $rootScope.tkeywords = data.objects; - if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { - module.haystack_facets($http, $rootScope, $location); - } - }); + var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; + if ($location.search().hasOwnProperty('title__icontains')){ + params['title__icontains'] = $location.search()['title__icontains']; + } + if (enable_thesauri){ + $http.get(T_KEYWORDS_ENDPOINT, {params: params}).then(successCallback, errorCallback); } + function successCallback(data) { + //success code + if($location.search().hasOwnProperty('tkeywords__id__in')){ + data.data.objects = module.set_initial_filters_from_query(data.data.objects, + $location.search()['tkeywords__id__in'], 'id'); + } + $rootScope.tkeywords = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; + } + module.load_regions = function ($http, $rootScope, $location){ - var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; - if ($location.search().hasOwnProperty('title__icontains')){ - params['title__icontains'] = $location.search()['title__icontains']; + var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; + if ($location.search().hasOwnProperty('title__icontains')){ + params['title__icontains'] = $location.search()['title__icontains']; + } + $http.get(REGIONS_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + if($location.search().hasOwnProperty('regions__name__in')){ + data.data.objects = module.set_initial_filters_from_query(data.data.objects, + $location.search()['regions__name__in'], 'name'); } - $http.get(REGIONS_ENDPOINT, {params: params}).success(function(data){ - if($location.search().hasOwnProperty('regions__name__in')){ - data.objects = module.set_initial_filters_from_query(data.objects, - $location.search()['regions__name__in'], 'name'); - } - $rootScope.regions = data.objects; - if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { - module.haystack_facets($http, $rootScope, $location); - } - }); + $rootScope.regions = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; + } + + module.load_groups = function ($http, $rootScope, $location){ + var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; + $http.get(GROUPS_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + $rootScope.groups = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; } module.load_owners = function ($http, $rootScope, $location){ - var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; - if ($location.search().hasOwnProperty('title__icontains')){ - params['title__icontains'] = $location.search()['title__icontains']; + var params = typeof FILTER_TYPE == 'undefined' ? {} : {'type': FILTER_TYPE}; + if ($location.search().hasOwnProperty('title__icontains')){ + params['title__icontains'] = $location.search()['title__icontains']; + } + $http.get(OWNERS_ENDPOINT, {params: params}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + if($location.search().hasOwnProperty('owner__username__in')){ + data.data.objects = module.set_initial_filters_from_query(data.data.objects, + $location.search()['owner__username__in'], 'identifier'); } - $http.get(OWNERS_ENDPOINT, {params: params}).success(function(data){ - if($location.search().hasOwnProperty('owner__username__in')){ - data.objects = module.set_initial_filters_from_query(data.objects, - $location.search()['owner__username__in'], 'identifier'); - } - $rootScope.owners = data.objects; - if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { - module.haystack_facets($http, $rootScope, $location); - } - }); + $rootScope.owners = data.data.objects; + if (HAYSTACK_FACET_COUNTS && $rootScope.query_data) { + module.haystack_facets($http, $rootScope, $location); + } + }; + + function errorCallback(error) { + //error code + }; } // Update facet counts for categories and keywords module.haystack_facets = function($http, $rootScope, $location) { var data = $rootScope.query_data; if ("categories" in $rootScope) { - $rootScope.category_counts = data.meta.facets.category; - for (var id in $rootScope.categories) { - var category = $rootScope.categories[id]; - if (category.identifier in $rootScope.category_counts) { - category.count = $rootScope.category_counts[category.identifier] - } else { - category.count = 0; + try { + $rootScope.category_counts = data.meta.facets.category; + for (var id in $rootScope.categories) { + var category = $rootScope.categories[id]; + if (category.identifier in $rootScope.category_counts) { + category.count = $rootScope.category_counts[category.identifier] + } else { + category.count = 0; + } } + } catch(err) { + // console.log(err); } } if ("keywords" in $rootScope) { - $rootScope.keyword_counts = data.meta.facets.keywords; - for (var id in $rootScope.keywords) { - var keyword = $rootScope.keywords[id]; - if (keyword.slug in $rootScope.keyword_counts) { - keyword.count = $rootScope.keyword_counts[keyword.slug] - } else { - keyword.count = 0; + try { + $rootScope.keyword_counts = data.meta.facets.keywords; + for (var id in $rootScope.keywords) { + var keyword = $rootScope.keywords[id]; + if (keyword.slug in $rootScope.keyword_counts) { + keyword.count = $rootScope.keyword_counts[keyword.slug] + } else { + keyword.count = 0; + } } + } catch(err) { + // console.log(err); } } if ("regions" in $rootScope) { - $rootScope.regions_counts = data.meta.facets.regions; - for (var id in $rootScope.regions) { - var region = $rootScope.regions[id]; - if (region.name in $rootScope.region_counts) { - region.count = $rootScope.region_counts[region.name] - } else { - region.count = 0; + try { + $rootScope.regions_counts = data.meta.facets.regions; + for (var id in $rootScope.regions) { + var region = $rootScope.regions[id]; + if (region.name in $rootScope.region_counts) { + region.count = $rootScope.region_counts[region.name] + } else { + region.count = 0; + } } + } catch(err) { + // console.log(err); } } if ("owners" in $rootScope) { - $rootScope.owner_counts = data.meta.facets.owners; - for (var id in $rootScope.owners) { - var owner = $rootScope.owners[id]; - if (owner.name in $rootScope.owner_counts) { - owner.count = $rootScope.owner_counts[owner.name] - } else { - owner.count = 0; + try { + $rootScope.owner_counts = data.meta.facets.owners; + for (var id in $rootScope.owners) { + var owner = $rootScope.owners[id]; + if (owner.name in $rootScope.owner_counts) { + owner.count = $rootScope.owner_counts[owner.name] + } else { + owner.count = 0; + } } + } catch(err) { + // console.log(err); } } } @@ -202,6 +303,11 @@ if ($('#categories').length > 0){ module.load_categories($http, $rootScope, $location); } + + if ($('#group-categories').length > 0){ + module.load_group_categories($http, $rootScope, $location); + } + //if ($('#keywords').length > 0){ // module.load_keywords($http, $rootScope, $location); //} @@ -213,6 +319,9 @@ if ($('#owners').length > 0){ module.load_owners($http, $rootScope, $location); } + if ($('#groups').length > 0){ + module.load_groups($http, $rootScope, $location); + } if ($('#tkeywords').length > 0){ module.load_t_keywords($http, $rootScope, $location); } @@ -252,10 +361,14 @@ //Get data from apis and make them available to the page function query_api(data){ - $http.get(Configs.url, {params: data || {}}).success(function(data){ - $scope.results = data.objects; - $scope.total_counts = data.meta.total_count; - $scope.$root.query_data = data; + $http.get(Configs.url, {params: data || {}}).then(successCallback, errorCallback); + + function successCallback(data) { + //success code + setTimeout(function(){$('[ng-controller="CartList"] [data-toggle="tooltip"]').tooltip();},0); + $scope.results = data.data.objects; + $scope.total_counts = data.data.meta.total_count; + $scope.$root.query_data = data.data; if (HAYSTACK_SEARCH) { if ($location.search().hasOwnProperty('q')){ $scope.text_query = $location.search()['q'].replace(/\+/g," "); @@ -268,23 +381,30 @@ //Update facet/keyword/category counts from search results if (HAYSTACK_FACET_COUNTS){ - module.haystack_facets($http, $scope.$root, $location); - $("#types").find("a").each(function(){ - if ($(this)[0].id in data.meta.facets.subtype) { - $(this).find("span").text(data.meta.facets.subtype[$(this)[0].id]); - } - else if ($(this)[0].id in data.meta.facets.type) { - $(this).find("span").text(data.meta.facets.type[$(this)[0].id]); - } else { - $(this).find("span").text("0"); - } - }); + try { + module.haystack_facets($http, $scope.$root, $location); + $("#types").find("a").each(function(){ + if ($(this)[0].id in data.data.meta.facets.subtype) { + $(this).find("span").text(data.data.meta.facets.subtype[$(this)[0].id]); + } + else if ($(this)[0].id in data.data.meta.facets.type) { + $(this).find("span").text(data.data.meta.facets.type[$(this)[0].id]); + } else { + $(this).find("span").text("0"); + } + }); + } catch(err) { + // console.log(err); + } } - }); + }; + + function errorCallback(error) { + //error code + }; }; query_api($scope.query); - /* * Pagination */ @@ -326,7 +446,6 @@ * End pagination */ - if (!Configs.hasOwnProperty("disableQuerySync")) { // Keep in sync the page location with the query object $scope.$watch('query', function(){ @@ -334,11 +453,11 @@ }, true); } - // Hyerarchical keywords listeners + // Hierarchical keyword listeners $scope.$on('select_h_keyword', function($event, element){ var data_filter = 'keywords__slug__in'; var query_entry = []; - var value = element.text; + var value = (element.href ? element.href : element.text); // If the query object has the record then grab it if ($scope.query.hasOwnProperty(data_filter)){ @@ -365,7 +484,7 @@ $scope.$on('unselect_h_keyword', function($event, element){ var data_filter = 'keywords__slug__in'; var query_entry = []; - var value = element.text; + var value = (element.href ? element.href : element.text); // If the query object has the record then grab it if ($scope.query.hasOwnProperty(data_filter)){ @@ -395,7 +514,7 @@ * and pushes/removes the value of the element from the query object */ $scope.multiple_choice_listener = function($event){ - var element = $($event.target); + var element = $($event.currentTarget); var query_entry = []; var data_filter = element.attr('data-filter'); var value = element.attr('data-value'); @@ -441,7 +560,7 @@ } $scope.single_choice_listener = function($event){ - var element = $($event.target); + var element = $($event.currentTarget); var query_entry = []; var data_filter = element.attr('data-filter'); var value = element.attr('data-value'); @@ -495,16 +614,20 @@ } }); - $('#text_search_btn').click(function(){ + $('#text_search_btn').click(function() { if (HAYSTACK_SEARCH) $scope.query['q'] = $('#text_search_input').val(); else - if (AUTOCOMPLETE_URL_RESOURCEBASE == "/autocomplete/ProfileAutocomplete/") + if (AUTOCOMPLETE_URL_RESOURCEBASE == "/autocomplete/ProfileAutocomplete/") { // a user profile has no title; if search was triggered from // the /people page, filter by username instead var query_key = 'username__icontains'; - else - var query_key = 'title__icontains'; + } else if (AUTOCOMPLETE_URL_RESOURCEBASE == "/autocomplete/GroupProfileAutocomplete/" ) { + // Adding in this conditional since both groups autocomplete and searches requests need to search name not title. + var query_key = 'group_profile__title'; + } else { + var query_key = $('#text_search_input').data('query-key')||'title__icontains'; + } $scope.query[query_key] = $('#text_search_input').val(); query_api($scope.query); }); @@ -520,6 +643,7 @@ appendAutocomplete: $('#region_search_input'), placeholder: gettext('Enter your region here ...') }); + $('#region_search_input').bind('selectChoice', function(e, choice, region_autocomplete) { if(choice[0].children[0] == undefined) { $('#region_search_input').val(choice[0].innerHTML); @@ -533,7 +657,7 @@ }); $scope.feature_select = function($event){ - var element = $($event.target); + var element = $(event.currentTarget); var article = $(element.parents('article')[0]); if (article.hasClass('resource_selected')){ element.html('Select'); @@ -556,15 +680,19 @@ var init_date = true; $scope.$watch('date_query', function(){ if($scope.date_query.date__gte != '' && $scope.date_query.date__lte != ''){ - $scope.query['date__range'] = $scope.date_query.date__gte + ',' + $scope.date_query.date__lte; + var dateGte = new Date($scope.date_query.date__gte).toISOString(); + var dateLte = new Date($scope.date_query.date__lte).toISOString(); + $scope.query['date__range'] = dateGte + ',' + dateLte; delete $scope.query['date__gte']; delete $scope.query['date__lte']; }else if ($scope.date_query.date__gte != ''){ - $scope.query['date__gte'] = $scope.date_query.date__gte; + var dateGte = new Date($scope.date_query.date__gte).toISOString(); + $scope.query['date__gte'] = dateGte; delete $scope.query['date__range']; delete $scope.query['date__lte']; }else if ($scope.date_query.date__lte != ''){ - $scope.query['date__lte'] = $scope.date_query.date__lte; + var dateLte = new Date($scope.date_query.date__lte).toISOString(); + $scope.query['date__lte'] = dateLte; delete $scope.query['date__range']; delete $scope.query['date__gte']; }else{ @@ -581,51 +709,54 @@ }, true); /* - * Spatial search - */ + * Spatial search + */ if ($('.leaflet_map').length > 0) { angular.extend($scope, { - layers: { - baselayers: { - stamen: { - name: 'Toner Lite', - type: 'xyz', - url: 'http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png', - layerOptions: { - subdomains: ['a', 'b', 'c'], - attribution: 'Map tiles by Stamen Design', - continuousWorld: true + layers: [ + { + name: 'OpenStreetMap', + active: true, + source: { + type: 'OSM' } - } } - }, - map_center: { - lat: 19, - lng: -72.5, + ], + center: { // center to Haiti + lat: 19.0, + lon: -73.5, zoom: 6 }, defaults: { - zoomControl: false + interactions: { + mouseWheelZoom: true + }, + controls: { + zoom: { + position: 'topleft' + } + } } }); + var olData = $injector.get('olData'), + map = olData.getMap('filter-map'); - var leafletData = $injector.get('leafletData'), - map = leafletData.getMap('filter-map'); - - map.then(function(map){ - map.on('moveend', function(){ - $scope.query['extent'] = map.getBounds().toBBoxString(); + map.then(function(map) { + map.on('moveend', function () { + var glbox = map.getView().calculateExtent(map.getSize()); // doesn't look as expected. + var box = ol.proj.transformExtent(glbox, 'EPSG:3857', 'EPSG:4326'); + $scope.query['extent'] = box.toString(); query_api($scope.query); }); }); var showMap = false; $('#_extent_filter').click(function(evt) { - showMap = !showMap + showMap = !showMap if (showMap){ - leafletData.getMap().then(function(map) { - map.invalidateSize(); + olData.getMap().then(function(map) { + map.updateSize(); }); } }); diff --git a/haitidata/static/js/templates/cart.html b/haitidata/static/js/templates/cart.html deleted file mode 100644 index 1909cd3..0000000 --- a/haitidata/static/js/templates/cart.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
Panier
-
-

Ajoutez des ressources à l'aide des boutons "Ajouter au panier".

-
-
    -
  • {{ resource.title | limitTo: 25}}{{ resource.title.length > 25 ? '...' : '' }}
  • -
-
diff --git a/haitidata/static/js/templates/upload.html b/haitidata/static/js/templates/upload.html deleted file mode 100644 index c6cd758..0000000 --- a/haitidata/static/js/templates/upload.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - diff --git a/haitidata/static/less/bootstrap.less b/haitidata/static/less/bootstrap.less deleted file mode 100755 index 8773ee9..0000000 --- a/haitidata/static/less/bootstrap.less +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -// Core variables and mixins -@import "variables.less"; -@import "bootstrap/mixins.less"; - -// Reset and dependencies -@import "bootstrap/normalize.less"; -@import "bootstrap/print.less"; -@import "bootstrap/glyphicons.less"; - -// Core CSS -@import "bootstrap/scaffolding.less"; -@import "bootstrap/type.less"; -@import "bootstrap/code.less"; -@import "bootstrap/grid.less"; -@import "bootstrap/tables.less"; -@import "bootstrap/forms.less"; -@import "bootstrap/buttons.less"; - -// Components -@import "bootstrap/component-animations.less"; -@import "bootstrap/dropdowns.less"; -@import "bootstrap/button-groups.less"; -@import "bootstrap/input-groups.less"; -@import "bootstrap/navs.less"; -@import "bootstrap/navbar.less"; -@import "bootstrap/breadcrumbs.less"; -@import "bootstrap/pagination.less"; -@import "bootstrap/pager.less"; -@import "bootstrap/labels.less"; -@import "bootstrap/badges.less"; -@import "bootstrap/jumbotron.less"; -@import "bootstrap/thumbnails.less"; -@import "bootstrap/alerts.less"; -@import "bootstrap/progress-bars.less"; -@import "bootstrap/media.less"; -@import "bootstrap/list-group.less"; -@import "bootstrap/panels.less"; -@import "bootstrap/responsive-embed.less"; -@import "bootstrap/wells.less"; -@import "bootstrap/close.less"; - -// Components w/ JavaScript -@import "bootstrap/modals.less"; -@import "bootstrap/tooltip.less"; -@import "bootstrap/popovers.less"; -@import "bootstrap/carousel.less"; - -// Utility classes -@import "bootstrap/utilities.less"; -@import "bootstrap/responsive-utilities.less"; diff --git a/haitidata/static/less/bootstrap/bootstrap.less b/haitidata/static/less/bootstrap/bootstrap.less deleted file mode 100755 index f0aa08f..0000000 --- a/haitidata/static/less/bootstrap/bootstrap.less +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -// Core variables and mixins -@import "variables.less"; -@import "mixins.less"; - -// Reset and dependencies -@import "normalize.less"; -@import "print.less"; -@import "glyphicons.less"; - -// Core CSS -@import "scaffolding.less"; -@import "type.less"; -@import "code.less"; -@import "grid.less"; -@import "tables.less"; -@import "forms.less"; -@import "buttons.less"; - -// Components -@import "component-animations.less"; -@import "dropdowns.less"; -@import "button-groups.less"; -@import "input-groups.less"; -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; -@import "labels.less"; -@import "badges.less"; -@import "jumbotron.less"; -@import "thumbnails.less"; -@import "alerts.less"; -@import "progress-bars.less"; -@import "media.less"; -@import "list-group.less"; -@import "panels.less"; -@import "responsive-embed.less"; -@import "wells.less"; -@import "close.less"; - -// Components w/ JavaScript -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; -@import "carousel.less"; - -// Utility classes -@import "utilities.less"; -@import "responsive-utilities.less"; diff --git a/haitidata/static/less/bootstrap/breadcrumbs.less b/haitidata/static/less/bootstrap/breadcrumbs.less deleted file mode 100755 index cb01d50..0000000 --- a/haitidata/static/less/bootstrap/breadcrumbs.less +++ /dev/null @@ -1,26 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; - margin-bottom: @line-height-computed; - list-style: none; - background-color: @breadcrumb-bg; - border-radius: @border-radius-base; - - > li { - display: inline-block; - - + li:before { - content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space - padding: 0 5px; - color: @breadcrumb-color; - } - } - - > .active { - color: @breadcrumb-active-color; - } -} diff --git a/haitidata/static/less/bootstrap/close.less b/haitidata/static/less/bootstrap/close.less deleted file mode 100755 index 6d5bfe0..0000000 --- a/haitidata/static/less/bootstrap/close.less +++ /dev/null @@ -1,34 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: (@font-size-base * 1.5); - font-weight: @close-font-weight; - line-height: 1; - color: @close-color; - text-shadow: @close-text-shadow; - .opacity(.2); - - &:hover, - &:focus { - color: @close-color; - text-decoration: none; - cursor: pointer; - .opacity(.5); - } - - // Additional properties for button version - // iOS requires the button element instead of an anchor tag. - // If you want the anchor version, it requires `href="#"`. - // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile - button& { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - } -} diff --git a/haitidata/static/less/bootstrap/jumbotron.less b/haitidata/static/less/bootstrap/jumbotron.less deleted file mode 100755 index 1d9b515..0000000 --- a/haitidata/static/less/bootstrap/jumbotron.less +++ /dev/null @@ -1,54 +0,0 @@ -// -// Jumbotron -// -------------------------------------------------- - - -.jumbotron { - padding-top: @jumbotron-padding; - padding-bottom: @jumbotron-padding; - margin-bottom: @jumbotron-padding; - color: @jumbotron-color; - background-color: @jumbotron-bg; - - h1, - .h1 { - color: @jumbotron-heading-color; - } - - p { - margin-bottom: (@jumbotron-padding / 2); - font-size: @jumbotron-font-size; - font-weight: 200; - } - - > hr { - border-top-color: darken(@jumbotron-bg, 10%); - } - - .container &, - .container-fluid & { - border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container - padding-left: (@grid-gutter-width / 2); - padding-right: (@grid-gutter-width / 2); - } - - .container { - max-width: 100%; - } - - @media screen and (min-width: @screen-sm-min) { - padding-top: (@jumbotron-padding * 1.6); - padding-bottom: (@jumbotron-padding * 1.6); - - .container &, - .container-fluid & { - padding-left: (@jumbotron-padding * 2); - padding-right: (@jumbotron-padding * 2); - } - - h1, - .h1 { - font-size: @jumbotron-heading-font-size; - } - } -} diff --git a/haitidata/static/less/bootstrap/mixins.less b/haitidata/static/less/bootstrap/mixins.less deleted file mode 100755 index e6f9fe6..0000000 --- a/haitidata/static/less/bootstrap/mixins.less +++ /dev/null @@ -1,40 +0,0 @@ -// Mixins -// -------------------------------------------------- - -// Utilities -@import "mixins/hide-text.less"; -@import "mixins/opacity.less"; -@import "mixins/image.less"; -@import "mixins/labels.less"; -@import "mixins/reset-filter.less"; -@import "mixins/resize.less"; -@import "mixins/responsive-visibility.less"; -@import "mixins/size.less"; -@import "mixins/tab-focus.less"; -@import "mixins/reset-text.less"; -@import "mixins/text-emphasis.less"; -@import "mixins/text-overflow.less"; -@import "mixins/vendor-prefixes.less"; - -// Components -@import "mixins/alerts.less"; -@import "mixins/buttons.less"; -@import "mixins/panels.less"; -@import "mixins/pagination.less"; -@import "mixins/list-group.less"; -@import "mixins/nav-divider.less"; -@import "mixins/forms.less"; -@import "mixins/progress-bar.less"; -@import "mixins/table-row.less"; - -// Skins -@import "mixins/background-variant.less"; -@import "mixins/border-radius.less"; -@import "mixins/gradients.less"; - -// Layout -@import "mixins/clearfix.less"; -@import "mixins/center-block.less"; -@import "mixins/nav-vertical-align.less"; -@import "mixins/grid-framework.less"; -@import "mixins/grid.less"; diff --git a/haitidata/static/less/bootstrap/mixins/alerts.less b/haitidata/static/less/bootstrap/mixins/alerts.less deleted file mode 100755 index 396196f..0000000 --- a/haitidata/static/less/bootstrap/mixins/alerts.less +++ /dev/null @@ -1,14 +0,0 @@ -// Alerts - -.alert-variant(@background; @border; @text-color) { - background-color: @background; - border-color: @border; - color: @text-color; - - hr { - border-top-color: darken(@border, 5%); - } - .alert-link { - color: darken(@text-color, 10%); - } -} diff --git a/haitidata/static/less/bootstrap/mixins/background-variant.less b/haitidata/static/less/bootstrap/mixins/background-variant.less deleted file mode 100755 index a85c22b..0000000 --- a/haitidata/static/less/bootstrap/mixins/background-variant.less +++ /dev/null @@ -1,9 +0,0 @@ -// Contextual backgrounds - -.bg-variant(@color) { - background-color: @color; - a&:hover, - a&:focus { - background-color: darken(@color, 10%); - } -} diff --git a/haitidata/static/less/bootstrap/mixins/border-radius.less b/haitidata/static/less/bootstrap/mixins/border-radius.less deleted file mode 100755 index ca05dbf..0000000 --- a/haitidata/static/less/bootstrap/mixins/border-radius.less +++ /dev/null @@ -1,18 +0,0 @@ -// Single side border-radius - -.border-top-radius(@radius) { - border-top-right-radius: @radius; - border-top-left-radius: @radius; -} -.border-right-radius(@radius) { - border-bottom-right-radius: @radius; - border-top-right-radius: @radius; -} -.border-bottom-radius(@radius) { - border-bottom-right-radius: @radius; - border-bottom-left-radius: @radius; -} -.border-left-radius(@radius) { - border-bottom-left-radius: @radius; - border-top-left-radius: @radius; -} diff --git a/haitidata/static/less/bootstrap/mixins/buttons.less b/haitidata/static/less/bootstrap/mixins/buttons.less deleted file mode 100755 index b294d8c..0000000 --- a/haitidata/static/less/bootstrap/mixins/buttons.less +++ /dev/null @@ -1,65 +0,0 @@ -// Button variants -// -// Easily pump out default styles, as well as :hover, :focus, :active, -// and disabled options for all buttons - -.button-variant(@color; @background; @border) { - color: @color; - background-color: @background; - border-color: @border; - - &:focus, - &.focus { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 25%); - } - &:hover { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 12%); - } - &:active, - &.active, - .open > .dropdown-toggle& { - color: @color; - background-color: darken(@background, 10%); - border-color: darken(@border, 12%); - - &:hover, - &:focus, - &.focus { - color: @color; - background-color: darken(@background, 17%); - border-color: darken(@border, 25%); - } - } - &:active, - &.active, - .open > .dropdown-toggle& { - background-image: none; - } - &.disabled, - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus, - &.focus { - background-color: @background; - border-color: @border; - } - } - - .badge { - color: @background; - background-color: @color; - } -} - -// Button sizes -.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - border-radius: @border-radius; -} diff --git a/haitidata/static/less/bootstrap/mixins/gradients.less b/haitidata/static/less/bootstrap/mixins/gradients.less deleted file mode 100755 index 0b88a89..0000000 --- a/haitidata/static/less/bootstrap/mixins/gradients.less +++ /dev/null @@ -1,59 +0,0 @@ -// Gradients - -#gradient { - - // Horizontal gradient, from left to right - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - // Vertical gradient, from top to bottom - // - // Creates two color stops, start and end, by specifying a color and position for each color stop. - // Color stops are not available in IE9 and below. - .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { - background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12 - background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down - } - - .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { - background-repeat: repeat-x; - background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ - background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12 - background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ - } - .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { - background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@inner-color: #555; @outer-color: #333) { - background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); - background-image: radial-gradient(circle, @inner-color, @outer-color); - background-repeat: no-repeat; - } - .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { - background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); - } -} diff --git a/haitidata/static/less/bootstrap/mixins/grid-framework.less b/haitidata/static/less/bootstrap/mixins/grid-framework.less deleted file mode 100755 index 8c23eed..0000000 --- a/haitidata/static/less/bootstrap/mixins/grid-framework.less +++ /dev/null @@ -1,91 +0,0 @@ -// Framework grid generation -// -// Used only by Bootstrap to generate the correct number of grid classes given -// any value of `@grid-columns`. - -.make-grid-columns() { - // Common styles for all sizes of grid columns, widths 1-12 - .col(@index) { // initial - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo - @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - position: relative; - // Prevent columns from collapsing when empty - min-height: 1px; - // Inner gutter via padding - padding-left: ceil((@grid-gutter-width / 2)); - padding-right: floor((@grid-gutter-width / 2)); - } - } - .col(1); // kickstart it -} - -.float-grid-columns(@class) { - .col(@index) { // initial - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), @item); - } - .col(@index, @list) when (@index =< @grid-columns) { // general - @item: ~".col-@{class}-@{index}"; - .col((@index + 1), ~"@{list}, @{item}"); - } - .col(@index, @list) when (@index > @grid-columns) { // terminal - @{list} { - float: left; - } - } - .col(1); // kickstart it -} - -.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { - .col-@{class}-@{index} { - width: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { - .col-@{class}-push-@{index} { - left: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { - .col-@{class}-push-0 { - left: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { - .col-@{class}-pull-@{index} { - right: percentage((@index / @grid-columns)); - } -} -.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { - .col-@{class}-pull-0 { - right: auto; - } -} -.calc-grid-column(@index, @class, @type) when (@type = offset) { - .col-@{class}-offset-@{index} { - margin-left: percentage((@index / @grid-columns)); - } -} - -// Basic looping in LESS -.loop-grid-columns(@index, @class, @type) when (@index >= 0) { - .calc-grid-column(@index, @class, @type); - // next iteration - .loop-grid-columns((@index - 1), @class, @type); -} - -// Create grid for specific class -.make-grid(@class) { - .float-grid-columns(@class); - .loop-grid-columns(@grid-columns, @class, width); - .loop-grid-columns(@grid-columns, @class, pull); - .loop-grid-columns(@grid-columns, @class, push); - .loop-grid-columns(@grid-columns, @class, offset); -} diff --git a/haitidata/static/less/bootstrap/mixins/grid.less b/haitidata/static/less/bootstrap/mixins/grid.less deleted file mode 100755 index df496d0..0000000 --- a/haitidata/static/less/bootstrap/mixins/grid.less +++ /dev/null @@ -1,122 +0,0 @@ -// Grid system -// -// Generate semantic grid columns with these mixins. - -// Centered container element -.container-fixed(@gutter: @grid-gutter-width) { - margin-right: auto; - margin-left: auto; - padding-left: floor((@gutter / 2)); - padding-right: ceil((@gutter / 2)); - &:extend(.clearfix all); -} - -// Creates a wrapper for a series of columns -.make-row(@gutter: @grid-gutter-width) { - margin-left: ceil((@gutter / -2)); - margin-right: floor((@gutter / -2)); - &:extend(.clearfix all); -} - -// Generate the extra small columns -.make-xs-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - float: left; - width: percentage((@columns / @grid-columns)); - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); -} -.make-xs-column-offset(@columns) { - margin-left: percentage((@columns / @grid-columns)); -} -.make-xs-column-push(@columns) { - left: percentage((@columns / @grid-columns)); -} -.make-xs-column-pull(@columns) { - right: percentage((@columns / @grid-columns)); -} - -// Generate the small columns -.make-sm-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-sm-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-offset(@columns) { - @media (min-width: @screen-sm-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-push(@columns) { - @media (min-width: @screen-sm-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-sm-column-pull(@columns) { - @media (min-width: @screen-sm-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the medium columns -.make-md-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-md-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-md-column-offset(@columns) { - @media (min-width: @screen-md-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-push(@columns) { - @media (min-width: @screen-md-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-md-column-pull(@columns) { - @media (min-width: @screen-md-min) { - right: percentage((@columns / @grid-columns)); - } -} - -// Generate the large columns -.make-lg-column(@columns; @gutter: @grid-gutter-width) { - position: relative; - min-height: 1px; - padding-left: (@gutter / 2); - padding-right: (@gutter / 2); - - @media (min-width: @screen-lg-min) { - float: left; - width: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-offset(@columns) { - @media (min-width: @screen-lg-min) { - margin-left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-push(@columns) { - @media (min-width: @screen-lg-min) { - left: percentage((@columns / @grid-columns)); - } -} -.make-lg-column-pull(@columns) { - @media (min-width: @screen-lg-min) { - right: percentage((@columns / @grid-columns)); - } -} diff --git a/haitidata/static/less/bootstrap/mixins/image.less b/haitidata/static/less/bootstrap/mixins/image.less deleted file mode 100755 index f233cb3..0000000 --- a/haitidata/static/less/bootstrap/mixins/image.less +++ /dev/null @@ -1,33 +0,0 @@ -// Image Mixins -// - Responsive image -// - Retina image - - -// Responsive image -// -// Keep images from scaling beyond the width of their parents. -.img-responsive(@display: block) { - display: @display; - max-width: 100%; // Part 1: Set a maximum relative to the parent - height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching -} - - -// Retina image -// -// Short retina mixin for setting background-image and -size. Note that the -// spelling of `min--moz-device-pixel-ratio` is intentional. -.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { - background-image: url("@{file-1x}"); - - @media - only screen and (-webkit-min-device-pixel-ratio: 2), - only screen and ( min--moz-device-pixel-ratio: 2), - only screen and ( -o-min-device-pixel-ratio: 2/1), - only screen and ( min-device-pixel-ratio: 2), - only screen and ( min-resolution: 192dpi), - only screen and ( min-resolution: 2dppx) { - background-image: url("@{file-2x}"); - background-size: @width-1x @height-1x; - } -} diff --git a/haitidata/static/less/bootstrap/mixins/labels.less b/haitidata/static/less/bootstrap/mixins/labels.less deleted file mode 100755 index 9f7a67e..0000000 --- a/haitidata/static/less/bootstrap/mixins/labels.less +++ /dev/null @@ -1,12 +0,0 @@ -// Labels - -.label-variant(@color) { - background-color: @color; - - &[href] { - &:hover, - &:focus { - background-color: darken(@color, 10%); - } - } -} diff --git a/haitidata/static/less/bootstrap/mixins/list-group.less b/haitidata/static/less/bootstrap/mixins/list-group.less deleted file mode 100755 index 03aa190..0000000 --- a/haitidata/static/less/bootstrap/mixins/list-group.less +++ /dev/null @@ -1,30 +0,0 @@ -// List Groups - -.list-group-item-variant(@state; @background; @color) { - .list-group-item-@{state} { - color: @color; - background-color: @background; - - a&, - button& { - color: @color; - - .list-group-item-heading { - color: inherit; - } - - &:hover, - &:focus { - color: @color; - background-color: darken(@background, 5%); - } - &.active, - &.active:hover, - &.active:focus { - color: #fff; - background-color: @color; - border-color: @color; - } - } - } -} diff --git a/haitidata/static/less/bootstrap/mixins/opacity.less b/haitidata/static/less/bootstrap/mixins/opacity.less deleted file mode 100755 index 33ed25c..0000000 --- a/haitidata/static/less/bootstrap/mixins/opacity.less +++ /dev/null @@ -1,8 +0,0 @@ -// Opacity - -.opacity(@opacity) { - opacity: @opacity; - // IE8 filter - @opacity-ie: (@opacity * 100); - filter: ~"alpha(opacity=@{opacity-ie})"; -} diff --git a/haitidata/static/less/bootstrap/mixins/pagination.less b/haitidata/static/less/bootstrap/mixins/pagination.less deleted file mode 100755 index 618804f..0000000 --- a/haitidata/static/less/bootstrap/mixins/pagination.less +++ /dev/null @@ -1,24 +0,0 @@ -// Pagination - -.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { - > li { - > a, - > span { - padding: @padding-vertical @padding-horizontal; - font-size: @font-size; - line-height: @line-height; - } - &:first-child { - > a, - > span { - .border-left-radius(@border-radius); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius); - } - } - } -} diff --git a/haitidata/static/less/bootstrap/mixins/panels.less b/haitidata/static/less/bootstrap/mixins/panels.less deleted file mode 100755 index 49ee10d..0000000 --- a/haitidata/static/less/bootstrap/mixins/panels.less +++ /dev/null @@ -1,24 +0,0 @@ -// Panels - -.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { - border-color: @border; - - & > .panel-heading { - color: @heading-text-color; - background-color: @heading-bg-color; - border-color: @heading-border; - - + .panel-collapse > .panel-body { - border-top-color: @border; - } - .badge { - color: @heading-bg-color; - background-color: @heading-text-color; - } - } - & > .panel-footer { - + .panel-collapse > .panel-body { - border-bottom-color: @border; - } - } -} diff --git a/haitidata/static/less/bootstrap/mixins/responsive-visibility.less b/haitidata/static/less/bootstrap/mixins/responsive-visibility.less deleted file mode 100755 index ecf1e97..0000000 --- a/haitidata/static/less/bootstrap/mixins/responsive-visibility.less +++ /dev/null @@ -1,15 +0,0 @@ -// Responsive utilities - -// -// More easily include all the states for responsive-utilities.less. -.responsive-visibility() { - display: block !important; - table& { display: table !important; } - tr& { display: table-row !important; } - th&, - td& { display: table-cell !important; } -} - -.responsive-invisibility() { - display: none !important; -} diff --git a/haitidata/static/less/bootstrap/mixins/size.less b/haitidata/static/less/bootstrap/mixins/size.less deleted file mode 100755 index a8be650..0000000 --- a/haitidata/static/less/bootstrap/mixins/size.less +++ /dev/null @@ -1,10 +0,0 @@ -// Sizing shortcuts - -.size(@width; @height) { - width: @width; - height: @height; -} - -.square(@size) { - .size(@size; @size); -} diff --git a/haitidata/static/less/bootstrap/mixins/text-emphasis.less b/haitidata/static/less/bootstrap/mixins/text-emphasis.less deleted file mode 100755 index 9e8a77a..0000000 --- a/haitidata/static/less/bootstrap/mixins/text-emphasis.less +++ /dev/null @@ -1,9 +0,0 @@ -// Typography - -.text-emphasis-variant(@color) { - color: @color; - a&:hover, - a&:focus { - color: darken(@color, 10%); - } -} diff --git a/haitidata/static/less/bootstrap/mixins/vendor-prefixes.less b/haitidata/static/less/bootstrap/mixins/vendor-prefixes.less deleted file mode 100755 index 2b5e74b..0000000 --- a/haitidata/static/less/bootstrap/mixins/vendor-prefixes.less +++ /dev/null @@ -1,227 +0,0 @@ -// Vendor Prefixes -// -// All vendor mixins are deprecated as of v3.2.0 due to the introduction of -// Autoprefixer in our Gruntfile. They have been removed in v4. - -// - Animations -// - Backface visibility -// - Box shadow -// - Box sizing -// - Content columns -// - Hyphens -// - Placeholder text -// - Transformations -// - Transitions -// - User Select - - -// Animations -.animation(@animation) { - -webkit-animation: @animation; - -o-animation: @animation; - animation: @animation; -} -.animation-name(@name) { - -webkit-animation-name: @name; - animation-name: @name; -} -.animation-duration(@duration) { - -webkit-animation-duration: @duration; - animation-duration: @duration; -} -.animation-timing-function(@timing-function) { - -webkit-animation-timing-function: @timing-function; - animation-timing-function: @timing-function; -} -.animation-delay(@delay) { - -webkit-animation-delay: @delay; - animation-delay: @delay; -} -.animation-iteration-count(@iteration-count) { - -webkit-animation-iteration-count: @iteration-count; - animation-iteration-count: @iteration-count; -} -.animation-direction(@direction) { - -webkit-animation-direction: @direction; - animation-direction: @direction; -} -.animation-fill-mode(@fill-mode) { - -webkit-animation-fill-mode: @fill-mode; - animation-fill-mode: @fill-mode; -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden` - -.backface-visibility(@visibility) { - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Drop shadows -// -// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's -// supported browsers that have box shadow capabilities now support it. - -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 - box-shadow: @shadow; -} - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// CSS3 Content Columns -.content-columns(@column-count; @column-gap: @grid-gutter-width) { - -webkit-column-count: @column-count; - -moz-column-count: @column-count; - column-count: @column-count; - -webkit-column-gap: @column-gap; - -moz-column-gap: @column-gap; - column-gap: @column-gap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; // IE10+ - -o-hyphens: @mode; - hyphens: @mode; -} - -// Placeholder text -.placeholder(@color: @input-color-placeholder) { - // Firefox - &::-moz-placeholder { - color: @color; - opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526 - } - &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ - &::-webkit-input-placeholder { color: @color; } // Safari and Chrome -} - -// Transformations -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -ms-transform: scale(@ratio); // IE9 only - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.scale(@ratioX; @ratioY) { - -webkit-transform: scale(@ratioX, @ratioY); - -ms-transform: scale(@ratioX, @ratioY); // IE9 only - -o-transform: scale(@ratioX, @ratioY); - transform: scale(@ratioX, @ratioY); -} -.scaleX(@ratio) { - -webkit-transform: scaleX(@ratio); - -ms-transform: scaleX(@ratio); // IE9 only - -o-transform: scaleX(@ratio); - transform: scaleX(@ratio); -} -.scaleY(@ratio) { - -webkit-transform: scaleY(@ratio); - -ms-transform: scaleY(@ratio); // IE9 only - -o-transform: scaleY(@ratio); - transform: scaleY(@ratio); -} -.skew(@x; @y) { - -webkit-transform: skewX(@x) skewY(@y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ - -o-transform: skewX(@x) skewY(@y); - transform: skewX(@x) skewY(@y); -} -.translate(@x; @y) { - -webkit-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); // IE9 only - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.translate3d(@x; @y; @z) { - -webkit-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); // IE9 only - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.rotateX(@degrees) { - -webkit-transform: rotateX(@degrees); - -ms-transform: rotateX(@degrees); // IE9 only - -o-transform: rotateX(@degrees); - transform: rotateX(@degrees); -} -.rotateY(@degrees) { - -webkit-transform: rotateY(@degrees); - -ms-transform: rotateY(@degrees); // IE9 only - -o-transform: rotateY(@degrees); - transform: rotateY(@degrees); -} -.perspective(@perspective) { - -webkit-perspective: @perspective; - -moz-perspective: @perspective; - perspective: @perspective; -} -.perspective-origin(@perspective) { - -webkit-perspective-origin: @perspective; - -moz-perspective-origin: @perspective; - perspective-origin: @perspective; -} -.transform-origin(@origin) { - -webkit-transform-origin: @origin; - -moz-transform-origin: @origin; - -ms-transform-origin: @origin; // IE9 only - transform-origin: @origin; -} - - -// Transitions - -.transition(@transition) { - -webkit-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-property(@transition-property) { - -webkit-transition-property: @transition-property; - transition-property: @transition-property; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} -.transition-timing-function(@timing-function) { - -webkit-transition-timing-function: @timing-function; - transition-timing-function: @timing-function; -} -.transition-transform(@transition) { - -webkit-transition: -webkit-transform @transition; - -moz-transition: -moz-transform @transition; - -o-transition: -o-transform @transition; - transition: transform @transition; -} - - -// User select -// For selecting text on the page - -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; // IE10+ - user-select: @select; -} diff --git a/haitidata/static/less/bootstrap/pagination.less b/haitidata/static/less/bootstrap/pagination.less deleted file mode 100755 index 31f77aa..0000000 --- a/haitidata/static/less/bootstrap/pagination.less +++ /dev/null @@ -1,89 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- -.pagination { - display: inline-block; - padding-left: 0; - margin: @line-height-computed 0; - border-radius: @border-radius-base; - - > li { - display: inline; // Remove list-style and block-level defaults - > a, - > span { - position: relative; - float: left; // Collapse white-space - padding: @padding-base-vertical @padding-base-horizontal; - line-height: @line-height-base; - text-decoration: none; - color: @pagination-color; - background-color: @pagination-bg; - border: 1px solid @pagination-border; - margin-left: -1px; - } - &:first-child { - > a, - > span { - margin-left: 0; - .border-left-radius(@border-radius-base); - } - } - &:last-child { - > a, - > span { - .border-right-radius(@border-radius-base); - } - } - } - - > li > a, - > li > span { - &:hover, - &:focus { - z-index: 2; - color: @pagination-hover-color; - background-color: @pagination-hover-bg; - border-color: @pagination-hover-border; - } - } - - > .active > a, - > .active > span { - &, - &:hover, - &:focus { - z-index: 3; - color: @pagination-active-color; - background-color: @pagination-active-bg; - border-color: @pagination-active-border; - cursor: default; - } - } - - > .disabled { - > span, - > span:hover, - > span:focus, - > a, - > a:hover, - > a:focus { - color: @pagination-disabled-color; - background-color: @pagination-disabled-bg; - border-color: @pagination-disabled-border; - cursor: @cursor-disabled; - } - } -} - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-lg { - .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); -} - -// Small -.pagination-sm { - .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); -} diff --git a/haitidata/static/less/bootstrap/popovers.less b/haitidata/static/less/bootstrap/popovers.less deleted file mode 100755 index 3a62a64..0000000 --- a/haitidata/static/less/bootstrap/popovers.less +++ /dev/null @@ -1,131 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindex-popover; - display: none; - max-width: @popover-max-width; - padding: 1px; - // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element. - // So reset our font and text properties to avoid inheriting weird values. - .reset-text(); - font-size: @font-size-base; - - background-color: @popover-bg; - background-clip: padding-box; - border: 1px solid @popover-fallback-border-color; - border: 1px solid @popover-border-color; - border-radius: @border-radius-large; - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Offset the popover to account for the popover arrow - &.top { margin-top: -@popover-arrow-width; } - &.right { margin-left: @popover-arrow-width; } - &.bottom { margin-top: @popover-arrow-width; } - &.left { margin-left: -@popover-arrow-width; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: @font-size-base; - background-color: @popover-title-bg; - border-bottom: 1px solid darken(@popover-title-bg, 5%); - border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover > .arrow { - &, - &:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - } -} -.popover > .arrow { - border-width: @popover-arrow-outer-width; -} -.popover > .arrow:after { - border-width: @popover-arrow-width; - content: ""; -} - -.popover { - &.top > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-top-color: @popover-arrow-outer-color; - bottom: -@popover-arrow-outer-width; - &:after { - content: " "; - bottom: 1px; - margin-left: -@popover-arrow-width; - border-bottom-width: 0; - border-top-color: @popover-arrow-color; - } - } - &.right > .arrow { - top: 50%; - left: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-left-width: 0; - border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-right-color: @popover-arrow-outer-color; - &:after { - content: " "; - left: 1px; - bottom: -@popover-arrow-width; - border-left-width: 0; - border-right-color: @popover-arrow-color; - } - } - &.bottom > .arrow { - left: 50%; - margin-left: -@popover-arrow-outer-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-bottom-color: @popover-arrow-outer-color; - top: -@popover-arrow-outer-width; - &:after { - content: " "; - top: 1px; - margin-left: -@popover-arrow-width; - border-top-width: 0; - border-bottom-color: @popover-arrow-color; - } - } - - &.left > .arrow { - top: 50%; - right: -@popover-arrow-outer-width; - margin-top: -@popover-arrow-outer-width; - border-right-width: 0; - border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback - border-left-color: @popover-arrow-outer-color; - &:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: @popover-arrow-color; - bottom: -@popover-arrow-width; - } - } -} diff --git a/haitidata/static/less/bootstrap/print.less b/haitidata/static/less/bootstrap/print.less deleted file mode 100755 index 66e54ab..0000000 --- a/haitidata/static/less/bootstrap/print.less +++ /dev/null @@ -1,101 +0,0 @@ -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ - -// ========================================================================== -// Print styles. -// Inlined to avoid the additional HTTP request: h5bp.com/r -// ========================================================================== - -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; // Black prints faster: h5bp.com/s - box-shadow: none !important; - text-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links that are fragment identifiers, - // or use the `javascript:` pseudo protocol - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } - - // Bootstrap specific changes start - - // Bootstrap components - .navbar { - display: none; - } - .btn, - .dropup > .btn { - > .caret { - border-top-color: #000 !important; - } - } - .label { - border: 1px solid #000; - } - - .table { - border-collapse: collapse !important; - - td, - th { - background-color: #fff !important; - } - } - .table-bordered { - th, - td { - border: 1px solid #ddd !important; - } - } - - // Bootstrap specific changes end -} diff --git a/haitidata/static/less/bootstrap/theme.less b/haitidata/static/less/bootstrap/theme.less deleted file mode 100755 index fb61744..0000000 --- a/haitidata/static/less/bootstrap/theme.less +++ /dev/null @@ -1,291 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -// -// Load core variables and mixins -// -------------------------------------------------- - -@import "variables.less"; -@import "mixins.less"; - - -// -// Buttons -// -------------------------------------------------- - -// Common styles -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); - .box-shadow(@shadow); - - // Reset the shadow - &:active, - &.active { - .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - .box-shadow(none); - } - - .badge { - text-shadow: none; - } -} - -// Mixin for generating new styles -.btn-styles(@btn-color: #555) { - #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); - .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620 - background-repeat: repeat-x; - border-color: darken(@btn-color, 14%); - - &:hover, - &:focus { - background-color: darken(@btn-color, 12%); - background-position: 0 -15px; - } - - &:active, - &.active { - background-color: darken(@btn-color, 12%); - border-color: darken(@btn-color, 14%); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - &, - &:hover, - &:focus, - &.focus, - &:active, - &.active { - background-color: darken(@btn-color, 12%); - background-image: none; - } - } -} - -// Common styles -.btn { - // Remove the gradient for the pressed/active state - &:active, - &.active { - background-image: none; - } -} - -// Apply the mixin to the buttons -.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } -.btn-primary { .btn-styles(@btn-primary-bg); } -.btn-success { .btn-styles(@btn-success-bg); } -.btn-info { .btn-styles(@btn-info-bg); } -.btn-warning { .btn-styles(@btn-warning-bg); } -.btn-danger { .btn-styles(@btn-danger-bg); } - - -// -// Images -// -------------------------------------------------- - -.thumbnail, -.img-thumbnail { - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} - - -// -// Dropdowns -// -------------------------------------------------- - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); - background-color: darken(@dropdown-link-hover-bg, 5%); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); - background-color: darken(@dropdown-link-active-bg, 5%); -} - - -// -// Navbar -// -------------------------------------------------- - -// Default navbar -.navbar-default { - #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - border-radius: @navbar-border-radius; - @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); - .box-shadow(@shadow); - - .navbar-nav > .open > a, - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); - } -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255,255,255,.25); -} - -// Inverted navbar -.navbar-inverse { - #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); - .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257 - border-radius: @navbar-border-radius; - .navbar-nav > .open > a, - .navbar-nav > .active > a { - #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%)); - .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); - } - - .navbar-brand, - .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - } -} - -// Undo rounded corners in static and fixed navbars -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - -// Fix active state of dropdown items in collapsed mode -@media (max-width: @grid-float-breakpoint-max) { - .navbar .navbar-nav .open .dropdown-menu > .active > a { - &, - &:hover, - &:focus { - color: #fff; - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); - } - } -} - - -// -// Alerts -// -------------------------------------------------- - -// Common styles -.alert { - text-shadow: 0 1px 0 rgba(255,255,255,.2); - @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); - .box-shadow(@shadow); -} - -// Mixin for generating new styles -.alert-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); - border-color: darken(@color, 15%); -} - -// Apply the mixin to the alerts -.alert-success { .alert-styles(@alert-success-bg); } -.alert-info { .alert-styles(@alert-info-bg); } -.alert-warning { .alert-styles(@alert-warning-bg); } -.alert-danger { .alert-styles(@alert-danger-bg); } - - -// -// Progress bars -// -------------------------------------------------- - -// Give the progress background some depth -.progress { - #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) -} - -// Mixin for generating new styles -.progress-bar-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); -} - -// Apply the mixin to the progress bars -.progress-bar { .progress-bar-styles(@progress-bar-bg); } -.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } -.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } -.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } -.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } - -// Reset the striped class because our mixins don't do multiple gradients and -// the above custom styles override the new `.progress-bar-striped` in v3.2.0. -.progress-bar-striped { - #gradient > .striped(); -} - - -// -// List groups -// -------------------------------------------------- - -.list-group { - border-radius: @border-radius-base; - .box-shadow(0 1px 2px rgba(0,0,0,.075)); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); - #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); - border-color: darken(@list-group-active-border, 7.5%); - - .badge { - text-shadow: none; - } -} - - -// -// Panels -// -------------------------------------------------- - -// Common styles -.panel { - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} - -// Mixin for generating new styles -.panel-heading-styles(@color) { - #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); -} - -// Apply the mixin to the panel headings only -.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } -.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } -.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } -.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } -.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } -.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } - - -// -// Wells -// -------------------------------------------------- - -.well { - #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); - border-color: darken(@well-bg, 10%); - @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); - .box-shadow(@shadow); -} diff --git a/haitidata/static/less/bootstrap/thumbnails.less b/haitidata/static/less/bootstrap/thumbnails.less deleted file mode 100755 index 0713e67..0000000 --- a/haitidata/static/less/bootstrap/thumbnails.less +++ /dev/null @@ -1,36 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Mixin and adjust the regular image class -.thumbnail { - display: block; - padding: @thumbnail-padding; - margin-bottom: @line-height-computed; - line-height: @line-height-base; - background-color: @thumbnail-bg; - border: 1px solid @thumbnail-border; - border-radius: @thumbnail-border-radius; - .transition(border .2s ease-in-out); - - > img, - a > img { - &:extend(.img-responsive); - margin-left: auto; - margin-right: auto; - } - - // Add a hover state for linked versions only - a&:hover, - a&:focus, - a&.active { - border-color: @link-color; - } - - // Image captions - .caption { - padding: @thumbnail-caption-padding; - color: @thumbnail-caption-color; - } -} diff --git a/haitidata/static/less/bootstrap/tooltip.less b/haitidata/static/less/bootstrap/tooltip.less deleted file mode 100755 index b48d63e..0000000 --- a/haitidata/static/less/bootstrap/tooltip.less +++ /dev/null @@ -1,101 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindex-tooltip; - display: block; - // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. - // So reset our font and text properties to avoid inheriting weird values. - .reset-text(); - font-size: @font-size-small; - - .opacity(0); - - &.in { .opacity(@tooltip-opacity); } - &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } - &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } - &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } - &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: @tooltip-max-width; - padding: 3px 8px; - color: @tooltip-color; - text-align: center; - background-color: @tooltip-bg; - border-radius: @border-radius-base; -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1 -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-left .tooltip-arrow { - bottom: 0; - right: @tooltip-arrow-width; - margin-bottom: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.top-right .tooltip-arrow { - bottom: 0; - left: @tooltip-arrow-width; - margin-bottom: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; - border-right-color: @tooltip-arrow-color; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; - border-left-color: @tooltip-arrow-color; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-left .tooltip-arrow { - top: 0; - right: @tooltip-arrow-width; - margin-top: -@tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } - &.bottom-right .tooltip-arrow { - top: 0; - left: @tooltip-arrow-width; - margin-top: -@tooltip-arrow-width; - border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; - border-bottom-color: @tooltip-arrow-color; - } -} diff --git a/haitidata/static/less/bootstrap/variables.less b/haitidata/static/less/bootstrap/variables.less deleted file mode 100755 index 03b5498..0000000 --- a/haitidata/static/less/bootstrap/variables.less +++ /dev/null @@ -1,869 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -@gray-base: #000; -@gray-darker: lighten(@gray-base, 13.5%); // #222 -@gray-dark: lighten(@gray-base, 20%); // #333 -@gray: lighten(@gray-base, 33.5%); // #555 -@gray-light: lighten(@gray-base, 46.7%); // #777 -@gray-lighter: lighten(@gray-base, 93.5%); // #eee - -@brand-primary: darken(#428bca, 6.5%); // #337ab7 -@brand-success: #5cb85c; -@brand-info: #5bc0de; -@brand-warning: #f0ad4e; -@brand-danger: #d9534f; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -@body-bg: #fff; -//** Global text color on ``. -@text-color: @gray-dark; - -//** Global textual link color. -@link-color: @brand-primary; -//** Link hover color set via `darken()` function. -@link-hover-color: darken(@link-color, 15%); -//** Link hover decoration. -@link-hover-decoration: underline; - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; -@font-family-serif: Georgia, "Times New Roman", Times, serif; -//** Default monospace fonts for ``, ``, and `
`.
-@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base:        @font-family-sans-serif;
-
-@font-size-base:          14px;
-@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
-
-@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5:            @font-size-base;
-@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base:        1.428571429; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
-
-//** By default, this inherits from the ``.
-@headings-font-family:    inherit;
-@headings-font-weight:    500;
-@headings-line-height:    1.1;
-@headings-color:          inherit;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-@icon-font-path:          "../fonts/";
-//** File name for all font files.
-@icon-font-name:          "glyphicons-halflings-regular";
-//** Element ID within SVG icon file.
-@icon-font-svg-id:        "glyphicons_halflingsregular";
-
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-@padding-base-vertical:     6px;
-@padding-base-horizontal:   12px;
-
-@padding-large-vertical:    10px;
-@padding-large-horizontal:  16px;
-
-@padding-small-vertical:    5px;
-@padding-small-horizontal:  10px;
-
-@padding-xs-vertical:       1px;
-@padding-xs-horizontal:     5px;
-
-@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
-@line-height-small:         1.5;
-
-@border-radius-base:        4px;
-@border-radius-large:       6px;
-@border-radius-small:       3px;
-
-//** Global color for active items (e.g., navs or dropdowns).
-@component-active-color:    #fff;
-//** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg:       @brand-primary;
-
-//** Width of the `border` for generating carets that indicate dropdowns.
-@caret-width-base:          4px;
-//** Carets increase slightly in size for larger components.
-@caret-width-large:         5px;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ``s.
-@table-cell-padding:            8px;
-//** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding:  5px;
-
-//** Default background color used for all tables.
-@table-bg:                      transparent;
-//** Background color used for `.table-striped`.
-@table-bg-accent:               #f9f9f9;
-//** Background color used for `.table-hover`.
-@table-bg-hover:                #f5f5f5;
-@table-bg-active:               @table-bg-hover;
-
-//** Border color for table and cell borders.
-@table-border-color:            #ddd;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-@btn-font-weight:                normal;
-
-@btn-default-color:              #333;
-@btn-default-bg:                 #fff;
-@btn-default-border:             #ccc;
-
-@btn-primary-color:              #fff;
-@btn-primary-bg:                 @brand-primary;
-@btn-primary-border:             darken(@btn-primary-bg, 5%);
-
-@btn-success-color:              #fff;
-@btn-success-bg:                 @brand-success;
-@btn-success-border:             darken(@btn-success-bg, 5%);
-
-@btn-info-color:                 #fff;
-@btn-info-bg:                    @brand-info;
-@btn-info-border:                darken(@btn-info-bg, 5%);
-
-@btn-warning-color:              #fff;
-@btn-warning-bg:                 @brand-warning;
-@btn-warning-border:             darken(@btn-warning-bg, 5%);
-
-@btn-danger-color:               #fff;
-@btn-danger-bg:                  @brand-danger;
-@btn-danger-border:              darken(@btn-danger-bg, 5%);
-
-@btn-link-disabled-color:        @gray-light;
-
-// Allows for customizing button radius independently from global border radius
-@btn-border-radius-base:         @border-radius-base;
-@btn-border-radius-large:        @border-radius-large;
-@btn-border-radius-small:        @border-radius-small;
-
-
-//== Forms
-//
-//##
-
-//** `` background color
-@input-bg:                       #fff;
-//** `` background color
-@input-bg-disabled:              @gray-lighter;
-
-//** Text color for ``s
-@input-color:                    @gray;
-//** `` border color
-@input-border:                   #ccc;
-
-// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in CSS.
-@input-border-radius:            @border-radius-base;
-//** Large `.form-control` border radius
-@input-border-radius-large:      @border-radius-large;
-//** Small `.form-control` border radius
-@input-border-radius-small:      @border-radius-small;
-
-//** Border color for inputs on focus
-@input-border-focus:             #66afe9;
-
-//** Placeholder text color
-@input-color-placeholder:        #999;
-
-//** Default `.form-control` height
-@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
-//** Large `.form-control` height
-@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
-//** Small `.form-control` height
-@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
-
-//** `.form-group` margin
-@form-group-margin-bottom:       15px;
-
-@legend-color:                   @gray-dark;
-@legend-border-color:            #e5e5e5;
-
-//** Background color for textual input addons
-@input-group-addon-bg:           @gray-lighter;
-//** Border color for textual input addons
-@input-group-addon-border-color: @input-border;
-
-//** Disabled cursor for form controls and buttons.
-@cursor-disabled:                not-allowed;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-@dropdown-bg:                    #fff;
-//** Dropdown menu `border-color`.
-@dropdown-border:                rgba(0,0,0,.15);
-//** Dropdown menu `border-color` **for IE8**.
-@dropdown-fallback-border:       #ccc;
-//** Divider color for between dropdown items.
-@dropdown-divider-bg:            #e5e5e5;
-
-//** Dropdown link text color.
-@dropdown-link-color:            @gray-dark;
-//** Hover color for dropdown links.
-@dropdown-link-hover-color:      darken(@gray-dark, 5%);
-//** Hover background for dropdown links.
-@dropdown-link-hover-bg:         #f5f5f5;
-
-//** Active dropdown menu item text color.
-@dropdown-link-active-color:     @component-active-color;
-//** Active dropdown menu item background color.
-@dropdown-link-active-bg:        @component-active-bg;
-
-//** Disabled dropdown menu item background color.
-@dropdown-link-disabled-color:   @gray-light;
-
-//** Text color for headers within dropdown menus.
-@dropdown-header-color:          @gray-light;
-
-//** Deprecated `@dropdown-caret-color` as of v3.1.0
-@dropdown-caret-color:           #000;
-
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-@zindex-navbar:            1000;
-@zindex-dropdown:          1000;
-@zindex-popover:           1060;
-@zindex-tooltip:           1070;
-@zindex-navbar-fixed:      1030;
-@zindex-modal-background:  1040;
-@zindex-modal:             1050;
-
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-//** Deprecated `@screen-xs` as of v3.0.1
-@screen-xs:                  480px;
-//** Deprecated `@screen-xs-min` as of v3.2.0
-@screen-xs-min:              @screen-xs;
-//** Deprecated `@screen-phone` as of v3.0.1
-@screen-phone:               @screen-xs-min;
-
-// Small screen / tablet
-//** Deprecated `@screen-sm` as of v3.0.1
-@screen-sm:                  768px;
-@screen-sm-min:              @screen-sm;
-//** Deprecated `@screen-tablet` as of v3.0.1
-@screen-tablet:              @screen-sm-min;
-
-// Medium screen / desktop
-//** Deprecated `@screen-md` as of v3.0.1
-@screen-md:                  992px;
-@screen-md-min:              @screen-md;
-//** Deprecated `@screen-desktop` as of v3.0.1
-@screen-desktop:             @screen-md-min;
-
-// Large screen / wide desktop
-//** Deprecated `@screen-lg` as of v3.0.1
-@screen-lg:                  1200px;
-@screen-lg-min:              @screen-lg;
-//** Deprecated `@screen-lg-desktop` as of v3.0.1
-@screen-lg-desktop:          @screen-lg-min;
-
-// So media queries don't overlap when required, provide a maximum
-@screen-xs-max:              (@screen-sm-min - 1);
-@screen-sm-max:              (@screen-md-min - 1);
-@screen-md-max:              (@screen-lg-min - 1);
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-@grid-columns:              12;
-//** Padding between columns. Gets divided in half for the left and right.
-@grid-gutter-width:         30px;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-@grid-float-breakpoint:     @screen-sm-min;
-//** Point at which the navbar begins collapsing.
-@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-@container-tablet:             (720px + @grid-gutter-width);
-//** For `@screen-sm-min` and up.
-@container-sm:                 @container-tablet;
-
-// Medium screen / desktop
-@container-desktop:            (940px + @grid-gutter-width);
-//** For `@screen-md-min` and up.
-@container-md:                 @container-desktop;
-
-// Large screen / wide desktop
-@container-large-desktop:      (1140px + @grid-gutter-width);
-//** For `@screen-lg-min` and up.
-@container-lg:                 @container-large-desktop;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-@navbar-height:                    50px;
-@navbar-margin-bottom:             @line-height-computed;
-@navbar-border-radius:             @border-radius-base;
-@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
-@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
-@navbar-collapse-max-height:       340px;
-
-@navbar-default-color:             #777;
-@navbar-default-bg:                #f8f8f8;
-@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
-
-// Navbar links
-@navbar-default-link-color:                #777;
-@navbar-default-link-hover-color:          #333;
-@navbar-default-link-hover-bg:             transparent;
-@navbar-default-link-active-color:         #555;
-@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
-@navbar-default-link-disabled-color:       #ccc;
-@navbar-default-link-disabled-bg:          transparent;
-
-// Navbar brand label
-@navbar-default-brand-color:               @navbar-default-link-color;
-@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
-@navbar-default-brand-hover-bg:            transparent;
-
-// Navbar toggle
-@navbar-default-toggle-hover-bg:           #ddd;
-@navbar-default-toggle-icon-bar-bg:        #888;
-@navbar-default-toggle-border-color:       #ddd;
-
-
-//=== Inverted navbar
-// Reset inverted navbar basics
-@navbar-inverse-color:                      lighten(@gray-light, 15%);
-@navbar-inverse-bg:                         #222;
-@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
-
-// Inverted navbar links
-@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
-@navbar-inverse-link-hover-color:           #fff;
-@navbar-inverse-link-hover-bg:              transparent;
-@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
-@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
-@navbar-inverse-link-disabled-color:        #444;
-@navbar-inverse-link-disabled-bg:           transparent;
-
-// Inverted navbar brand label
-@navbar-inverse-brand-color:                @navbar-inverse-link-color;
-@navbar-inverse-brand-hover-color:          #fff;
-@navbar-inverse-brand-hover-bg:             transparent;
-
-// Inverted navbar toggle
-@navbar-inverse-toggle-hover-bg:            #333;
-@navbar-inverse-toggle-icon-bar-bg:         #fff;
-@navbar-inverse-toggle-border-color:        #333;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-@nav-link-padding:                          10px 15px;
-@nav-link-hover-bg:                         @gray-lighter;
-
-@nav-disabled-link-color:                   @gray-light;
-@nav-disabled-link-hover-color:             @gray-light;
-
-//== Tabs
-@nav-tabs-border-color:                     #ddd;
-
-@nav-tabs-link-hover-border-color:          @gray-lighter;
-
-@nav-tabs-active-link-hover-bg:             @body-bg;
-@nav-tabs-active-link-hover-color:          @gray;
-@nav-tabs-active-link-hover-border-color:   #ddd;
-
-@nav-tabs-justified-link-border-color:            #ddd;
-@nav-tabs-justified-active-link-border-color:     @body-bg;
-
-//== Pills
-@nav-pills-border-radius:                   @border-radius-base;
-@nav-pills-active-link-hover-bg:            @component-active-bg;
-@nav-pills-active-link-hover-color:         @component-active-color;
-
-
-//== Pagination
-//
-//##
-
-@pagination-color:                     @link-color;
-@pagination-bg:                        #fff;
-@pagination-border:                    #ddd;
-
-@pagination-hover-color:               @link-hover-color;
-@pagination-hover-bg:                  @gray-lighter;
-@pagination-hover-border:              #ddd;
-
-@pagination-active-color:              #fff;
-@pagination-active-bg:                 @brand-primary;
-@pagination-active-border:             @brand-primary;
-
-@pagination-disabled-color:            @gray-light;
-@pagination-disabled-bg:               #fff;
-@pagination-disabled-border:           #ddd;
-
-
-//== Pager
-//
-//##
-
-@pager-bg:                             @pagination-bg;
-@pager-border:                         @pagination-border;
-@pager-border-radius:                  15px;
-
-@pager-hover-bg:                       @pagination-hover-bg;
-
-@pager-active-bg:                      @pagination-active-bg;
-@pager-active-color:                   @pagination-active-color;
-
-@pager-disabled-color:                 @pagination-disabled-color;
-
-
-//== Jumbotron
-//
-//##
-
-@jumbotron-padding:              30px;
-@jumbotron-color:                inherit;
-@jumbotron-bg:                   @gray-lighter;
-@jumbotron-heading-color:        inherit;
-@jumbotron-font-size:            ceil((@font-size-base * 1.5));
-@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-@state-success-text:             #3c763d;
-@state-success-bg:               #dff0d8;
-@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
-
-@state-info-text:                #31708f;
-@state-info-bg:                  #d9edf7;
-@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
-
-@state-warning-text:             #8a6d3b;
-@state-warning-bg:               #fcf8e3;
-@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
-
-@state-danger-text:              #a94442;
-@state-danger-bg:                #f2dede;
-@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-@tooltip-max-width:           200px;
-//** Tooltip text color
-@tooltip-color:               #fff;
-//** Tooltip background color
-@tooltip-bg:                  #000;
-@tooltip-opacity:             .9;
-
-//** Tooltip arrow width
-@tooltip-arrow-width:         5px;
-//** Tooltip arrow color
-@tooltip-arrow-color:         @tooltip-bg;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-@popover-bg:                          #fff;
-//** Popover maximum width
-@popover-max-width:                   276px;
-//** Popover border color
-@popover-border-color:                rgba(0,0,0,.2);
-//** Popover fallback border color
-@popover-fallback-border-color:       #ccc;
-
-//** Popover title background color
-@popover-title-bg:                    darken(@popover-bg, 3%);
-
-//** Popover arrow width
-@popover-arrow-width:                 10px;
-//** Popover arrow color
-@popover-arrow-color:                 @popover-bg;
-
-//** Popover outer arrow width
-@popover-arrow-outer-width:           (@popover-arrow-width + 1);
-//** Popover outer arrow color
-@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
-//** Popover outer arrow fallback color
-@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-@label-default-bg:            @gray-light;
-//** Primary label background color
-@label-primary-bg:            @brand-primary;
-//** Success label background color
-@label-success-bg:            @brand-success;
-//** Info label background color
-@label-info-bg:               @brand-info;
-//** Warning label background color
-@label-warning-bg:            @brand-warning;
-//** Danger label background color
-@label-danger-bg:             @brand-danger;
-
-//** Default label text color
-@label-color:                 #fff;
-//** Default text color of a linked label
-@label-link-hover-color:      #fff;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-@modal-inner-padding:         15px;
-
-//** Padding applied to the modal title
-@modal-title-padding:         15px;
-//** Modal title line-height
-@modal-title-line-height:     @line-height-base;
-
-//** Background color of modal content area
-@modal-content-bg:                             #fff;
-//** Modal content border color
-@modal-content-border-color:                   rgba(0,0,0,.2);
-//** Modal content border color **for IE8**
-@modal-content-fallback-border-color:          #999;
-
-//** Modal backdrop background color
-@modal-backdrop-bg:           #000;
-//** Modal backdrop opacity
-@modal-backdrop-opacity:      .5;
-//** Modal header border color
-@modal-header-border-color:   #e5e5e5;
-//** Modal footer border color
-@modal-footer-border-color:   @modal-header-border-color;
-
-@modal-lg:                    900px;
-@modal-md:                    600px;
-@modal-sm:                    300px;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-@alert-padding:               15px;
-@alert-border-radius:         @border-radius-base;
-@alert-link-font-weight:      bold;
-
-@alert-success-bg:            @state-success-bg;
-@alert-success-text:          @state-success-text;
-@alert-success-border:        @state-success-border;
-
-@alert-info-bg:               @state-info-bg;
-@alert-info-text:             @state-info-text;
-@alert-info-border:           @state-info-border;
-
-@alert-warning-bg:            @state-warning-bg;
-@alert-warning-text:          @state-warning-text;
-@alert-warning-border:        @state-warning-border;
-
-@alert-danger-bg:             @state-danger-bg;
-@alert-danger-text:           @state-danger-text;
-@alert-danger-border:         @state-danger-border;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-@progress-bg:                 #f5f5f5;
-//** Progress bar text color
-@progress-bar-color:          #fff;
-//** Variable for setting rounded corners on progress bar.
-@progress-border-radius:      @border-radius-base;
-
-//** Default progress bar color
-@progress-bar-bg:             @brand-primary;
-//** Success progress bar color
-@progress-bar-success-bg:     @brand-success;
-//** Warning progress bar color
-@progress-bar-warning-bg:     @brand-warning;
-//** Danger progress bar color
-@progress-bar-danger-bg:      @brand-danger;
-//** Info progress bar color
-@progress-bar-info-bg:        @brand-info;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-@list-group-bg:                 #fff;
-//** `.list-group-item` border color
-@list-group-border:             #ddd;
-//** List group border radius
-@list-group-border-radius:      @border-radius-base;
-
-//** Background color of single list items on hover
-@list-group-hover-bg:           #f5f5f5;
-//** Text color of active list items
-@list-group-active-color:       @component-active-color;
-//** Background color of active list items
-@list-group-active-bg:          @component-active-bg;
-//** Border color of active list elements
-@list-group-active-border:      @list-group-active-bg;
-//** Text color for content within active list items
-@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
-
-//** Text color of disabled list items
-@list-group-disabled-color:      @gray-light;
-//** Background color of disabled list items
-@list-group-disabled-bg:         @gray-lighter;
-//** Text color for content within disabled list items
-@list-group-disabled-text-color: @list-group-disabled-color;
-
-@list-group-link-color:         #555;
-@list-group-link-hover-color:   @list-group-link-color;
-@list-group-link-heading-color: #333;
-
-
-//== Panels
-//
-//##
-
-@panel-bg:                    #fff;
-@panel-body-padding:          15px;
-@panel-heading-padding:       10px 15px;
-@panel-footer-padding:        @panel-heading-padding;
-@panel-border-radius:         @border-radius-base;
-
-//** Border color for elements within panels
-@panel-inner-border:          #ddd;
-@panel-footer-bg:             #f5f5f5;
-
-@panel-default-text:          @gray-dark;
-@panel-default-border:        #ddd;
-@panel-default-heading-bg:    #f5f5f5;
-
-@panel-primary-text:          #fff;
-@panel-primary-border:        @brand-primary;
-@panel-primary-heading-bg:    @brand-primary;
-
-@panel-success-text:          @state-success-text;
-@panel-success-border:        @state-success-border;
-@panel-success-heading-bg:    @state-success-bg;
-
-@panel-info-text:             @state-info-text;
-@panel-info-border:           @state-info-border;
-@panel-info-heading-bg:       @state-info-bg;
-
-@panel-warning-text:          @state-warning-text;
-@panel-warning-border:        @state-warning-border;
-@panel-warning-heading-bg:    @state-warning-bg;
-
-@panel-danger-text:           @state-danger-text;
-@panel-danger-border:         @state-danger-border;
-@panel-danger-heading-bg:     @state-danger-bg;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-@thumbnail-padding:           4px;
-//** Thumbnail background color
-@thumbnail-bg:                @body-bg;
-//** Thumbnail border color
-@thumbnail-border:            #ddd;
-//** Thumbnail border radius
-@thumbnail-border-radius:     @border-radius-base;
-
-//** Custom text color for thumbnail captions
-@thumbnail-caption-color:     @text-color;
-//** Padding around the thumbnail caption
-@thumbnail-caption-padding:   9px;
-
-
-//== Wells
-//
-//##
-
-@well-bg:                     #f5f5f5;
-@well-border:                 darken(@well-bg, 7%);
-
-
-//== Badges
-//
-//##
-
-@badge-color:                 #fff;
-//** Linked badge text color on hover
-@badge-link-hover-color:      #fff;
-@badge-bg:                    @gray-light;
-
-//** Badge text color in active nav link
-@badge-active-color:          @link-color;
-//** Badge background color in active nav link
-@badge-active-bg:             #fff;
-
-@badge-font-weight:           bold;
-@badge-line-height:           1;
-@badge-border-radius:         10px;
-
-
-//== Breadcrumbs
-//
-//##
-
-@breadcrumb-padding-vertical:   8px;
-@breadcrumb-padding-horizontal: 15px;
-//** Breadcrumb background color
-@breadcrumb-bg:                 #f5f5f5;
-//** Breadcrumb text color
-@breadcrumb-color:              #ccc;
-//** Text color of current page in the breadcrumb
-@breadcrumb-active-color:       @gray-light;
-//** Textual separator for between breadcrumb elements
-@breadcrumb-separator:          "/";
-
-
-//== Carousel
-//
-//##
-
-@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
-
-@carousel-control-color:                      #fff;
-@carousel-control-width:                      15%;
-@carousel-control-opacity:                    .5;
-@carousel-control-font-size:                  20px;
-
-@carousel-indicator-active-bg:                #fff;
-@carousel-indicator-border-color:             #fff;
-
-@carousel-caption-color:                      #fff;
-
-
-//== Close
-//
-//##
-
-@close-font-weight:           bold;
-@close-color:                 #000;
-@close-text-shadow:           0 1px 0 #fff;
-
-
-//== Code
-//
-//##
-
-@code-color:                  #c7254e;
-@code-bg:                     #f9f2f4;
-
-@kbd-color:                   #fff;
-@kbd-bg:                      #333;
-
-@pre-bg:                      #f5f5f5;
-@pre-color:                   @gray-dark;
-@pre-border-color:            #ccc;
-@pre-scrollable-max-height:   340px;
-
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-@component-offset-horizontal: 180px;
-//** Text muted color
-@text-muted:                  @gray-light;
-//** Abbreviations and acronyms border color
-@abbr-border-color:           @gray-light;
-//** Headings small color
-@headings-small-color:        @gray-light;
-//** Blockquote small color
-@blockquote-small-color:      @gray-light;
-//** Blockquote font size
-@blockquote-font-size:        (@font-size-base * 1.25);
-//** Blockquote border color
-@blockquote-border-color:     @gray-lighter;
-//** Page header border color
-@page-header-border-color:    @gray-lighter;
-//** Width of horizontal description list titles
-@dl-horizontal-offset:        @component-offset-horizontal;
-//** Point at which .dl-horizontal becomes horizontal
-@dl-horizontal-breakpoint:    @grid-float-breakpoint;
-//** Horizontal line color.
-@hr-border:                   @gray-lighter;
diff --git a/haitidata/static/less/bootstrap/wells.less b/haitidata/static/less/bootstrap/wells.less
deleted file mode 100755
index 15d072b..0000000
--- a/haitidata/static/less/bootstrap/wells.less
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Wells
-// --------------------------------------------------
-
-
-// Base class
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: @well-bg;
-  border: 1px solid @well-border;
-  border-radius: @border-radius-base;
-  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
-  blockquote {
-    border-color: #ddd;
-    border-color: rgba(0,0,0,.15);
-  }
-}
-
-// Sizes
-.well-lg {
-  padding: 24px;
-  border-radius: @border-radius-large;
-}
-.well-sm {
-  padding: 9px;
-  border-radius: @border-radius-small;
-}
diff --git a/haitidata/static/less/fonts.less b/haitidata/static/less/fonts.less
deleted file mode 100755
index b3eeaaf..0000000
--- a/haitidata/static/less/fonts.less
+++ /dev/null
@@ -1,28 +0,0 @@
-/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on June 1, 2017 */
-
-@font-face {
-    font-family: 'Fira Sans';
-    src: url('../fonts/firasans-light-webfont.woff2') format('woff2'),
-         url('../fonts/firasans-light-webfont.woff') format('woff'),
-         url('../fonts/firasans-light.otf') format("opentype");
-    font-weight: 200;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Fira Sans';
-    src: url('../fonts/firasans-book-webfont.woff2') format('woff2'),
-         url('../fonts/firasans-book-webfont.woff') format('woff'),
-         url('../fonts/firasans-book.otf') format("opentype");
-    font-weight: 400;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'Fira Sans';
-    src: url('../fonts/firasans-bold-webfont.woff2') format('woff2'),
-         url('../fonts/firasans-bold-webfont.woff') format('woff'),
-         url('../fonts/firasans-bold.otf') format("opentype");
-    font-weight: 700;
-    font-style: normal;
-}
diff --git a/haitidata/static/less/haitidata.less b/haitidata/static/less/haitidata.less
deleted file mode 100755
index 4e0adef..0000000
--- a/haitidata/static/less/haitidata.less
+++ /dev/null
@@ -1,2054 +0,0 @@
-@import "bootstrap";
-@import "variables";
-@import "fonts";
-@import "../css/font-awesome.min.css";
-@import "../css/thinkhazard.css";
-/* Basics
------------------------ */
-html {
-	-webkit-font-smoothing: antialiased !important;
-}
-
-body {
-	background: @gray-darker;
-	font-family: @font-family-sans-serif;
-	font-size: @font-size-base;
-	padding-top: 60px;
-}
-
-a {
-	color: @brand-primary;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-	font-weight: @headings-font-weight;
-}
-
-select {
-	background: white;
-	border: 1px solid @gray-light;
-	height: 30px;
-	line-height: 30px;
-}
-
-code {
-	background-color: @gray-lighter;
-	color: @brand-info;
-	white-space: pre-wrap;
-	/* css-3 */
-	white-space: -moz-pre-wrap;
-	/* Mozilla, since 1999 */
-	white-space: -pre-wrap;
-	/* Opera 4-6 */
-	white-space: -o-pre-wrap;
-	/* Opera 7 */
-	word-wrap: break-word;
-	/* Internet Explorer 5.5+ */
-}
-
-form {
-	label {
-		margin-right: 2.5em;
-	}
-
-	input {
-		/*border: 1px solid @gray;*/
-		padding: 5px;
-	}
-}
-/* ------ Nav
------------------------------- */
-.navbar {
-	margin-bottom: 0;
-
-	.toolbar {
-		margin-left: 1em;
-	}
-}
-
-.navbar-default {
-	background: white;
-	border: 0;
-	box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
-
-	.navbar-nav > li > a {
-		color: @gray-dark;
-		font-weight: 400;
-		padding-top: 25px;
-		padding-bottom: 25px;
-
-		&:hover {
-			color: @brand-primary;
-		}
-	}
-}
-
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:focus,
-.navbar-default .navbar-nav > .open > a:hover {
-	background-color: @brand-primary;
-	color: white;
-}
-
-.navbar-nav {
-	.dropdown-menu {
-		background-color: @brand-primary;
-		border-top: 1px solid @brand-primary;
-
-		a {
-			color: white;
-		}
-
-		li a {
-			&:hover {
-				background-color: darken(@brand-primary, 10%);
-				color: white;
-			}
-		}
-
-		.divider {
-			background-color: darken(@brand-primary, 10%);
-		}
-	}
-
-	.search {
-		left: 15px;
-		position: relative;
-		color: #444;
-		top: 20px;
-		margin-right: 25px;
-
-		.fa-search {
-			position: absolute;
-			top: 8px;
-			left: 10px;
-		}
-	}
-
-	.search input {
-		background: @gray-lighter;
-		width: 120px;
-		height: 32px;
-		border: 1px solid @gray-lighter;
-		border-radius: 5px;
-		outline-width: 0;
-		text-indent: 32px;
-		-webkit-transition: width 0.2s;
-		transition: width 0.2s;
-
-		&:focus {
-			width: 240px;
-		}
-	}
-
-	.avatar img {
-		border-radius: 50%;
-		margin-bottom: -15px;
-		margin-right: 10px;
-		margin-top: -15px;
-		height: 42px;
-		width: 42px;
-	}
-
-	.fa-angle-down {
-		margin-left: 10px;
-	}
-}
-
-.navbar-brand {
-	background: url("../img/logo.png") 0 12px no-repeat;
-	background-size: 100%;
-	margin-right: 2em;
-	text-indent: -9999px;
-	height: 65px;
-	width: 200px;
-}
-
-.navbar-collapse {
-	max-height: none;
-}
-
-.navbar-header {
-	i {
-		color: @brand-primary;
-		font-size: 2em;
-	}
-
-	button {
-		border: 0;
-		margin-top: 0.75em;
-	}
-}
-/* ------ Layout
------------------------------- */
-header {
-	background: @brand-primary;
-	color: white;
-	margin-bottom: 2em;
-	padding-top: 1em;
-	padding-bottom: 1em;
-
-	.btn-primary {
-		background: darken(@brand-primary, 10%);
-		border: 1px solid darken(@brand-primary, 10%);
-
-		&:hover {
-			background: darken(@brand-primary, 15%);
-		}
-	}
-
-	.btn-icon {
-		background: darken(@brand-primary, 15%);
-		border: 1px solid darken(@brand-primary, 15%);
-
-		&:hover {
-			background: darken(@brand-primary, 20%);
-		}
-	}
-}
-
-#wrap {
-	background: lighten(@gray-lighter, 5%);
-	padding-bottom: 2.5em;
-	width: 100%;
-}
-/* ------ Article
------------------------------- */
-article.tab-pane {
-	padding: 20px 0;
-}
-
-.no-style-list {
-	list-style-type: none;
-	margin-top: 20px;
-}
-
-.dl-horizontal dt {
-	text-overflow: clip;
-	white-space: normal;
-	overflow: hidden;
-}
-
-.page-title {
-	display: block;
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-}
-
-section#subheader {
-	background: white;
-	/*box-shadow: 1px 1px 2px rgba(0,0,0,0.1);*/
-	border-bottom: 1px solid @gray-lighter;
-	margin-bottom: 1em;
-	margin-top: -2em;
-	padding-bottom: 0.4em;
-	padding-top: 0;
-
-	p {
-		color: @gray;
-		display: inline-block;
-	}
-
-	.btn-group {
-		margin-top: -1em;
-	}
-}
-/* ------ Footer
------------------------------- */
-section#contact {
-	background: darken(@brand-info, 20%);
-	color: white;
-	padding-bottom: 3em;
-	padding-top: 1em;
-
-	h3 {
-		font-weight: 400;
-	}
-}
-
-footer {
-	background: @gray-darker;
-	color: white;
-	padding-bottom: 3em;
-	padding-top: 2em;
-
-	a {
-		color: @brand-primary;
-	}
-
-	img {
-		margin-right: -10px;
-		width: 50%;
-	}
-
-	select {
-		color: @gray-darker;
-	}
-}
-/* ------ Home
------------------------------- */
-.home {
-	#wrap {
-		margin-top: 0;
-		padding-bottom: 0;
-	}
-
-	.jumbotron {
-		background: @brand-primary;
-		/*background: linear-gradient( rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2) ), url('../img/jumbotron.jpg') no-repeat;*/
-		/*background: @brand-primary url('../img/haiti.png') no-repeat;
-		background-position: right center;
-		background-size: 50%; */
-		color: white;
-		margin-bottom: 0;
-		padding: 5em 0;
-		text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
-
-		a {
-			color: @gray-darker;
-		}
-
-		p {
-			font-weight: 400;
-			margin-bottom: 0;
-		}
-
-		.btn-default {
-			background: rgba(0,0,0,0.4);
-			border: 2px solid white;
-			color: white;
-			font-weight: 600;
-			margin-top: 1em;
-			min-width: 320px;
-
-			&:hover {
-				background: rgba(128,0,0,0.4);
-			}
-		}
-	}
-
-	.big-search {
-		background: @gray-dark;
-		color: white;
-
-		h1,
-		p {
-			text-align: center;
-		}
-		padding-bottom: 3em;
-		padding-top: 1em;
-
-		a {
-			color: @brand-primary;
-		}
-
-		.search {
-			left: 0;
-			position: relative;
-			color: #444;
-			top: 20px;
-			padding-bottom: 2em;
-			margin: auto;
-			width: 50%;
-		}
-
-		.search input {
-			width: 100%;
-			height: 56px;
-			border: 1px solid @gray-dark;
-			border-radius: 5px;
-			outline-width: 0;
-			font-size: 1.5em;
-		}
-
-		.search input {
-			text-indent: 64px;
-		}
-
-		.search .fa-search {
-			position: absolute;
-			top: 10px;
-			left: 15px;
-		}
-
-		.btn-default {
-			background: transparent;
-			border: none;
-
-			&:hover {
-				text-decoration: underline;
-			}
-		}
-	}
-
-	#datasets {
-		background: @brand-primary;
-		color: white;
-		padding: 1em 0;
-
-		p {
-			font-size: 14px;
-		}
-
-		h4 {
-			text-transform: uppercase;
-			font-size: 14px;
-		}
-
-		a {
-			color: white;
-
-			&:hover {
-				text-decoration: none;
-			}
-
-			.category {
-				background: @brand-primary;
-				border-radius: 4px;
-				margin: 0 -15px;
-				padding: 2em 0;
-
-				&:hover {
-					background: @link-hover-color;
-				}
-			}
-
-			span {
-				font-size: 4em;
-			}
-		}
-	}
-
-	#hazards {
-		background: @gray-darker;
-		color: white;
-		padding: 2em 0 3em;
-		text-align: center;
-		h2 {
-			margin-bottom: 1em;
-		}
-		.keywords {
-			border-radius: 0.6em;
-			color: white;
-			&:hover {
-				background: @brand-primary;
-				color: white;
-				text-decoration: none;
-				        transition: 1s all;
-				-webkit-transition: 1s all;
-				   -moz-transition: 1s all;
-				     -o-transition: 1s all;
-				    -ms-transition: 1s all;
-			}
-		}
-		.keywords a {
-			color: white;
-			&:hover {
-				background: @brand-primary;
-				color: white;
-				text-decoration: none;
-			}
-		}
-		span {
-			font-size: 4em;
-		}
-	}
-
-	#imagery {
-			background: linear-gradient( rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2) ), url('../img/jumbotron.jpg') no-repeat;
-			background-position: center;
-			background-size: cover;
-			color: white;
-			margin-bottom: 0;
-			padding: 5em 0;
-			text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
-			h3 {
-				padding-top: 2em;
-			}
-
-			a {
-				color: @gray-darker;
-			}
-
-			p {
-				font-weight: 400;
-				margin-bottom: 0;
-			}
-			.btn-default {
-				background: rgba(0, 0, 0, 0.4);
-				color: white;
-				text-shadow: none;
-				margin-top: 8px;
-				&:hover {
-					background: @brand-primary;
-					border-color: darken(@brand-primary, 20%);
-				}
-			}
-	}
-
-	#showcase {
-		background: @gray-lighter;
-		padding-bottom: 2em;
-		padding-top: 1em;
-		text-align: center;
-
-		.col-md-3 {
-			padding: 2em 1em;
-
-			img {
-				box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.125);
-				height: 180px;
-				width: 100%;
-			}
-		}
-
-		p {
-			font-size: 18px;
-		}
-	}
-
-	#osm {
-		background: linear-gradient( to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 50%, @brand-primary 50%, @brand-primary 100% ), url("../img/osm-02.jpg") no-repeat;
-		/*background-size: cover;*/
-		min-height: 320px;
-		padding: 0;
-
-		.col-md-8 {
-			background: @brand-primary;
-			color: white;
-			min-height: 320px;
-			padding: 1em 2em;
-
-			.btn-primary {
-				border-color: white;
-				width: 160px;
-			}
-		}
-
-		p {
-			font-size: 18px;
-		}
-	}
-}
-/* autocomplete
-------------------------*/
-.yourlabs-autocomplete {
-	top: 100%;
-}
-
-.input-group .yourlabs-autocomplete {
-	top: 30px !important;
-}
-/* Items
------------------------ */
-.actions, .filter {
-	.fa {
-		margin-right: 8px;
-	}
-
-	.input-group {
-		.fa {
-			margin-right: 0;
-		}
-	}
-}
-
-.items-list {
-	.btn {
-		margin-right: 5px;
-		margin-top: 10px;
-	}
-
-	.item-info {
-		border-top: 1px solid @gray-lighter;
-	}
-	padding: 10px 0;
-
-	h4 {
-		font-weight: 400;
-		display: block;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-
-		a {
-			color: @text-color;
-
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			};
-		}
-	}
-
-	.owner {
-		color: @text-color;
-		font-size: 14px;
-
-		a {
-			color: @text-color;
-
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			}
-		}
-	}
-
-	.thumb {
-		img {
-			border: 1px solid @gray-lighter;
-			width: 100%;
-		}
-	}
-
-	.abstract {
-		color: @gray-light;
-		font-weight: 300;
-		min-height: 80px;
-	}
-
-	.actions {
-		color: @gray-light;
-		font-weight: 300;
-
-		i {
-			margin-right: 0.75em;
-		}
-
-		a {
-			color: @gray-light;
-			margin-right: 0.5em;
-
-			&:hover {
-				color: @gray;
-				text-decoration: none;
-			};
-		}
-	}
-}
-/* Layers
------------------------ */
-.item-container {
-	padding: 1em;
-}
-
-.profile-avatar {
-	background: white;
-	border: 1px solid @gray-light;
-	padding: 0;
-
-	h5 a {
-		color: @text-color;
-		display: block;
-		margin-bottom: -0.5em;
-		margin-top: 1em;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-
-		&:hover {
-			color: @brand-danger;
-			text-decoration: none;
-		}
-
-		i {
-			margin-left: 0.75em;
-
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			};
-		}
-	}
-
-	.list-inline {
-		margin: 0.5em 0;
-	}
-}
-
-.item-thumb {
-	padding-left: 0;
-	padding-right: 0;
-	img {
-		width: 100%;
-	}
-	.cnigs-logo {
-		border-radius: 50%;
-		position: absolute;
-		top: 5px;
-		right: 5px;
-		height: 42px;
-		width: 42px;
-		z-index: 99;
-	}
-}
-
-.item-details {
-	background: white;
-	color: @text-color;
-	position: relative;
-	height: 200px;
-  h4 {
-		margin-bottom: 0.25em;
-		margin-top: 0.25em;
-	}
-	p { margin-bottom: 0.25em; }
-	p.abstract {
-		font-size: 0.875em;
-	}
-	.item-meta {
-		font-size: 0.75em;
-		margin-top: 1em;
-		.item-category {
-			text-transform: uppercase;
-		}
-		a {
-			color: @gray-darker;
-		}
-	}
-	.btn-xs {
-		border-color: @gray-lighter;
-		border-bottom-right-radius: 0;
-		border-top-left-radius: 0;
-		margin-right: -16px;
-		margin-top: -1px;
-		padding: 0.25em 0.5em;
-	}
-	.item-items {
-		border-top: 1px solid @gray-lighter;
-		position: absolute;
-		bottom: 0;
-		font-size: 0.875em;
-		ul {
-			margin: 0 0 0 -15px;
-			padding: 0.5em;
-
-			i {
-				margin-right: 0.5em;
-			}
-		}
-	}
-}
-
-.detail-page-actions {
-	margin-top: 20px;
-
-	i {
-		padding-right: 3px;
-	}
-}
-
-.layer-actions {
-	.detail-page-actions;
-}
-
-.edit-modal {
-	text-align: center;
-}
-
-.arcgis-legend > li {
-	text-align: right;
-}
-
-.arcgis-legend > li > img {
-	padding-right: 25px;
-}
-
-.grid-spacer {
-	margin-top: 30px;
-}
-
-#accordion {
-	.panel {
-		border-radius: 0;
-		border-top: 2px solid @gray-light;
-		line-height: 1em;
-	}
-	.panel-heading {
-		background: none;
-		border: 0;
-	}
-	.panel-body {
-		img {
-			margin-bottom: 1em;
-		}
-		small {
-		color: @gray;
-		font-size: 0.825em;
-		}
-		form {
-			font-size: 0.825em;
-			.form-control {
-				background: none;
-				color: @gray-dark;
-				font-size: 0.825em;
-				height: 24px;
-				line-height: 1;
-				-webkit-box-shadow: none;
-				        box-shadow: none;
-			}
-		}
-	}
-}
-
-#create-chart {
-	small {
-		color: @gray;
-		font-size: 0.825em;
-	}
-	form {
-		font-size: 0.825em;
-		.form-control {
-			background: none;
-			color: @gray-dark;
-			font-size: 0.825em;
-			height: 24px;
-			line-height: 1;
-			-webkit-box-shadow: none;
-				      box-shadow: none;
-		}
-	}
-}
-
-
-/* ------ OSGeo Importer
------------------------------- */
-body.importer {
-	h4 {
-		margin-bottom: 1.5em;
-	}
-	.well{
-		background: white;
-		border: 1px solid @gray-light;
-		padding: 1.25em 1.5em 0.5em 1em;
-		p {
-			line-height: 0.5em;
-		}
-		hr {
-			margin: 0.5em 0;
-		}
-		.layer-in-upload {
-			background-color: white;
-			padding: 0.5em;
-		}
-		.table-condensed {
-			font-size: 0.75em;
-		}
-	}
-}
-
-/* Control items
------------------------ */
-.controls {
-	width: 320px;
-}
-
-.controls > div,
-.controls > input,
-.controls > select,
-.controls > textarea {
-	width: 320px;
-}
-/* Maps
------------------------ */
-.map-actions {
-	.detail-page-actions;
-}
-/* Documents
------------------------ */
-.documents-actions {
-	.detail-page-actions;
-}
-/* People
------------------------ */
-.profile-container {
-	padding: 1em;
-}
-
-.profile-avatar {
-	background: white;
-	border: 1px solid @gray-lighter;
-	padding: 0;
-
-	h5 a {
-		color: @text-color;
-		display: block;
-		margin-bottom: -0.5em;
-		margin-top: 1em;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-
-		&:hover {
-			color: @brand-danger;
-			text-decoration: none;
-		}
-
-		i {
-			margin-left: 0.75em;
-
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			};
-		}
-	}
-
-	.profile-items {
-		border-top: 1px solid @gray-lighter;
-		color: @gray;
-
-		i {
-			margin-left: 0;
-			margin-right: 0.125em;
-
-			a {
-				&:hover {
-					color: @brand-danger;
-					text-decoration: none;
-				};
-			}
-		}
-
-		.list-inline {
-			margin: 0.5em 0;
-		}
-	}
-
-	li a {
-		color: @gray;
-		margin-right: 0.5em;
-
-		&:hover {
-			color: @brand-danger;
-			text-decoration: none;
-		};
-	}
-
-	img {
-		margin: 0;
-		width: 100%;
-	}
-}
-
-.profile-image {
-	padding-left: 0;
-	padding-right: 0;
-
-	img {
-		width: 100%;
-	}
-}
-
-.profile-details {
-	background: white;
-	color: @text-color;
-
-	.group-logo {
-		margin: 0.5em;
-		padding: 0;
-
-		img {
-			width: 60px;
-		}
-	}
-}
-/* ------ Search
------------------------------- */
-.btn-tools {
-	font-size: 0.75em;
-}
-
-nav.filter {
-	h4 {
-		background: @gray-dark;
-		font-size: 14px;
-		font-weight: 600;
-		padding: 10px 0;
-		text-transform: uppercase;
-		border-radius: 3px;
-		a {
-			color: white;
-		}
-		a.toggle {
-			text-decoration: none;
-		}
-		i {
-			margin-left: 8px;
-		}
-	}
-	li a {
-		color: @gray;
-	}
-	.active {
-		color: @brand-primary;
-		.badge {
-			background: @brand-primary;
-		}
-	}
-
-	.closed {
-		display: none;
-	}
-
-	li a {
-		border-bottom: 1px solid @gray-lighter;
-		cursor: pointer;
-		font-size: 14px;
-		padding: 5px 10px;
-	}
-}
-
-.selections {
-	h5 {
-		font-weight: 400;
-	}
-
-	.thumb {
-		float: left;
-	}
-}
-
-#sort {
-	cursor: pointer;
-
-	a {
-		color: @gray-light;
-	}
-
-	.selected {
-		font-weight: 700;
-	}
-}
-/* Groups
------------------------ */
-.group-container {
-	padding: 1em;
-}
-
-.group-avatar {
-	border: 1px solid @gray-lighter;
-	padding: 0;
-
-	h5 a {
-		color: @text-color;
-		display: block;
-		margin-bottom: -0.5em;
-		margin-top: 1em;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-
-		&:hover {
-			color: @brand-danger;
-			text-decoration: none;
-		}
-
-		i {
-			margin-left: 0.75em;
-
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			};
-		}
-	}
-}
-
-.group-items {
-	border-top: 1px solid @gray-lighter;
-	color: @gray;
-
-	i {
-		margin-left: 0;
-		margin-right: 0.125em;
-
-		a {
-			&:hover {
-				color: @brand-danger;
-				text-decoration: none;
-			};
-		}
-	}
-
-	.list-inline {
-		margin: 0.5em 0;
-	}
-}
-
-.group-image {
-	height: 120px;
-	overflow: hidden;
-}
-
-.group-container {
-	.group-logo {
-		padding: 1em 0;
-		width: 100%;
-	}
-}
-
-.group-details {
-	.group-logo img {
-		width: 100%;
-	}
-}
-
-/* Tutorials
------------------------ */
-span#overview, span#filters, span#clip,
-span#share, span#odk, span#styling,
-span#graphs, span#maps, span#users,
-span#rancher {
-	display: block;
-	position: relative;
-	top: -76px;
-	visibility: hidden;
-}
-
-/* Upload Layers
------------------------ */
-#drop-zone {
-	background: @gray-lighter;
-	margin-bottom: 10px;
-	padding: 5px;
-	border: 2px dashed @gray-light;
-
-	h3 {
-		color: @gray-light;
-		margin: 20px 0;
-		text-align: center;
-
-		i {
-			font-size: 3em;
-		}
-	}
-}
-
-#clear-button,
-#upload-button {
-	margin-top: 20px;
-}
-/* Upload Documents
------------------------ */
-#upload_form {
-	input[type="text"] {
-		display: block;
-		margin: 0;
-		width: 480px;
-		appearance: none;
-		box-shadow: none;
-		border-radius: none;
-		transition: box-shadow 0.3s, border 0.3s;
-	}
-
-	input[type="text"]:focus {
-		border: solid 1px #707070;
-		box-shadow: 0 0 5px 1px #969696;
-		outline: none;
-	}
-
-	#id_title {}
-
-	#id_doc_file {
-		padding: 0.5em;
-		width: 480px;
-	}
-
-	#id_doc_url {
-		display: block;
-		width: 480px;
-	}
-
-	#s2id_resource {
-		display: block;
-		width: 480px;
-	}
-
-	.helptext {}
-}
-@media (max-width: 991px) {
-	#upload_form {
-		input[type="text"] {
-			width: 360px;
-		}
-
-		#id_doc_file,
-		#id_doc_url,
-		#s2id_resource {
-			width: 360px;
-		}
-	}
-}
-/* Upload Time
------------------------ */
-/*#timeForm label {
-  display: inline;
-  }
-.formSection {
-  margin-bottom: 1em;
- }
-    .right input, .right select {
-    }
-    .left input {
-        line-height: 2em;
-    }
-    form input, form select {
-        font-size: small;
-    }
-    form label {
-        line-height: 2em;
-    }
-    .clearfix:after {
-      content: ".";
-      display: block;
-      height: 0;
-      clear: both;
-      visibility: hidden;
-    }
-    .clearfix {
-      display: inline-block;
-    }
-    * html .clearfix {
-      height: 1%;
-    } /* Hides from IE-mac \*/
-/*.clearfix {
-      display: block;
-    }
-    #format_input input {
-        width:8em;
-    }
-    #timehelp p {
-        color: black !important;
-    }
-    #timehelp code {
-        background: @gray-light;
-    }*/
-/* Etc
------------------------ */
-.rotate-45 {
-	-webkit-transform: rotate(45deg);
-	-moz-transform: rotate(45deg);
-	-ms-transform: rotate(45deg);
-	-o-transform: rotate(45deg);
-	transform: rotate(45deg);
-	/*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/
-}
-
-.select2-container-multi .select2-choices .select2-search-field input {
-	font-family: @font-family-sans-serif;
-	height: auto;
-}
-
-.datepicker {
-	border-radius: 0;
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-}
-
-.filter input.datepicker {
-	width: 100%;
-}
-
-#composerCart {
-	font-size: 14px;
-	.list-group i {
-		margin-right: 0;
-	}
-}
-
-.selections {
-	margin-top: 1em;
-}
-
-.form-horizontal .form-group {
-	margin-left: 0;
-	margin-right: 0;
-}
-
-.comment {
-	padding: 1em 0 0.5em;
-
-	.avatar img {
-		border-radius: 50%;
-	}
-
-	small {
-		font-weight: bold;
-		color: #777;
-		margin-left: 10px;
-	}
-
-	button,
-	p {
-		margin-left: 58px;
-		margin-top: -0.5em;
-	}
-}
-
-.list-group-item {
-	.avatar {
-		img {
-			border-radius: 50%;
-			margin-right: 0.5em;
-		}
-	}
-}
-/* Activity
-   ----------------------------- */
-.no-style-list {
-	list-style-type: none;
-	margin-top: 20px;
-}
-
-.activity-item {
-	border-bottom: 1px solid @gray-light;
-	border-left: 1px solid @gray-light;
-	color: @gray-light;
-	margin-top: -10px;
-	padding: 20px 18px;
-
-	.comment {
-		content: "\f086";
-	}
-
-	.comment:before {
-		content: "\f086";
-	}
-
-	.delete {
-		content: "\f014";
-	}
-
-	.delete:before {
-		content: "\f014";
-	}
-
-	.edit {
-		content: "\f14b";
-	}
-
-	.edit:before {
-		content: "\f14b";
-	}
-
-	.layer {
-		content: "\f096";
-		-webkit-transform: rotate(45deg);
-		-moz-transform: rotate(45deg);
-		-ms-transform: rotate(45deg);
-		-o-transform: rotate(45deg);
-		transform: rotate(45deg);
-		/*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/
-	}
-
-	.layer:before {
-		content: "\f096";
-	}
-
-	.map {
-		content: "\f041";
-	}
-
-	.map:before {
-		content: "\f041";
-	}
-
-	.upload {
-		content: "\f093";
-	}
-
-	.upload:before {
-		content: "\f093";
-	}
-}
-
-.icon-activity {
-	background: @gray-light;
-	-moz-border-radius: 20px;
-	-webkit-border-radius: 20px;
-	border-radius: 20px;
-	border: 2px solid white;
-	color: white;
-	float: left;
-	font-family: FontAwesome;
-	font-weight: normal;
-	font-size: 1.30em;
-	font-style: normal;
-	height: 35px;
-	line-height: 1.25em;
-	margin: 0 10px 10px -35px;
-	padding: 4px;
-	text-align: center;
-	text-decoration: inherit;
-	width: 35px;
-}
-
-.thumb-activity {
-	clear: both;
-	height: 60px;
-
-	img {
-		border: 1px solid @gray;
-		float: left;
-		margin-right: 5px;
-		width: 60px;
-	}
-}
-
-.activity {
-	content: "\f045";
-}
-
-.activity:before {
-	content: "\f045";
-}
-
-.activity-timestamp {
-	margin-top: -10px;
-}
-
-#permission_form .select2-container {
-	width: 250px;
-}
-/* Sign In Modal
------------------------ */
-.form-signin {
-	max-width: 330px;
-	padding: 15px;
-	margin: 0 auto;
-}
-
-.form-signin .checkbox,
-.form-signin .form-signin-heading {
-	margin-bottom: 10px;
-}
-
-.form-signin .checkbox {
-	font-weight: normal;
-}
-
-.form-signin .form-control {
-	position: relative;
-	height: auto;
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	padding: 10px;
-	font-size: 1em;
-}
-
-.form-signin .form-control:focus {
-	z-index: 2;
-}
-
-.form-signin input[type="username"] {
-	margin-bottom: -1px;
-	border-bottom-right-radius: 0;
-	border-bottom-left-radius: 0;
-}
-
-.form-signin input[type="password"] {
-	margin-bottom: 10px;
-	border-top-left-radius: 0;
-	border-top-right-radius: 0;
-}
-
-.modal-body .list-unstyled a {
-	color: @text-color;
-	font-size: 1.14285714em;
-	line-height: 2em;
-
-	i {
-		margin-right: 8px;
-	}
-
-	&:hover {
-		color: @brand-info;
-		text-decoration: none;
-	};
-}
-
-.modal-divider {
-	padding-top: 1px;
-	margin: 5px 1px 6px;
-	border-bottom: 1px solid #e1e8ed;
-}
-
-.list-group {
-	i {
-		margin-right: 8px;
-	}
-}
-/* Media Queries
-   ----------------------------- */
-@media (max-width: 991px) {
-	.navbar-header {
-		float: none;
-	}
-
-	.navbar-toggle {
-		display: block;
-	}
-
-	.navbar-collapse {
-		border-top: 1px solid transparent;
-		box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
-	}
-
-	.navbar-collapse.collapse {
-		display: none!important;
-	}
-
-	.navbar-nav {
-		float: none!important;
-		margin: 7.5px -15px;
-	}
-
-	.navbar-nav > li {
-		float: none;
-	}
-
-	.navbar-nav > li > a {
-		padding-top: 10px;
-		padding-bottom: 10px;
-	}
-	/* since 3.1.0 */
-	.navbar-collapse.collapse.in {
-		display: block!important;
-	}
-
-	.collapsing {
-		overflow: hidden!important;
-	}
-
-	.home .navbar-inverse {
-		background-color: @gray-dark;
-	}
-
-	.navbar-inverse {
-		.navbar-nav > li > a {
-			padding-bottom: 0.75em;
-			padding-top: 0.75em;
-		}
-
-		.navbar-nav .search {
-			padding-bottom: 0.75em;
-			top: 0;
-
-			input {
-				width: 100%;
-			}
-		}
-	}
-}
-
-#member_form_container .select2-container {
-	padding: 0;
-}
-
-.table-user-profile-attribute {
-	font-weight: bold;
-}
-/* Blog
-   ----------------------------- */
-body.blog {
-	h1 {
-		margin-top: -0.5em;
-	}
-
-	article.box {}
-}
-
-.page-content p {
-	font-size: 1.125em;
-	line-height: 1.5em;
-}
-
-ul.links {
-	margin: 0 0 1.5em;
-	padding: 5px 0;
-
-	.category {
-		text-transform: uppercase;
-	}
-}
-
-ul.links li {
-	color: @gray-light;
-	font-size: 1em;
-	margin-right: 0.875em;
-	display: inline-block;
-}
-
-ul.links li i {}
-
-ul.links li a {}
-
-ul.links li ul {
-	display: inline;
-	padding: 0;
-}
-
-ul.sidebar {
-	border-bottom: 1px solid @gray-lighter;
-	border-left: 1px solid @gray-lighter;
-	padding: 1.5em;
-	margin-bottom: 0;
-	list-style: none;
-}
-
-ul.sidebar h4 {
-	font-size: 1em;
-	color: @gray-darker;
-	margin-bottom: 1.25em;
-	margin-top: 0;
-}
-
-ul.sidebar li {
-	margin: 0 4px 10px 0;
-	list-style: none;
-}
-
-ul.sidebar li.tag {
-	display: inline-block;
-	background-color: @brand-primary;
-	padding: 3px 10px;
-}
-
-ul.sidebar li.tag a {
-	color: white;
-	font-size: 0.875em;
-}
-
-ul.sidebar li a {
-	font-size: 0.875em;
-	color: @gray-dark;
-}
-
-ul.sidebar ul li i {
-	color: @gray-dark;
-}
-
-ul.sidebar li > ul {
-	padding-left: 0;
-}
-
-ul.sidebar ul li > ul li {
-	padding-left: 1.25em;
-}
-
-a {
-	transition: 0.5s all;
-	-webkit-transition: 0.5s all;
-	-moz-transition: 0.5s all;
-	-o-transition: 0.5s all;
-	-ms-transition: 0.5s all;
-}
-
-a:hover {
-	color: @brand-primary;
-}
-
-.blog_btn {
-	border-radius: 0;
-}
-
-.blog_btn.continue {
-	display: block;
-	margin-bottom: 50px;
-	text-align: right;
-	background-color: transparent;
-	color: @brand-primary;
-	padding: 10px 0;
-}
-
-.blog_btn.continue:focus,
-.blog_btn.continue:hover {
-	text-decoration: none;
-}
-
-.blog_btn.continue:active {
-	outline: inherit;
-}
-
-span img {
-	width: 100%;
-	margin-bottom: 2em;
-}
-
-.responsive-object {
-	padding-bottom: 10px !important;
-}
-/*
-.about {
-	background: @brand-primary none repeat scroll 0 0;
-	margin-bottom: 4em;
-}
-
-.about .title-section {
-	padding: 30px 0 20px;
-}
-
-.about .title-section h1 {
-	font-weight: 400;
-}
-
-.about .title-section h2 {
-	color: #ededed;
-}
-
-.about .title-header a {
-	color: #FFF;
-}
-
-.about .title-header a:focus,
-.about .title-header a:hover {
-	color: #FFF;
-	text-decoration: none;
-}
-*/
-.blog_sidebar {
-	padding: 0 1.5em 0 0;
-}
-
-.blog_sidebar ul > ul {
-	padding: 0;
-}
-
-.blog_sidebar form.search_form {
-	margin-bottom: 0;
-}
-
-.blog_sidebar form.search_form input[type="search"] {
-	width: 100%;
-	border: 1px solid @gray-lighter;
-	padding: 6px 10px;
-}
-
-.blog_sidebar .input-group-btn {
-	background: @brand-primary;
-	-webkit-border-radius: 0 5px 5px 0;
-	-moz-border-radius: 0 5px 5px 0;
-	border-radius: 0 5px 5px 0;
-}
-
-.blog_sidebar .input-group-btn .btn.btn-default {
-	border-color: transparent;
-	background-color: transparent;
-}
-
-.blog_sidebar .input-group-btn .btn.btn-default i {
-	color: white;
-}
-
-.blog_sidebar .rss-sitemap {
-	margin-bottom: 1em;
-	text-align: right;
-}
-
-.blog_sidebar .rss-sitemap a {
-	color: @gray-light;
-	font-size: 0.875em;
-	text-decoration: none;
-}
-
-.blog_sidebar .rss-sitemap i {
-	color: @brand-primary;
-}
-
-.blog_sidebar .rss-sitemap span {
-	font-size: 0.875em;
-	color: @gray-light;
-}
-
-.post-summary {
-	margin-bottom: 1.25em;
-}
-
-.post-summary ul {
-	margin-top: -0.5em;
-	padding: 0;
-}
-
-.post-summary ul li {
-	margin-bottom: 0;
-}
-
-.relatedPosts {
-	margin: 50px 0 100px;
-}
-
-.relatedPosts img {
-	width: 100%;
-	height: auto;
-	margin-bottom: 15px;
-}
-/*RIGHT SIDE*/
-.lateralPosts h4 {
-	margin: 0;
-}
-
-.lateralPosts .boxCircle {
-	width: 80px;
-	height: 80px;
-	-webkit-border-radius: 50%;
-	-moz-border-radius: 50%;
-	border-radius: 50%;
-}
-
-.lateralPosts li {
-	font-size: 0.875em;
-	display: inline-block;
-	color: @gray;
-}
-
-.searchTerm {
-	margin: 10px 0 30px;
-	padding: 20px;
-	background-color: #ededed;
-	color: #666;
-}
-
-.blog_grid {
-	position: relative;
-	border-bottom: 0;
-}
-
-.blog_grid p {
-	color: @gray-dark;
-	font-size: 1em;
-	line-height: 1.5em;
-	margin-top: 1em;
-}
-
-.rich-text {
-	margin-bottom: 5%;
-	margin-top: 10px;
-}
-
-.rich-text h3 {
-	margin-bottom: 10px;
-}
-
-.itemPosts {
-	margin-top: 10px;
-	padding-top: 1em;
-	border-top: 1px solid @gray-lighter;
-}
-
-.itemPosts h3 {
-	font-size: 16px;
-	margin-bottom: 5px;
-}
-
-.itemPosts p {
-	font-size: 15px;
-}
-
-.itemPosts .box.feature a {
-	color: @brand-primary;
-}
-
-.pagination {
-	width: 100%;
-	margin: 30px 0;
-	text-align: center;
-}
-
-.pagination .endless_separator {
-	background: transparent;
-	color: #358c8b;
-	font-size: 18px;
-}
-
-.pagination .endless_page_link,
-.pagination span.endless_page_current {
-	padding: 7px 11px;
-	color: @brand-primary;
-}
-
-.pagination .endless_page_current:active,
-.pagination .endless_page_link:active {
-	/*background: @brand-primary;*/
-}
-
-.pagination span {
-	/*background: @brand-primary;*/
-}
-
-.pagination span strong {
-	/*color: #FFF;*/
-}
-/* Menu */
-.menu li {
-	margin: 0 0 3px;
-}
-
-.menu ul {
-	padding-left: 0;
-}
-
-.menu li a {
-	background-color: #f2f2f2;
-	background-color: rgba(0, 0, 0, .05);
-	color: #1e1e1e;
-	display: block;
-	padding: 9px 9px 9px 60px;
-	position: relative;
-	text-decoration: none;
-	-webkit-transition: all 0.2s linear;
-	transition: all 0.2s linear;
-}
-
-.menu li a:before {
-	background: #e1e1e1;
-	background: rgba(255, 255, 255, .4);
-	bottom: 0;
-	content: "";
-	display: block;
-	left: 45px;
-	position: absolute;
-	top: 0;
-	width: 1px;
-}
-
-.menu li a:hover {
-	background-color: #e9e9e9;
-	background-color: rgba(0, 0, 0, .1);
-	-webkit-transition: all 0.2s linear;
-	transition: all 0.2s linear;
-}
-
-.menu li.active > a {
-	background-color: @brand-primary;
-	color: #fff;
-	-webkit-transition: all 0.2s linear;
-	transition: all 0.2s linear;
-}
-
-.menu li.active > a:before {
-	background: #444;
-	background: rgba(255, 255, 255, .2);
-}
-
-.menu li.parent > a .open-sub {
-	bottom: 0;
-	display: block;
-	left: 0;
-	position: absolute;
-	top: 0;
-	width: 45px;
-}
-
-.menu li.parent > a .open-sub:after,
-.menu li.parent > a .open-sub:before {
-	background: @brand-primary;
-	content: "";
-	display: block;
-	height: 2px;
-	left: 0;
-	margin: 19px 0 0 15px;
-	position: absolute;
-	top: 0;
-	width: 16px;
-}
-
-.menu li.parent > a .open-sub:after {
-	height: 16px;
-	margin: 12px 0 0 22px;
-	width: 2px;
-}
-
-.menu li.parent.active > a .open-sub:after,
-.menu li.parent.active > a .open-sub:before {
-	background: #fff;
-}
-
-.menu li.parent.active > a .open-sub:after {
-	display: none;
-}
-
-.menu .sub {
-	background-color: #f2f2f2;
-	background-color: rgba(0, 0, 0, .05);
-	padding: 7px 0 4px 5px;
-}
-
-.menu .sub li {
-	margin: 0;
-}
-
-.menu .sub a {
-	background: none;
-	color: #7f7f7f;
-	margin: 0;
-	padding: 4px 9px 4px 60px;
-}
-
-.menu .sub a:before {
-	display: none;
-}
-
-.menu .sub a:hover {
-	background-color: #e9e9e9;
-	background-color: rgba(0, 0, 0, .05);
-}
-
-.menu .sub .active > a {
-	background: none;
-	color: #000;
-}
-
-.menu .sub .sub {
-	background: none;
-}
-
-.menu .sub li.parent > a .open-sub {
-	left: 10px;
-}
-
-.menu .sub li.parent > a .open-sub:after,
-.menu .sub li.parent > a .open-sub:before {
-	background: #7f7f7f;
-	margin: 14px 0 0 22px;
-	width: 12px;
-}
-
-.menu .sub li.parent > a .open-sub:after {
-	height: 12px;
-	margin: 9px 0 0 27px;
-	width: 2px;
-}
-
-.menu .sub li {
-	padding: 0;
-}
-
-.menu li > a .item-icon {
-	left: 15px;
-	position: absolute;
-	top: 13px;
-}
-
-.menu li:not(.active) > a .item-icon {
-	opacity: 0.5;
-	filter: alpha(opacity=50);
-}
-@media (max-width: 991px) {
-	.blog_sidebar {
-		padding: 5px 5px 0 20px;
-	}
-}
-@media (max-width: 768px) {
-	.blog_sidebar {
-		padding: 5px 10px 0;
-	}
-}
diff --git a/haitidata/static/less/variables.less b/haitidata/static/less/variables.less
deleted file mode 100755
index 101ee79..0000000
--- a/haitidata/static/less/variables.less
+++ /dev/null
@@ -1,495 +0,0 @@
-//
-// Variables
-// --------------------------------------------------
-//== Colors
-//
-//## Grays for use across Bootstrap.
-@gray-base: #000;
-@gray-darker: #37474F; //
-@gray-dark: #546E7A; //
-@gray: #78909C; //
-@gray-light: #B0BEC5; //
-@gray-lighter: #ECEFF1; //
-//## Brand colors for use across Bootstrap.
-@brand-primary: #FF5722; //Orange
-@brand-success: #27ca3b;
-@brand-info: #1fa0a0;
-@brand-warning: #ff8f31;
-@brand-danger: #af0900; //
-//== Scaffolding
-//
-//## Settings for some of the most global styles.
-//** Background color for ``.
-@body-bg: @gray-lighter; //** Global text color on ``.
-@text-color: @gray-darker; //** Global textual link color.
-@link-color: @brand-primary; //** Link hover color set via `darken()` function.
-@link-hover-color: darken(@link-color, 15%); //** Link hover decoration.
-@link-hover-decoration: underline; //== Typography
-//
-//## Font, line-height, and color for body text, headings, and more.
-@font-family-sans-serif: 'Fira Sans', sans-serif;
-@font-family-serif: Georgia, "Times New Roman", Times, serif; //** Default monospace fonts for ``, ``, and `
`.
-@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base: @font-family-sans-serif;
-@font-size-base: 16px;
-@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
-@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5: @font-size-base;
-@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base: 1.428571429; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
-//** By default, this inherits from the ``.
-@headings-font-family: inherit;
-@headings-font-weight: 700;
-@headings-line-height: 1.1;
-@headings-color: inherit; //== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-//** Load fonts from this directory.
-@icon-font-path: "../fonts/"; //** File name for all font files.
-@icon-font-name: "glyphicons-halflings-regular"; //** Element ID within SVG icon file.
-@icon-font-svg-id: "glyphicons_halflingsregular"; //== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-@padding-base-vertical: 6px;
-@padding-base-horizontal: 12px;
-@padding-large-vertical: 10px;
-@padding-large-horizontal: 16px;
-@padding-small-vertical: 5px;
-@padding-small-horizontal: 10px;
-@padding-xs-vertical: 1px;
-@padding-xs-horizontal: 5px;
-@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
-@line-height-small: 1.5;
-@border-radius-base: 4px;
-@border-radius-large: 6px;
-@border-radius-small: 3px; //** Global color for active items (e.g., navs or dropdowns).
-@component-active-color: #fff; //** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg: @brand-primary; //** Width of the `border` for generating carets that indicator dropdowns.
-@caret-width-base: 4px; //** Carets increase slightly in size for larger components.
-@caret-width-large: 5px; //== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-//** Padding for ``s and ``s.
-@table-cell-padding: 8px; //** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding: 5px; //** Default background color used for all tables.
-@table-bg: transparent; //** Background color used for `.table-striped`.
-@table-bg-accent: #f9f9f9; //** Background color used for `.table-hover`.
-@table-bg-hover: #f5f5f5;
-@table-bg-active: @table-bg-hover; //** Border color for table and cell borders.
-@table-border-color: #ddd; //== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-@btn-font-weight: normal;
-@btn-default-color: #333;
-@btn-default-bg: #fff;
-@btn-default-border: #ccc;
-@btn-primary-color: #fff;
-@btn-primary-bg: @brand-primary;
-@btn-primary-border: darken(@btn-primary-bg, 5%);
-@btn-success-color: #fff;
-@btn-success-bg: @brand-success;
-@btn-success-border: darken(@btn-success-bg, 5%);
-@btn-info-color: #fff;
-@btn-info-bg: @brand-info;
-@btn-info-border: darken(@btn-info-bg, 5%);
-@btn-warning-color: #fff;
-@btn-warning-bg: @brand-warning;
-@btn-warning-border: darken(@btn-warning-bg, 5%);
-@btn-danger-color: #fff;
-@btn-danger-bg: @brand-danger;
-@btn-danger-border: darken(@btn-danger-bg, 5%);
-@btn-link-disabled-color: @gray-light; // Allows for customizing button radius independently from global border radius
-@btn-border-radius-base: @border-radius-base;
-@btn-border-radius-large: @border-radius-large;
-@btn-border-radius-small: @border-radius-small; //== Forms
-//
-//##
-//** `` background color
-@input-bg: #fff; //** `` background color
-@input-bg-disabled: @gray-lighter; //** Text color for ``s
-@input-color: @gray; //** `` border color
-@input-border: #ccc; // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in CSS.
-@input-border-radius: @border-radius-base; //** Large `.form-control` border radius
-@input-border-radius-large: @border-radius-large; //** Small `.form-control` border radius
-@input-border-radius-small: @border-radius-small; //** Border color for inputs on focus
-@input-border-focus: #66afe9; //** Placeholder text color
-@input-color-placeholder: #999; //** Default `.form-control` height
-@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); //** Large `.form-control` height
-@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); //** Small `.form-control` height
-@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); //** `.form-group` margin
-@form-group-margin-bottom: 15px;
-@legend-color: @gray-dark;
-@legend-border-color: #e5e5e5; //** Background color for textual input addons
-@input-group-addon-bg: @gray-lighter; //** Border color for textual input addons
-@input-group-addon-border-color: @input-border; //** Disabled cursor for form controls and buttons.
-@cursor-disabled: not-allowed; //== Dropdowns
-//
-//## Dropdown menu container and contents.
-//** Background for the dropdown menu.
-@dropdown-bg: #fff; //** Dropdown menu `border-color`.
-@dropdown-border: rgba(0,0,0,.15); //** Dropdown menu `border-color` **for IE8**.
-@dropdown-fallback-border: #ccc; //** Divider color for between dropdown items.
-@dropdown-divider-bg: #e5e5e5; //** Dropdown link text color.
-@dropdown-link-color: @gray-dark; //** Hover color for dropdown links.
-@dropdown-link-hover-color: darken(@gray-dark, 5%); //** Hover background for dropdown links.
-@dropdown-link-hover-bg: #f5f5f5; //** Active dropdown menu item text color.
-@dropdown-link-active-color: @component-active-color; //** Active dropdown menu item background color.
-@dropdown-link-active-bg: @component-active-bg; //** Disabled dropdown menu item background color.
-@dropdown-link-disabled-color: @gray-light; //** Text color for headers within dropdown menus.
-@dropdown-header-color: @gray-light; //** Deprecated `@dropdown-caret-color` as of v3.1.0
-@dropdown-caret-color: #000; //-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-@zindex-navbar: 1000;
-@zindex-dropdown: 1000;
-@zindex-popover: 1060;
-@zindex-tooltip: 1070;
-@zindex-navbar-fixed: 1030;
-@zindex-modal-background: 1040;
-@zindex-modal: 1050; //== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-// Extra small screen / phone
-//** Deprecated `@screen-xs` as of v3.0.1
-@screen-xs: 480px; //** Deprecated `@screen-xs-min` as of v3.2.0
-@screen-xs-min: @screen-xs; //** Deprecated `@screen-phone` as of v3.0.1
-@screen-phone: @screen-xs-min; // Small screen / tablet
-//** Deprecated `@screen-sm` as of v3.0.1
-@screen-sm: 768px;
-@screen-sm-min: @screen-sm; //** Deprecated `@screen-tablet` as of v3.0.1
-@screen-tablet: @screen-sm-min; // Medium screen / desktop
-//** Deprecated `@screen-md` as of v3.0.1
-@screen-md: 992px;
-@screen-md-min: @screen-md; //** Deprecated `@screen-desktop` as of v3.0.1
-@screen-desktop: @screen-md-min; // Large screen / wide desktop
-//** Deprecated `@screen-lg` as of v3.0.1
-@screen-lg: 1200px;
-@screen-lg-min: @screen-lg; //** Deprecated `@screen-lg-desktop` as of v3.0.1
-@screen-lg-desktop: @screen-lg-min; // So media queries don't overlap when required, provide a maximum
-@screen-xs-max: (@screen-sm-min - 1);
-@screen-sm-max: (@screen-md-min - 1);
-@screen-md-max: (@screen-lg-min - 1); //== Grid system
-//
-//## Define your custom responsive grid.
-//** Number of columns in the grid.
-@grid-columns: 12; //** Padding between columns. Gets divided in half for the left and right.
-@grid-gutter-width: 30px; // Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-@grid-float-breakpoint: @screen-sm-min; //** Point at which the navbar begins collapsing.
-@grid-float-breakpoint-max: (@grid-float-breakpoint - 1); //== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-// Small screen / tablet
-@container-tablet: (720px + @grid-gutter-width); //** For `@screen-sm-min` and up.
-@container-sm: @container-tablet; // Medium screen / desktop
-@container-desktop: (940px + @grid-gutter-width); //** For `@screen-md-min` and up.
-@container-md: @container-desktop; // Large screen / wide desktop
-@container-large-desktop: (1140px + @grid-gutter-width); //** For `@screen-lg-min` and up.
-@container-lg: @container-large-desktop; //== Navbar
-//
-//##
-// Basics of a navbar
-@navbar-height: 50px;
-@navbar-margin-bottom: @line-height-computed;
-@navbar-border-radius: @border-radius-base;
-@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
-@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
-@navbar-collapse-max-height: 340px;
-@navbar-default-color: #777;
-@navbar-default-bg: #f8f8f8;
-@navbar-default-border: darken(@navbar-default-bg, 6.5%); // Navbar links
-@navbar-default-link-color: #777;
-@navbar-default-link-hover-color: #333;
-@navbar-default-link-hover-bg: transparent;
-@navbar-default-link-active-color: #555;
-@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
-@navbar-default-link-disabled-color: #ccc;
-@navbar-default-link-disabled-bg: transparent; // Navbar brand label
-@navbar-default-brand-color: @navbar-default-link-color;
-@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
-@navbar-default-brand-hover-bg: transparent; // Navbar toggle
-@navbar-default-toggle-hover-bg: #ddd;
-@navbar-default-toggle-icon-bar-bg: #888;
-@navbar-default-toggle-border-color: #ddd; //=== Inverted navbar
-// Reset inverted navbar basics
-@navbar-inverse-color: lighten(@gray-light, 15%);
-@navbar-inverse-bg: #222;
-@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); // Inverted navbar links
-@navbar-inverse-link-color: lighten(@gray-light, 15%);
-@navbar-inverse-link-hover-color: #fff;
-@navbar-inverse-link-hover-bg: transparent;
-@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
-@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
-@navbar-inverse-link-disabled-color: #444;
-@navbar-inverse-link-disabled-bg: transparent; // Inverted navbar brand label
-@navbar-inverse-brand-color: @navbar-inverse-link-color;
-@navbar-inverse-brand-hover-color: #fff;
-@navbar-inverse-brand-hover-bg: transparent; // Inverted navbar toggle
-@navbar-inverse-toggle-hover-bg: #333;
-@navbar-inverse-toggle-icon-bar-bg: #fff;
-@navbar-inverse-toggle-border-color: #333; //== Navs
-//
-//##
-//=== Shared nav styles
-@nav-link-padding: 10px 15px;
-@nav-link-hover-bg: @gray-lighter;
-@nav-disabled-link-color: @gray-light;
-@nav-disabled-link-hover-color: @gray-light; //== Tabs
-@nav-tabs-border-color: #ddd;
-@nav-tabs-link-hover-border-color: @gray-lighter;
-@nav-tabs-active-link-hover-bg: @body-bg;
-@nav-tabs-active-link-hover-color: @gray;
-@nav-tabs-active-link-hover-border-color: #ddd;
-@nav-tabs-justified-link-border-color: #ddd;
-@nav-tabs-justified-active-link-border-color: @body-bg; //== Pills
-@nav-pills-border-radius: @border-radius-base;
-@nav-pills-active-link-hover-bg: @component-active-bg;
-@nav-pills-active-link-hover-color: @component-active-color; //== Pagination
-//
-//##
-@pagination-color: @link-color;
-@pagination-bg: #fff;
-@pagination-border: #ddd;
-@pagination-hover-color: @link-hover-color;
-@pagination-hover-bg: @gray-lighter;
-@pagination-hover-border: #ddd;
-@pagination-active-color: #fff;
-@pagination-active-bg: @brand-primary;
-@pagination-active-border: @brand-primary;
-@pagination-disabled-color: @gray-light;
-@pagination-disabled-bg: #fff;
-@pagination-disabled-border: #ddd; //== Pager
-//
-//##
-@pager-bg: @pagination-bg;
-@pager-border: @pagination-border;
-@pager-border-radius: 15px;
-@pager-hover-bg: @pagination-hover-bg;
-@pager-active-bg: @pagination-active-bg;
-@pager-active-color: @pagination-active-color;
-@pager-disabled-color: @pagination-disabled-color; //== Jumbotron
-//
-//##
-@jumbotron-padding: 2em;
-@jumbotron-color: inherit;
-@jumbotron-bg: @brand-primary;
-@jumbotron-heading-color: inherit;
-@jumbotron-font-size: ceil((@font-size-base * 1.5));
-@jumbotron-heading-font-size: ceil((@font-size-base * 4.5)); //== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-@state-success-text: #3c763d;
-@state-success-bg: #dff0d8;
-@state-success-border: darken(spin(@state-success-bg, -10), 5%);
-@state-info-text: #31708f;
-@state-info-bg: #d9edf7;
-@state-info-border: darken(spin(@state-info-bg, -10), 7%);
-@state-warning-text: #8a6d3b;
-@state-warning-bg: #fcf8e3;
-@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
-@state-danger-text: #a94442;
-@state-danger-bg: #f2dede;
-@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); //== Tooltips
-//
-//##
-//** Tooltip max width
-@tooltip-max-width: 200px; //** Tooltip text color
-@tooltip-color: #fff; //** Tooltip background color
-@tooltip-bg: #000;
-@tooltip-opacity: 0.9; //** Tooltip arrow width
-@tooltip-arrow-width: 5px; //** Tooltip arrow color
-@tooltip-arrow-color: @tooltip-bg; //== Popovers
-//
-//##
-//** Popover body background color
-@popover-bg: #fff; //** Popover maximum width
-@popover-max-width: 276px; //** Popover border color
-@popover-border-color: rgba(0,0,0,.2); //** Popover fallback border color
-@popover-fallback-border-color: #ccc; //** Popover title background color
-@popover-title-bg: darken(@popover-bg, 3%); //** Popover arrow width
-@popover-arrow-width: 10px; //** Popover arrow color
-@popover-arrow-color: @popover-bg; //** Popover outer arrow width
-@popover-arrow-outer-width: (@popover-arrow-width + 1); //** Popover outer arrow color
-@popover-arrow-outer-color: fadein(@popover-border-color, 5%); //** Popover outer arrow fallback color
-@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); //== Labels
-//
-//##
-//** Default label background color
-@label-default-bg: @gray-light; //** Primary label background color
-@label-primary-bg: @brand-primary; //** Success label background color
-@label-success-bg: @brand-success; //** Info label background color
-@label-info-bg: @brand-info; //** Warning label background color
-@label-warning-bg: @brand-warning; //** Danger label background color
-@label-danger-bg: @brand-danger; //** Default label text color
-@label-color: #fff; //** Default text color of a linked label
-@label-link-hover-color: #fff; //== Modals
-//
-//##
-//** Padding applied to the modal body
-@modal-inner-padding: 15px; //** Padding applied to the modal title
-@modal-title-padding: 15px; //** Modal title line-height
-@modal-title-line-height: @line-height-base; //** Background color of modal content area
-@modal-content-bg: #fff; //** Modal content border color
-@modal-content-border-color: rgba(0,0,0,.2); //** Modal content border color **for IE8**
-@modal-content-fallback-border-color: #999; //** Modal backdrop background color
-@modal-backdrop-bg: #000; //** Modal backdrop opacity
-@modal-backdrop-opacity: 0.5; //** Modal header border color
-@modal-header-border-color: #e5e5e5; //** Modal footer border color
-@modal-footer-border-color: @modal-header-border-color;
-@modal-lg: 900px;
-@modal-md: 600px;
-@modal-sm: 300px; //== Alerts
-//
-//## Define alert colors, border radius, and padding.
-@alert-padding: 15px;
-@alert-border-radius: @border-radius-base;
-@alert-link-font-weight: bold;
-@alert-success-bg: @state-success-bg;
-@alert-success-text: @state-success-text;
-@alert-success-border: @state-success-border;
-@alert-info-bg: @state-info-bg;
-@alert-info-text: @state-info-text;
-@alert-info-border: @state-info-border;
-@alert-warning-bg: @state-warning-bg;
-@alert-warning-text: @state-warning-text;
-@alert-warning-border: @state-warning-border;
-@alert-danger-bg: @state-danger-bg;
-@alert-danger-text: @state-danger-text;
-@alert-danger-border: @state-danger-border; //== Progress bars
-//
-//##
-//** Background color of the whole progress component
-@progress-bg: #f5f5f5; //** Progress bar text color
-@progress-bar-color: #fff; //** Variable for setting rounded corners on progress bar.
-@progress-border-radius: @border-radius-base; //** Default progress bar color
-@progress-bar-bg: @brand-primary; //** Success progress bar color
-@progress-bar-success-bg: @brand-success; //** Warning progress bar color
-@progress-bar-warning-bg: @brand-warning; //** Danger progress bar color
-@progress-bar-danger-bg: @brand-danger; //** Info progress bar color
-@progress-bar-info-bg: @brand-info; //== List group
-//
-//##
-//** Background color on `.list-group-item`
-@list-group-bg: #fff; //** `.list-group-item` border color
-@list-group-border: #ddd; //** List group border radius
-@list-group-border-radius: @border-radius-base; //** Background color of single list items on hover
-@list-group-hover-bg: #f5f5f5; //** Text color of active list items
-@list-group-active-color: @component-active-color; //** Background color of active list items
-@list-group-active-bg: @component-active-bg; //** Border color of active list elements
-@list-group-active-border: @list-group-active-bg; //** Text color for content within active list items
-@list-group-active-text-color: lighten(@list-group-active-bg, 40%); //** Text color of disabled list items
-@list-group-disabled-color: @gray-light; //** Background color of disabled list items
-@list-group-disabled-bg: @gray-lighter; //** Text color for content within disabled list items
-@list-group-disabled-text-color: @list-group-disabled-color;
-@list-group-link-color: #555;
-@list-group-link-hover-color: @list-group-link-color;
-@list-group-link-heading-color: #333; //== Panels
-//
-//##
-@panel-bg: #fff;
-@panel-body-padding: 15px;
-@panel-heading-padding: 10px 15px;
-@panel-footer-padding: @panel-heading-padding;
-@panel-border-radius: @border-radius-base; //** Border color for elements within panels
-@panel-inner-border: #ddd;
-@panel-footer-bg: #f5f5f5;
-@panel-default-text: @gray-dark;
-@panel-default-border: #ddd;
-@panel-default-heading-bg: #f5f5f5;
-@panel-primary-text: #fff;
-@panel-primary-border: @brand-primary;
-@panel-primary-heading-bg: @brand-primary;
-@panel-success-text: @state-success-text;
-@panel-success-border: @state-success-border;
-@panel-success-heading-bg: @state-success-bg;
-@panel-info-text: @state-info-text;
-@panel-info-border: @state-info-border;
-@panel-info-heading-bg: @state-info-bg;
-@panel-warning-text: @state-warning-text;
-@panel-warning-border: @state-warning-border;
-@panel-warning-heading-bg: @state-warning-bg;
-@panel-danger-text: @state-danger-text;
-@panel-danger-border: @state-danger-border;
-@panel-danger-heading-bg: @state-danger-bg; //== Thumbnails
-//
-//##
-//** Padding around the thumbnail image
-@thumbnail-padding: 4px; //** Thumbnail background color
-@thumbnail-bg: @body-bg; //** Thumbnail border color
-@thumbnail-border: #ddd; //** Thumbnail border radius
-@thumbnail-border-radius: @border-radius-base; //** Custom text color for thumbnail captions
-@thumbnail-caption-color: @text-color; //** Padding around the thumbnail caption
-@thumbnail-caption-padding: 9px; //== Wells
-//
-//##
-@well-bg: #f5f5f5;
-@well-border: darken(@well-bg, 7%); //== Badges
-//
-//##
-@badge-color: #fff; //** Linked badge text color on hover
-@badge-link-hover-color: #fff;
-@badge-bg: @gray-light; //** Badge text color in active nav link
-@badge-active-color: @link-color; //** Badge background color in active nav link
-@badge-active-bg: #fff;
-@badge-font-weight: bold;
-@badge-line-height: 1;
-@badge-border-radius: 10px; //== Breadcrumbs
-//
-//##
-@breadcrumb-padding-vertical: 8px;
-@breadcrumb-padding-horizontal: 15px; //** Breadcrumb background color
-@breadcrumb-bg: #f5f5f5; //** Breadcrumb text color
-@breadcrumb-color: #ccc; //** Text color of current page in the breadcrumb
-@breadcrumb-active-color: @gray-light; //** Textual separator for between breadcrumb elements
-@breadcrumb-separator: "/"; //== Carousel
-//
-//##
-@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
-@carousel-control-color: #fff;
-@carousel-control-width: 15%;
-@carousel-control-opacity: 0.5;
-@carousel-control-font-size: 20px;
-@carousel-indicator-active-bg: #fff;
-@carousel-indicator-border-color: #fff;
-@carousel-caption-color: #fff; //== Close
-//
-//##
-@close-font-weight: bold;
-@close-color: #000;
-@close-text-shadow: 0 1px 0 #fff; //== Code
-//
-//##
-@code-color: #c7254e;
-@code-bg: #f9f2f4;
-@kbd-color: #fff;
-@kbd-bg: #333;
-@pre-bg: #f5f5f5;
-@pre-color: @gray-dark;
-@pre-border-color: #ccc;
-@pre-scrollable-max-height: 340px; //== Type
-//
-//##
-//** Horizontal offset for forms and lists.
-@component-offset-horizontal: 180px; //** Text muted color
-@text-muted: @gray-light; //** Abbreviations and acronyms border color
-@abbr-border-color: @gray-light; //** Headings small color
-@headings-small-color: @gray-light; //** Blockquote small color
-@blockquote-small-color: @gray-light; //** Blockquote font size
-@blockquote-font-size: (@font-size-base * 1.25); //** Blockquote border color
-@blockquote-border-color: @gray-lighter; //** Page header border color
-@page-header-border-color: @gray-lighter; //** Width of horizontal description list titles
-@dl-horizontal-offset: @component-offset-horizontal; //** Point at which .dl-horizontal becomes horizontal
-@dl-horizontal-breakpoint: @grid-float-breakpoint; //** Horizontal line color.
-@hr-border: @gray-lighter;
diff --git a/haitidata/static/osgeo_importer/partials/upload.html b/haitidata/static/osgeo_importer/partials/upload.html
deleted file mode 100644
index 31108b0..0000000
--- a/haitidata/static/osgeo_importer/partials/upload.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
- -
-

- {{ upload.name || "[multiple files]" }} - -

-

{{upload.date | date:"MMM d yyyy HH:mm:ss"}}{{upload.file_size }}

-
- -
-
-
- - -
-
- {{layer.layer_name || layer.file_name}} - (in {{layer.file_name}})
- Layer: {{layer.geonode_layer.title}} - - - -
- -
- -
-
-
- File Type - {{layer.file_type || upload.file_type || "UNKNOWN" }} -
-
- Features - {{layer.feature_count | number : 0}} -
-
- Status - {{layer.status || "UNKNOWN" }} -
-
- -
-
- {{field.name}} - {{field.type}} -
-
-
- -
- -
-
-
- - -
-
- - -
-
-
- - -
-
- - -
-
-
- - -
-
- This import has failed. Adjust configuration above. - The import has finished successfully. View the Layer. -
-
>>Import - -
- -
-
-
- -
-
-
-
-
- Download - Delete -
-
- -
-
diff --git a/haitidata/static/osgeo_importer/partials/uploadModal.html b/haitidata/static/osgeo_importer/partials/uploadModal.html deleted file mode 100644 index ce7ba0e..0000000 --- a/haitidata/static/osgeo_importer/partials/uploadModal.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - diff --git a/haitidata/static/osgeo_importer/partials/uploadWizard.html b/haitidata/static/osgeo_importer/partials/uploadWizard.html deleted file mode 100644 index 6ddac94..0000000 --- a/haitidata/static/osgeo_importer/partials/uploadWizard.html +++ /dev/null @@ -1,138 +0,0 @@ - - - diff --git a/haitidata/static/package.json b/haitidata/static/package.json new file mode 100755 index 0000000..11e9e35 --- /dev/null +++ b/haitidata/static/package.json @@ -0,0 +1,25 @@ +{ + "name": "haitidata", + "version": "0.0.1", + "author": "GeoNode Developers", + "description": "Static code and assets for haitidata", + "contributors": [ + { + } + ], + "scripts": { + "test": "jshint **.js" + }, + "license": "BSD", + "private": "false", + "dependencies": { + }, + "devDependencies": { + "del": "*", + "gulp": "^3.9.0", + "gulp-util": "*", + "gulp-concat": "*", + "gulp-less": "*", + "path": "*" + } +} diff --git a/haitidata/static/scss/_bootstrap-compass.scss b/haitidata/static/scss/_bootstrap-compass.scss new file mode 100644 index 0000000..8fbc3cd --- /dev/null +++ b/haitidata/static/scss/_bootstrap-compass.scss @@ -0,0 +1,9 @@ +@function twbs-font-path($path) { + @return font-url($path, true); +} + +@function twbs-image-path($path) { + @return image-url($path, true); +} + +$bootstrap-sass-asset-helper: true; diff --git a/haitidata/static/scss/_bootstrap-mincer.scss b/haitidata/static/scss/_bootstrap-mincer.scss new file mode 100644 index 0000000..0c4655e --- /dev/null +++ b/haitidata/static/scss/_bootstrap-mincer.scss @@ -0,0 +1,19 @@ +// Mincer asset helper functions +// +// This must be imported into a .css.ejs.scss file. +// Then, <% %>-interpolations will be parsed as strings by Sass, and evaluated by EJS after Sass compilation. + + +@function twbs-font-path($path) { + // do something like following + // from "path/to/font.ext#suffix" to "<%- asset_path(path/to/font.ext)) + #suffix %>" + // from "path/to/font.ext?#suffix" to "<%- asset_path(path/to/font.ext)) + ?#suffix %>" + // or from "path/to/font.ext" just "<%- asset_path(path/to/font.ext)) %>" + @return "<%- asset_path("#{$path}".replace(/[#?].*$/, '')) + "#{$path}".replace(/(^[^#?]*)([#?]?.*$)/, '$2') %>"; +} + +@function twbs-image-path($file) { + @return "<%- asset_path("#{$file}") %>"; +} + +$bootstrap-sass-asset-helper: true; diff --git a/haitidata/static/scss/_bootstrap-sprockets.scss b/haitidata/static/scss/_bootstrap-sprockets.scss new file mode 100644 index 0000000..9fffc1e --- /dev/null +++ b/haitidata/static/scss/_bootstrap-sprockets.scss @@ -0,0 +1,9 @@ +@function twbs-font-path($path) { + @return font-path($path); +} + +@function twbs-image-path($path) { + @return image-path($path); +} + +$bootstrap-sass-asset-helper: true; diff --git a/haitidata/static/scss/_bootstrap.scss b/haitidata/static/scss/_bootstrap.scss new file mode 100644 index 0000000..54c1d0a --- /dev/null +++ b/haitidata/static/scss/_bootstrap.scss @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "variables"; +@import "bootstrap/mixins"; + +// Reset and dependencies +@import "bootstrap/normalize"; +@import "bootstrap/print"; +@import "bootstrap/glyphicons"; + +// Core CSS +@import "bootstrap/scaffolding"; +@import "bootstrap/type"; +@import "bootstrap/code"; +@import "bootstrap/grid"; +@import "bootstrap/tables"; +@import "bootstrap/forms"; +@import "bootstrap/buttons"; + +// Components +@import "bootstrap/component-animations"; +@import "bootstrap/dropdowns"; +@import "bootstrap/button-groups"; +@import "bootstrap/input-groups"; +@import "bootstrap/navs"; +@import "bootstrap/navbar"; +@import "bootstrap/breadcrumbs"; +@import "bootstrap/pagination"; +@import "bootstrap/pager"; +@import "bootstrap/labels"; +@import "bootstrap/badges"; +@import "bootstrap/jumbotron"; +@import "bootstrap/thumbnails"; +@import "bootstrap/alerts"; +@import "bootstrap/progress-bars"; +@import "bootstrap/media"; +@import "bootstrap/list-group"; +@import "bootstrap/panels"; +@import "bootstrap/responsive-embed"; +@import "bootstrap/wells"; +@import "bootstrap/close"; + +// Components w/ JavaScript +@import "bootstrap/modals"; +@import "bootstrap/tooltip"; +@import "bootstrap/popovers"; +@import "bootstrap/carousel"; + +// Utility classes +@import "bootstrap/utilities"; +@import "bootstrap/responsive-utilities"; diff --git a/haitidata/static/scss/_variables.scss b/haitidata/static/scss/_variables.scss new file mode 100644 index 0000000..41d863d --- /dev/null +++ b/haitidata/static/scss/_variables.scss @@ -0,0 +1,874 @@ +$bootstrap-sass-asset-helper: false !default; +// +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +$gray-base: #000 !default; +$gray-darker: #37474F !default; +$gray-dark: #546E7A !default; +$gray: #78909C !default; +$gray-light: #B0BEC5 !default; +$gray-lighter: #ECEFF1 !default; + +$brand-primary: #ff5722 !default; //Orange +$brand-success: #27ca3b !default; +$brand-info: #1fa0a0 !default; +$brand-warning: #ff8f31 !default; +$brand-danger: #af0900 !default; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +$body-bg: $gray-lighter !default; +//** Global text color on ``. +$text-color: $gray-darker !default; + +//** Global textual link color. +$link-color: $brand-primary !default; +//** Link hover color set via `darken()` function. +$link-hover-color: darken($link-color, 15%) !default; +//** Link hover decoration. +$link-hover-decoration: underline !default; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +$font-family-sans-serif: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; +//** Default monospace fonts for ``, ``, and `
`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          16px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small:         ceil(($font-size-base * .85)) !default; // ~12px
+
+$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
+$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
+$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
+$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-h5:            $font-size-base !default;
+$font-size-h6:            ceil(($font-size-base * .85)) !default; // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base:        1.428571429 !default; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
+
+//** By default, this inherits from the ``.
+$headings-font-family:    inherit !default;
+$headings-font-weight:    700 !default;
+$headings-line-height:    1.1 !default;
+$headings-color:          inherit !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+
+// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
+// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
+$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
+
+//** File name for all font files.
+$icon-font-name:          "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+$padding-base-vertical:     6px !default;
+$padding-base-horizontal:   12px !default;
+
+$padding-large-vertical:    10px !default;
+$padding-large-horizontal:  16px !default;
+
+$padding-small-vertical:    5px !default;
+$padding-small-horizontal:  10px !default;
+
+$padding-xs-vertical:       1px !default;
+$padding-xs-horizontal:     5px !default;
+
+$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
+$line-height-small:         1.5 !default;
+
+$border-radius-base:        4px !default;
+$border-radius-large:       6px !default;
+$border-radius-small:       3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color:    #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg:       $brand-primary !default;
+
+//** Width of the `border` for generating carets that indicate dropdowns.
+$caret-width-base:          4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large:         5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+$table-cell-padding:            8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding:  5px !default;
+
+//** Default background color used for all tables.
+$table-bg:                      transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent:               #f9f9f9 !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover:                #f5f5f5 !default;
+$table-bg-active:               $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color:            #ddd !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight:                normal !default;
+
+$btn-default-color:              #333 !default;
+$btn-default-bg:                 #fff !default;
+$btn-default-border:             #ccc !default;
+
+$btn-primary-color:              #fff !default;
+$btn-primary-bg:                 $brand-primary !default;
+$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
+
+$btn-success-color:              #fff !default;
+$btn-success-bg:                 $brand-success !default;
+$btn-success-border:             darken($btn-success-bg, 5%) !default;
+
+$btn-info-color:                 #fff !default;
+$btn-info-bg:                    $brand-info !default;
+$btn-info-border:                darken($btn-info-bg, 5%) !default;
+
+$btn-warning-color:              #fff !default;
+$btn-warning-bg:                 $brand-warning !default;
+$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
+
+$btn-danger-color:               #fff !default;
+$btn-danger-bg:                  $brand-danger !default;
+$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
+
+$btn-link-disabled-color:        $gray-light !default;
+
+// Allows for customizing button radius independently from global border radius
+$btn-border-radius-base:         $border-radius-base !default;
+$btn-border-radius-large:        $border-radius-large !default;
+$btn-border-radius-small:        $border-radius-small !default;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+$input-bg:                       #fff !default;
+//** `` background color
+$input-bg-disabled:              $gray-lighter !default;
+
+//** Text color for ``s
+$input-color:                    $gray !default;
+//** `` border color
+$input-border:                   #ccc !default;
+
+// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
+//** Default `.form-control` border radius
+// This has no effect on ``s in CSS.
+$input-border-radius:            $border-radius-base !default;
+//** Large `.form-control` border radius
+$input-border-radius-large:      $border-radius-large !default;
+//** Small `.form-control` border radius
+$input-border-radius-small:      $border-radius-small !default;
+
+//** Border color for inputs on focus
+$input-border-focus:             #66afe9 !default;
+
+//** Placeholder text color
+$input-color-placeholder:        #999 !default;
+
+//** Default `.form-control` height
+$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+//** `.form-group` margin
+$form-group-margin-bottom:       15px !default;
+
+$legend-color:                   $gray-dark !default;
+$legend-border-color:            #e5e5e5 !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg:           $gray-lighter !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: $input-border !default;
+
+//** Disabled cursor for form controls and buttons.
+$cursor-disabled:                not-allowed !default;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg:                    #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border:                rgba(0, 0, 0, .15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border:       #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg:            #e5e5e5 !default;
+
+//** Dropdown link text color.
+$dropdown-link-color:            $gray-dark !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg:         #f5f5f5 !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color:     $component-active-color !default;
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg:        $component-active-bg !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color:   $gray-light !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color:          $gray-light !default;
+
+//** Deprecated `$dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color:           #000 !default;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+$zindex-navbar:            1000 !default;
+$zindex-dropdown:          1000 !default;
+$zindex-popover:           1060 !default;
+$zindex-tooltip:           1070 !default;
+$zindex-navbar-fixed:      1030 !default;
+$zindex-modal-background:  1040 !default;
+$zindex-modal:             1050 !default;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `$screen-xs` as of v3.0.1
+$screen-xs:                  480px !default;
+//** Deprecated `$screen-xs-min` as of v3.2.0
+$screen-xs-min:              $screen-xs !default;
+//** Deprecated `$screen-phone` as of v3.0.1
+$screen-phone:               $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `$screen-sm` as of v3.0.1
+$screen-sm:                  768px !default;
+$screen-sm-min:              $screen-sm !default;
+//** Deprecated `$screen-tablet` as of v3.0.1
+$screen-tablet:              $screen-sm-min !default;
+
+// Medium screen / desktop
+//** Deprecated `$screen-md` as of v3.0.1
+$screen-md:                  992px !default;
+$screen-md-min:              $screen-md !default;
+//** Deprecated `$screen-desktop` as of v3.0.1
+$screen-desktop:             $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `$screen-lg` as of v3.0.1
+$screen-lg:                  1200px !default;
+$screen-lg-min:              $screen-lg !default;
+//** Deprecated `$screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop:          $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max:              ($screen-sm-min - 1) !default;
+$screen-sm-max:              ($screen-md-min - 1) !default;
+$screen-md-max:              ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns:              12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width:         30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint:     $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet:             (720px + $grid-gutter-width) !default;
+//** For `$screen-sm-min` and up.
+$container-sm:                 $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop:            (940px + $grid-gutter-width) !default;
+//** For `$screen-md-min` and up.
+$container-md:                 $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop:      (1140px + $grid-gutter-width) !default;
+//** For `$screen-lg-min` and up.
+$container-lg:                 $container-large-desktop !default;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height:                    50px !default;
+$navbar-margin-bottom:             $line-height-computed !default;
+$navbar-border-radius:             $border-radius-base !default;
+$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height:       340px !default;
+
+$navbar-default-color:             #777 !default;
+$navbar-default-bg:                #f8f8f8 !default;
+$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
+
+// Navbar links
+$navbar-default-link-color:                #777 !default;
+$navbar-default-link-hover-color:          #333 !default;
+$navbar-default-link-hover-bg:             transparent !default;
+$navbar-default-link-active-color:         #555 !default;
+$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
+$navbar-default-link-disabled-color:       #ccc !default;
+$navbar-default-link-disabled-bg:          transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color:               $navbar-default-link-color !default;
+$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
+$navbar-default-brand-hover-bg:            transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg:           #ddd !default;
+$navbar-default-toggle-icon-bar-bg:        #888 !default;
+$navbar-default-toggle-border-color:       #ddd !default;
+
+
+//=== Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
+$navbar-inverse-bg:                         #222 !default;
+$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
+$navbar-inverse-link-hover-color:           #fff !default;
+$navbar-inverse-link-hover-bg:              transparent !default;
+$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
+$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-link-disabled-color:        #444 !default;
+$navbar-inverse-link-disabled-bg:           transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color:          #fff !default;
+$navbar-inverse-brand-hover-bg:             transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg:            #333 !default;
+$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
+$navbar-inverse-toggle-border-color:        #333 !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding:                          10px 15px !default;
+$nav-link-hover-bg:                         $gray-lighter !default;
+
+$nav-disabled-link-color:                   $gray-light !default;
+$nav-disabled-link-hover-color:             $gray-light !default;
+
+//== Tabs
+$nav-tabs-border-color:                     #ddd !default;
+
+$nav-tabs-link-hover-border-color:          $gray-lighter !default;
+
+$nav-tabs-active-link-hover-bg:             $body-bg !default;
+$nav-tabs-active-link-hover-color:          $gray !default;
+$nav-tabs-active-link-hover-border-color:   #ddd !default;
+
+$nav-tabs-justified-link-border-color:            #ddd !default;
+$nav-tabs-justified-active-link-border-color:     $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius:                   $border-radius-base !default;
+$nav-pills-active-link-hover-bg:            $component-active-bg !default;
+$nav-pills-active-link-hover-color:         $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color:                     $link-color !default;
+$pagination-bg:                        #fff !default;
+$pagination-border:                    #ddd !default;
+
+$pagination-hover-color:               $link-hover-color !default;
+$pagination-hover-bg:                  $gray-lighter !default;
+$pagination-hover-border:              #ddd !default;
+
+$pagination-active-color:              #fff !default;
+$pagination-active-bg:                 $brand-primary !default;
+$pagination-active-border:             $brand-primary !default;
+
+$pagination-disabled-color:            $gray-light !default;
+$pagination-disabled-bg:               #fff !default;
+$pagination-disabled-border:           #ddd !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg:                             $pagination-bg !default;
+$pager-border:                         $pagination-border !default;
+$pager-border-radius:                  15px !default;
+
+$pager-hover-bg:                       $pagination-hover-bg !default;
+
+$pager-active-bg:                      $pagination-active-bg !default;
+$pager-active-color:                   $pagination-active-color !default;
+
+$pager-disabled-color:                 $pagination-disabled-color !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding:              30px !default;
+$jumbotron-color:                inherit !default;
+$jumbotron-bg:                   $gray-lighter !default;
+$jumbotron-heading-color:        inherit !default;
+$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
+$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text:             #3c763d !default;
+$state-success-bg:               #dff0d8 !default;
+$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
+
+$state-info-text:                #31708f !default;
+$state-info-bg:                  #d9edf7 !default;
+$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
+
+$state-warning-text:             #8a6d3b !default;
+$state-warning-bg:               #fcf8e3 !default;
+$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
+
+$state-danger-text:              #a94442 !default;
+$state-danger-bg:                #f2dede !default;
+$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width:           200px !default;
+//** Tooltip text color
+$tooltip-color:               #fff !default;
+//** Tooltip background color
+$tooltip-bg:                  #000 !default;
+$tooltip-opacity:             .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width:         5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color:         $tooltip-bg !default;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg:                          #fff !default;
+//** Popover maximum width
+$popover-max-width:                   276px !default;
+//** Popover border color
+$popover-border-color:                rgba(0, 0, 0, .2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color:       #ccc !default;
+
+//** Popover title background color
+$popover-title-bg:                    darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width:                 10px !default;
+//** Popover arrow color
+$popover-arrow-color:                 $popover-bg !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg:            $gray-light !default;
+//** Primary label background color
+$label-primary-bg:            $brand-primary !default;
+//** Success label background color
+$label-success-bg:            $brand-success !default;
+//** Info label background color
+$label-info-bg:               $brand-info !default;
+//** Warning label background color
+$label-warning-bg:            $brand-warning !default;
+//** Danger label background color
+$label-danger-bg:             $brand-danger !default;
+
+//** Default label text color
+$label-color:                 #fff !default;
+//** Default text color of a linked label
+$label-link-hover-color:      #fff !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding:         15px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding:         15px !default;
+//** Modal title line-height
+$modal-title-line-height:     $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg:                             #fff !default;
+//** Modal content border color
+$modal-content-border-color:                   rgba(0, 0, 0, .2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color:          #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg:           #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity:      .5 !default;
+//** Modal header border color
+$modal-header-border-color:   #e5e5e5 !default;
+//** Modal footer border color
+$modal-footer-border-color:   $modal-header-border-color !default;
+
+$modal-lg:                    900px !default;
+$modal-md:                    600px !default;
+$modal-sm:                    300px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding:               15px !default;
+$alert-border-radius:         $border-radius-base !default;
+$alert-link-font-weight:      bold !default;
+
+$alert-success-bg:            $state-success-bg !default;
+$alert-success-text:          $state-success-text !default;
+$alert-success-border:        $state-success-border !default;
+
+$alert-info-bg:               $state-info-bg !default;
+$alert-info-text:             $state-info-text !default;
+$alert-info-border:           $state-info-border !default;
+
+$alert-warning-bg:            $state-warning-bg !default;
+$alert-warning-text:          $state-warning-text !default;
+$alert-warning-border:        $state-warning-border !default;
+
+$alert-danger-bg:             $state-danger-bg !default;
+$alert-danger-text:           $state-danger-text !default;
+$alert-danger-border:         $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg:                 #f5f5f5 !default;
+//** Progress bar text color
+$progress-bar-color:          #fff !default;
+//** Variable for setting rounded corners on progress bar.
+$progress-border-radius:      $border-radius-base !default;
+
+//** Default progress bar color
+$progress-bar-bg:             $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg:     $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg:     $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg:      $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg:        $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg:                 #fff !default;
+//** `.list-group-item` border color
+$list-group-border:             #ddd !default;
+//** List group border radius
+$list-group-border-radius:      $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg:           #f5f5f5 !default;
+//** Text color of active list items
+$list-group-active-color:       $component-active-color !default;
+//** Background color of active list items
+$list-group-active-bg:          $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border:      $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color:      $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg:         $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color:         #555 !default;
+$list-group-link-hover-color:   $list-group-link-color !default;
+$list-group-link-heading-color: #333 !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg:                    #fff !default;
+$panel-body-padding:          15px !default;
+$panel-heading-padding:       10px 15px !default;
+$panel-footer-padding:        $panel-heading-padding !default;
+$panel-border-radius:         $border-radius-base !default;
+
+//** Border color for elements within panels
+$panel-inner-border:          #ddd !default;
+$panel-footer-bg:             #f5f5f5 !default;
+
+$panel-default-text:          $gray-dark !default;
+$panel-default-border:        #ddd !default;
+$panel-default-heading-bg:    #f5f5f5 !default;
+
+$panel-primary-text:          #fff !default;
+$panel-primary-border:        $brand-primary !default;
+$panel-primary-heading-bg:    $brand-primary !default;
+
+$panel-success-text:          $state-success-text !default;
+$panel-success-border:        $state-success-border !default;
+$panel-success-heading-bg:    $state-success-bg !default;
+
+$panel-info-text:             $state-info-text !default;
+$panel-info-border:           $state-info-border !default;
+$panel-info-heading-bg:       $state-info-bg !default;
+
+$panel-warning-text:          $state-warning-text !default;
+$panel-warning-border:        $state-warning-border !default;
+$panel-warning-heading-bg:    $state-warning-bg !default;
+
+$panel-danger-text:           $state-danger-text !default;
+$panel-danger-border:         $state-danger-border !default;
+$panel-danger-heading-bg:     $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding:           4px !default;
+//** Thumbnail background color
+$thumbnail-bg:                $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border:            #ddd !default;
+//** Thumbnail border radius
+$thumbnail-border-radius:     $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color:     $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding:   9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg:                     #f5f5f5 !default;
+$well-border:                 darken($well-bg, 7%) !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color:                 #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color:      #fff !default;
+$badge-bg:                    $gray-light !default;
+
+//** Badge text color in active nav link
+$badge-active-color:          $link-color !default;
+//** Badge background color in active nav link
+$badge-active-bg:             #fff !default;
+
+$badge-font-weight:           bold !default;
+$badge-line-height:           1 !default;
+$badge-border-radius:         10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical:   8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg:                 #f5f5f5 !default;
+//** Breadcrumb text color
+$breadcrumb-color:              #ccc !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color:       $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator:          "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow:                        0 1px 2px rgba(0, 0, 0, .6) !default;
+
+$carousel-control-color:                      #fff !default;
+$carousel-control-width:                      15% !default;
+$carousel-control-opacity:                    .5 !default;
+$carousel-control-font-size:                  20px !default;
+
+$carousel-indicator-active-bg:                #fff !default;
+$carousel-indicator-border-color:             #fff !default;
+
+$carousel-caption-color:                      #fff !default;
+
+
+//== Close
+//
+//##
+
+$close-font-weight:           bold !default;
+$close-color:                 #000 !default;
+$close-text-shadow:           0 1px 0 #fff !default;
+
+
+//== Code
+//
+//##
+
+$code-color:                  #c7254e !default;
+$code-bg:                     #f9f2f4 !default;
+
+$kbd-color:                   #fff !default;
+$kbd-bg:                      #333 !default;
+
+$pre-bg:                      #f5f5f5 !default;
+$pre-color:                   $gray-dark !default;
+$pre-border-color:            #ccc !default;
+$pre-scrollable-max-height:   340px !default;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted:                  $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color:           $gray-light !default;
+//** Headings small color
+$headings-small-color:        $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color:      $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size:        ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color:     $gray-lighter !default;
+//** Page header border color
+$page-header-border-color:    $gray-lighter !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset:        $component-offset-horizontal !default;
+//** Point at which .dl-horizontal becomes horizontal
+$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;
+//** Horizontal line color.
+$hr-border:                   $gray-lighter !default;
diff --git a/haitidata/static/less/bootstrap/alerts.less b/haitidata/static/scss/bootstrap/_alerts.scss
old mode 100755
new mode 100644
similarity index 54%
rename from haitidata/static/less/bootstrap/alerts.less
rename to haitidata/static/scss/bootstrap/_alerts.scss
index c4199db..f9e69bd
--- a/haitidata/static/less/bootstrap/alerts.less
+++ b/haitidata/static/scss/bootstrap/_alerts.scss
@@ -7,21 +7,20 @@
 // -------------------------
 
 .alert {
-  padding: @alert-padding;
-  margin-bottom: @line-height-computed;
+  padding: $alert-padding;
+  margin-bottom: $line-height-computed;
   border: 1px solid transparent;
-  border-radius: @alert-border-radius;
+  border-radius: $alert-border-radius;
 
   // Headings for larger alerts
   h4 {
     margin-top: 0;
-    // Specified for the h4 to prevent conflicts of changing @headings-color
-    color: inherit;
+    color: inherit; // Specified for the h4 to prevent conflicts of changing $headings-color
   }
 
   // Provide class for links that match alerts
   .alert-link {
-    font-weight: @alert-link-font-weight;
+    font-weight: $alert-link-font-weight;
   }
 
   // Improve alignment and spacing of inner content
@@ -39,9 +38,10 @@
 //
 // Expand the right padding and account for the close button's positioning.
 
-.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
+// The misspelled .alert-dismissable was deprecated in 3.2.0.
+.alert-dismissable,
 .alert-dismissible {
-  padding-right: (@alert-padding + 20);
+  padding-right: ($alert-padding + 20);
 
   // Adjust close link position
   .close {
@@ -57,17 +57,17 @@
 // Generate contextual modifier classes for colorizing the alert.
 
 .alert-success {
-  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
+  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
 }
 
 .alert-info {
-  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
+  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
 }
 
 .alert-warning {
-  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
+  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
 }
 
 .alert-danger {
-  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
+  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
 }
diff --git a/haitidata/static/less/bootstrap/badges.less b/haitidata/static/scss/bootstrap/_badges.scss
old mode 100755
new mode 100644
similarity index 62%
rename from haitidata/static/less/bootstrap/badges.less
rename to haitidata/static/scss/bootstrap/_badges.scss
index 6ee16dc..44d5dd6
--- a/haitidata/static/less/bootstrap/badges.less
+++ b/haitidata/static/scss/bootstrap/_badges.scss
@@ -8,15 +8,15 @@
   display: inline-block;
   min-width: 10px;
   padding: 3px 7px;
-  font-size: @font-size-small;
-  font-weight: @badge-font-weight;
-  color: @badge-color;
-  line-height: @badge-line-height;
-  vertical-align: middle;
-  white-space: nowrap;
+  font-size: $font-size-small;
+  font-weight: $badge-font-weight;
+  line-height: $badge-line-height;
+  color: $badge-color;
   text-align: center;
-  background-color: @badge-bg;
-  border-radius: @badge-border-radius;
+  white-space: nowrap;
+  vertical-align: middle;
+  background-color: $badge-bg;
+  border-radius: $badge-border-radius;
 
   // Empty badges collapse automatically (not available in IE8)
   &:empty {
@@ -35,21 +35,13 @@
     padding: 1px 5px;
   }
 
-  // Hover state, but only for links
-  a& {
-    &:hover,
-    &:focus {
-      color: @badge-link-hover-color;
-      text-decoration: none;
-      cursor: pointer;
-    }
-  }
+  // [converter] extracted a& to a.badge
 
   // Account for badges in navs
   .list-group-item.active > &,
   .nav-pills > .active > a > & {
-    color: @badge-active-color;
-    background-color: @badge-active-bg;
+    color: $badge-active-color;
+    background-color: $badge-active-bg;
   }
 
   .list-group-item > & {
@@ -64,3 +56,13 @@
     margin-left: 3px;
   }
 }
+
+// Hover state, but only for links
+a.badge {
+  &:hover,
+  &:focus {
+    color: $badge-link-hover-color;
+    text-decoration: none;
+    cursor: pointer;
+  }
+}
diff --git a/haitidata/static/scss/bootstrap/_breadcrumbs.scss b/haitidata/static/scss/bootstrap/_breadcrumbs.scss
new file mode 100644
index 0000000..67e39d9
--- /dev/null
+++ b/haitidata/static/scss/bootstrap/_breadcrumbs.scss
@@ -0,0 +1,28 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+
+.breadcrumb {
+  padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
+  margin-bottom: $line-height-computed;
+  list-style: none;
+  background-color: $breadcrumb-bg;
+  border-radius: $border-radius-base;
+
+  > li {
+    display: inline-block;
+
+    + li:before {
+      padding: 0 5px;
+      color: $breadcrumb-color;
+      // [converter] Workaround for https://github.com/sass/libsass/issues/1115
+      $nbsp: "\00a0";
+      content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space
+    }
+  }
+
+  > .active {
+    color: $breadcrumb-active-color;
+  }
+}
diff --git a/haitidata/static/less/bootstrap/button-groups.less b/haitidata/static/scss/bootstrap/_button-groups.scss
old mode 100755
new mode 100644
similarity index 85%
rename from haitidata/static/less/bootstrap/button-groups.less
rename to haitidata/static/scss/bootstrap/_button-groups.scss
index 16db0c6..6a62faf
--- a/haitidata/static/less/bootstrap/button-groups.less
+++ b/haitidata/static/scss/bootstrap/_button-groups.scss
@@ -34,7 +34,7 @@
 // Optional: Group multiple button groups together for a toolbar
 .btn-toolbar {
   margin-left: -5px; // Offset the first child's margin
-  &:extend(.clearfix all);
+  @include clearfix;
 
   .btn,
   .btn-group,
@@ -56,13 +56,13 @@
 .btn-group > .btn:first-child {
   margin-left: 0;
   &:not(:last-child):not(.dropdown-toggle) {
-    .border-right-radius(0);
+    @include border-right-radius(0);
   }
 }
 // Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it
 .btn-group > .btn:last-child:not(:first-child),
 .btn-group > .dropdown-toggle:not(:first-child) {
-  .border-left-radius(0);
+  @include border-left-radius(0);
 }
 
 // Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
@@ -75,11 +75,11 @@
 .btn-group > .btn-group:first-child:not(:last-child) {
   > .btn:last-child,
   > .dropdown-toggle {
-    .border-right-radius(0);
+    @include border-right-radius(0);
   }
 }
 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  .border-left-radius(0);
+  @include border-left-radius(0);
 }
 
 // On active and open, don't show outline
@@ -93,9 +93,9 @@
 //
 // Remix the default button sizing classes into new ones for easier manipulation.
 
-.btn-group-xs > .btn { &:extend(.btn-xs); }
-.btn-group-sm > .btn { &:extend(.btn-sm); }
-.btn-group-lg > .btn { &:extend(.btn-lg); }
+.btn-group-xs > .btn { @extend .btn-xs; }
+.btn-group-sm > .btn { @extend .btn-sm; }
+.btn-group-lg > .btn { @extend .btn-lg; }
 
 
 // Split button dropdowns
@@ -103,22 +103,22 @@
 
 // Give the line between buttons some depth
 .btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
   padding-right: 8px;
+  padding-left: 8px;
 }
 .btn-group > .btn-lg + .dropdown-toggle {
-  padding-left: 12px;
   padding-right: 12px;
+  padding-left: 12px;
 }
 
 // The clickable button for toggling the menu
 // Remove the gradient and set the same inset shadow as the :active state
 .btn-group.open .dropdown-toggle {
-  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+  @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
 
   // Show no shadow for `.btn-link` since it has no other button styles.
   &.btn-link {
-    .box-shadow(none);
+    @include box-shadow(none);
   }
 }
 
@@ -129,12 +129,12 @@
 }
 // Carets in other button sizes
 .btn-lg .caret {
-  border-width: @caret-width-large @caret-width-large 0;
+  border-width: $caret-width-large $caret-width-large 0;
   border-bottom-width: 0;
 }
 // Upside down carets for .dropup
 .dropup .btn-lg .caret {
-  border-width: 0 @caret-width-large @caret-width-large;
+  border-width: 0 $caret-width-large $caret-width-large;
 }
 
 
@@ -153,7 +153,7 @@
 
   // Clear floats so dropdown menus can be properly placed
   > .btn-group {
-    &:extend(.clearfix all);
+    @include clearfix;
     > .btn {
       float: none;
     }
@@ -173,12 +173,12 @@
     border-radius: 0;
   }
   &:first-child:not(:last-child) {
-    .border-top-radius(@btn-border-radius-base);
-    .border-bottom-radius(0);
+    @include border-top-radius($btn-border-radius-base);
+    @include border-bottom-radius(0);
   }
   &:last-child:not(:first-child) {
-    .border-top-radius(0);
-    .border-bottom-radius(@btn-border-radius-base);
+    @include border-top-radius(0);
+    @include border-bottom-radius($btn-border-radius-base);
   }
 }
 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
@@ -187,11 +187,11 @@
 .btn-group-vertical > .btn-group:first-child:not(:last-child) {
   > .btn:last-child,
   > .dropdown-toggle {
-    .border-bottom-radius(0);
+    @include border-bottom-radius(0);
   }
 }
 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  .border-top-radius(0);
+  @include border-top-radius(0);
 }
 
 
@@ -205,8 +205,8 @@
   border-collapse: separate;
   > .btn,
   > .btn-group {
-    float: none;
     display: table-cell;
+    float: none;
     width: 1%;
   }
   > .btn-group .btn {
@@ -237,7 +237,7 @@
     input[type="radio"],
     input[type="checkbox"] {
       position: absolute;
-      clip: rect(0,0,0,0);
+      clip: rect(0, 0, 0, 0);
       pointer-events: none;
     }
   }
diff --git a/haitidata/static/less/bootstrap/buttons.less b/haitidata/static/scss/bootstrap/_buttons.scss
old mode 100755
new mode 100644
similarity index 56%
rename from haitidata/static/less/bootstrap/buttons.less
rename to haitidata/static/scss/bootstrap/_buttons.scss
index 9cbb8f4..62962d7
--- a/haitidata/static/less/bootstrap/buttons.less
+++ b/haitidata/static/scss/bootstrap/_buttons.scss
@@ -9,53 +9,55 @@
 .btn {
   display: inline-block;
   margin-bottom: 0; // For input.btn
-  font-weight: @btn-font-weight;
+  font-weight: $btn-font-weight;
   text-align: center;
+  white-space: nowrap;
   vertical-align: middle;
   touch-action: manipulation;
   cursor: pointer;
   background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
   border: 1px solid transparent;
-  white-space: nowrap;
-  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);
-  .user-select(none);
+  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
+  @include user-select(none);
 
   &,
   &:active,
   &.active {
     &:focus,
     &.focus {
-      .tab-focus();
+      @include tab-focus;
     }
   }
 
   &:hover,
   &:focus,
   &.focus {
-    color: @btn-default-color;
+    color: $btn-default-color;
     text-decoration: none;
   }
 
   &:active,
   &.active {
-    outline: 0;
     background-image: none;
-    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+    outline: 0;
+    @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
   }
 
   &.disabled,
   &[disabled],
   fieldset[disabled] & {
-    cursor: @cursor-disabled;
-    .opacity(.65);
-    .box-shadow(none);
+    cursor: $cursor-disabled;
+    @include opacity(.65);
+    @include box-shadow(none);
   }
 
-  a& {
-    &.disabled,
-    fieldset[disabled] & {
-      pointer-events: none; // Future-proof disabling of clicks on `` elements
-    }
+  // [converter] extracted a& to a.btn
+}
+
+a.btn {
+  &.disabled,
+  fieldset[disabled] & {
+    pointer-events: none; // Future-proof disabling of clicks on `` elements
   }
 }
 
@@ -64,26 +66,26 @@
 // --------------------------------------------------
 
 .btn-default {
-  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
+  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
 }
 .btn-primary {
-  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
+  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
 }
 // Success appears as green
 .btn-success {
-  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
+  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
 }
 // Info appears as blue-green
 .btn-info {
-  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
+  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
 }
 // Warning appears as orange
 .btn-warning {
-  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
+  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
 }
 // Danger and error appear as red
 .btn-danger {
-  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
+  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
 }
 
 
@@ -92,8 +94,8 @@
 
 // Make a button look and behave like a link
 .btn-link {
-  color: @link-color;
-  font-weight: normal;
+  font-weight: 400;
+  color: $link-color;
   border-radius: 0;
 
   &,
@@ -102,7 +104,7 @@
   &[disabled],
   fieldset[disabled] & {
     background-color: transparent;
-    .box-shadow(none);
+    @include box-shadow(none);
   }
   &,
   &:hover,
@@ -112,15 +114,15 @@
   }
   &:hover,
   &:focus {
-    color: @link-hover-color;
-    text-decoration: @link-hover-decoration;
+    color: $link-hover-color;
+    text-decoration: $link-hover-decoration;
     background-color: transparent;
   }
   &[disabled],
   fieldset[disabled] & {
     &:hover,
     &:focus {
-      color: @btn-link-disabled-color;
+      color: $btn-link-disabled-color;
       text-decoration: none;
     }
   }
@@ -132,14 +134,14 @@
 
 .btn-lg {
   // line-height: ensure even-numbered height of button next to large input
-  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);
+  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);
 }
 .btn-sm {
   // line-height: ensure proper height of button next to small input
-  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
+  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
 }
 .btn-xs {
-  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);
+  @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
 }
 
 
diff --git a/haitidata/static/less/bootstrap/carousel.less b/haitidata/static/scss/bootstrap/_carousel.scss
old mode 100755
new mode 100644
similarity index 72%
rename from haitidata/static/less/bootstrap/carousel.less
rename to haitidata/static/scss/bootstrap/_carousel.scss
index 252011e..52a1f7b
--- a/haitidata/static/less/bootstrap/carousel.less
+++ b/haitidata/static/scss/bootstrap/_carousel.scss
@@ -10,41 +10,41 @@
 
 .carousel-inner {
   position: relative;
-  overflow: hidden;
   width: 100%;
+  overflow: hidden;
 
   > .item {
-    display: none;
     position: relative;
-    .transition(.6s ease-in-out left);
+    display: none;
+    @include transition(.6s ease-in-out left);
 
     // Account for jankitude on images
     > img,
     > a > img {
-      &:extend(.img-responsive);
+      @include img-responsive;
       line-height: 1;
     }
 
     // WebKit CSS3 transforms for supported devices
     @media all and (transform-3d), (-webkit-transform-3d) {
-      .transition-transform(~'0.6s ease-in-out');
-      .backface-visibility(~'hidden');
-      .perspective(1000px);
+      @include transition-transform(0.6s ease-in-out);
+      @include backface-visibility(hidden);
+      @include perspective(1000px);
 
       &.next,
       &.active.right {
-        .translate3d(100%, 0, 0);
+        @include translate3d(100%, 0, 0);
         left: 0;
       }
       &.prev,
       &.active.left {
-        .translate3d(-100%, 0, 0);
+        @include translate3d(-100%, 0, 0);
         left: 0;
       }
       &.next.left,
       &.prev.right,
       &.active {
-        .translate3d(0, 0, 0);
+        @include translate3d(0, 0, 0);
         left: 0;
       }
     }
@@ -93,35 +93,35 @@
 .carousel-control {
   position: absolute;
   top: 0;
-  left: 0;
   bottom: 0;
-  width: @carousel-control-width;
-  .opacity(@carousel-control-opacity);
-  font-size: @carousel-control-font-size;
-  color: @carousel-control-color;
+  left: 0;
+  width: $carousel-control-width;
+  font-size: $carousel-control-font-size;
+  color: $carousel-control-color;
   text-align: center;
-  text-shadow: @carousel-text-shadow;
+  text-shadow: $carousel-text-shadow;
   background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
+  @include opacity($carousel-control-opacity);
   // We can't have this transition here because WebKit cancels the carousel
   // animation if you trip this while in the middle of another animation.
 
   // Set gradients for backgrounds
   &.left {
-    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
+    @include gradient-horizontal($start-color: rgba(0, 0, 0, .5), $end-color: rgba(0, 0, 0, .0001));
   }
   &.right {
-    left: auto;
     right: 0;
-    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
+    left: auto;
+    @include gradient-horizontal($start-color: rgba(0, 0, 0, .0001), $end-color: rgba(0, 0, 0, .5));
   }
 
   // Hover/focus state
   &:hover,
   &:focus {
-    outline: 0;
-    color: @carousel-control-color;
+    color: $carousel-control-color;
     text-decoration: none;
-    .opacity(.9);
+    outline: 0;
+    @include opacity(.9);
   }
 
   // Toggles
@@ -131,9 +131,9 @@
   .glyphicon-chevron-right {
     position: absolute;
     top: 50%;
-    margin-top: -10px;
     z-index: 5;
     display: inline-block;
+    margin-top: -10px;
   }
   .icon-prev,
   .glyphicon-chevron-left {
@@ -147,21 +147,20 @@
   }
   .icon-prev,
   .icon-next {
-    width:  20px;
+    width: 20px;
     height: 20px;
-    line-height: 1;
     font-family: serif;
+    line-height: 1;
   }
 
-
   .icon-prev {
     &:before {
-      content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+      content: "\2039";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
     }
   }
   .icon-next {
     &:before {
-      content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+      content: "\203a";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
     }
   }
 }
@@ -177,21 +176,18 @@
   left: 50%;
   z-index: 15;
   width: 60%;
-  margin-left: -30%;
   padding-left: 0;
-  list-style: none;
+  margin-left: -30%;
   text-align: center;
+  list-style: none;
 
   li {
     display: inline-block;
-    width:  10px;
+    width: 10px;
     height: 10px;
     margin: 1px;
     text-indent: -999px;
-    border: 1px solid @carousel-indicator-border-color;
-    border-radius: 10px;
     cursor: pointer;
-
     // IE8-9 hack for event handling
     //
     // Internet Explorer 8-9 does not support clicks on elements without a set
@@ -202,13 +198,17 @@
     // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
     // set alpha transparency for the best results possible.
     background-color: #000 \9; // IE8
-    background-color: rgba(0,0,0,0); // IE9
+    background-color: rgba(0, 0, 0, 0); // IE9
+
+    border: 1px solid $carousel-indicator-border-color;
+    border-radius: 10px;
   }
+
   .active {
-    margin: 0;
-    width:  12px;
+    width: 12px;
     height: 12px;
-    background-color: @carousel-indicator-active-bg;
+    margin: 0;
+    background-color: $carousel-indicator-active-bg;
   }
 }
 
@@ -217,15 +217,16 @@
 // Hidden by default for smaller viewports
 .carousel-caption {
   position: absolute;
-  left: 15%;
   right: 15%;
   bottom: 20px;
+  left: 15%;
   z-index: 10;
   padding-top: 20px;
   padding-bottom: 20px;
-  color: @carousel-caption-color;
+  color: $carousel-caption-color;
   text-align: center;
-  text-shadow: @carousel-text-shadow;
+  text-shadow: $carousel-text-shadow;
+
   & .btn {
     text-shadow: none; // No shadow for button elements in carousel-caption
   }
@@ -233,7 +234,7 @@
 
 
 // Scale up controls for tablets and up
-@media screen and (min-width: @screen-sm-min) {
+@media screen and (min-width: $screen-sm-min) {
 
   // Scale up the controls a smidge
   .carousel-control {
@@ -241,25 +242,25 @@
     .glyphicon-chevron-right,
     .icon-prev,
     .icon-next {
-      width: (@carousel-control-font-size * 1.5);
-      height: (@carousel-control-font-size * 1.5);
-      margin-top: (@carousel-control-font-size / -2);
-      font-size: (@carousel-control-font-size * 1.5);
+      width: ($carousel-control-font-size * 1.5);
+      height: ($carousel-control-font-size * 1.5);
+      margin-top: ($carousel-control-font-size / -2);
+      font-size: ($carousel-control-font-size * 1.5);
     }
     .glyphicon-chevron-left,
     .icon-prev {
-      margin-left: (@carousel-control-font-size / -2);
+      margin-left: ($carousel-control-font-size / -2);
     }
     .glyphicon-chevron-right,
     .icon-next {
-      margin-right: (@carousel-control-font-size / -2);
+      margin-right: ($carousel-control-font-size / -2);
     }
   }
 
   // Show and left align the captions
   .carousel-caption {
-    left: 20%;
     right: 20%;
+    left: 20%;
     padding-bottom: 30px;
   }
 
diff --git a/haitidata/static/scss/bootstrap/_close.scss b/haitidata/static/scss/bootstrap/_close.scss
new file mode 100644
index 0000000..a858a8f
--- /dev/null
+++ b/haitidata/static/scss/bootstrap/_close.scss
@@ -0,0 +1,37 @@
+//
+// Close icons
+// --------------------------------------------------
+
+
+.close {
+  float: right;
+  font-size: ($font-size-base * 1.5);
+  font-weight: $close-font-weight;
+  line-height: 1;
+  color: $close-color;
+  text-shadow: $close-text-shadow;
+  @include opacity(.2);
+
+  &:hover,
+  &:focus {
+    color: $close-color;
+    text-decoration: none;
+    cursor: pointer;
+    @include opacity(.5);
+  }
+
+  // [converter] extracted button& to button.close
+}
+
+// Additional properties for button version
+// iOS requires the button element instead of an anchor tag.
+// If you want the anchor version, it requires `href="#"`.
+// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+  appearance: none;
+}
diff --git a/haitidata/static/less/bootstrap/code.less b/haitidata/static/scss/bootstrap/_code.scss
old mode 100755
new mode 100644
similarity index 54%
rename from haitidata/static/less/bootstrap/code.less
rename to haitidata/static/scss/bootstrap/_code.scss
index a08b4d4..8e2b2a7
--- a/haitidata/static/less/bootstrap/code.less
+++ b/haitidata/static/scss/bootstrap/_code.scss
@@ -8,31 +8,31 @@ code,
 kbd,
 pre,
 samp {
-  font-family: @font-family-monospace;
+  font-family: $font-family-monospace;
 }
 
 // Inline code
 code {
   padding: 2px 4px;
   font-size: 90%;
-  color: @code-color;
-  background-color: @code-bg;
-  border-radius: @border-radius-base;
+  color: $code-color;
+  background-color: $code-bg;
+  border-radius: $border-radius-base;
 }
 
 // User input typically entered via keyboard
 kbd {
   padding: 2px 4px;
   font-size: 90%;
-  color: @kbd-color;
-  background-color: @kbd-bg;
-  border-radius: @border-radius-small;
-  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+  color: $kbd-color;
+  background-color: $kbd-bg;
+  border-radius: $border-radius-small;
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
 
   kbd {
     padding: 0;
     font-size: 100%;
-    font-weight: bold;
+    font-weight: 700;
     box-shadow: none;
   }
 }
@@ -40,16 +40,16 @@ kbd {
 // Blocks of code
 pre {
   display: block;
-  padding: ((@line-height-computed - 1) / 2);
-  margin: 0 0 (@line-height-computed / 2);
-  font-size: (@font-size-base - 1); // 14px to 13px
-  line-height: @line-height-base;
+  padding: (($line-height-computed - 1) / 2);
+  margin: 0 0 ($line-height-computed / 2);
+  font-size: ($font-size-base - 1); // 14px to 13px
+  line-height: $line-height-base;
+  color: $pre-color;
   word-break: break-all;
   word-wrap: break-word;
-  color: @pre-color;
-  background-color: @pre-bg;
-  border: 1px solid @pre-border-color;
-  border-radius: @border-radius-base;
+  background-color: $pre-bg;
+  border: 1px solid $pre-border-color;
+  border-radius: $border-radius-base;
 
   // Account for some code outputs that place code tags in pre tags
   code {
@@ -64,6 +64,6 @@ pre {
 
 // Enable scrollable blocks of code
 .pre-scrollable {
-  max-height: @pre-scrollable-max-height;
+  max-height: $pre-scrollable-max-height;
   overflow-y: scroll;
 }
diff --git a/haitidata/static/less/bootstrap/component-animations.less b/haitidata/static/scss/bootstrap/_component-animations.scss
old mode 100755
new mode 100644
similarity index 53%
rename from haitidata/static/less/bootstrap/component-animations.less
rename to haitidata/static/scss/bootstrap/_component-animations.scss
index 0bcee91..ca4d6b0
--- a/haitidata/static/less/bootstrap/component-animations.less
+++ b/haitidata/static/scss/bootstrap/_component-animations.scss
@@ -9,7 +9,8 @@
 
 .fade {
   opacity: 0;
-  .transition(opacity .15s linear);
+  @include transition(opacity .15s linear);
+
   &.in {
     opacity: 1;
   }
@@ -19,15 +20,19 @@
   display: none;
 
   &.in      { display: block; }
-  tr&.in    { display: table-row; }
-  tbody&.in { display: table-row-group; }
+  // [converter] extracted tr&.in to tr.collapse.in
+  // [converter] extracted tbody&.in to tbody.collapse.in
 }
 
+tr.collapse.in    { display: table-row; }
+
+tbody.collapse.in { display: table-row-group; }
+
 .collapsing {
   position: relative;
   height: 0;
   overflow: hidden;
-  .transition-property(~"height, visibility");
-  .transition-duration(.35s);
-  .transition-timing-function(ease);
+  @include transition-property(height, visibility);
+  @include transition-duration(.35s);
+  @include transition-timing-function(ease);
 }
diff --git a/haitidata/static/less/bootstrap/dropdowns.less b/haitidata/static/scss/bootstrap/_dropdowns.scss
old mode 100755
new mode 100644
similarity index 72%
rename from haitidata/static/less/bootstrap/dropdowns.less
rename to haitidata/static/scss/bootstrap/_dropdowns.scss
index f6876c1..0a5898a
--- a/haitidata/static/less/bootstrap/dropdowns.less
+++ b/haitidata/static/scss/bootstrap/_dropdowns.scss
@@ -10,10 +10,10 @@
   height: 0;
   margin-left: 2px;
   vertical-align: middle;
-  border-top:   @caret-width-base dashed;
-  border-top:   @caret-width-base solid ~"\9"; // IE8
-  border-right: @caret-width-base solid transparent;
-  border-left:  @caret-width-base solid transparent;
+  border-top: $caret-width-base dashed;
+  border-top: $caret-width-base solid \9; // IE8
+  border-right: $caret-width-base solid transparent;
+  border-left: $caret-width-base solid transparent;
 }
 
 // The dropdown wrapper (div)
@@ -32,21 +32,21 @@
   position: absolute;
   top: 100%;
   left: 0;
-  z-index: @zindex-dropdown;
+  z-index: $zindex-dropdown;
   display: none; // none by default, but block on "open" of the menu
   float: left;
   min-width: 160px;
   padding: 5px 0;
   margin: 2px 0 0; // override default ul
-  list-style: none;
-  font-size: @font-size-base;
+  font-size: $font-size-base;
   text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
-  background-color: @dropdown-bg;
-  border: 1px solid @dropdown-fallback-border; // IE8 fallback
-  border: 1px solid @dropdown-border;
-  border-radius: @border-radius-base;
-  .box-shadow(0 6px 12px rgba(0,0,0,.175));
+  list-style: none;
+  background-color: $dropdown-bg;
   background-clip: padding-box;
+  border: 1px solid $dropdown-fallback-border; // IE8 fallback
+  border: 1px solid $dropdown-border;
+  border-radius: $border-radius-base;
+  @include box-shadow(0 6px 12px rgba(0, 0, 0, .175));
 
   // Aligns the dropdown menu to right
   //
@@ -58,7 +58,7 @@
 
   // Dividers (basically an hr) within the dropdown
   .divider {
-    .nav-divider(@dropdown-divider-bg);
+    @include nav-divider($dropdown-divider-bg);
   }
 
   // Links within the dropdown menu
@@ -66,20 +66,17 @@
     display: block;
     padding: 3px 20px;
     clear: both;
-    font-weight: normal;
-    line-height: @line-height-base;
-    color: @dropdown-link-color;
+    font-weight: 400;
+    line-height: $line-height-base;
+    color: $dropdown-link-color;
     white-space: nowrap; // prevent links from randomly breaking onto new lines
-  }
-}
 
-// Hover/Focus state
-.dropdown-menu > li > a {
-  &:hover,
-  &:focus {
-    text-decoration: none;
-    color: @dropdown-link-hover-color;
-    background-color: @dropdown-link-hover-bg;
+    &:hover,
+    &:focus {
+      color: $dropdown-link-hover-color;
+      text-decoration: none;
+      background-color: $dropdown-link-hover-bg;
+    }
   }
 }
 
@@ -88,10 +85,10 @@
   &,
   &:hover,
   &:focus {
-    color: @dropdown-link-active-color;
+    color: $dropdown-link-active-color;
     text-decoration: none;
+    background-color: $dropdown-link-active-bg;
     outline: 0;
-    background-color: @dropdown-link-active-bg;
   }
 }
 
@@ -103,17 +100,17 @@
   &,
   &:hover,
   &:focus {
-    color: @dropdown-link-disabled-color;
+    color: $dropdown-link-disabled-color;
   }
 
   // Nuke hover/focus effects
   &:hover,
   &:focus {
     text-decoration: none;
+    cursor: $cursor-disabled;
     background-color: transparent;
     background-image: none; // Remove CSS gradient
-    .reset-filter();
-    cursor: @cursor-disabled;
+    @include reset-filter;
   }
 }
 
@@ -135,8 +132,8 @@
 // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
 // menu with the parent.
 .dropdown-menu-right {
-  left: auto; // Reset the default from `.dropdown-menu`
   right: 0;
+  left: auto; // Reset the default from `.dropdown-menu`
 }
 // With v3, we enabled auto-flipping if you have a dropdown within a right
 // aligned nav component. To enable the undoing of that, we provide an override
@@ -145,28 +142,28 @@
 // This is only for left-aligning a dropdown menu within a `.navbar-right` or
 // `.pull-right` nav component.
 .dropdown-menu-left {
-  left: 0;
   right: auto;
+  left: 0;
 }
 
 // Dropdown section headers
 .dropdown-header {
   display: block;
   padding: 3px 20px;
-  font-size: @font-size-small;
-  line-height: @line-height-base;
-  color: @dropdown-header-color;
+  font-size: $font-size-small;
+  line-height: $line-height-base;
+  color: $dropdown-header-color;
   white-space: nowrap; // as with > li > a
 }
 
 // Backdrop to catch body clicks on mobile, etc.
 .dropdown-backdrop {
   position: fixed;
-  left: 0;
+  top: 0;
   right: 0;
   bottom: 0;
-  top: 0;
-  z-index: (@zindex-dropdown - 10);
+  left: 0;
+  z-index: ($zindex-dropdown - 10);
 }
 
 // Right aligned dropdowns
@@ -184,10 +181,10 @@
 .navbar-fixed-bottom .dropdown {
   // Reverse the caret
   .caret {
-    border-top: 0;
-    border-bottom: @caret-width-base dashed;
-    border-bottom: @caret-width-base solid ~"\9"; // IE8
     content: "";
+    border-top: 0;
+    border-bottom: $caret-width-base dashed;
+    border-bottom: $caret-width-base solid \9; // IE8
   }
   // Different positioning for bottom up menu
   .dropdown-menu {
@@ -202,15 +199,15 @@
 //
 // Reiterate per navbar.less and the modified component alignment there.
 
-@media (min-width: @grid-float-breakpoint) {
+@media (min-width: $grid-float-breakpoint) {
   .navbar-right {
     .dropdown-menu {
-      .dropdown-menu-right();
+      right: 0; left: auto;
     }
     // Necessary for overrides of the default right aligned menu.
     // Will remove come v4 in all likelihood.
     .dropdown-menu-left {
-      .dropdown-menu-left();
+      left: 0; right: auto;
     }
   }
 }
diff --git a/haitidata/static/less/bootstrap/forms.less b/haitidata/static/scss/bootstrap/_forms.scss
old mode 100755
new mode 100644
similarity index 67%
rename from haitidata/static/less/bootstrap/forms.less
rename to haitidata/static/scss/bootstrap/_forms.scss
index 9377d38..d2e2bac
--- a/haitidata/static/less/bootstrap/forms.less
+++ b/haitidata/static/scss/bootstrap/_forms.scss
@@ -8,32 +8,32 @@
 // Restyle and baseline non-control form elements.
 
 fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
   // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
   // so we reset that to ensure it behaves more like a standard block element.
   // See https://github.com/twbs/bootstrap/issues/12359.
   min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
 }
 
 legend {
   display: block;
   width: 100%;
   padding: 0;
-  margin-bottom: @line-height-computed;
-  font-size: (@font-size-base * 1.5);
+  margin-bottom: $line-height-computed;
+  font-size: ($font-size-base * 1.5);
   line-height: inherit;
-  color: @legend-color;
+  color: $legend-color;
   border: 0;
-  border-bottom: 1px solid @legend-border-color;
+  border-bottom: 1px solid $legend-border-color;
 }
 
 label {
   display: inline-block;
   max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
   margin-bottom: 5px;
-  font-weight: bold;
+  font-weight: 700;
 }
 
 
@@ -43,9 +43,18 @@ label {
 // is required to ensure optimum display with or without those classes to better
 // address browser inconsistencies.
 
-// Override content-box in Normalize (* isn't specific enough)
 input[type="search"] {
-  .box-sizing(border-box);
+  // Override content-box in Normalize (* isn't specific enough)
+  @include box-sizing(border-box);
+
+  // Search inputs in iOS
+  //
+  // This overrides the extra rounded corners on search inputs in iOS so that our
+  // `.form-control` class can properly style them. Note that this cannot simply
+  // be added to `.form-control` as it's not specific enough. For details, see
+  // https://github.com/twbs/bootstrap/issues/11586.
+  -webkit-appearance: none;
+  appearance: none;
 }
 
 // Position radios and checkboxes better
@@ -54,6 +63,16 @@ input[type="checkbox"] {
   margin: 4px 0 0;
   margin-top: 1px \9; // IE8-9
   line-height: normal;
+
+  // Apply same disabled cursor tweak as for inputs
+  // Some special care is needed because 
-{% endblock %}
-
-{% block body %}
-
-
-{% if announcement %} - {% url "announcements_update" pk=announcement.pk as post_url %} -{% else %} - {% url "announcements_create" as post_url %} -{% endif %} - -
- {% csrf_token %} - {{ form|as_bootstrap }} -
- {% trans "Cancel" %} - {% if announcement %} - {% trans "Delete" %} - {% endif %} - -
-
- -
-
-{% endblock %} diff --git a/haitidata/templates/announcements/announcement_list.html b/haitidata/templates/announcements/announcement_list.html deleted file mode 100644 index fea8f7b..0000000 --- a/haitidata/templates/announcements/announcement_list.html +++ /dev/null @@ -1,55 +0,0 @@ -{% extends "site_base.html" %} -{% load pagination_tags %} -{% load staticfiles %} -{% load url from future %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Announcements" %}{% endblock %} -{% block page-title %} - {% trans "Announcements" %} - -{% endblock %} - -{% block body_class %}announcements{% endblock %} - -{% block body_outer %} -
-
- - - - - - - - {% for announcement in announcement_list %} - - - - - - - {% endfor %} -
{% trans "Title" %}{% trans "Level" %}{% trans "Announcement" %}{% trans "Published From" %}
- {{ announcement.title|truncatewords:50 }} - - {{ announcement.level_label }} - - {{ announcement.content|truncatewords:8 }} - - {% if announcement.publish_start or announcement.publish_end %} - {% blocktrans with publish_start=announcement.publish_start|date:"F j, Y" publish_end=announcement.publish_end|date:"F j, Y"|default:"(no end date)" %} - Published from {{ publish_start }} to {{ publish_end }}. - {% endblocktrans %} - {% endif %} -
-
-
-{% endblock %} diff --git a/haitidata/templates/base/_resourcebase_snippet.html b/haitidata/templates/base/_resourcebase_snippet.html index 7af8e6d..f21ccd9 100644 --- a/haitidata/templates/base/_resourcebase_snippet.html +++ b/haitidata/templates/base/_resourcebase_snippet.html @@ -1,43 +1,94 @@ {% load i18n %} {% verbatim %} -
+ +
-

Aucun contenu trouvé.

+ {% endverbatim %} +

{% trans "Aucun contenu trouvé." %}

+ {% verbatim %}
-
-
-
- - +
+
+
+ + + +
-
- {% endverbatim %} - +
+
+
+

+ {{ item.category__gn_description }}
+ {{ item.group_name }}
+ + {% endverbatim %} + {% trans "Temporal Serie" %}
+ {% verbatim %} +
+

+

+ + + + + + {{ item.title }} +

+
+
+

+ +

+
+
+ + {% endverbatim %} + {% trans "Service is" %} {% trans "online" %} + {% trans "Service is" %} {% trans "offline" %} + {% verbatim %} + + {% endverbatim %} +
{% trans "SECURITY NOT YET SYNCHRONIZED" %} + {% verbatim %}{% endverbatim %}{% trans "Sync permissions immediately" %} +
+
{% trans "PENDING APPROVAL" %}
+
{% trans "UNPUBLISHED" %}
{% verbatim %} -

- {{ item.owner__username }} Official Data | - {{ item.category__gn_description }} -

-

{{ item.title | limitTo: 48 }}{{ item.title.length > 48 ? '...' : ''}}

+

{{ item.abstract | limitTo: 300 }}{{ item.abstract.length > 300 ? '...' : ''}}

- diff --git a/haitidata/templates/charts_app/chart_base.html b/haitidata/templates/charts_app/chart_base.html deleted file mode 100644 index 63868a1..0000000 --- a/haitidata/templates/charts_app/chart_base.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} -{% load url from future %} - -{% block title %} {{ block.super }} {% endblock %} - -{% block body_class %}Charts{% endblock %} - -{% block body_outer %} -{% block body %}{% endblock body %} -{% block sidebar %}{% endblock sidebar %} -{% endblock body_outer %} diff --git a/haitidata/templates/charts_app/chart_confirm_delete.html b/haitidata/templates/charts_app/chart_confirm_delete.html deleted file mode 100644 index 7baa790..0000000 --- a/haitidata/templates/charts_app/chart_confirm_delete.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "charts_app/chart_base.html" %} -{% load i18n %} - -{% block title %}{% trans "Deleting" %} {{ object.title }} — {{ block.super }}{% endblock %} - -{% block body %} - -
-
-

- {% blocktrans with object.title as object_title %} - Are you sure you want to remove {{ object_title }} chart? - {% endblocktrans %} -

-
- {% csrf_token %} - -
-
-
-{% endblock %} \ No newline at end of file diff --git a/haitidata/templates/charts_app/chart_detail.html b/haitidata/templates/charts_app/chart_detail.html deleted file mode 100644 index b7a824f..0000000 --- a/haitidata/templates/charts_app/chart_detail.html +++ /dev/null @@ -1,321 +0,0 @@ -{% extends "charts_app/chart_base.html" %} -{% load i18n %} -{% load dialogos_tags %} -{% load agon_ratings_tags %} -{% load bootstrap_tags %} -{% load url from future %} -{% load base_tags %} -{% load guardian_tags %} - -{% block page-title %} - {% trans "Explore Charts" %} - -{% endblock %} - -{% block subheader %} -
-
-
-
-

{{ object.title }}

-

- -

- {% block social_links %} - {% if SOCIAL_BUTTONS %} - {% include "social_links.html" %} - {% endif %} - {% endblock %} -
-
-
-
-{% endblock %} - - - -{% block body_outer %} - - - - - - - - - -
-
-
-

Abstract

-

{{ object.abstract }}

-
- {% include "_actions.html" %} -
- -
- -
- -
- -
- -
- -
- - -

{% trans "Rate this document" %}

- -
- -

{% trans 'Average Rating' %}

- -
({{num_votes}}) - -
-
-
- - -
- - - - - - - - - - - -{% endblock %} diff --git a/haitidata/templates/charts_app/chart_list.html b/haitidata/templates/charts_app/chart_list.html deleted file mode 100644 index 6a7abdd..0000000 --- a/haitidata/templates/charts_app/chart_list.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "charts_app/chart_base.html" %} -{% load i18n %} -{% load staticfiles %} -{% load url from future %} - -{% block title %}{{ block.super }} {% trans "Charts" %}{% endblock %} -{% block page-title %} - {% trans "Explore Charts" %} -{% endblock %} - -{% block body_class %}charts{% endblock %} - -{% block body %} - {% for chart in object_list %} -

{{ chart.title }}

-

{% trans "Source" %}: {{ chart.layer }}

- -

{{ chart.abstract }}

-
- {% empty %} -

{% trans "No content found." %}

- {% endfor %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% with include_spatial='true' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/charts_app/chart_update_form.html b/haitidata/templates/charts_app/chart_update_form.html deleted file mode 100644 index 3a109f9..0000000 --- a/haitidata/templates/charts_app/chart_update_form.html +++ /dev/null @@ -1,361 +0,0 @@ -{% extends "charts_app/chart_base.html" %} -{% load i18n %} -{% load dialogos_tags %} -{% load agon_ratings_tags %} -{% load bootstrap_tags %} -{% load url from future %} -{% load base_tags %} -{% load guardian_tags %} - -{% block page-title %} - {% trans "Explore Charts" %} - -{% endblock %} - -{% block subheader %} -
-
-
-
-

{{ object.title }}

-

- -

- {% block social_links %} - {% if SOCIAL_BUTTONS %} - {% include "social_links.html" %} - {% endif %} - {% endblock %} -
-
-
-
-{% endblock %} - - - -{% block body_outer %} - - - - - - - - - -
-
-
-

Abstract

-

{{ object.abstract }}

-
- {% include "_actions.html" %} -
- -
- -
- -
- -
- -
- -
- - -

{% trans "Rate this document" %}

- -
- -

{% trans 'Average Rating' %}

- -
({{num_votes}}) - -
-
-
- -
-
  • - - - -
  • -
  • -

    {% trans "Modify this Chart" %}

    -

    {% trans "Change type of the chart or type of aggregation." %}

    - - - -
    -
    - {% csrf_token %} - {{ form.non_field_errors }} -
    - {{ form.layer.as_hidden }} -
    -
    - {{ form.category.as_hidden }} -
    -
    - {{ form.quantity.as_hidden }} -
    -
    - {{ form.title.errors }} - - {{ form.title }} -
    -
    - {{ form.type.errors }} - - {{ form.type }} -
    -
    - {{ form.aggr_type.errors }} - - {{ form.aggr_type }} -
    -
    - {{ form.abstract.errors }} - - {{ form.abstract }} -
    - - -
    -
    -
  • -
  • - - - -
  • -
  • - -
  • - -
    -
    - - - - - - - - - - -{% endblock %} diff --git a/haitidata/templates/clip-and-ship/clip-page.html b/haitidata/templates/clip_and_ship/clip_page.html similarity index 58% rename from haitidata/templates/clip-and-ship/clip-page.html rename to haitidata/templates/clip_and_ship/clip_page.html index 1325222..9eeedbf 100644 --- a/haitidata/templates/clip-and-ship/clip-page.html +++ b/haitidata/templates/clip_and_ship/clip_page.html @@ -5,24 +5,30 @@ {% block title %}{{ block.super }}{% endblock %} -{% block page-title %} -{% if geotiffname == 'ortho_images' %} - Ortho Photos -{% elif geotiffname == 'lidar' %} - {% trans "DSM" %} -{% endif %} + +{% block openlayers %} + {% endblock %} {% block body_class %}layers{% endblock %} {% block body_outer %} +
    - {% if geotiffname == 'ortho_images' %} -

    Les orthophotographies ou orthoimages sont des images aériennes ou satellitales de la surface terrestre rectifiées géométriquement et égalisées radiométriquement. Ces images se présentant sous forme de dalles couvrant une zone de la Terre peuvent être géoréférencées dans n'importe quel système de coordonnées. Elles servent de fonds cartographiques dans les Systèmes d'information géographique.

    + {% if geotiffname == 'ortho' %} +

    Les orthophotographies ou orthoimages sont des images aériennes ou satellitales de la surface terrestre rectifiées géométriquement et égalisées radiométriquement. Ces images se présentant sous forme de dalles couvrant une zone de la Terre peuvent être géoréférencées dans n'importe quel système de coordonnées. Elles servent de fonds cartographiques dans les Systèmes d'information géographique.

    {% else %} -

    Un Modèle Numérique de Terrain (MNT) est une représentation 3D de la surface d'un terrain ou d'une planète, créée à partir des données d'altitude du terrain."

    +

    Un Modèle Numérique de Terrain (MNT) est une représentation 3D de la surface d'un terrain ou d'une planète, créée à partir des données d'altitude du terrain."

    {% endif %}

    Ces prises de vu sur Haiti ont été faites entre le 2014 et le 2016.

    Pour sélectionner la zone d’intérêt:

    @@ -31,7 +37,7 @@
  • Cliquer sur l'icône pour utiliser un rectangle comme forme de base
  • Pour mieux comprendre comment sélectionner la zone d’intérêt, voir le tutoriel.

    -

    La taille maximale accepté est de 40 mégaoctets.

    +

    La taille maximale accepté est de 80 mégaoctets.

    @@ -51,8 +57,8 @@ {% leaflet_js %} {% leaflet_css %} - - + + - {% include 'clip-and-ship/download-clip.html' %} + {% include 'clip_and_ship/download_clip.html' %} {% endblock extra_script %} diff --git a/haitidata/templates/clip-and-ship/download-clip.html b/haitidata/templates/clip_and_ship/download_clip.html similarity index 100% rename from haitidata/templates/clip-and-ship/download-clip.html rename to haitidata/templates/clip_and_ship/download_clip.html diff --git a/haitidata/templates/documents/document_detail.html b/haitidata/templates/documents/document_detail.html deleted file mode 100644 index cdb4e9b..0000000 --- a/haitidata/templates/documents/document_detail.html +++ /dev/null @@ -1,281 +0,0 @@ -{% extends "documents/document_base.html" %} -{% load i18n %} -{% load dialogos_tags %} -{% load agon_ratings_tags %} -{% load bootstrap_tags %} -{% load url from future %} -{% load base_tags %} -{% load guardian_tags %} - -{% block title %}{{ block.super }} {% trans "Documents" %} | {{ resource.title }}{% endblock %} -{% block page-title %} - {% trans "Explore Documents" %} - -{% endblock %} - -{% block head %} - - {% if TWITTER_CARD %} - {% include "base/_resourcebase_twittercard.html" %} - {% endif %} - {% if OPENGRAPH_ENABLED %} - {% include "base/_resourcebase_opengraph.html" %} - {% endif %} - -{{ block.super }} -{% endblock %} - -{% block body_class %}documents{% endblock %} - -{% block subheader %} -
    -
    -
    -
    -

    {{ resource.title }}

    -

    - {{ resource.doc_type }} - {% if resource.category %} - {% trans "in" %} {{ resource.category }} | - {% endif %} - {% if resource.date %} - {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} - {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} - {% else %} {% trans "Updated on" %} {{ resource.date }} - {% endif %} - {% endif %} -

    - {% block social_links %} - {% if SOCIAL_BUTTONS %} - {% include "social_links.html" %} - {% endif %} - {% endblock %} -
    -
    -
    -
    -{% endblock %} - -{% block body_outer %} -
    -
    - {% if "download_resourcebase" in perms_list %} - {% if resource.extension|lower in imgtypes and resource.doc_file %} -
    - - - -
    - {% elif resource.doc_file %} -

    Download the {{ resource }} document

    - {% elif resource.doc_url %} -

    Download the {{ resource }} document. ({% trans 'External Resource' %})

    - {% endif %} - {% endif %} - -
    - {% include "_actions.html" %} -
    - -
    - -
    - {% include "base/resourcebase_info_panel.html" %} -
    - -
    - {% include "_comments.html" %} -
    - -
    - - {% if request.user.is_authenticated %} -

    {% trans "Rate this document" %}

    - {% user_rating request.user resource "document" as user_document_rating %} -
    - {% endif %} -

    {% trans 'Average Rating' %}

    - {% overall_rating resource "document" as document_rating %} - {% num_ratings resource as num_votes %} -
    ({{num_votes}}) - -
    - - {% if EXIF_ENABLED and exif_data %} - {% with "exif/_exif_document_detail.html" as exif_template %} - {% include exif_template %} - {% endwith %} - {% endif %} -
    -
    - -
    - -
  • - - - -
  • - -
      -
    • - {% if "download_resourcebase" in perms_list %} - {% if resource.extension|lower in imgtypes and resource.doc_file %} - - {% elif resource.doc_file %} - - {% elif resource.doc_url %} - - {% endif %} - {% else %} - {% if request.user.is_authenticated %} - - {% endif %} - {% endif %} -
    • - {% if "change_resourcebase_metadata" in perms_list or "change_resourcebase" in perms_list or "delete_resourcebase" in perms_list or "change_layer_style" in layer_perms %} -
    • - -
    • - {% endif %} - - -
    • - -
    • - - -
    • -

      {% trans "Resource using this document" %}

      - {% if layer.maps %} -

      {% trans "List of resources using this document:" %}

      - {% endif %} -
        - {% if related.title %} -

        {% trans "This document is related to a " %} {{ resource.content_type.name }}

        - {{ related.title }} - {% else %} -

        {% trans "This document is not related to any maps or layers" %}

        - {% endif %} -
      -
    • - - {% if "change_resourcebase_permissions" in perms_list %} -
    • -

      {% trans "Permissions" %}

      -

      {% trans "Click the button below to change the permissions of this document." %}

      -

      {% trans "Change Document Permissions" %}

      -
    • - {% include "_permissions_form.html" %} - {% endif %} - - {% include "base/_resourcebase_contact_snippet.html" %} - -
    -
    -
    -{% endblock %} - -{% block extra_script %} -{% if SOCIAL_BUTTONS %} -
    - -{% endif %} - {% if request.user.is_authenticated %} - {% user_rating_js request.user resource "document" %} - {% else %} - {% overall_rating resource "document" as the_doc_rating %} - {% endif %} - {% include 'rating.html' %} - {% include 'request_download.html' %} - - {% include "_permissions_form_js.html" %} -{% endblock extra_script %} diff --git a/haitidata/templates/documents/document_list.html b/haitidata/templates/documents/document_list.html deleted file mode 100644 index b3d5215..0000000 --- a/haitidata/templates/documents/document_list.html +++ /dev/null @@ -1,51 +0,0 @@ -{% extends "documents/document_base.html" %} -{% load i18n %} -{% load staticfiles %} -{% load url from future %} - -{% block title %}{{ block.super }} {% trans "Documents" %}{% endblock %} -{% block page-title %} - {% trans "Explore Documents" %} - {% if user.is_authenticated %} - - {% endif %} -{% endblock %} - -{% block body_class %}documents{% endblock %} - -{% block body %} - {% with include_type_filter='true' %} - {% with facet_type='documents' %} - {% with header='Document Type' %} - {% with filter='doc_type__in' %} - {% include "search/_search_content.html" %} - {% endwith %} - {% endwith %} - {% endwith %} - {% endwith %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% with include_spatial='true' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/documents/document_upload.html b/haitidata/templates/documents/document_upload.html deleted file mode 100644 index 8a69ea9..0000000 --- a/haitidata/templates/documents/document_upload.html +++ /dev/null @@ -1,74 +0,0 @@ -{% extends "documents/document_upload_base.html" %} -{% load bootstrap_tags %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Upload Document" %}{% endblock %} -{% block page-title %}{% trans "Upload Document" %}{% endblock %} - -{% block body_class %}documents{% endblock body_class %} - -{% block head %} - {% include "geonode/ext_header.html" %} - {% include "geonode/app_header.html" %} - {{ block.super }} -{% endblock %} - -{% block body %} - -
    -
    - - {{ form.as_p }} - -
    -
    - -{% endblock %} - -{% block sidebar %} - -
    -

    {% trans "Permissions" %}

    -
    - {% include "_permissions.html" %} -
    -
    - -{% endblock %} - -{% block extra_script %} -{% include "_permissions_form_js.html" %} - - -{% endblock extra_script %} diff --git a/haitidata/templates/documents/document_upload_base.html b/haitidata/templates/documents/document_upload_base.html deleted file mode 100644 index 97eceaa..0000000 --- a/haitidata/templates/documents/document_upload_base.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} -{% load url from future %} - -{% block title %} {{ block.super }} {% endblock %} - -{% block body_class %}documents{% endblock %} - -{% block body_outer %} - -
    - {% block body %}{% endblock body %} - {% block sidebar %}{% endblock sidebar %} -
    -{% endblock body_outer %} diff --git a/haitidata/templates/geonode-client/_client_composer_js.html b/haitidata/templates/geonode-client/_client_composer_js.html deleted file mode 100644 index d6b950b..0000000 --- a/haitidata/templates/geonode-client/_client_composer_js.html +++ /dev/null @@ -1,3 +0,0 @@ -{% load static %} - - diff --git a/haitidata/templates/geonode-client/_client_viewer_js.html b/haitidata/templates/geonode-client/_client_viewer_js.html deleted file mode 100644 index 39b268a..0000000 --- a/haitidata/templates/geonode-client/_client_viewer_js.html +++ /dev/null @@ -1,3 +0,0 @@ -{% load static %} - - diff --git a/haitidata/templates/geonode-client/edit_map.html b/haitidata/templates/geonode-client/edit_map.html deleted file mode 100644 index 48dddaa..0000000 --- a/haitidata/templates/geonode-client/edit_map.html +++ /dev/null @@ -1,62 +0,0 @@ -{% load geonode_client_tags %} -{% load url from future %} - -{% client_composer_js %} - - - - -
    -
    diff --git a/haitidata/templates/geonode-client/layer_map.html b/haitidata/templates/geonode-client/layer_map.html deleted file mode 100644 index 2ba679b..0000000 --- a/haitidata/templates/geonode-client/layer_map.html +++ /dev/null @@ -1,49 +0,0 @@ -{% load geonode_client_tags %} - -{% client_viewer_js %} - - - diff --git a/haitidata/templates/geonode-client/map_detail.html b/haitidata/templates/geonode-client/map_detail.html deleted file mode 100644 index f046be7..0000000 --- a/haitidata/templates/geonode-client/map_detail.html +++ /dev/null @@ -1,51 +0,0 @@ -{% load geonode_client_tags %} -{% load url from future %} - -{% client_viewer_js %} - - - - diff --git a/haitidata/templates/geonode-client/map_new.html b/haitidata/templates/geonode-client/map_new.html deleted file mode 100644 index 4c41874..0000000 --- a/haitidata/templates/geonode-client/map_new.html +++ /dev/null @@ -1,62 +0,0 @@ -{% load geonode_client_tags %} -{% load url from future %} - -{% client_composer_js %} - - - - -
    -
    diff --git a/haitidata/templates/geonode-client/map_view.html b/haitidata/templates/geonode-client/map_view.html deleted file mode 100644 index 5f6a8a4..0000000 --- a/haitidata/templates/geonode-client/map_view.html +++ /dev/null @@ -1,59 +0,0 @@ -{% load geonode_client_tags %} -{% load url from future %} - -{% client_viewer_js %} - - - - -
    -
    diff --git a/haitidata/templates/geonode_base.html b/haitidata/templates/geonode_base.html new file mode 100755 index 0000000..80d77ad --- /dev/null +++ b/haitidata/templates/geonode_base.html @@ -0,0 +1,4 @@ +{% extends "site_base.html" %} + +{% load i18n %} +{% load staticfiles %} diff --git a/haitidata/templates/groups/group_create.html b/haitidata/templates/groups/group_create.html deleted file mode 100644 index 6922cd4..0000000 --- a/haitidata/templates/groups/group_create.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load bootstrap_tags %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Create Group" %}{% endblock %} -{% block page-title %}{% trans "Create Group" %}{% endblock %} - -{% block body_class %}groups{% endblock %} - -{% block body %} - {% if errors %} -
    - {% for error in errors %} -
    {{ error }}
    - {% endfor %} -
    - {% endif %} - -
    - {% csrf_token %} -
    - {{ form|as_bootstrap }} -
    - - -
    -
    -
    -{% endblock %} diff --git a/haitidata/templates/groups/group_detail.html b/haitidata/templates/groups/group_detail.html deleted file mode 100644 index 4c0235f..0000000 --- a/haitidata/templates/groups/group_detail.html +++ /dev/null @@ -1,110 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Groups" %} | {{ object.title|default:object.slug }}{% endblock %} -{% block page-title %}{% trans "Explore Groups" %}{% endblock %} - -{% block head %} - {% if TWITTER_CARD %} - {% include "groups/_group_twittercard.html" %} - {% endif %} - {% if OPENGRAPH_ENABLED %} - {% include "groups/_group_opengraph.html" %} - {% endif %} - {{ block.super }} -{% endblock %} - -{% block body_class %}groups{% endblock %} - -{% block body_outer %} -
    -
    -
    - -
    -

    {{ object.title|default:object.slug }}

    -

    {{ object.description }}

    - {% if object.keyword_list %} -

    - {% for keyword in object.keyword_list %} - {{ keyword }} - {% endfor %} -

    - {% else %} - {% endif %} - {% if object.email %} -

    - {{ object.email }} -

    - {% endif %} -
    -
    -
    -
    -
      - {% if is_manager %} -
    • {% trans "Edit Group Details" %}
    • -
    • {% trans "Manage Group Members" %}
    • -
    • {% trans "Delete this Group" %}
    • - {% endif %} - {% if can_view %} -
    • {% trans "Group Activities" %}
    • - {% endif %} -
    • -

      {% trans "Permissions" %}

      -

      - {% blocktrans with object.get_access_display as access %} - This group is {{ access }}. - {% endblocktrans %} - {% if object.access == "public" %} - {% trans "Anyone may join this group." %} -

      - {% csrf_token %} - {% if not is_member %} - - {% endif %} -
      - {% else %} {% if object.access == "public-invite" %} - {% trans "Anyone may view this group but membership is by invitation only." %} - {% else %} {% if object.access == "private" %} - {% trans "Membership is by invitation only." %} - {% endif %} {% endif %} {% endif %} -

      -
    • -
    • -

      {% trans "Managers" %}

      - {% for manager in object.get_managers %} - {% with manager as profile %} - {% include "people/_profile_about_item.html" %} - {% endwith %} - {% endfor %} -
    • -
    -
    -
    -
    -
    -

    {% trans "Members" %}

    -
    - {% include 'people/_profile_list_item.html' %} -
    -
    - {% include 'search/_pagination.html' %} -
    -{% endblock %} - - -{% block extra_script %} - - {% with include_spatial='false' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/groups/group_list.html b/haitidata/templates/groups/group_list.html deleted file mode 100644 index 01f25d2..0000000 --- a/haitidata/templates/groups/group_list.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load i18n %} -{% load staticfiles %} - -{% block title %}{{ block.super }} {% trans "Explore Groups" %}{% endblock %} -{% block page-title %}{% trans "Explore Groups" %}{% endblock %} - -{% block body_class %}groups{% endblock %} - -{% block body %} - {% with include_type_filter='true' %} - {% with facet_type='groups' %} - {% include "search/_search_user_content.html" %} - {% endwith %} - {% endwith %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} - - {% with include_spatial='false' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/groups/group_members.html b/haitidata/templates/groups/group_members.html deleted file mode 100644 index fa8d757..0000000 --- a/haitidata/templates/groups/group_members.html +++ /dev/null @@ -1,130 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load i18n %} -{% load bootstrap_tags %} - -{% block title %}{{ block.super }} {% trans "Update Group Members" %}{% endblock %} -{% block page-title %}{% trans "Update Group Members" %}{% endblock %} - -{% block sidebar %} -
    -
    - -

    {% trans "Members" %}

    -
    -
    - -
    -
    -
      - {% for member in members %} -

      - {{ member.user.username }} - {% if member.user.email %} - - {% endif %} - | - {% if member.role == 'manager' %} - {% trans 'Manager' %} - | - {% endif %} -
      - {% csrf_token %} - -
      -

      -

      - {% trans 'Role' %}: {{ member.role }} -
      -
      - {% endfor %} -
    -
    -
    -
      - {% for member in members %} - {% if member.role = 'manager' %} -

      - {{ member.user.username }} - {% if member.user.email %} - - {% endif %} - | - {% if member.role == 'manager' %} - {% trans 'Manager' %} - | - {% endif %} -
      - {% csrf_token %} - -
      -

      -

      - {% trans 'Role' %}: {{ member.role }} -
      -
      - {% endif %} - {% endfor %} -
    -
    -
    -
      - {% for member in members %} - {% if member.role = 'member' %} -

      - {{ member.user.username }} - {% if member.user.email %} - - {% endif %} - | - {% if member.role == 'manager' %} - {% trans 'Manager' %} - | - {% endif %} -
      - {% csrf_token %} - -
      -

      -

      - {% trans 'Role' %}: {{ member.role }} -
      -
      - {% endif %} - {% endfor %} -
    -
    -
    - {% if member_form %} -

    {% trans "Add members" %}

    -
    - {% csrf_token %} -
    - {{ member_form|as_bootstrap }}

    -
    - -
    - {% endif %} - - {% if invite_form %} -

    {% trans "Invite people" %}

    -
    - {% csrf_token %} - {{ invite_form|as_bootstrap }} - -
    - {% endif %} -
    -
    -
    -
    -{% endblock %} - -{% block extra_script %} -{% with "none" as layer %} -{% include "_permissions_form_js.html" %} -{% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/groups/group_remove.html b/haitidata/templates/groups/group_remove.html deleted file mode 100644 index efd2917..0000000 --- a/haitidata/templates/groups/group_remove.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Remove Group" %}{% endblock %} -{% block page-title %}{% trans "Remove Group" %}{% endblock %} - -{% block body_class %}groups{% endblock %} - -{% block body %} -
    -
    -
    -

    - {% blocktrans with group.title as group_title %} - Are you sure you want to remove the group: {{ group_title }}? - {% endblocktrans %} -

    - {% csrf_token %} - - -
    -
    -
    -{% endblock %} diff --git a/haitidata/templates/groups/group_update.html b/haitidata/templates/groups/group_update.html deleted file mode 100644 index 199291e..0000000 --- a/haitidata/templates/groups/group_update.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "groups/group_base.html" %} -{% load bootstrap_tags %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Update Group" %}{% endblock %} -{% block page-title %}{% trans "Update Group" %}{% endblock %} - -{% block body_class %}groups{% endblock %} - -{% block body %} -
    -
    -

    {% trans "Update Group" %}

    - {% if errors %} -
    - {% for error in errors %} -
    {{ error }}
    - {% endfor %} -
    - {% endif %} -
    -
    - {% csrf_token %} -
    - {{ form|as_bootstrap }} -
    - - -
    -
    -
    -
    -
    -
    - -{% endblock %} diff --git a/haitidata/templates/layers/download_clip.html b/haitidata/templates/layers/download_clip.html deleted file mode 100644 index fb67ff4..0000000 --- a/haitidata/templates/layers/download_clip.html +++ /dev/null @@ -1,39 +0,0 @@ -{% load leaflet_tags %} -{% load staticfiles %} - -{% leaflet_js %} -{% leaflet_css %} - - - - - - - - -{% include 'clip-and-ship/download-clip.html' %} diff --git a/haitidata/templates/layers/layer_detail.html b/haitidata/templates/layers/layer_detail.html deleted file mode 100644 index 7c7b620..0000000 --- a/haitidata/templates/layers/layer_detail.html +++ /dev/null @@ -1,821 +0,0 @@ -{% extends "layers/layer_base.html" %} -{% load i18n %} -{% load dialogos_tags %} -{% load agon_ratings_tags %} -{% load bootstrap_tags %} -{% load pagination_tags %} -{% load url from future %} -{% load base_tags %} -{% load guardian_tags %} - -{% block title %}{{ block.super }} {% trans "Layers" %} | {{ resource.title|default:resource.typename }}{% endblock %} -{% block page-title %} - {% trans "Explore Layers" %} - -{% endblock %} - -{% block head %} - - {% if TWITTER_CARD %} - {% include "base/_resourcebase_twittercard.html" %} - {% endif %} - - {% if OPENGRAPH_ENABLED %} - {% include "base/_resourcebase_opengraph.html" %} - {% endif %} - - {% if preview == 'geoext' %} - {% include "layers/layer_geoext_map.html" %} - {% elif preview == 'OL3' %} - {% include "layers/layer_ol3_map.html" %} - {% elif preview == 'react' %} - {% include 'geonode-client/layer_map.html' %} - {% else %} - {% include "layers/layer_leaflet_map.html" %} - {% endif %} -{{ block.super }} -{% endblock %} - - -{% block body_class %}layers{% endblock %} - -{% block subheader %} -
    -
    -
    -
    -

    {{ resource.title|default:resource.typename }}

    -

    - {{ resource.service_type }} - {% if resource.category %} - {% trans "in" %} {{ resource.category }} | - {% endif %} - {% if resource.date %} - {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} - {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} - {% else %} {% trans "Updated on" %} {{ resource.date }} - {% endif %} - {% endif %} -

    - {% block social_links %} - {% if SOCIAL_BUTTONS %} - {% include "social_links.html" %} - {% endif %} - {% endblock %} -
    -
    -
    -
    -{% endblock %} - -{% block body_outer %} - -
    -
    - -
    -
    -
    - -
    - {% include "_actions.html" %} -
    - -
    - -
    - {% include "base/resourcebase_info_panel.html" %} -
    - - {% if resource.is_mosaic %} -
    -
    - -
    - {% csrf_token %} -   -
    - {% if filter %} - {% trans "Active Filter:" %} {{ filter }} - {% endif %} -
    - - - - - - - - - - - - {% autopaginate all_granules.features 10 %} - {% for feature in granules.features %} - - - - - - - - {% endfor %} - -
    {% trans "Bounding Box" %} (minX,minY,maxX,maxY){% trans "Time" %}{% trans "Actions" %}
    {% if feature.properties.time %}{{ feature.properties.time }}{% endif %} - Granule Preview - Granule Remove - -
    -
    - {% paginate %} -
    - {% endif %} - -
    - {% if resource.is_mosaic %} - - - - - - - - - - - - - - - - -
    {% trans "Dimension" %}{% trans "Enabled" %}{% trans "Regex" %}
    {% trans "TIME" %}{% if resource.has_time %}{% trans "True" %}{% else %}{% trans "False" %}{% endif %}{% if resource.time_regex %}{{ resource.time_regex }}{% else %} {% endif %}
    - {% endif %} - {% if resource.attribute_set.all %} - - - - - - - {% if wps_enabled %} - - - - - {% endif %} - - - - {% for attribute in resource.attributes %} - - - - - {% if wps_enabled %} - {% if attribute.unique_values == "NA" %} - - {% else %} - - {% endif %} - - - - {% endif %} - - {% endfor %} - -
    {% trans "Attribute Name" %}{% trans "Label" %}{% trans "Description" %}{% trans "Range" %}{% trans "Average" %}{% trans "Median" %}{% trans "Standard Deviation" %}
    {{ attribute }}{{ attribute.attribute_label|default:"" }}{{ attribute.description|default:"" }}{{ attribute.unique_values }} - - {{ attribute.average|floatformat:"2" }}{{ attribute.median|floatformat:"2" }}{{ attribute.stddev|floatformat:"2" }}
    - {% endif %} -
    - - - -
    - {% with resource as obj %} - {% include "_comments.html" %} - {% endwith %} -
    - - {% if GEOGIG_ENABLED and resource.link_set.geogig %} - {% with "_geogig_layer_detail.html" as geogig_template %} -
    - {% with resource as obj %} - {% include geogig_template %} - {% endwith %} -
    - {% endwith %} - {% endif %} - -
    - - {% if request.user.is_authenticated %} -

    {% trans "Rate this layer" %}

    - {% user_rating request.user resource "layer" as user_layer_rating %} -
    - {% endif %} -

    {% trans 'Average Rating' %}

    - {% overall_rating resource "layer" as layer_rating %} - {% num_ratings resource as num_votes %} -
    ({{num_votes}}) -
    - -
    - -
    - -
    - -
      - {% if resource.service_type = "WCS" %} -
    • - -
    • - {% endif %} - {% if resource.storeType != "remoteStore" %} -
    • - {% if links or links_download %} - - {% else %} - {% if request.user.is_authenticated %} - - {% endif %} - {% endif %} -
    • - {% endif %} - - - {% if GEOSERVER_BASE_URL %} - {% get_obj_perms request.user for resource.layer as "layer_perms" %} - {% endif %} - -
    • - - - -
    • - - {% if "change_resourcebase_metadata" in perms_list or "change_resourcebase" in perms_list or "delete_resourcebase" in perms_list or "change_layer_style" in layer_perms %} -
    • - -
    • - - {% endif %} - -
    • - -
    • - - - - {% if resource.get_legend %} -
    • -

      {%trans "Legend" %}

      -

      {{ style.sld_title }}

      - {% if resource.get_legend.link_type == 'image' %} - {% if request.user.is_authenticated and 'access_token' in request.session %} -

      - {% else %} -

      - {% endif %} - {% else %} -
      - {% endif %} -
    • - {% endif %} -
    • -

      {% trans "Maps using this layer" %}

      - {% if resource.maps %} -

      {% trans "List of maps using this layer:" %}

      - {% endif %} -
        - {% for maplayer in resource.maps %} -
      • {{ maplayer.map.title }}
      • - {% empty %} -
      • {% trans "This layer is not currently used in any maps." %}
      • - {% endfor %} -
      -
    • -
    • -

      {% trans "Create a map using this layer" %}

      -

      {% trans "Click the button below to generate a new map based on this layer." %}

      - {% trans "Create a Map" %} -
    • - - - {% if resource.service_type != "WCS" %} -
    • -

      {% trans "Charts using this layer" %}

      - {% if resource.maps %} -

      {% trans "List of charts with this layer:" %}

      - {% endif %} -
        - {% for chart in resource.chart_set.all %} -
      • {{ chart.get_type_display }}, Category field = {{chart.category}}, Quantity field = {{chart.quantity}}
      • - {% empty %} -
      • {% trans "No charts available at this time" %}

      • - {% endfor %} -
      -
    • - {% if "download_resourcebase" in perms_list %} -
    • -

      {% trans "Create a chart using this layer" %}

      -

      {% trans "Click the button below to generate a new chart based on this layer, choosing a quantity and a category field." %}

      -

      Pour voir comment créer un graphique, consulter le tutoriel.

      - -
      -
      - {% csrf_token %} -
      - -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -
      -
      -
      - -
      - -

      Titre suggéré:

      -

      Testo di prova

      -
      -
      -
      - -
      - -
      -
      - - -
      -
      -
    • - {% endif %} - - - - - {% endif %} - - {% if documents.count > 0 %} -
    • -

      {% trans "Documents related to this layer" %}

      -

      {% trans "List of documents related to this layer:" %}

      - -
    • - {% endif %} - - {% if user.is_authenticated %} -
    • -

      {% trans "Styles" %}

      -

      {% trans "The following styles are associated with this layer. Choose a style to view it in the preview map." %}

      -
        - {% for style in resource.styles.all %} -
      • - {% if resource.default_style == style %} - - (default style) - {% else %} - - {% endif %} - {{ style.sld_title }} -
      • - {% empty %} -
      • {% trans "No styles associated with this layer" %}
      • - {% endfor %} -
      -
    • - {% endif %} - - {% if GEONODE_SECURITY_ENABLED %} - {% if "change_resourcebase_permissions" in perms_list %} -
    • -

      {% trans "Permissions" %}

      -

      {% trans "Click the button below to change the permissions of this layer." %}

      -

      {% trans "Change Layer Permissions" %}

      -
    • - {% endif %} - {% endif %} - - {% if resource.storeType == "remoteStore" %} -
    • -

      {% trans "External service layer" %}

      -
      {% trans "Source" %}: {{ resource.service.title }}
      -
      {% trans "Type" %}: {{ resource.service.type }}
      -
    • - {% endif %} - - {% include "base/_resourcebase_contact_snippet.html" %} -
    - - - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form.html" %} - {% endif %} - -
    -
    -{% endblock %} - -{% block extra_script %} -{{ block.super }} - - {% if GEOGIG_ENABLED and resource.link_set.geogig %} - {% with "_geogig_scripts.html" as geogig_scripts_template %} - {% include geogig_scripts_template %} - {% endwith %} - {% endif %} - - {% if request.user.is_authenticated %} - {% user_rating_js request.user resource "layer" %} - {% else %} - {% overall_rating resource 'layer' as the_layer_rating %} - {% endif %} - {% include 'rating.html' %} - {% include 'request_download.html' %} - {% include 'layers/download_clip.html' %} - - - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} -{% endblock extra_script %} diff --git a/haitidata/templates/layers/layer_list.html b/haitidata/templates/layers/layer_list.html deleted file mode 100644 index 0266ac1..0000000 --- a/haitidata/templates/layers/layer_list.html +++ /dev/null @@ -1,52 +0,0 @@ -{% extends "layers/layer_base.html" %} -{% load i18n %} -{% load staticfiles %} -{% load url from future %} - -{% block title %}{{ block.super }} {% trans "Layers" %}{% endblock %} -{% block page-title %} - {% trans "Explore Layers" %} - {% if user.is_authenticated %} - - {% endif %} -{% endblock %} - -{% block body_class %}layers explore{% endblock %} - -{% block body %} - {% with include_type_filter='true' %} - {% with facet_type='layers' %} - {% with header='Type' %} - {% with filter='type__in' %} - {% include "search/_search_content.html" %} - {% endwith %} - {% endwith %} - {% endwith %} - {% endwith %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} -{{ block.super }} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% with include_spatial='true' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/maps/map_detail.html b/haitidata/templates/maps/map_detail.html deleted file mode 100644 index dfc955c..0000000 --- a/haitidata/templates/maps/map_detail.html +++ /dev/null @@ -1,348 +0,0 @@ -{% extends "maps/map_base.html" %} -{% load i18n %} -{% load dialogos_tags %} -{% load agon_ratings_tags %} -{% load url from future %} -{% load base_tags %} -{% load guardian_tags %} - -{% block title %}{{ block.super }} {% trans "Maps" %} | {{ resource.title }}{% endblock %} -{% block page-title %}{% trans "Explore Maps" %}{% endblock %} - -{% block head %} - {% if TWITTER_CARD %} - {% include "base/_resourcebase_twittercard.html" %} - {% endif %} - {% if OPENGRAPH_ENABLED %} - {% include "base/_resourcebase_opengraph.html" %} - {% endif %} - {% if preview == 'OL3' %} - {% include "maps/map_ol3.html" %} - {% elif preview == 'leaflet' %} - {% include "maps/map_leaflet.html" %} - {% elif preview == 'react' %} - {% include 'geonode-client/map_detail.html' %} - {% else %} - {% include "maps/map_include.html" %} - {% endif %} - {{ block.super }} -{% endblock %} - -{% block body_class %}maps{% endblock %} - -{% block subheader %} -
    -
    -
    -
    -

    {{ resource.title }}

    -

    Map - {% if resource.category %} - {% trans "in" %} {{ resource.category }} | - {% endif %} - {% if resource.date %} - {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} - {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} - {% else %} {% trans "Updated on" %} {{ resource.date } } - {% endif %} - {% endif %} -

    - {% block social_links %} - {% if SOCIAL_BUTTONS %} - {% include "social_links.html" %} - {% endif %} - {% endblock %} -
    -
    -
    -
    -{% endblock %} - -{% block body_outer %} - {% overall_rating resource "map" as map_rating %} - -
    -
    - -
    -
    -
    - -
    - {% include "_actions.html" %} -
    - -
    - -
    - {% include "base/resourcebase_info_panel.html" %} -
    - -
    - {% include "_comments.html" %} -
    - -
    - - {% if request.user.is_authenticated %} -

    {% trans "Rate this Map" %}

    - {% user_rating request.user resource "map" as user_map_rating %} -
    - {% endif %} -

    {% trans 'Average Rating' %}

    - {% overall_rating resource "map" as map_rating %} - {% num_ratings resource as num_votes %} -
    ({{num_votes}}) -
    - -
    - -
    - -
    -
      - {% if "download_resourcebase" in perms_list %} -
    • - -
    • - {% endif %} - -
    • - - - -
    • - - - {% if "change_resourcebase" in perms_list or "change_resourcebase_metadata" in perms_list %} -
    • - -
    • - - {% endif %} -
    • - {% trans "View Map" %} -
    • - {% comment %} -
    • - {% trans "Print Map" %} -
    • - {% endcomment %} - -
    • -

      {% trans "Map Layers" %}

      -

      {% trans "This map uses the following layers:" %}

      -
        - {% for layer in resource.layer_set.all %} - {% ifnotequal layer.group 'background' %} - {% if layer.local %} -
      • {{ layer.layer_title }}
      • - {% else %} -
      • {{ layer.layer_title }}
      • - {% endif %} - {% endifnotequal %} - {% endfor %} -
      -
    • - - {% if documents.count > 0 %} -
    • -

      {% trans "Documents related to this map" %}

      -

      {% trans "List of documents related to this map:" %}

      - -
    • - {% endif %} - - {% if "change_resourcebase_permissions" in perms_list %} -
    • -

      {% trans "Permissions" %}

      -

      {% trans "Specify which users can view or modify this map" %}

      - -
    • - {% include "_permissions_form.html" %} - {% endif %} - -
    • -

      {% trans "Copy this map" %}

      -

      {% trans "Duplicate this map and modify it for your own purposes" %}

      - {% trans "Create a New Map" %} -
    • - - {% if resource.is_public and "change_resourcebase" in perms_list or resource.layer_group %} -
    • -

      {% trans "Map WMS" %}

      -
      {% if resource.layer_group %} -
      {% trans "WMS layer group for local map layers" %}:
      -
      {{ resource.layer_group.catalog.name }} ({% trans "on" %} {% trans "local OWS" %})
      - {% endif %}
      - {% if "change_resourcebase" in perms_list %} -

      {% trans "Publish local map layers as WMS layer group" %}

      - {% trans "Publish Map WMS" %} - {% endif %} -
      -
    • - {% endif %} - - {% include "base/_resourcebase_contact_snippet.html" %} - -
    - -
    - -
    - - {% endblock %} - -{% block extra_script %} -{% if SOCIAL_BUTTONS %} -
    - -{% endif %} -{% if request.user.is_authenticated %} - {% user_rating_js request.user resource "map" %} -{% else %} - {% overall_rating resource "map" as the_map_rating %} -{% endif %} -{% include 'rating.html' %} - -{% include "_permissions_form_js.html" %} - - - -{% endblock %} diff --git a/haitidata/templates/maps/map_list.html b/haitidata/templates/maps/map_list.html deleted file mode 100644 index 5f00b1f..0000000 --- a/haitidata/templates/maps/map_list.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends "maps/map_base.html" %} -{% load i18n %} -{% load staticfiles %} -{% load url from future %} - -{% block title %}{{ block.super }} {% trans "Maps" %}{% endblock %} -{% block page-title %} - {% trans "Explore Maps" %} - {% if user.is_authenticated %} - - {% endif %} -{% endblock %} - -{% block body_class %}maps{% endblock %} - -{% block body %} -
    -
    -

    Les cartes constituent une des composantes principales de HaitiData.

    -

    Les cartes sont formées par une ou plusieurs couches chacune représentée avec son propre style. Les couches peuvent provenir soit de HaitiData soit d'un serveur externe supportant le standard WMS soit de services Web tels que Google ou MapQuest.

    -

    Les cartes de HaitiData contient aussi d'autres information comme par exemple le niveau de zoom et l'étendue de la carte, l'ordre des couches et leurs style.

    -
    -
    - {% include "search/_search_content.html" %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% with include_spatial='true' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/maps/map_metadata.html b/haitidata/templates/maps/map_metadata.html deleted file mode 100644 index e3eb6dc..0000000 --- a/haitidata/templates/maps/map_metadata.html +++ /dev/null @@ -1,99 +0,0 @@ -{% extends "maps/map_base.html" %} -{% load i18n %} -{% load bootstrap_tags %} - -{% block title %}{{ block.super }} {{ map.title }} - {% trans "Edit Metadata" %}{% endblock %} -{% block page-title %} - {% trans "Edit Metadata" %} - {% if user.is_authenticated %} - - {% endif %} -{% endblock %} - -{% block body_class %}metadata{% endblock %} - -{% block body_outer %} - -
    -
    -

    - {% blocktrans with map.title as map_title %} - Editing details for {{ map_title }} - {% endblocktrans %} -

    -
    - {% if map.metadata_uploaded %} -
    {% blocktrans %}Note: this map's orginal metadata was populated by importing a metadata XML file. - GeoNode's metadata import supports a subset of ISO, FGDC, and Dublin Core metadata elements. - Some of your original metadata may have been lost.{% endblocktrans %}
    - {% endif %} - - {% if map_form.errors or category_form.errors %} -
    {% blocktrans %}Error updating metadata. Please check the following fields: {% endblocktrans %} -
      - {% for field in map_form %} - {% if field.errors %} -
    • {{ field.label }}
    • - {% endif %} - {% endfor %} - - {% if category_form.errors %} -
    • {{ category_form.errors.as_ul }}
    • - {% endif %} -
    -
    - {% endif %} -
    - -
    - {% csrf_token %} -
    - {{ map_form|as_bootstrap }} -
    - - -
    -
    - {% autoescape off %} -
    - {% for choice in category_form.category_choice_field.field.choices %} -
    - - {{ choice.1 }} - -
    - {% endfor %} -
    - {% endautoescape %} -
    -
    - -
    -
    -
    -
    -{% endblock %} -{% block extra_script %} - {% include 'metadata_form_js.html' %} -{% endblock %} diff --git a/haitidata/templates/maps/map_new.html b/haitidata/templates/maps/map_new.html deleted file mode 100644 index d753ec6..0000000 --- a/haitidata/templates/maps/map_new.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "site_base.html" %} - -{% load i18n %} -{% load base_tags %} - -{% block title %} {% trans "New Map" %} - {{ block.super }} {% endblock %} -{% block head %} - {% if preview == 'geoext' %} - {% include 'maps/map_geoexplorer.js' %} - {% elif preview == 'react' %} - {% include 'geonode-client/map_new.html' %} - {% else %} - {% include 'maps/map_geoexplorer.js' %} - {% endif %} - - - - {{ block.super }} -{% endblock %} - -{% block footer %} - - - -{% endblock %} diff --git a/haitidata/templates/maps/map_remove.html b/haitidata/templates/maps/map_remove.html deleted file mode 100644 index 1f02d3a..0000000 --- a/haitidata/templates/maps/map_remove.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends "maps/map_base.html" %} - -{% load i18n %} -{% load bootstrap_tags %} - -{% block title %}{{ block.super }} {% trans "Remove Map" %}{% endblock %} -{% block page-title %} - {% trans "Remove Map" %} -{% endblock %} - -{% block body %} - -{% endblock %} diff --git a/haitidata/templates/osgeo_importer/_importer_scripts.html b/haitidata/templates/osgeo_importer/_importer_scripts.html deleted file mode 100644 index 6b710c1..0000000 --- a/haitidata/templates/osgeo_importer/_importer_scripts.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/haitidata/templates/osgeo_importer/_importer_styles.html b/haitidata/templates/osgeo_importer/_importer_styles.html deleted file mode 100644 index 16e1f61..0000000 --- a/haitidata/templates/osgeo_importer/_importer_styles.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/haitidata/templates/osgeo_importer/bulk_import.html b/haitidata/templates/osgeo_importer/bulk_import.html deleted file mode 100644 index 678c18b..0000000 --- a/haitidata/templates/osgeo_importer/bulk_import.html +++ /dev/null @@ -1,27 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block head %} - {{ block.super }} -{% endblock %} - -{% block extra_script %} - {% include 'osgeo_importer/_importer_scripts.html' %} - {% include 'osgeo_importer/_importer_styles.html' %} - {{ block.super }} -{% endblock %} - -{% block body_outer %} - - -
    - - - - -{% endblock %} diff --git a/haitidata/templates/osgeo_importer/configure.html b/haitidata/templates/osgeo_importer/configure.html deleted file mode 100644 index 666b258..0000000 --- a/haitidata/templates/osgeo_importer/configure.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block extra_head %} -{% endblock %} - -{% block extra_script %} -{{ block.super }} -{% endblock %} - -{% block body_outer %} - - - -
    -
    - {{object.id}} - {{object.uploadfile_set.first}} -
    -
    - - -{% endblock %} \ No newline at end of file diff --git a/haitidata/templates/osgeo_importer/new.html b/haitidata/templates/osgeo_importer/new.html deleted file mode 100644 index f3e737e..0000000 --- a/haitidata/templates/osgeo_importer/new.html +++ /dev/null @@ -1,62 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block extra_script %} - - -{{ block.super }} -{% endblock %} - -{% block title %}{{ block.super }} {% trans "Upload Data" %}{% endblock %} -{% block page-title %} - {% trans "Upload Data" %} - -{% endblock %} - -{% block body_outer %} - - -
    -
    -
    - {% csrf_token %} -
    - {{form}} -
    -
    - -
    -
    -
    - {% for error in form.file.errors %} - {{ error|escape }} - {% endfor %} -
    - Valid file extensions: {{ VALID_EXTENSIONS }} -
    -
    - -
    -
    -
    -
    - - -{% endblock %} diff --git a/haitidata/templates/osgeo_importer/one_shot_demo/README b/haitidata/templates/osgeo_importer/one_shot_demo/README deleted file mode 100644 index 3a3a63b..0000000 --- a/haitidata/templates/osgeo_importer/one_shot_demo/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory & related items are for temporary demo purposes. If they somehow manage to find their -way into your branch, feel free to remove them: - - templates (this directory) - - urls.py: url(r'^one-shot-demo/?$', login_required(OneShotImportDemoView.as_view())) - - views.py: OneShotImportDemoView - \ No newline at end of file diff --git a/haitidata/templates/osgeo_importer/one_shot_demo/one_shot.html b/haitidata/templates/osgeo_importer/one_shot_demo/one_shot.html deleted file mode 100644 index 678c4f0..0000000 --- a/haitidata/templates/osgeo_importer/one_shot_demo/one_shot.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block head %} - {{ block.super }} - - - - -{% endblock %} - -{% block extra_script %} - {% include 'osgeo_importer/_importer_scripts.html' %} - {% include 'osgeo_importer/_importer_styles.html' %} - {{ block.super }} - - - -{% endblock %} - -{% block body_outer %} - - - -
    - - - -
    - react should populate this -
    - -
    -{% endblock %} diff --git a/haitidata/templates/osgeo_importer/upload_confirm_delete.html b/haitidata/templates/osgeo_importer/upload_confirm_delete.html deleted file mode 100644 index e95d4bf..0000000 --- a/haitidata/templates/osgeo_importer/upload_confirm_delete.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block extra_head %} -{% endblock %} - -{% block extra_script %} -{{ block.super }} -{% endblock %} - -{% block body_outer %} - - - -
    -
    -
    - {% csrf_token %} - - -
    -
    -
    - - -{% endblock %} \ No newline at end of file diff --git a/haitidata/templates/osgeo_importer/uploads-list.html b/haitidata/templates/osgeo_importer/uploads-list.html deleted file mode 100644 index bc8e8a1..0000000 --- a/haitidata/templates/osgeo_importer/uploads-list.html +++ /dev/null @@ -1,52 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} - -{% block extra_script %} - {% include 'osgeo_importer/_importer_scripts.html' %} - {% include 'osgeo_importer/_importer_styles.html' %} - {{ block.super }} -{% endblock %} - -{% block body_class %}importer{% endblock %} - -{% block title %}{{ block.super }} {% trans "Uploads" %}{% endblock %} -{% block page-title %} - {% trans "Manage your Data" %} - {% if user.is_authenticated %} - - {% endif %} -{% endblock %} - -{% block body_outer %} -
    -
    -
    -
    -
    - -
    - {% verbatim %} -
    -

    - There are currently no uploads in the database. - Showing 1 upload of {{ totalItems }}. - Showing uploads {{ offset ? offset : 1 }}-{{ offset+uploads.length }} of {{ totalItems }}. -

    -
    - {% endverbatim %} -
    - -
    - -
    -
    -
    -
    -{% endblock %} diff --git a/haitidata/templates/people/_profile_list_item.html b/haitidata/templates/people/_profile_list_item.html new file mode 100644 index 0000000..7c3fb62 --- /dev/null +++ b/haitidata/templates/people/_profile_list_item.html @@ -0,0 +1,56 @@ +{% load i18n %} + +{% verbatim %} + +{% endverbatim %} diff --git a/haitidata/templates/people/profile_detail.html b/haitidata/templates/people/profile_detail.html deleted file mode 100644 index 89f9115..0000000 --- a/haitidata/templates/people/profile_detail.html +++ /dev/null @@ -1,198 +0,0 @@ -{% extends "people/profile_base.html" %} -{% load static %} -{% load friendly_loader %} -{% friendly_load i18n avatar_tags relationship_tags activity_tags %} -{% load pagination_tags %} - -{% block title %}{{ block.super }} {% trans "Profile of " %}{{ profile.first_name|default:profile.username }}{% endblock %} -{% block page-title %}{% trans "User Profiles" %}{% endblock %} - -{% block head %} - {% if TWITTER_CARD %} - {% include "people/_profile_twittercard.html" %} - {% endif %} - {% if OPENGRAPH_ENABLED %} - {% include "people/_profile_opengraph.html" %} - {% endif %} - {{ block.super }} -{% endblock %} - -{% block body_class %}people explore{% endblock %} - -{% block body %} -
    - {% avatar profile 240 %} -
    - -
    - -{% if user.is_authenticated %} -{% if user == profile %} - {% for group in profile.group_list_all %} - - - {% endfor %} -{% else %} - {% for group in profile.group_list_public %} - - - {% endfor %} -{% endif %} -{% endif %} - -

    {{ profile.first_name|default:profile.name_long }}

    - - - - - {% if profile.email %} - - {% else %} - - {% endif %} - - - - - - - - - - {% if user.is_authenticated %} - - - - - - - {% if profile.voice %} - - {% else %} - - {% endif %} - - - - - - - - - - {% endif %} - - - - - - -
    - -
    - - {% if user == profile %} - - - - {% if user.is_superuser %} - - {% if_has_tag if_relationship %} - {% include "relationships/_manage_connections.html" %} - {% endif_has_tag %} - {% else %} - {% if user.is_superuser %} - - {% endif %} - - {% if_has_tag if_relationship %} - {% include "relationships/_profile_follow.html" %} - {% endif_has_tag %} - {% endif %} - - {% if_has_tag if_relationship %} - {% include "relationships/_list_connections.html" %} - {% endif_has_tag %} -
    - -
    -

    {% trans "Resources" %}

    -
    - {% include "people/_profile_filters.html" %} -
    - -
    - {% include 'base/_resourcebase_snippet.html' %} -
    -
    - {% include 'search/_pagination.html' %} -
    -
    - -{% endblock %} - -{% block extra_script %} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% include 'search/search_scripts.html' %} -{% endblock %} diff --git a/haitidata/templates/people/profile_edit.html b/haitidata/templates/people/profile_edit.html deleted file mode 100644 index f40b2a4..0000000 --- a/haitidata/templates/people/profile_edit.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "people/profile_base.html" %} -{% load i18n avatar_tags %} -{% load bootstrap_tags %} - -{% block body_class %}people{% endblock %} - -{% block title %}{{ block.super }} {% trans "Edit Profile" %}{% endblock %} -{% block page-title %} - {% if user == profile %} - {% trans "Edit Your Profile" %} - {% else %} - {% trans "Edit Profile for" %} {{ profile.username }} - {% endif %} - -{% endblock %} - -{% block body %} -
    - {% avatar profile.username 240 %} - {% if user == profile %} -

    {% trans "Change your avatar" %}

    - {% endif %} -
    - -
    -
    - {% csrf_token %} -
    - {{ form|as_bootstrap }} -
    -
    - -
    -
    -
    -{% endblock %} diff --git a/haitidata/templates/people/profile_list.html b/haitidata/templates/people/profile_list.html deleted file mode 100644 index 11b1138..0000000 --- a/haitidata/templates/people/profile_list.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "people/profile_base.html" %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "People" %}{% endblock %} -{% block page-title %}{% trans "Explore People" %}{% endblock %} - -{% block body_class %}people{% endblock %} - -{% block body %} - {% with include_type_filter='true' %} - {% with facet_type='people' %} - {% include "search/_search_user_content.html" %} - {% endwith %} - {% endwith %} - {% include "_bulk_permissions_form.html" %} -{% endblock %} - -{% block extra_script %} - - {% with include_spatial='false' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/search/_extent_filter.html b/haitidata/templates/search/_extent_filter.html index 1b84a3f..a1c03f2 100644 --- a/haitidata/templates/search/_extent_filter.html +++ b/haitidata/templates/search/_extent_filter.html @@ -1,10 +1,10 @@ {% load i18n %} + diff --git a/haitidata/templates/search/_general_filters.html b/haitidata/templates/search/_general_filters.html deleted file mode 100644 index f87dd29..0000000 --- a/haitidata/templates/search/_general_filters.html +++ /dev/null @@ -1,43 +0,0 @@ -{% load i18n %} -{% if SEARCH_FILTERS.CATEGORIES_ENABLED %} - -{% endif %} -{% if SEARCH_FILTERS.OWNERS_ENABLED %} - -{% endif %} -{% if SEARCH_FILTERS.DATE_ENABLED %} - -{% endif %} diff --git a/haitidata/templates/search/_group_snippet.html b/haitidata/templates/search/_group_snippet.html deleted file mode 100644 index cb1f311..0000000 --- a/haitidata/templates/search/_group_snippet.html +++ /dev/null @@ -1,34 +0,0 @@ -{% verbatim %} -
    -
    -
    -
    -{% endverbatim %} diff --git a/haitidata/templates/search/_h_keywords_filter.html b/haitidata/templates/search/_h_keywords_filter.html deleted file mode 100644 index 7a3edd2..0000000 --- a/haitidata/templates/search/_h_keywords_filter.html +++ /dev/null @@ -1,5 +0,0 @@ -{% load i18n %} - diff --git a/haitidata/templates/search/_pagination.html b/haitidata/templates/search/_pagination.html deleted file mode 100644 index 45deb58..0000000 --- a/haitidata/templates/search/_pagination.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load i18n %} - - - diff --git a/haitidata/templates/search/_region_filter.html b/haitidata/templates/search/_region_filter.html deleted file mode 100644 index f1cdc4c..0000000 --- a/haitidata/templates/search/_region_filter.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load i18n %} -{% load base_tags %} - diff --git a/haitidata/templates/search/_search_content.html b/haitidata/templates/search/_search_content.html index 26de0de..be0d543 100644 --- a/haitidata/templates/search/_search_content.html +++ b/haitidata/templates/search/_search_content.html @@ -1,19 +1,14 @@ {% load i18n %}
    - +
    {% block bulk_perms_button %}
    - {% if request.user.is_authenticated %} -
    - -
    - {% endif %} {% if facet_type == 'layers' %}
    - +
    {% endif %}
    @@ -33,6 +28,9 @@ {% if SEARCH_FILTERS.REGION_ENABLED %} {% include "search/_region_filter.html" %} {% endif %} + {% if SEARCH_FILTERS.TYPE_ENABLED and include_type_filter == 'true' %} + {% include "search/_type_filters.html" %} + {% endif %} {% include "search/_general_filters.html" %} {% if SEARCH_FILTERS.H_KEYWORDS_ENABLED %} {% include "search/_h_keywords_filter.html" %} @@ -40,22 +38,30 @@ {% if SEARCH_FILTERS.T_KEYWORDS_ENABLED %} {% include "search/_t_keywords_filter.html" %} {% endif %} - {% if SEARCH_FILTERS.TYPE_ENABLED and include_type_filter == 'true' %} - {% include "search/_type_filters.html" %} - {% endif %}
    -
    - Total: - +
    +
    + {% if facet_type == 'layers' %} + + {% elif facet_type == 'maps' %} + + {% elif facet_type == 'documents' %} + + {% else %} + + {% endif %} +
    +
    {% include "search/_sort_filters.html" %}
    - {% include "search/_sort_filters.html" %} -
    - {% include 'base/_resourcebase_snippet.html' %} - {% include 'search/_pagination.html' %} +
    +
    + {% include 'base/_resourcebase_snippet.html' %} + {% include 'search/_pagination.html' %} +
    {% include "_bulk_permissions_form.html" %} diff --git a/haitidata/templates/search/_search_user_content.html b/haitidata/templates/search/_search_user_content.html deleted file mode 100644 index 39a4757..0000000 --- a/haitidata/templates/search/_search_user_content.html +++ /dev/null @@ -1,42 +0,0 @@ -{% load i18n %} -
    -
    -
    -
    - {% load base_tags %} - -
    -
    -
    -
    -
    - Total: - -
    - {% include "search/_sort_filters.html" %} -
    - {% if facet_type == 'groups' %} - {% include 'search/_group_snippet.html' %} - {% elif facet_type == 'people' %} - {% include "people/_profile_list_item.html" %} - {% endif %} -
    - {% include 'search/_pagination.html' %} -
    -
    diff --git a/haitidata/templates/search/_sort_filters.html b/haitidata/templates/search/_sort_filters.html deleted file mode 100644 index 702e94b..0000000 --- a/haitidata/templates/search/_sort_filters.html +++ /dev/null @@ -1,54 +0,0 @@ -{% load i18n %} - -
    -
    - - -
    -
    diff --git a/haitidata/templates/search/_spatial_tags.html b/haitidata/templates/search/_spatial_tags.html deleted file mode 100644 index 4b6b451..0000000 --- a/haitidata/templates/search/_spatial_tags.html +++ /dev/null @@ -1,4 +0,0 @@ -{% load leaflet_tags %} - -{% leaflet_js %} -{% leaflet_css %} \ No newline at end of file diff --git a/haitidata/templates/search/_t_keywords_filter.html b/haitidata/templates/search/_t_keywords_filter.html deleted file mode 100644 index 5602f6a..0000000 --- a/haitidata/templates/search/_t_keywords_filter.html +++ /dev/null @@ -1,28 +0,0 @@ -{% load i18n %} - -
    -{% for tname in THESAURI_FILTERS %} - - - -{% endfor %} - -
    - - - diff --git a/haitidata/templates/search/_text_filter.html b/haitidata/templates/search/_text_filter.html deleted file mode 100644 index df084de..0000000 --- a/haitidata/templates/search/_text_filter.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load i18n %} -{% load base_tags %} - diff --git a/haitidata/templates/search/_type_filters.html b/haitidata/templates/search/_type_filters.html deleted file mode 100644 index a6e7bcd..0000000 --- a/haitidata/templates/search/_type_filters.html +++ /dev/null @@ -1,18 +0,0 @@ -{% load i18n %} -{% load base_tags %} - diff --git a/haitidata/templates/search/indexes/documents/document_text.txt b/haitidata/templates/search/indexes/documents/document_text.txt deleted file mode 100644 index 6d94c07..0000000 --- a/haitidata/templates/search/indexes/documents/document_text.txt +++ /dev/null @@ -1,6 +0,0 @@ -{{ object.content }} -{{ object.title }} -{{ object.abstract }} -{{ object.purpose }} -{{ object.supplemental_information }} -{{ object.keyword_list }} \ No newline at end of file diff --git a/haitidata/templates/search/indexes/groups/groupprofile_text.txt b/haitidata/templates/search/indexes/groups/groupprofile_text.txt deleted file mode 100644 index e84a438..0000000 --- a/haitidata/templates/search/indexes/groups/groupprofile_text.txt +++ /dev/null @@ -1,4 +0,0 @@ -{{ object.content }} -{{ object.title }} -{{ object.description }} -{{ object.keyword_list }} \ No newline at end of file diff --git a/haitidata/templates/search/indexes/layers/layer_text.txt b/haitidata/templates/search/indexes/layers/layer_text.txt deleted file mode 100644 index 78f6b9a..0000000 --- a/haitidata/templates/search/indexes/layers/layer_text.txt +++ /dev/null @@ -1,7 +0,0 @@ -{{ object.content }} -{{ object.title }} -{{ object.abstract }} -{{ object.purpose }} -{{ object.name }} -{{ object.supplemental_information }} -{{ object.keyword_list }} diff --git a/haitidata/templates/search/indexes/maps/map_text.txt b/haitidata/templates/search/indexes/maps/map_text.txt deleted file mode 100644 index 78f6b9a..0000000 --- a/haitidata/templates/search/indexes/maps/map_text.txt +++ /dev/null @@ -1,7 +0,0 @@ -{{ object.content }} -{{ object.title }} -{{ object.abstract }} -{{ object.purpose }} -{{ object.name }} -{{ object.supplemental_information }} -{{ object.keyword_list }} diff --git a/haitidata/templates/search/indexes/people/profile_text.txt b/haitidata/templates/search/indexes/people/profile_text.txt deleted file mode 100644 index e3efe10..0000000 --- a/haitidata/templates/search/indexes/people/profile_text.txt +++ /dev/null @@ -1,7 +0,0 @@ -{{ object.content }} -{{ object.get_full_name }} -{{ object.username }} -{{ object.name }} -{{ object.organization }} -{{ object.profile}} -{{ object.position }} diff --git a/haitidata/templates/search/search.html b/haitidata/templates/search/search.html deleted file mode 100644 index 6ea6005..0000000 --- a/haitidata/templates/search/search.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "site_base.html" %} -{% load i18n %} -{% load staticfiles %} -{% load url from future %} - -{% block page-title %} - {% trans "Search" %} -{% endblock %} - -{% block body_class %}search{% endblock %} - -{% block body_outer %} - {% with include_type_filter='true' %} - {% with header='Type' %} - {% with filter='type__in' %} - {% include "search/_search_content.html" %} - {% endwith %} - {% endwith %} - {% endwith %} -{% endblock %} - -{% block extra_script %} -{{ block.super }} - {% if GEONODE_SECURITY_ENABLED %} - {% include "_permissions_form_js.html" %} - {% endif %} - - {% with include_spatial='true' %} - {% include 'search/search_scripts.html' %} - {% endwith %} -{% endblock extra_script %} diff --git a/haitidata/templates/search/search_scripts.html b/haitidata/templates/search/search_scripts.html index f98a718..94a8c46 100644 --- a/haitidata/templates/search/search_scripts.html +++ b/haitidata/templates/search/search_scripts.html @@ -1,32 +1,37 @@ {% load base_tags %} -{% if DEBUG_STATIC %} +{% load static from staticfiles %} - - - +{% if DEBUG_STATIC %} + + + {% endif %} {% if include_spatial == 'true' %} -{% include 'search/_spatial_tags.html' %} - {% endif %} - - - + + + diff --git a/haitidata/templates/services/service_edit.html b/haitidata/templates/services/service_edit.html deleted file mode 100644 index 64d38ab..0000000 --- a/haitidata/templates/services/service_edit.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "services/services_base.html" %} -{% load bootstrap_tags %} -{% load i18n %} - -{% block head %} -{{ block.super }} - - -{% endblock %} - -{% block title %} Edit Service - {{ block.super }} {% endblock %} - -{% block body %} - -
    - {% csrf_token %} - {{ service_form|as_bootstrap }} -
    -

    -
    -
    -{% endblock %} \ No newline at end of file diff --git a/haitidata/templates/services/service_list.html b/haitidata/templates/services/service_list.html deleted file mode 100644 index 477a6e2..0000000 --- a/haitidata/templates/services/service_list.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "services/services_base.html" %} -{% load i18n %} - -{% block title %}{{ block.super }} {% trans "Services" %}{% endblock %} -{% block page-title %} - {% trans "Remote Services" %} - -{% endblock %} - -{% block body_outer %} -
    -
    - {% if services %} - - - - - - {% for service in services %} - - - - - {% endfor %} -
    TitleURL
    {{ service.title }}{{ service.base_url }}
    - {% else %} -

    No services registered

    - {% endif %} -
    -
    -{% endblock %} diff --git a/haitidata/templates/services/service_register.html b/haitidata/templates/services/service_register.html deleted file mode 100644 index f8c61b1..0000000 --- a/haitidata/templates/services/service_register.html +++ /dev/null @@ -1,104 +0,0 @@ -{% extends "services/services_base.html" %} -{% load bootstrap_tags %} -{% load i18n %} - -{% block head %} -{{ block.super }} -{% endblock %} - -{% block title %}{{ block.super }} {% trans "Services" %}{% endblock %} -{% block page-title %}{% trans "Register Service" %}{% endblock %} - -{% block body_outer %} -
    -
    -
    - {% csrf_token %} - {{ create_service_form|as_bootstrap }} - -

    -
    - - - - - - -
    -
    -{% endblock %} -{% block extra_script %} - -{% endblock %} diff --git a/haitidata/templates/site_base.html b/haitidata/templates/site_base.html index c0c37b1..1304208 100644 --- a/haitidata/templates/site_base.html +++ b/haitidata/templates/site_base.html @@ -1,247 +1,579 @@ -{% extends "base.html" %} + + {% load i18n avatar_tags %} +{% load static from staticfiles %} +{% load account socialaccount %} +{% load base_tags %} -{% block head %} - {% if DEBUG_STATIC %} - - - - - - {% else %} - - {% endif %} - - - - - - - - - - - - - - - - - - - - - {% block extra_head %} + + + + + + + + + + + + + {% block title %}HaitiData{% endblock %} + + + + {% block openlayers %} + + {% endblock %} -{% endblock %} - -{% block header %} -
    + + {% endblock header %} + + + - - {% endblock header %} - +
    + {% block middle %} +
    + {% include "_status_message.html" %} + {% include "_announcements.html" %} + {% include "_messages.html" %} + {% block body_outer %} +
    +
    + {% block body %}{% endblock %} +
    +
    + {% block sidebar %}{% endblock %} +
    +
    + {% endblock %} +
    + {% endblock middle %} + + {% block extra_mainbody %} + {% endblock extra_mainbody %} - {% block middle %} -
    -
    -

    {% block page-title %}{% endblock %}

    -
    -
    - {% block subheader %}{% endblock %} -
    - {% include "_status_message.html" %} - {% include "_announcements.html" %} - {% include "_messages.html" %} - {% block body_outer %} -
    -
    - {% block body %}{% endblock %} -
    -
    - {% block sidebar %}{% endblock %} -
    -
    - {% endblock %}
    - {% endblock middle %} + {% block monitoring %} + {% endblock %} {% block footer %} - - {% endblock footer %} + + {% endif %} + + {% endblock footer %} + + + + {% if not user.is_authenticated %} + + {% endif %} + + + {% if DEBUG_STATIC %} + + + + + + + + + + + + + + + + {% else %} + + {% endif %} + + + {% include 'autocomplete_light/static.html' %} + + {% block extra_script %}{% endblock extra_script %} + + + + + + + + + + + + diff --git a/haitidata/templates/site_index.html b/haitidata/templates/site_index.html old mode 100644 new mode 100755 index 189f364..58284c4 --- a/haitidata/templates/site_index.html +++ b/haitidata/templates/site_index.html @@ -20,7 +20,7 @@

    {% blocktrans %}Haiti Risk and Hazards{% endblocktrans %}

    - +

    {% blocktrans %}River Flood{% endblocktrans %}

    @@ -50,7 +50,7 @@

    {% blocktrans %}Water Scarcity{% endblocktrans %}

    - +

    {% blocktrans %}Landslide{% endblocktrans %}

    @@ -69,7 +69,7 @@

    {% blocktrans %}DSM/DTM{% endblocktrans %}

    diff --git a/haitidata/templates/social/activity_list.html b/haitidata/templates/social/activity_list.html deleted file mode 100644 index 6a69c7a..0000000 --- a/haitidata/templates/social/activity_list.html +++ /dev/null @@ -1,72 +0,0 @@ -{% extends 'site_base.html' %} -{% load activity_tags social_tags i18n %} - -{% block title %}{{ block.super }} {% trans "Recent activity" %}{% endblock %} -{% block page-title %}{% trans "Recent activity" %}{% endblock %} - -{% comment %} -{% block subnav %} -
  • RSS
  • -
  • ATOM
  • -{% endblock %} -{% endcomment %} - -{% block body %} - -
    -
    -
      - {% for action in action_list %} - {% activity_item action %} - {% empty %} -

      {% trans "No actions yet" %}

      - {% endfor %} -
    -
    -
    -
      - {% for action in action_list_layers %} - {% activity_item action %} - {% empty %} -

      {% trans "No actions yet" %}

      - {% endfor %} -
    -
    -
    -
      - {% for action in action_list_maps %} - {% activity_item action %} - {% empty %} -

      {% trans "No actions yet" %}

      - {% endfor %} -
    -
    -
    -
      - {% for action in action_list_comments %} - {% activity_item action %} - {% empty %} -

      {% trans "No actions yet" %}

      - {% endfor %} -
    -
    -
    -{% endblock %} - -{% block extra_script %} -{{ block.super }} - -{% endblock %} diff --git a/haitidata/templates/social_links.html b/haitidata/templates/social_links.html deleted file mode 100644 index a0ade2d..0000000 --- a/haitidata/templates/social_links.html +++ /dev/null @@ -1,14 +0,0 @@ -{% load i18n %} -{% block extra_head %} - -{% endblock %} - -{% block social_links %} -
    - {% for social_link in social_links %} - {% if social_link.url %} - - {% endif %} - {% endfor %} -
    -{% endblock %} diff --git a/haitidata/templates/tutorials.html b/haitidata/templates/tutorials.html index be8f7f5..0d842f5 100644 --- a/haitidata/templates/tutorials.html +++ b/haitidata/templates/tutorials.html @@ -24,14 +24,14 @@

    {% trans "Présentation de la plateforme" %}

    {% trans "Aperçu de toutes les principales fonctionnalités de HaitiData" %}.

    - +

    {% trans "Filtres de recherche" %}

    {% trans "Illustration des principaux critères de filtrage pour une leur utilisation optimale" %}.

    - +

    @@ -60,7 +60,7 @@

    {% trans "Symboliser les couches" %}

    {% trans "Instructions pour changer le style de représentation d’une couche." %}

    - +

    @@ -74,19 +74,22 @@

    {% trans "Créer des cartes" %}

    {% trans "Procédure de création d’une carte et de gestion des ses métadonnées et privilèges." %}

    - +

    {% trans "Gestion des utilisateurs" %}

    {% trans "Comment gérer les utilisateurs, les groupes et les privilèges." %}

    - +

    {% trans "Rancher" %}

    -

    {% trans "La géstion de Rancher." %}

    +

    {% trans "La gestion avec Rancher." %}

    +
    + +
    diff --git a/haitidata/templates/upload/layer_upload.html b/haitidata/templates/upload/layer_upload.html deleted file mode 100644 index 01c2e86..0000000 --- a/haitidata/templates/upload/layer_upload.html +++ /dev/null @@ -1,151 +0,0 @@ -{% extends "upload/layer_upload_base.html" %} -{% load i18n %} -{% load staticfiles %} - -{% block title %}{{ block.super }} {% trans "Upload Layer" %}{% endblock %} -{% block page-title %} - {% trans "Upload Layer" %} - -{% endblock %} - -{% block body_class %}layers{% endblock %} - -{% block head %} - -{{ block.super }} -{% endblock %} - -{% block body_outer %} - -
    -
    - {% if incomplete %} -
    -

    {% trans "Incomplete Uploads" %}

    -

    {% trans "You have the following incomplete uploads" %}:

    - {% for u in incomplete %} -
    -
    {{ u.name }}, {% trans "last updated on" %} {{ u.date }}
    - -
    - {% endfor %} -
    - - {% endif %} - - {% block additional_info %}{% endblock %} - - {% if errors %} -
    - {% for error in errors %} -

    {{ error }}

    - {% endfor %} -
    - {% endif %} - -
    - -
    -


    {% trans "Drop files here" %}

    -
    - -

    {% trans " or select them one by one:" %}

    - -
    - - - -
    - -
    -
      -

      {% trans "Files to be uploaded" %}

      -
      - -
      - -
      -

      {% trans "Select the charset or leave default" %}

      - -
      - -
      - {% trans "Clear" %} - {% trans "Upload files" %} -
      -
      - - {% if GEONODE_SECURITY_ENABLED %} -
      -

      {% trans "Permissions" %}

      -
      - {% include "_permissions.html" %} -
      -
      - {% endif %} -
      -{% endblock %} - - -{% block extra_script %} - - -{% if GEONODE_SECURITY_ENABLED %} -{% with resource=layer %} -{% include "_permissions_form_js.html" %} -{% endwith %} -{% endif %} -{% endblock extra_script %} diff --git a/haitidata/urls.py b/haitidata/urls.py index a301728..d563bd2 100644 --- a/haitidata/urls.py +++ b/haitidata/urls.py @@ -1,29 +1,35 @@ -from django.conf.urls import patterns, url +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2017 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +from django.conf.urls import url, include from django.views.generic import TemplateView -from osgeo_importer.urls import urlpatterns as importer_urlpatterns -from geonode.urls import * +from geonode.urls import urlpatterns -from filter.urls import api_ext -from thumbnail.views import layer_thumbnail +urlpatterns += [ +## include your urls here -urlpatterns = patterns('', +] + +urlpatterns = [ url(r'^/?$', TemplateView.as_view(template_name='site_index.html'), name='home'), - url(r'', include(api_ext.urls)), - url(r'^layers/(?P[^/]*)/thumbnail$', layer_thumbnail, name='layer_thumbnail2'), - ) + urlpatterns + [ - url(r'^chart/', include('charts_app.urls')), - url(r'^table/', include('wfs_harvest.urls')), - url(r'^clip/', include('clip-and-ship.urls')), - url(r'^contact/$', TemplateView.as_view(template_name='contact.html'), name='contact'), - url(r'^tutorials/$', TemplateView.as_view(template_name='tutorials.html'), name='tutorials'), - ] - -urlpatterns += patterns( - '', - url(r'^i18n/', include('django.conf.urls.i18n')), -) -urlpatterns += importer_urlpatterns -urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + ] + urlpatterns diff --git a/haitidata/utils.py b/haitidata/utils.py deleted file mode 100644 index ca8b373..0000000 --- a/haitidata/utils.py +++ /dev/null @@ -1,22 +0,0 @@ -# coding=utf-8 - -"""Helpers for settings.""" -import os - -# Absolute filesystem path to the Django project directory: -DJANGO_ROOT = os.path.dirname( - os.path.dirname( - os.path.dirname(os.path.abspath(__file__)) - )) - - -def absolute_path(*args): - """Get an absolute path for a file that is relative to the django root. - - :param args: List of path elements. - :type args: list - - :returns: An absolute path. - :rtype: str - """ - return os.path.join(DJANGO_ROOT, *args) diff --git a/haitidata/version.py b/haitidata/version.py new file mode 100644 index 0000000..fcbc5d7 --- /dev/null +++ b/haitidata/version.py @@ -0,0 +1,52 @@ +import datetime +import os +import subprocess + + +def get_version(version=None): + "Returns a PEP 386-compliant version number from VERSION." + if version is None: + from geonode import __version__ as version + else: + assert len(version) == 5 + assert version[3] in ('unstable', 'beta', 'rc', 'final') + + # Now build the two parts of the version number: + # main = X.Y[.Z] + # sub = .devN - for pre-alpha releases + # | {a|b|c}N - for alpha, beta and rc releases + + parts = 2 if version[2] == 0 else 3 + main = '.'.join(str(x) for x in version[:parts]) + + sub = '' + if version[3] == 'unstable': + git_changeset = get_git_changeset() + if git_changeset: + sub = '.dev%s' % git_changeset + + elif version[3] != 'final': + mapping = {'beta': 'b', 'rc': 'rc'} + sub = mapping[version[3]] + str(version[4]) + + return main + sub + + +def get_git_changeset(): + """Returns a numeric identifier of the latest git changeset. + + The result is the UTC timestamp of the changeset in YYYYMMDDHHMMSS format. + This value isn't guaranteed to be unique, but collisions are very unlikely, + so it's sufficient for generating the development version numbers. + """ + repo_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + git_show = subprocess.Popen('git show --pretty=format:%ct --quiet HEAD', + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + shell=True, cwd=repo_dir, universal_newlines=True) + timestamp = git_show.communicate()[0].partition('\n')[0] + try: + timestamp = datetime.datetime.utcfromtimestamp(int(timestamp)) + except ValueError: + return None + return timestamp.strftime('%Y%m%d%H%M%S') + diff --git a/haitidata/wsgi.py b/haitidata/wsgi.py index a5ff3e7..9b6b343 100644 --- a/haitidata/wsgi.py +++ b/haitidata/wsgi.py @@ -1,3 +1,23 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2017 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + """ WSGI config for haitidata project. diff --git a/jetty-runner.xml b/jetty-runner.xml new file mode 100644 index 0000000..6f56792 --- /dev/null +++ b/jetty-runner.xml @@ -0,0 +1,10 @@ + + + + /geoserver + geoserver + + org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern + WONTMATCH + + diff --git a/manage.py b/manage.py old mode 100644 new mode 100755 index eece905..234a6a5 --- a/manage.py +++ b/manage.py @@ -1,5 +1,25 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2017 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + import os import sys @@ -9,4 +29,3 @@ if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haitidata.settings") execute_from_command_line(sys.argv) - diff --git a/manage.sh b/manage.sh new file mode 100755 index 0000000..516fb45 --- /dev/null +++ b/manage.sh @@ -0,0 +1,2 @@ +. $HOME/.override_env +/usr/local/bin/python /usr/src/haitidata/manage.py $@ diff --git a/monitoring-cron b/monitoring-cron new file mode 100644 index 0000000..0da24fe --- /dev/null +++ b/monitoring-cron @@ -0,0 +1,2 @@ +*/1 * * * * /usr/src/haitidata/manage.sh collect_metrics -n -t xml >> /var/log/cron.log 2>&1 +# An empty line is required at the end of this file for a valid cron file. diff --git a/package/support/geonode.binary b/package/support/geonode.binary new file mode 100644 index 0000000..e3bb206 --- /dev/null +++ b/package/support/geonode.binary @@ -0,0 +1,15 @@ +#!/bin/bash + +DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-geonode.local_settings} + +if [ -n "$WORKON_HOME" ]; then + DJANGO_ADMIN_CMD=$WORKON_HOME/bin/django-admin >/dev/null 2>/dev/null +elif hash django-admin 2>/dev/null; then + DJANGO_ADMIN_CMD=django-admin +fi + +if [ -n "$DJANGO_ADMIN_CMD" ]; then + DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE $DJANGO_ADMIN_CMD $@ +else + DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE django-admin.py $@ +fi diff --git a/package/support/geonode.updateip b/package/support/geonode.updateip new file mode 100644 index 0000000..d71b5bb --- /dev/null +++ b/package/support/geonode.updateip @@ -0,0 +1,213 @@ +#!/bin/bash + +usage () { + bname="$(basename $0)" + ret="$1" + + cat < + substitute SITEURL with , append it + to ALLOWED_HOSTS in local_settings.py + and geoserver printing config lists + This is mandatory and must be the pubic extenral address you use to access GeoNode + $bname <-l|--local> + same as above but taking into account + LOCAL vs PUBLIC ip addresses (or names) + This is optional and if not specified the default is 'localhost' + $bname <-s|--secure> + HTTPS instead of HTTP protocol + $bname <-h|--help> + this help +EOF + + exit $ret +} + +if [[ $# -eq 0 ]] ; then + usage 0 + exit 0 +fi + +POSITIONAL=() +while [[ $# -gt 0 ]] +do +key="$1" + +IS_HTTPS=0 +case $key in + -h|--help) + usage 0 + ;; + -p|--public) + PUBLIC_IP="$2" + shift # past argument + shift # past value + ;; + -l|--local) + LOCAL_IP="$2" + shift # past argument + shift # past value + ;; + -s|--secure) + IS_HTTPS=1 + shift # past argument + ;; + *) # unknown option + POSITIONAL+=("$1") # save it in an array for later + shift # past argument + ;; +esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters + +if [[ $UID != 0 ]]; then + echo "Please run this script with sudo:" + echo "sudo $0 $*" + exit 1 +fi + +if [ -z "$PUBLIC_IP" ]; then + echo "Public IP is mandatory!" + usage 1 +fi + +if [ -z "$LOCAL_IP" ]; then + # LOCAL_IP=$PUBLIC_IP + LOCAL_IP="localhost" +fi + +NET_PROTOCOL="http" +if [[ $IS_HTTPS != 0 ]]; then + NET_PROTOCOL="https" +fi + +# Getting the full netloc +NEW_EXT_IP="$NET_PROTOCOL://$PUBLIC_IP" +NEW_INT_IP="$NET_PROTOCOL://$LOCAL_IP" + +# Removing slash at the end of variables +NEW_EXT_IP=${NEW_EXT_IP%/} +NEW_INT_IP=${NEW_INT_IP%/} + +echo "PUBLIC_IP" $NEW_EXT_IP +echo "LOCAL_IP" $NEW_INT_IP + +GEONODE_ETC=${GEONODE_ETC:-/etc/geonode} +GEOSERVER_DATA_DIR=${GEOSERVER_DATA_DIR:-/usr/share/geoserver/data} +TOMCAT_SERVICE=${TOMCAT_SERVICE:-"invoke-rc.d tomcat8"} +APACHE_SERVICE=${APACHE_SERVICE:-"invoke-rc.d apache2"} + +# Replace SITEURL in $GEONODE_ETC/local_settings.py +echo "Replacing SITEURL value with '$NEW_EXT_IP' in $GEONODE_ETC/local_settings.py ... " | tr -d '\n' +sed -i "s@\(SITEURL[ ]*=[ ]*\).*@\1\'$NEW_EXT_IP\/'@g" $GEONODE_ETC/local_settings.py +echo "done." + +echo "Adding entry for '$PUBLIC_IP' in $GEOSERVER_DATA_DIR/printing/config.yaml ... " | tr -d '\n' +printing_config=$GEOSERVER_DATA_DIR/printing/config.yaml + +if grep -q "$PUBLIC_IP" "$printing_config" +then + echo "'$PUBLIC_IP' already found to the printing whitelist." +else + sed -i "s#hosts:#hosts:\n - !ipMatch\n ip: $PUBLIC_IP#g" $printing_config + echo "done." +fi + +# if ALLOWED_HOSTS already exists ... +# if grep -q "^[ ]*ALLOWED_HOSTS[ ]*=" "$GEONODE_ETC/local_settings.py" +# then +# if [ $IS_REPLACE -eq 1 ] +# then +# echo "Replacing ALLOWED_HOSTS in $GEONODE_ETC/local_settings.py ... " | tr -d '\n' +# sed -i "s/^\([ ]*ALLOWED_HOSTS[ ]*=\).*/\1 [ 'localhost', '$NEWIP', ]/g" "$GEONODE_ETC/local_settings.py" +# echo "done." +# else +# echo "Adding $NEWIP to ALLOWED_HOSTS in $GEONODE_ETC/local_settings.py ... " | tr -d '\n' +# items="$(grep "^[ ]*ALLOWED_HOSTS[ ]*=" "$GEONODE_ETC/local_settings.py" | \ +# sed 's/^[ ]*ALLOWED_HOSTS[ ]*=[ ]*\[//g;s/\][ ]*$//g')" +# already_found=0 +# oldifs="$IFS" +# IFS=',' +# for item in $items +# do +# item_cls="$(echo "$item" | sed "s/^[ ]*['\"]//g;s/['\"][ ]*$//g")" +# if [ "$item_cls" = "$NEWIP" ] +# then +# already_found=1 +# break +# fi +# done +# IFS="$oldifs" +# if [ $already_found -eq 0 ] +# then +# if echo "$items" | grep -q ',[ ]*$' +# then +# items="${items}'$NEWIP', " +# else +# items="${items}, '$NEWIP', " +# fi +# sed -i "s/^\([ ]*ALLOWED_HOSTS[ ]*=\).*/\1 [ $items ]/g" "$GEONODE_ETC/local_settings.py" +# echo "done." +# else +# echo "'$NEWIP' already found in ALLOWED_HOSTS list." +# fi +# fi +# else +# echo "Adding ALLOWED_HOSTS with in $GEONODE_ETC/local_settings.py ... " | tr -d '\n' +# echo "ALLOWED_HOSTS=['localhost', '$NEWIP', ]" >> $GEONODE_ETC/local_settings.py +# echo "done." +# fi + + +# silence the warnings from executing geonode command or they will pollute the commands output +if grep -q "^[ ]*SILENCED_SYSTEM_CHECKS[ ]*=" "$GEONODE_ETC/local_settings.py" +then + true +else + echo "SILENCED_SYSTEM_CHECKS = ['1_8.W001', 'fields.W340']" >> $GEONODE_ETC/local_settings.py +fi + +geonode fixsitename + +echo "Setting up oauth" +# Set oauth keys +oauth_keys=$(geonode fixoauthuri 2>&1) +client_id=`echo $oauth_keys | cut -d \, -f 1` +client_secret=`echo $oauth_keys | cut -d \, -f 2` + +# Updating OAuth2 Service Config +oauth_config="$GEOSERVER_DATA_DIR/security/filter/geonode-oauth2/config.xml" +sed -i "s|.*|$client_id|g" $oauth_config +sed -i "s|.*|$client_secret|g" $oauth_config +sed -i "s|.*|$NEW_INT_IP/o/token/|g" $oauth_config +sed -i "s|.*|$NEW_EXT_IP/o/authorize/|g" $oauth_config +sed -i "s|.*|$NEW_EXT_IP/geoserver/|g" $oauth_config +sed -i "s|.*|$NEW_INT_IP/api/o/v4/tokeninfo/|g" $oauth_config +sed -i "s|.*|$NEW_EXT_IP/account/logout/|g" $oauth_config + +# Updating REST Role Service Config +sed -i "s|.*|$NEW_INT_IP|g" "$GEOSERVER_DATA_DIR/security/role/geonode REST role service/config.xml" + +# Updating GeoServer Global Config +global_config="$GEOSERVER_DATA_DIR/global.xml" +sed -i "s|.*|$NEW_EXT_IP/geoserver|g" $global_config + +# Restart tomcat server +$TOMCAT_SERVICE restart + +echo "Waiting Tomcat Service to Restart..." +sleep 30s + +# Restart apache server +$APACHE_SERVICE restart +echo "Waiting Apache HTTPD Service to Restart..." +sleep 5s + +# Run updatelayers +geonode updatelayers +geonode set_all_layers_alternate +geonode set_all_layers_metadata + +# Run updatemaplayerip +geonode updatemaplayerip diff --git a/pavement.py b/pavement.py new file mode 100644 index 0000000..189dc1e --- /dev/null +++ b/pavement.py @@ -0,0 +1,1168 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2018 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + +import django +import fileinput +import glob +import os +import re +import shutil +import subprocess +import signal +import sys +import time +import urllib +import urllib2 +import zipfile +from urlparse import urlparse + +import yaml +from paver.easy import (BuildFailure, call_task, cmdopts, info, needs, options, + path, sh, task) +from setuptools.command import easy_install + +try: + from haitidata.local_settings import * +except ImportError: + from haitidata.settings import * + +try: + from paver.path import pushd +except ImportError: + from paver.easy import pushd + +from geonode.settings import (INSTALLED_APPS, + GEONODE_CORE_APPS, + GEONODE_INTERNAL_APPS, + GEONODE_APPS, + OGC_SERVER, + ASYNC_SIGNALS) + +assert sys.version_info >= (2, 6), \ + SystemError("GeoNode Build requires python 2.6 or better") + +dev_config = None +with open("dev_config.yml", 'r') as f: + dev_config = yaml.load(f, Loader=yaml.Loader) + + +def grab(src, dest, name): + download = True + if not dest.exists(): + print('Downloading %s' % name) + elif not zipfile.is_zipfile(dest): + print('Downloading %s (corrupt file)' % name) + else: + download = False + if download: + if str(src).startswith("file://"): + src2 = src[7:] + if not os.path.exists(src2): + print("Source location (%s) does not exist" % str(src2)) + else: + print("Copying local file from %s" % str(src2)) + shutil.copyfile(str(src2), str(dest)) + else: + # urllib.urlretrieve(str(src), str(dest)) + from tqdm import tqdm + import requests + import math + # Streaming, so we can iterate over the response. + r = requests.get(str(src), stream=True, timeout=10, verify=False) + # Total size in bytes. + total_size = int(r.headers.get('content-length', 0)) + print("Requesting %s" % str(src)) + block_size = 1024 + wrote = 0 + with open('output.bin', 'wb') as f: + for data in tqdm(r.iter_content(block_size), total=math.ceil(total_size//block_size) , unit='KB', unit_scale=False): + wrote = wrote + len(data) + f.write(data) + print(" total_size [%d] / wrote [%d] " % (total_size, wrote)) + if total_size != 0 and wrote != total_size: + print("ERROR, something went wrong") + else: + shutil.move('output.bin', str(dest)) + try: + # Cleaning up + os.remove('output.bin') + except OSError: + pass + + +@task +@cmdopts([ + ('geoserver=', 'g', 'The location of the geoserver build (.war file).'), + ('jetty=', 'j', 'The location of the Jetty Runner (.jar file).'), +]) +def setup_geoserver(options): + """Prepare a testing instance of GeoServer.""" + # only start if using Geoserver backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.qgis_server' or 'geonode.geoserver' not in INSTALLED_APPS: + return + + download_dir = path('downloaded') + if not download_dir.exists(): + download_dir.makedirs() + + geoserver_dir = path('geoserver') + + geoserver_bin = download_dir / \ + os.path.basename(dev_config['GEOSERVER_URL']) + jetty_runner = download_dir / \ + os.path.basename(dev_config['JETTY_RUNNER_URL']) + + grab( + options.get( + 'geoserver', + dev_config['GEOSERVER_URL']), + geoserver_bin, + "geoserver binary") + grab( + options.get( + 'jetty', + dev_config['JETTY_RUNNER_URL']), + jetty_runner, + "jetty runner") + + if not geoserver_dir.exists(): + geoserver_dir.makedirs() + + webapp_dir = geoserver_dir / 'geoserver' + if not webapp_dir: + webapp_dir.makedirs() + + print 'extracting geoserver' + z = zipfile.ZipFile(geoserver_bin, "r") + z.extractall(webapp_dir) + + _install_data_dir() + + +@task +def setup_qgis_server(options): + """Prepare a testing instance of QGIS Server.""" + # only start if using QGIS Server backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.geoserver' or 'geonode.qgis_server' not in INSTALLED_APPS: + return + + # QGIS Server testing instance run on top of docker + try: + sh('scripts/misc/docker_check.sh') + except Exception: + info("You need to have docker and docker-compose installed.") + return + + info('Docker and docker-compose were installed.') + info('Proceeded to setup QGIS Server.') + info('Create QGIS Server related folder.') + + try: + os.makedirs('geonode/qgis_layer') + except Exception: + pass + + try: + os.makedirs('geonode/qgis_tiles') + except Exception: + pass + + all_permission = 0o777 + os.chmod('geonode/qgis_layer', all_permission) + stat = os.stat('geonode/qgis_layer') + info('Mode : %o' % stat.st_mode) + os.chmod('geonode/qgis_tiles', all_permission) + stat = os.stat('geonode/qgis_tiles') + info('Mode : %o' % stat.st_mode) + + info('QGIS Server related folder successfully setup.') + + +def _robust_rmtree(path, logger=None, max_retries=5): + """Try to delete paths robustly . + Retries several times (with increasing delays) if an OSError + occurs. If the final attempt fails, the Exception is propagated + to the caller. Taken from https://github.com/hashdist/hashdist/pull/116 + """ + + for i in range(max_retries): + try: + shutil.rmtree(path) + return + except OSError as e: + if logger: + info('Unable to remove path: %s' % path) + info('Retrying after %d seconds' % i) + time.sleep(i) + + # Final attempt, pass any Exceptions up to caller. + shutil.rmtree(path) + + +def _install_data_dir(): + target_data_dir = path('geoserver/data') + if target_data_dir.exists(): + try: + target_data_dir.rmtree() + except OSError: + _robust_rmtree(target_data_dir, logger=True) + + original_data_dir = path('geoserver/geoserver/data') + justcopy(original_data_dir, target_data_dir) + + try: + config = path( + 'geoserver/data/global.xml') + with open(config) as f: + xml = f.read() + m = re.search('proxyBaseUrl>([^<]+)', xml) + xml = xml[:m.start(1)] + \ + "http://localhost:8080/geoserver" + xml[m.end(1):] + with open(config, 'w') as f: + f.write(xml) + except Exception as e: + print(e) + + try: + config = path( + 'geoserver/data/security/filter/geonode-oauth2/config.xml') + with open(config) as f: + xml = f.read() + m = re.search('accessTokenUri>([^<]+)', xml) + xml = xml[:m.start(1)] + \ + "http://localhost:8000/o/token/" + xml[m.end(1):] + m = re.search('userAuthorizationUri>([^<]+)', xml) + xml = xml[:m.start( + 1)] + "http://localhost:8000/o/authorize/" + xml[m.end(1):] + m = re.search('redirectUri>([^<]+)', xml) + xml = xml[:m.start( + 1)] + "http://localhost:8080/geoserver/index.html" + xml[m.end(1):] + m = re.search('checkTokenEndpointUrl>([^<]+)', xml) + xml = xml[:m.start( + 1)] + "http://localhost:8000/api/o/v4/tokeninfo/" + xml[m.end(1):] + m = re.search('logoutUri>([^<]+)', xml) + xml = xml[:m.start( + 1)] + "http://localhost:8000/account/logout/" + xml[m.end(1):] + with open(config, 'w') as f: + f.write(xml) + except Exception as e: + print(e) + + try: + config = path( + 'geoserver/data/security/role/geonode REST role service/config.xml') + with open(config) as f: + xml = f.read() + m = re.search('baseUrl>([^<]+)', xml) + xml = xml[:m.start(1)] + "http://localhost:8000" + xml[m.end(1):] + with open(config, 'w') as f: + f.write(xml) + except Exception as e: + print(e) + + +@task +def static(options): + with pushd('geonode/static'): + sh('grunt production') + + +@task +@needs([ + 'setup_geoserver', + 'setup_qgis_server', +]) +def setup(options): + """Get dependencies and prepare a GeoNode development environment.""" + + updategeoip(options) + info(('GeoNode development environment successfully set up.' + 'If you have not set up an administrative account,' + ' please do so now. Use "paver start" to start up the server.')) + + +def grab_winfiles(url, dest, packagename): + # Add headers + headers = {'User-Agent': 'Mozilla 5.10'} + request = urllib2.Request(url, None, headers) + response = urllib2.urlopen(request) + with open(dest, 'wb') as writefile: + writefile.write(response.read()) + + +@task +def win_install_deps(options): + """ + Install all Windows Binary automatically + This can be removed as wheels become available for these packages + """ + download_dir = path('downloaded').abspath() + if not download_dir.exists(): + download_dir.makedirs() + win_packages = { + # required by transifex-client + "Py2exe": dev_config['WINDOWS']['py2exe'], + "Nose": dev_config['WINDOWS']['nose'], + # the wheel 1.9.4 installs but pycsw wants 1.9.3, which fails to compile + # when pycsw bumps their pyproj to 1.9.4 this can be removed. + "PyProj": dev_config['WINDOWS']['pyproj'], + "lXML": dev_config['WINDOWS']['lxml'] + } + failed = False + for package, url in win_packages.iteritems(): + tempfile = download_dir / os.path.basename(url) + print "Installing file ... " + tempfile + grab_winfiles(url, tempfile, package) + try: + easy_install.main([tempfile]) + except Exception as e: + failed = True + print "install failed with error: ", e + os.remove(tempfile) + if failed and sys.maxsize > 2**32: + print "64bit architecture is not currently supported" + print "try finding the 64 binaries for py2exe, nose, and pyproj" + elif failed: + print "install failed for py2exe, nose, and/or pyproj" + else: + print "Windows dependencies now complete. Run pip install -e geonode --use-mirrors" + + +@cmdopts([ + ('version=', 'v', 'Legacy GeoNode version of the existing database.') +]) +@task +def upgradedb(options): + """ + Add 'fake' data migrations for existing tables from legacy GeoNode versions + """ + version = options.get('version') + if version in ['1.1', '1.2']: + sh("python -W ignore manage.py migrate maps 0001 --fake") + sh("python -W ignore manage.py migrate avatar 0001 --fake") + elif version is None: + print "Please specify your GeoNode version" + else: + print "Upgrades from version %s are not yet supported." % version + + +@task +def updategeoip(options): + """ + Update geoip db + """ + settings = options.get('settings', '') + if settings: + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings + + sh("%s python -W ignore manage.py updategeoip -o" % settings) + + +@task +@cmdopts([ + ('settings', 's', 'Specify custom DJANGO_SETTINGS_MODULE') +]) +def sync(options): + """ + Run the migrate and migrate management commands to create and migrate a DB + """ + settings = options.get('settings', '') + if settings: + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings + + sh("%s python -W ignore manage.py makemigrations --noinput" % settings) + sh("%s python -W ignore manage.py migrate --noinput" % settings) + sh("%s python -W ignore manage.py loaddata fixtures/sample_admin.json" % settings) + sh("%s python -W ignore manage.py loaddata fixtures/default_oauth_apps.json" % + settings) + sh("%s python -W ignore manage.py loaddata fixtures/initial_data.json" % settings) + sh("%s python -W ignore manage.py set_all_layers_alternate" % settings) + + +@task +def package(options): + """ + Creates a tarball to use for building the system elsewhere + """ + import tarfile + import geonode + + version = geonode.get_version() + # Use GeoNode's version for the package name. + pkgname = 'GeoNode-%s-all' % version + + # Create the output directory. + out_pkg = path(pkgname) + out_pkg_tar = path("%s.tar.gz" % pkgname) + + # Create a distribution in zip format for the geonode python package. + dist_dir = path('dist') + dist_dir.rmtree() + sh('python setup.py sdist --formats=zip') + + with pushd('package'): + + # Delete old tar files in that directory + for f in glob.glob('GeoNode*.tar.gz'): + old_package = path(f) + if old_package != out_pkg_tar: + old_package.remove() + + if out_pkg_tar.exists(): + info('There is already a package for version %s' % version) + return + + # Clean anything that is in the oupout package tree. + out_pkg.rmtree() + out_pkg.makedirs() + + support_folder = path('support') + install_file = path('install.sh') + + # And copy the default files from the package folder. + justcopy(support_folder, out_pkg / 'support') + justcopy(install_file, out_pkg) + + geonode_dist = path('..') / 'dist' / 'GeoNode-%s.zip' % version + justcopy(geonode_dist, out_pkg) + + # Create a tar file with all files in the output package folder. + tar = tarfile.open(out_pkg_tar, "w:gz") + for file in out_pkg.walkfiles(): + tar.add(file) + + # Add the README with the license and important links to documentation. + tar.add('README', arcname=('%s/README.rst' % out_pkg)) + tar.close() + + # Remove all the files in the temporary output package directory. + out_pkg.rmtree() + + # Report the info about the new package. + info("%s created" % out_pkg_tar.abspath()) + + +@task +@needs(['start_geoserver', + 'start_qgis_server', + 'start_django']) +@cmdopts([ + ('bind=', 'b', 'Bind server to provided IP address and port number.'), + ('java_path=', 'j', 'Full path to java install for Windows'), + ('foreground', 'f', 'Do not run in background but in foreground'), + ('settings', 's', 'Specify custom DJANGO_SETTINGS_MODULE') +], share_with=['start_django', 'start_geoserver']) +def start(): + """ + Start GeoNode (Django, GeoServer & Client) + """ + sh('sleep 30') + info("GeoNode is now available.") + + +@task +def stop_django(): + """ + Stop the GeoNode Django application + """ + kill('python', 'celery') + kill('python', 'runserver') + kill('python', 'runmessaging') + + +@task +def stop_geoserver(): + """ + Stop GeoServer + """ + # only start if using Geoserver backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.qgis_server' or 'geonode.geoserver' not in INSTALLED_APPS: + return + kill('java', 'geoserver') + + # Kill process. + try: + # proc = subprocess.Popen("ps -ef | grep -i -e '[j]ava\|geoserver' | + # awk '{print $2}'", + proc = subprocess.Popen( + "ps -ef | grep -i -e 'geoserver' | awk '{print $2}'", + shell=True, + stdout=subprocess.PIPE) + for pid in proc.stdout: + info('Stopping geoserver (process number %s)' % int(pid)) + os.kill(int(pid), signal.SIGKILL) + os.kill(int(pid), 9) + sh('sleep 30') + # Check if the process that we killed is alive. + try: + os.kill(int(pid), 0) + # raise Exception("""wasn't able to kill the process\nHINT:use + # signal.SIGKILL or signal.SIGABORT""") + except OSError as ex: + continue + except Exception as e: + info(e) + + +@task +@cmdopts([ + ('qgis_server_port=', 'p', 'The port of the QGIS Server instance.') +]) +def stop_qgis_server(): + """ + Stop QGIS Server Backend. + """ + # only start if using QGIS Server backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.geoserver' or 'geonode.qgis_server' not in INSTALLED_APPS: + return + port = options.get('qgis_server_port', '9000') + + sh( + 'docker-compose -f docker-compose-qgis-server.yml down', + env={ + 'GEONODE_PROJECT_PATH': os.getcwd(), + 'QGIS_SERVER_PORT': port + }) + + +@task +@needs([ + 'stop_geoserver', + 'stop_qgis_server' +]) +def stop(): + """ + Stop GeoNode + """ + # windows needs to stop the geoserver first b/c we can't tell which python + # is running, so we kill everything + info("Stopping GeoNode ...") + stop_django() + + +@cmdopts([ + ('bind=', 'b', 'Bind server to provided IP address and port number.') +]) +@task +def start_django(): + """ + Start the GeoNode Django application + """ + settings = options.get('settings', '') + if settings: + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings + bind = options.get('bind', '0.0.0.0:8000') + foreground = '' if options.get('foreground', False) else '&' + sh('%s python -W ignore manage.py runserver %s %s' % (settings, bind, foreground)) + + celery_queues = [ + "default", + "geonode", + "cleanup", + "update", + "email", + # Those queues are directly managed by messages.consumer + # "broadcast", + # "email.events", + # "all.geoserver", + # "geoserver.events", + # "geoserver.data", + # "geoserver.catalog", + # "notifications.events", + # "geonode.layer.viewer" + ] + sh('%s celery -A geonode.celery_app:app worker -Q %s -B -E -l INFO %s' % (settings, ",".join(celery_queues),foreground)) + + if ASYNC_SIGNALS: + sh('%s python -W ignore manage.py runmessaging %s' % (settings, foreground)) + + +def start_messaging(): + """ + Start the GeoNode messaging server + """ + settings = options.get('settings', '') + if settings: + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings + foreground = '' if options.get('foreground', False) else '&' + sh('%s python -W ignore manage.py runmessaging %s' % (settings, foreground)) + + +@cmdopts([ + ('java_path=', 'j', 'Full path to java install for Windows') +]) +@task +def start_geoserver(options): + """ + Start GeoServer with GeoNode extensions + """ + # only start if using Geoserver backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.qgis_server' or 'geonode.geoserver' not in INSTALLED_APPS: + return + + GEOSERVER_BASE_URL = OGC_SERVER['default']['LOCATION'] + url = GEOSERVER_BASE_URL + + if urlparse(GEOSERVER_BASE_URL).hostname != 'localhost': + print "Warning: OGC_SERVER['default']['LOCATION'] hostname is not equal to 'localhost'" + + if not GEOSERVER_BASE_URL.endswith('/'): + print "Error: OGC_SERVER['default']['LOCATION'] does not end with a '/'" + sys.exit(1) + + download_dir = path('downloaded').abspath() + jetty_runner = download_dir / \ + os.path.basename(dev_config['JETTY_RUNNER_URL']) + data_dir = path('geoserver/data').abspath() + geofence_dir = path('geoserver/data/geofence').abspath() + web_app = path('geoserver/geoserver').abspath() + log_file = path('geoserver/jetty.log').abspath() + config = path('scripts/misc/jetty-runner.xml').abspath() + jetty_port = urlparse(GEOSERVER_BASE_URL).port + + import socket + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + socket_free = True + try: + s.bind(("127.0.0.1", jetty_port)) + except socket.error as e: + socket_free = False + if e.errno == 98: + info('Port %s is already in use' % jetty_port) + else: + info( + 'Something else raised the socket.error exception while checking port %s' % + jetty_port) + print(e) + finally: + s.close() + + if socket_free: + # @todo - we should not have set workdir to the datadir but a bug in geoserver + # prevents geonode security from initializing correctly otherwise + with pushd(data_dir): + javapath = "java" + loggernullpath = os.devnull + + # checking if our loggernullpath exists and if not, reset it to + # something manageable + if loggernullpath == "nul": + try: + open("../../downloaded/null.txt", 'w+').close() + except IOError as e: + print "Chances are that you have Geoserver currently running. You \ + can either stop all servers with paver stop or start only \ + the django application with paver start_django." + sys.exit(1) + loggernullpath = "../../downloaded/null.txt" + + try: + sh(('java -version')) + except Exception: + print "Java was not found in your path. Trying some other options: " + javapath_opt = None + if os.environ.get('JAVA_HOME', None): + print "Using the JAVA_HOME environment variable" + javapath_opt = os.path.join(os.path.abspath( + os.environ['JAVA_HOME']), "bin", "java.exe") + elif options.get('java_path'): + javapath_opt = options.get('java_path') + else: + print "Paver cannot find java in the Windows Environment. \ + Please provide the --java_path flag with your full path to \ + java.exe e.g. --java_path=C:/path/to/java/bin/java.exe" + sys.exit(1) + # if there are spaces + javapath = 'START /B "" "' + javapath_opt + '"' + + sh(( + '%(javapath)s -Xms512m -Xmx2048m -server -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512m' + ' -DGEOSERVER_DATA_DIR=%(data_dir)s' + ' -Dgeofence.dir=%(geofence_dir)s' + # ' -Dgeofence-ovr=geofence-datasource-ovr.properties' + # workaround for JAI sealed jar issue and jetty classloader + # ' -Dorg.eclipse.jetty.server.webapp.parentLoaderPriority=true' + ' -jar %(jetty_runner)s' + ' --port %(jetty_port)i' + ' --log %(log_file)s' + ' %(config)s' + ' > %(loggernullpath)s &' % locals() + )) + + info('Starting GeoServer on %s' % url) + + # wait for GeoServer to start + started = waitfor(url) + info('The logs are available at %s' % log_file) + + if not started: + # If applications did not start in time we will give the user a chance + # to inspect them and stop them manually. + info(('GeoServer never started properly or timed out.' + 'It may still be running in the background.')) + sys.exit(1) + + +@task +@cmdopts([ + ('qgis_server_port=', 'p', 'The port of the QGIS Server instance.') +]) +def start_qgis_server(): + """Start QGIS Server instance with GeoNode related plugins.""" + # only start if using QGIS Serrver backend + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.geoserver' or 'geonode.qgis_server' not in INSTALLED_APPS: + return + info('Starting up QGIS Server...') + + port = options.get('qgis_server_port', '9000') + + sh( + 'docker-compose -f docker-compose-qgis-server.yml up -d qgis-server', + env={ + 'GEONODE_PROJECT_PATH': os.getcwd(), + 'QGIS_SERVER_PORT': port + }) + info('QGIS Server is up.') + + +@task +def test(options): + """ + Run GeoNode's Unit Test Suite + """ + sh("%s manage.py test %s.tests --noinput" % (options.get('prefix'), + '.tests '.join(GEONODE_APPS))) + + +@task +@cmdopts([ + ('local=', 'l', 'Set to True if running bdd tests locally') +]) +def test_bdd(): + """ + Run GeoNode's BDD Test Suite + """ + local = str2bool(options.get('local', 'false')) + if local: + call_task('reset_hard') + call_task('setup') + else: + call_task('reset') + call_task('setup') + call_task('sync') + sh('sleep 30') + info("GeoNode is now available, running the bdd tests now.") + + sh('py.test') + + if local: + call_task('reset_hard') + + +@task +def test_javascript(options): + with pushd('geonode/static/geonode'): + sh('./run-tests.sh') + + +@task +@cmdopts([ + ('name=', 'n', 'Run specific tests.'), + ('settings', 's', 'Specify custom DJANGO_SETTINGS_MODULE') +]) +def test_integration(options): + """ + Run GeoNode's Integration test suite against the external apps + """ + _backend = os.environ.get('BACKEND', OGC_SERVER['default']['BACKEND']) + if _backend == 'geonode.geoserver' or 'geonode.qgis_server' not in INSTALLED_APPS: + call_task('stop_geoserver') + _reset() + # Start GeoServer + call_task('start_geoserver') + else: + call_task('stop_qgis_server') + _reset() + # Start QGis Server + call_task('start_qgis_server') + + sh('sleep 30') + + name = options.get('name', 'geonode.tests.integration') + settings = options.get('settings', '') + if not settings and name == 'geonode.upload.tests.integration': + sh("cp geonode/upload/tests/test_settings.py geonode/") + settings = 'geonode.test_settings' + + success = False + try: + if name == 'geonode.tests.csw': + call_task('sync', options={'settings': settings}) + call_task('start', options={'settings': settings}) + call_task('setup_data', options={'settings': settings}) + + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings if settings else '' + + if name == 'geonode.upload.tests.integration': + sh("%s python -W ignore manage.py makemigrations --noinput" % settings) + sh("%s python -W ignore manage.py migrate --noinput" % settings) + sh("%s python -W ignore manage.py loaddata sample_admin.json" % settings) + sh("%s python -W ignore manage.py loaddata geonode/base/fixtures/default_oauth_apps.json" % + settings) + sh("%s python -W ignore manage.py loaddata geonode/base/fixtures/initial_data.json" % + settings) + call_task('start_geoserver') + bind = options.get('bind', '0.0.0.0:8000') + foreground = '' if options.get('foreground', False) else '&' + sh('%s python -W ignore manage.py runmessaging %s' % (settings, foreground)) + sh('%s python -W ignore manage.py runserver %s %s' % + (settings, bind, foreground)) + sh('sleep 30') + settings = 'REUSE_DB=1 %s' % settings + + live_server_option = '' + info("GeoNode is now available, running the tests now.") + sh(('%s python -W ignore manage.py test %s' + ' %s --noinput %s' % (settings, name, _keepdb, live_server_option))) + + except BuildFailure as e: + info('Tests failed! %s' % str(e)) + else: + success = True + finally: + # don't use call task here - it won't run since it already has + stop() + + call_task('stop_geoserver') + _reset() + if not success: + sys.exit(1) + + +@task +@needs(['start_geoserver', + 'start_qgis_server']) +@cmdopts([ + ('coverage', 'c', 'use this flag to generate coverage during test runs'), + ('local=', 'l', 'Set to True if running bdd tests locally') +]) +def run_tests(options): + """ + Executes the entire test suite. + """ + if options.get('coverage'): + prefix = 'coverage run --branch --source=geonode \ + --omit="*/management/*,*/test*,*/wsgi*,*/middleware*,*/context_processors*,geonode/qgis_server/*,geonode/contrib/*,geonode/upload/*"' + else: + prefix = 'python' + local = options.get('local', 'false') # travis uses default to false + sh('%s manage.py test geonode.tests.smoke' % prefix) + call_task('test', options={'prefix': prefix}) + call_task('test_integration') + call_task('test_integration', options={'name': 'geonode.tests.csw'}) + + # only start if using Geoserver backend + if 'geonode.geoserver' in INSTALLED_APPS: + call_task('test_integration', + options={'name': 'geonode.upload.tests.integration', + 'settings': 'geonode.upload.tests.test_settings'}) + + call_task('test_bdd', options={'local': local}) + sh('flake8 geonode') + + +@task +@needs(['stop']) +def reset(): + """ + Reset a development environment (Database, GeoServer & Catalogue) + """ + _reset() + + +def _reset(): + from geonode import settings + sh("rm -rf {path}".format( + path=os.path.join(settings.PROJECT_ROOT, 'development.db') + ) + ) + sh("rm -rf haitidata/development.db") + sh("rm -rf haitidata/uploaded/*") + _install_data_dir() + + +@needs(['reset']) +def reset_hard(): + """ + Reset a development environment (Database, GeoServer & Catalogue) + """ + sh("git clean -dxf") + + +@task +@cmdopts([ + ('type=', 't', 'Import specific data type ("vector", "raster", "time")'), + ('settings', 's', 'Specify custom DJANGO_SETTINGS_MODULE') +]) +def setup_data(): + """ + Import sample data (from gisdata package) into GeoNode + """ + import gisdata + + ctype = options.get('type', None) + + data_dir = gisdata.GOOD_DATA + + if ctype in ['vector', 'raster', 'time']: + data_dir = os.path.join(gisdata.GOOD_DATA, ctype) + + settings = options.get('settings', '') + if settings: + settings = 'DJANGO_SETTINGS_MODULE=%s' % settings + + sh("%s python -W ignore manage.py importlayers %s -v2" % (settings, data_dir)) + + +@needs(['package']) +@cmdopts([ + ('key=', 'k', 'The GPG key to sign the package'), + ('ppa=', 'p', 'PPA this package should be published to.'), +]) +def deb(options): + """ + Creates debian packages. + + Example uses: + paver deb + paver deb -k 12345 + paver deb -k 12345 -p geonode/testing + """ + key = options.get('key', None) + ppa = options.get('ppa', None) + + version, simple_version = versions() + + info('Creating package for GeoNode version %s' % version) + + # Get rid of any uncommitted changes to debian/changelog + info('Getting rid of any uncommitted changes in debian/changelog') + sh('git checkout package/debian/changelog') + + # Workaround for git-dch bug + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=594580 + sh('rm -rf %s/.git' % (os.path.realpath('package'))) + sh('ln -s %s %s' % (os.path.realpath('.git'), os.path.realpath('package'))) + + with pushd('package'): + + # Install requirements + # sh('sudo apt-get -y install debhelper devscripts git-buildpackage') + + # sh(('git-dch --spawn-editor=snapshot --git-author --new-version=%s' + # ' --id-length=6 --ignore-branch --release' % (simple_version))) + # In case you publish from Ubuntu Xenial (git-dch is removed from upstream) + # use the following line instead: + # sh(('gbp dch --spawn-editor=snapshot --git-author --new-version=%s' + # ' --id-length=6 --ignore-branch --release' % (simple_version))) + distribution = "bionic" + # sh(('gbp dch --distribution=%s --force-distribution --spawn-editor=snapshot --git-author --new-version=%s' + # ' --id-length=6 --ignore-branch --release' % (distribution, simple_version))) + + deb_changelog = path('debian') / 'changelog' + for idx, line in enumerate(fileinput.input([deb_changelog], inplace=True)): + if idx == 0: + print "geonode (%s) %s; urgency=high" % (simple_version, distribution), + else: + print line.replace("urgency=medium", "urgency=high"), + + # Revert workaround for git-dhc bug + sh('rm -rf .git') + + if key is None and ppa is None: + print("A local installable package") + sh('debuild -uc -us -A') + elif key is None and ppa is not None: + print("A sources package, signed by daemon") + sh('debuild -S') + elif key is not None and ppa is None: + print("A signed installable package") + sh('debuild -k%s -A' % key) + elif key is not None and ppa is not None: + print("A signed, source package") + sh('debuild -k%s -S' % key) + + if ppa is not None: + sh('dput ppa:%s geonode_%s_source.changes' % (ppa, simple_version)) + + +@task +def publish(): + if 'GPG_KEY_GEONODE' in os.environ: + key = os.environ['GPG_KEY_GEONODE'] + else: + print "You need to set the GPG_KEY_GEONODE environment variable" + return + + if 'PPA_GEONODE' in os.environ: + ppa = os.environ['PPA_GEONODE'] + else: + ppa = None + + call_task('deb', options={ + 'key': key, + 'ppa': ppa, + # 'ppa': 'geonode/testing', + # 'ppa': 'geonode/unstable', + }) + + version, simple_version = versions() + if ppa: + sh('git add package/debian/changelog') + sh('git commit -m "Updated changelog for version %s"' % version) + sh('git tag -f %s' % version) + sh('git push origin %s' % version) + sh('git tag -f debian/%s' % simple_version) + sh('git push origin debian/%s' % simple_version) + # sh('git push origin master') + sh('python setup.py sdist upload -r pypi') + + +def versions(): + import geonode + from geonode.version import get_git_changeset + raw_version = geonode.__version__ + version = geonode.get_version() + timestamp = get_git_changeset() + + major, minor, revision, stage, edition = raw_version + + branch = 'dev' + + if stage == 'final': + stage = 'thefinal' + + if stage == 'unstable': + tail = '%s%s' % (branch, timestamp) + else: + tail = '%s%s' % (stage, edition) + + simple_version = '%s.%s.%s+%s' % (major, minor, revision, tail) + return version, simple_version + + +def kill(arg1, arg2): + """Stops a proces that contains arg1 and is filtered by arg2 + """ + from subprocess import Popen, PIPE + + # Wait until ready + t0 = time.time() + # Wait no more than these many seconds + time_out = 30 + running = True + + while running and time.time() - t0 < time_out: + if os.name == 'nt': + p = Popen('tasklist | find "%s"' % arg1, shell=True, + stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=False) + else: + p = Popen('ps aux | grep %s' % arg1, shell=True, + stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) + + lines = p.stdout.readlines() + + running = False + for line in lines: + # this kills all java.exe and python including self in windows + if ('%s' % + arg2 in line) or (os.name == 'nt' and '%s' % + arg1 in line): + running = True + + # Get pid + fields = line.strip().split() + + info('Stopping %s (process number %s)' % (arg1, fields[1])) + if os.name == 'nt': + kill = 'taskkill /F /PID "%s"' % fields[1] + else: + kill = 'kill -9 %s 2> /dev/null' % fields[1] + os.system(kill) + + # Give it a little more time + time.sleep(1) + else: + pass + + if running: + raise Exception('Could not stop %s: ' + 'Running processes are\n%s' + % (arg1, '\n'.join([l.strip() for l in lines]))) + + +def waitfor(url, timeout=300): + started = False + for a in xrange(timeout): + try: + resp = urllib.urlopen(url) + except IOError: + pass + else: + if resp.getcode() == 200: + started = True + break + time.sleep(1) + return started + + +def _copytree(src, dst, symlinks=False, ignore=None): + if not os.path.exists(dst): + os.makedirs(dst) + for item in os.listdir(src): + s = os.path.join(src, item) + d = os.path.join(dst, item) + if os.path.isdir(s): + shutil.copytree(s, d, symlinks, ignore) + elif os.path.isfile(s): + shutil.copy2(s, d) + + +def justcopy(origin, target): + if os.path.isdir(origin): + shutil.rmtree(target, ignore_errors=True) + _copytree(origin, target) + elif os.path.isfile(origin): + if not os.path.exists(target): + os.makedirs(target) + shutil.copy(origin, target) + + +def str2bool(v): + if v and len(v) > 0: + return v.lower() in ("yes", "true", "t", "1") + else: + return False diff --git a/paver.sh b/paver.sh new file mode 100644 index 0000000..108d651 --- /dev/null +++ b/paver.sh @@ -0,0 +1,2 @@ +. $HOME/.override_env +paver $@ diff --git a/playbook.yml b/playbook.yml new file mode 100644 index 0000000..b0a98a1 --- /dev/null +++ b/playbook.yml @@ -0,0 +1,46 @@ +- name: Provision a GeoNode into Production + hosts: production + remote_user: ubuntu + vars: + app_name: haitidata + github_user: geonode + server_name: 0.0.0.0 + deploy_user: ubuntu + code_repository: https://github.com/-----/haitidata.git" # e.g., "https://github.com/GeoNode/haitidata.git" + branch_name: 2.10.1 + virtualenv_dir: "/home/ubuntu/.venvs" + site_url: "http://localhost:8000/" # The public url of the GeoNode instance + geoserver_url: "http://build.geonode.org/geoserver/latest/geoserver-2.15.4.war" # geoserver_url should match what is found in dev_config.yml + pg_max_connections: 100 + pg_shared_buffers: 128MB + tomcat_xms: "1024M" + tomcat_xmx: "2048M" + nginx_client_max_body_size: "400M" + letsencrypt: False + gather_facts: False + pre_tasks: + - name: Install python for Ansible + become: yes + become_user: root + raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal) + - name: 'Reconfigue Locales' + become: yes + become_user: root + shell: "" + with_items: + - "export LANGUAGE=en_US.UTF-8" + - "export LANG=en_US.UTF-8" + - "export LC_ALL=en_US.UTF-8" + - "locale-gen --purge en_US.UTF-8" + - "echo 'LANG=en_US.UTF-8\nLANGUAGE=en_US:en\n' > /etc/default/locale" + - name: "Install cul, vim, and unzip" + become: yes + become_user: root + apt: name="" state=latest + with_items: + - curl + - vim + - unzip + - setup: # aka gather_facts + roles: + - { role: GeoNode.geonode } diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..acf66fb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +# GeoNode +# from Pypi: +GeoNode==2.10.4 diff --git a/scripts/misc/apache2/geonode.conf.sample b/scripts/misc/apache2/geonode.conf.sample new file mode 100644 index 0000000..4f45a02 --- /dev/null +++ b/scripts/misc/apache2/geonode.conf.sample @@ -0,0 +1,108 @@ +WSGIDaemonProcess geonode python-path=/home/geo/geonode:/home/geo/Envs/geonode/lib/python2.7/site-packages user=www-data threads=15 processes=2 + + + ServerName http://localhost + ServerAdmin webmaster@localhost + DocumentRoot /home/geo/geonode/geonode + + LimitRequestFieldSize 32760 + LimitRequestLine 32760 + + ErrorLog /var/log/apache2/error.log + LogLevel info + CustomLog /var/log/apache2/access.log combined + + WSGIProcessGroup geonode + WSGIPassAuthorization On + WSGIScriptAlias / /home/geo/geonode/geonode/wsgi.py + + Alias /static/ /home/geo/geonode/geonode/static_root/ + Alias /uploaded/ /home/geo/geonode/geonode/uploaded/ + + + + Order deny,allow + Allow from all + Require all granted + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Options Indexes FollowSymLinks + Allow from all + Require all granted + IndexOptions FancyIndexing + + + + Order allow,deny + Allow from all + + + ProxyPreserveHost On + ProxyPass /geoserver http://localhost:8080/geoserver + ProxyPassReverse /geoserver http://localhost:8080/geoserver + + diff --git a/scripts/misc/cleanup_pyc.sh b/scripts/misc/cleanup_pyc.sh new file mode 100644 index 0000000..4eeae2b --- /dev/null +++ b/scripts/misc/cleanup_pyc.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# This is the script directory +# pushd $(dirname $0) + +# This is the current directory +pushd $PWD + +find . -name "*.pyc" -exec rm -f {} \; diff --git a/scripts/misc/jetty-runner.xml b/scripts/misc/jetty-runner.xml new file mode 100644 index 0000000..c7b747c --- /dev/null +++ b/scripts/misc/jetty-runner.xml @@ -0,0 +1,12 @@ + + + + /geoserver + + /WEB-INF/web.xml + false + + org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern + WONTMATCH + + diff --git a/setup.py b/setup.py index e1d46e0..4b81a26 100644 --- a/setup.py +++ b/setup.py @@ -1,28 +1,74 @@ +# -*- coding: utf-8 -*- +######################################################################### +# +# Copyright (C) 2018 OSGeo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +######################################################################### + import os +try: + # pip >=20 + from pip._internal.network.session import PipSession + try: + from pip._internal.req import parse_requirements + except ImportError: + # pip >=21 + from pip._internal.req.req_file import parse_requirements +except ImportError: + try: + # 10.0.0 <= pip <= 19.3.1 + from pip._internal.download import PipSession + from pip._internal.req import parse_requirements + except ImportError: + # pip <= 9.0.3 + from pip.download import PipSession + from pip.req import parse_requirements + from distutils.core import setup +from setuptools import find_packages + +# Parse requirements.txt to get the list of dependencies +inst_req = parse_requirements("requirements.txt", session=PipSession()) +REQUIREMENTS = [str(r.req) if hasattr(r, 'req') else r.requirement if not r.is_editable else '' + for r in inst_req] + def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() setup( name="haitidata", - version="0.2", + version="2.10.1", author="", author_email="", description="haitidata, based on GeoNode", - long_description=(read('README.rst')), + long_description=(read('README.md')), # Full list of classifiers can be found at: # http://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ 'Development Status :: 1 - Planning', ], - license="BSD", + license="GPL", keywords="haitidata geonode django", url='https://github.com/haitidata/haitidata', - packages=['haitidata',], + packages=find_packages(), + install_requires=REQUIREMENTS, + dependency_links=[ + "git+https://github.com/GeoNode/geonode.git@2.10.1#egg=geonode" + ], include_package_data=True, zip_safe=False, - install_requires=[ - 'django-tastypie==0.13.0', - ] ) diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..3d51cc3 --- /dev/null +++ b/tasks.py @@ -0,0 +1,560 @@ +import ast +import json +import logging +import os +import re +import time +import datetime +import docker +import socket + +from urlparse import urlparse +from invoke import run, task + +BOOTSTRAP_IMAGE_CHEIP = 'codenvy/che-ip:nightly' + + +@task +def waitfordbs(ctx): + print "**************************databases*******************************" + ctx.run("/usr/bin/wait-for-databases {0}".format('db'), pty=True) + + +@task +def waitforgeoserver(ctx): + print "****************************geoserver********************************" + while not _rest_api_availability(os.environ['GEOSERVER_LOCATION'] + 'rest'): + print ("Wait for GeoServer API availability...") + print "GeoServer is available for HTTP calls!" + + +@task +def update(ctx): + print "***************************setting env*********************************" + ctx.run("env", pty=True) + pub_ip = _geonode_public_host_ip() + print "Public Hostname or IP is {0}".format(pub_ip) + pub_port = _geonode_public_port() + print "Public PORT is {0}".format(pub_port) + pub_protocol = 'https' if pub_port == '443' else 'http' + if pub_protocol == 'https' or pub_port == '80': + pub_port = None + db_url = _update_db_connstring() + geodb_url = _update_geodb_connstring() + service_ready = False + while not service_ready: + try: + socket.gethostbyname('geonode') + service_ready = True + except Exception: + time.sleep(10) + + override_env = "$HOME/.override_env" + if os.path.exists(override_env): + os.remove(override_env) + else: + print("Can not delete the %s file as it doesn't exists" % override_env) + + envs = { + "local_settings": "{0}".format(_localsettings()), + "siteurl": os.environ.get('SITEURL', + '{0}://{1}:{2}/'.format(pub_protocol, pub_ip, pub_port) if pub_port else '{0}://{1}/'.format(pub_protocol, pub_ip)), + "geonode_docker_host": "{0}".format(socket.gethostbyname('geonode')), + "public_protocol": pub_protocol, + "public_fqdn": "{0}{1}".format(pub_ip, ':' + pub_port if pub_port else ''), + "public_host": "{0}".format(pub_ip), + "dburl": os.environ.get('DATABASE_URL', db_url), + "geodburl": os.environ.get('GEODATABASE_URL', geodb_url), + "static_root": os.environ.get('STATIC_ROOT', '/mnt/volumes/statics/static/'), + "media_root": os.environ.get('MEDIA_ROOT', '/mnt/volumes/statics/uploaded/'), + "geoip_path": os.environ.get('GEOIP_PATH', '/mnt/volumes/statics/geoip.db'), + "monitoring": os.environ.get('MONITORING_ENABLED', True), + "monitoring_host_name": os.environ.get('MONITORING_HOST_NAME', 'geonode'), + "monitoring_service_name": os.environ.get('MONITORING_SERVICE_NAME', 'local-geonode'), + "monitoring_data_ttl": os.environ.get('MONITORING_DATA_TTL', 7), + "geonode_geodb_passwd": os.environ.get('GEONODE_GEODATABASE_PASSWORD', 'geonode_data'), + "default_backend_datastore": os.environ.get('DEFAULT_BACKEND_DATASTORE', 'datastore'), + "geonode_db_passwd": os.environ.get('GEONODE_DATABASE_PASSWORD', 'geonode'), + "geonode_geodb": os.environ.get('GEONODE_GEODATABASE', 'geonode_data'), + "db_url": os.environ.get('DATABASE_URL', 'postgres://geonode:geonode@db:5432/geonode'), + "geodb_url": os.environ.get('GEODATABASE_URL', 'postgis://geonode:geonode@db:5432/geonode_data'), + "geonode_db": os.environ.get('GEONODE_DATABASE', 'geonode'), + "gs_loc": os.environ.get('GEOSERVER_LOCATION', 'http://geoserver:8080/geoserver/'), + "gs_web_ui_loc": os.environ.get('GEOSERVER_WEB_UI_LOCATION', + 'http://{0}:{1}/geoserver/'.format(pub_ip, pub_port) if pub_port else 'http://{0}/geoserver/'.format(pub_ip)), + "gs_pub_loc": os.environ.get('GEOSERVER_PUBLIC_LOCATION', + 'http://{0}:{1}/geoserver/'.format(pub_ip, pub_port) if pub_port else 'http://{0}/geoserver/'.format(pub_ip)), + "gs_admin_pwd": os.environ.get('GEOSERVER_ADMIN_PASSWORD', 'geoserver'), + "override_fn": override_env + } + try: + current_allowed = ast.literal_eval(os.getenv('ALLOWED_HOSTS') or \ + "['{public_fqdn}', '{public_host}', 'localhost', 'django', 'haitidata',]".format(**envs)) + except ValueError: + current_allowed = [] + current_allowed.extend(['{}'.format(pub_ip), '{}:{}'.format(pub_ip, pub_port)]) + allowed_hosts = ['"{}"'.format(c) for c in current_allowed] + ['"geonode"', '"django"'] + + ctx.run("echo export DJANGO_SETTINGS_MODULE=\ +{local_settings} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export MONITORING_ENABLED=\ +{monitoring} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export MONITORING_HOST_NAME=\ +{monitoring_host_name} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export MONITORING_SERVICE_NAME=\ +{monitoring_service_name} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export MONITORING_DATA_TTL=\ +{monitoring_data_ttl} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEONODE_GEODATABASE_PASSWORD=\ +{geonode_geodb_passwd} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export DEFAULT_BACKEND_DATASTORE=\ +{default_backend_datastore} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEONODE_DATABASE_PASSWORD=\ +{geonode_db_passwd} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEONODE_GEODATABASE=\ +{geonode_geodb} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export DATABASE_URL=\ +{db_url} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEODATABASE_URL=\ +{geodb_url} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEONODE_DATABASE=\ +{geonode_db} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEOSERVER_LOCATION=\ +{gs_loc} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEOSERVER_WEB_UI_LOCATION=\ +{gs_web_ui_loc} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEOSERVER_PUBLIC_LOCATION=\ +{gs_pub_loc} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEOSERVER_ADMIN_PASSWORD=\ +{gs_admin_pwd} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export SITEURL=\ +{siteurl} >> {override_fn}".format(**envs), pty=True) + ctx.run('echo export ALLOWED_HOSTS=\ +"\\"{}\\"" >> {override_fn}'.format(allowed_hosts, **envs), pty=True) + ctx.run("echo export DATABASE_URL=\ +{dburl} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEODATABASE_URL=\ +{geodburl} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export STATIC_ROOT=\ +{static_root} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export MEDIA_ROOT=\ +{media_root} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export GEOIP_PATH=\ +{geoip_path} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export LOGIN_URL=\ +{siteurl}account/login/ >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export LOGOUT_URL=\ +{siteurl}account/logout/ >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export LOGIN_REDIRECT_URL=\ +{siteurl} >> {override_fn}".format(**envs), pty=True) + ctx.run("echo export LOGOUT_REDIRECT_URL=\ +{siteurl} >> {override_fn}".format(**envs), pty=True) + ctx.run("source %s" % override_env, pty=True) + print "****************************finalize env**********************************" + ctx.run("env", pty=True) + + +@task +def migrations(ctx): + print "**************************migrations*******************************" + ctx.run("python manage.py makemigrations --noinput --merge --settings={0}".format( + _localsettings() + ), pty=True) + ctx.run("python manage.py makemigrations --noinput --settings={0}".format( + _localsettings() + ), pty=True) + ctx.run("python manage.py migrate --noinput --settings={0}".format( + _localsettings() + ), pty=True) + ctx.run("python manage.py updategeoip --settings={0}".format( + _localsettings() + ), pty=True) + try: + ctx.run("python manage.py rebuild_index --noinput --settings={0}".format( + _localsettings() + ), pty=True) + except: + pass + +@task +def statics(ctx): + print "**************************statics*******************************" + ctx.run('mkdir -p /mnt/volumes/statics/{static,uploads}') + ctx.run("python manage.py collectstatic --noinput --clear --settings={0}".format( + _localsettings() + ), pty=True) + +@task +def prepare(ctx): + print "**********************prepare fixture***************************" + ctx.run("rm -rf /tmp/default_oauth_apps_docker.json", pty=True) + _prepare_oauth_fixture() + ctx.run("rm -rf /tmp/default_site.json", pty=True) + _prepare_site_fixture() + # Updating OAuth2 Service Config + oauth_config = "/geoserver_data/data/security/filter/geonode-oauth2/config.xml" + ctx.run( + 'sed -i "s|.*|{client_id}|g" {oauth_config}'.format( + client_id=os.environ['OAUTH2_CLIENT_ID'], + oauth_config=oauth_config + ), pty=True) + ctx.run( + 'sed -i "s|.*|{client_secret}|g" {oauth_config}'.format( + client_secret=os.environ['OAUTH2_CLIENT_SECRET'], + oauth_config=oauth_config + ), pty=True) + + +@task +def fixtures(ctx): + print "**************************fixtures********************************" + ctx.run("python manage.py loaddata sample_admin \ +--settings={0}".format(_localsettings()), pty=True) + ctx.run("python manage.py loaddata /tmp/default_oauth_apps_docker.json \ +--settings={0}".format(_localsettings()), pty=True) + ctx.run("python manage.py loaddata /tmp/default_site.json \ +--settings={0}".format(_localsettings()), pty=True) + ctx.run("python manage.py loaddata /usr/src/haitidata/fixtures/initial_data.json \ +--settings={0}".format(_localsettings()), pty=True) + ctx.run("python manage.py set_all_layers_alternate \ +--settings={0}".format(_localsettings()), pty=True) + ctx.run("python manage.py set_all_layers_metadata -d \ +--settings={0}".format(_localsettings()), pty=True) + + +@task +def collectstatic(ctx): + print "************************static artifacts******************************" + ctx.run("django-admin.py collectstatic --noinput \ +--settings={0}".format(_localsettings()), pty=True) + + +@task +def geoserverfixture(ctx): + print "********************geoserver fixture********************************" + _geoserver_info_provision(os.environ['GEOSERVER_LOCATION'] + "rest/") + + +@task +def monitoringfixture(ctx): + print "*******************monitoring fixture********************************" + ctx.run("rm -rf /tmp/default_monitoring_apps_docker.json", pty=True) + _prepare_monitoring_fixture() + try: + ctx.run("django-admin.py loaddata /tmp/default_monitoring_apps_docker.json \ +--settings={0}".format(_localsettings()), pty=True) + except Exception as e: + print "ERROR installing monitoring fixture: " + str(e) + + +@task +def updategeoip(ctx): + print "**************************update geoip*******************************" + ctx.run("django-admin.py updategeoip \ + --settings={0}".format(_localsettings()), pty=True) + + +@task +def updateadmin(ctx): + print "***********************update admin details**************************" + ctx.run("rm -rf /tmp/django_admin_docker.json", pty=True) + _prepare_admin_fixture(os.environ.get('ADMIN_PASSWORD', 'admin'), os.environ.get('ADMIN_EMAIL', 'admin@example.org')) + ctx.run("django-admin.py loaddata /tmp/django_admin_docker.json \ +--settings={0}".format(_localsettings()), pty=True) + + +@task +def collectmetrics(ctx): + print "************************collect metrics******************************" + ctx.run("python -W ignore manage.py collect_metrics \ + --settings={0} -n -t xml".format(_localsettings()), pty=True) + +@task +def initialized(ctx): + print "**************************init file********************************" + ctx.run('date > /mnt/volumes/statics/geonode_init.lock') + +def _docker_host_ip(): + client = docker.from_env() + ip_list = client.containers.run(BOOTSTRAP_IMAGE_CHEIP, + network_mode='host' + ).split("\n") + if len(ip_list) > 1: + print("Docker daemon is running on more than one \ +address {0}".format(ip_list)) + print("Only the first address:{0} will be returned!".format( + ip_list[0] + )) + else: + print("Docker daemon is running at the following \ +address {0}".format(ip_list[0])) + return ip_list[0] + + +def _container_exposed_port(component, instname): + client = docker.from_env() + ports_dict = json.dumps( + [c.attrs['Config']['ExposedPorts'] for c in client.containers.list( + filters={ + 'label': 'org.geonode.component={0}'.format(component), + 'status': 'running' + } + ) if '{0}'.format(instname) in c.name][0] + ) + for key in json.loads(ports_dict): + port = re.split('/tcp', key)[0] + return port + +def _update_db_connstring(): + user = os.getenv('GEONODE_DATABASE', 'geonode') + pwd = os.getenv('GEONODE_DATABASE_PASSWORD', 'geonode') + dbname = os.getenv('GEONODE_DATABASE', 'geonode') + connstr = 'postgres://{0}:{1}@db:5432/{2}'.format( + user, + pwd, + dbname + ) + return connstr + + +def _update_geodb_connstring(): + geouser = os.getenv('GEONODE_GEODATABASE', 'geonode_data') + geopwd = os.getenv('GEONODE_GEODATABASE_PASSWORD', 'geonode_data') + geodbname = os.getenv('GEONODE_GEODATABASE', 'geonode_data') + geoconnstr = 'postgis://{0}:{1}@db:5432/{2}'.format( + geouser, + geopwd, + geodbname + ) + return geoconnstr + + +def _localsettings(): + settings = os.getenv('DJANGO_SETTINGS_MODULE', 'haitidata.settings') + return settings + + +def _rest_api_availability(url): + import requests + try: + r = requests.request('get', url, verify=False) + r.raise_for_status() # Raises a HTTPError if the status is 4xx, 5xxx + except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e: + print "GeoServer connection error is {0}".format(e) + return False + except requests.exceptions.HTTPError as er: + print "GeoServer HTTP error is {0}".format(er) + return False + else: + print "GeoServer API are available!" + return True + + +def _geonode_public_host_ip(): + gn_pub_hostip = os.getenv('GEONODE_LB_HOST_IP', None) + if not gn_pub_hostip: + gn_pub_hostip = _docker_host_ip() + return gn_pub_hostip + + +def _geonode_public_port(): + gn_pub_port = os.getenv('GEONODE_LB_PORT', '') + if not gn_pub_port: + gn_pub_port = _container_exposed_port( + 'nginx', + os.getenv('GEONODE_INSTANCE_NAME', 'geonode') + ) + elif gn_pub_port in ('80', '443'): + gn_pub_port = None + return gn_pub_port + + +def _geoserver_info_provision(url): + from django.conf import settings + from geoserver.catalog import Catalog + print "Setting GeoServer Admin Password..." + cat = Catalog(url, + username=settings.OGC_SERVER_DEFAULT_USER, + password=settings.OGC_SERVER_DEFAULT_PASSWORD + ) + headers = { + "Content-type": "application/xml", + "Accept": "application/xml" + } + data = """ + + {0} +""".format(os.getenv('GEOSERVER_ADMIN_PASSWORD', 'geoserver')) + + response = cat.http_request(cat.service_url + '/security/self/password', method="PUT", data=data, headers=headers) + print "Response Code: %s" % response.status_code + if response.status_code == 200: + print "GeoServer admin password updated SUCCESSFULLY!" + else: + print "WARNING: GeoServer admin password *NOT* updated: code [%s]" % response.status_code + + +def _prepare_oauth_fixture(): + upurl = urlparse(os.environ['SITEURL']) + net_scheme = upurl.scheme + pub_ip = _geonode_public_host_ip() + print "Public Hostname or IP is {0}".format(pub_ip) + pub_port = _geonode_public_port() + print "Public PORT is {0}".format(pub_port) + default_fixture = [ + { + "model": "oauth2_provider.application", + "pk": 1001, + "fields": { + "skip_authorization": True, + "created": "2018-05-31T10:00:31.661Z", + "updated": "2018-05-31T11:30:31.245Z", + "algorithm": "RS256", + "redirect_uris": "{0}://{1}:{2}/geoserver/index.html".format(net_scheme, pub_ip, pub_port) if pub_port else "{0}://{1}/geoserver/index.html".format(net_scheme, pub_ip), + "name": "GeoServer", + "authorization_grant_type": "authorization-code", + "client_type": "confidential", + "client_id": "{0}".format(os.environ['OAUTH2_CLIENT_ID']), + "client_secret": "{0}".format(os.environ['OAUTH2_CLIENT_SECRET']), + "user": [ + "admin" + ] + } + } + ] + with open('/tmp/default_oauth_apps_docker.json', 'w') as fixturefile: + json.dump(default_fixture, fixturefile) + + +def _prepare_site_fixture(): + upurl = urlparse(os.environ['SITEURL']) + default_fixture = [ + { + "model": "sites.site", + "pk": 1, + "fields": { + "domain": "{0}".format(upurl.hostname), + "name": "{0}".format(upurl.hostname) + } + } + ] + with open('/tmp/default_site.json', 'w') as fixturefile: + json.dump(default_fixture, fixturefile) + + +def _prepare_monitoring_fixture(): + upurl = urlparse(os.environ['SITEURL']) + net_scheme = upurl.scheme + net_loc = upurl.netloc + pub_ip = _geonode_public_host_ip() + print "Public Hostname or IP is {0}".format(pub_ip) + pub_port = _geonode_public_port() + print "Public PORT is {0}".format(pub_port) + #d = str(datetime.datetime.now()) + d = '1970-01-01 00:00:00' + default_fixture = [ + { + "fields": { + "active": True, + "ip": "{0}".format(socket.gethostbyname('geonode')), + "name": "{0}".format(os.environ['MONITORING_HOST_NAME']) + }, + "model": "monitoring.host", + "pk": 1 + }, + { + "fields": { + "active": True, + "ip": "{0}".format(socket.gethostbyname('geoserver')), + "name": "geoserver" + }, + "model": "monitoring.host", + "pk": 2 + }, + { + "fields": { + "name": "{0}".format(os.environ['MONITORING_SERVICE_NAME']), + "url": "{0}://{1}/".format(net_scheme, net_loc), + "notes": "", + "last_check": d, + "active": True, + "host": 1, + "check_interval": "00:01:00", + "service_type": 1 + }, + "model": "monitoring.service", + "pk": 1 + }, + { + "fields": { + "name": "geoserver-hostgeonode", + "url": "{0}://{1}/".format(net_scheme, net_loc), + "notes": "", + "last_check": d, + "active": True, + "host": 1, + "check_interval": "00:01:00", + "service_type": 3 + }, + "model": "monitoring.service", + "pk": 2 + }, + { + "fields": { + "name": "geoserver-hostgeoserver", + "url": "{0}".format(os.environ['GEOSERVER_LOCATION']), + "notes": "", + "last_check": d, + "active": True, + "host": 2, + "check_interval": "00:01:00", + "service_type": 4 + }, + "model": "monitoring.service", + "pk": 3 + }, + { + "fields": { + "name": "default-geoserver", + "url": "{0}".format(os.environ['GEOSERVER_LOCATION']), + "notes": "", + "last_check": d, + "active": True, + "host": 2, + "check_interval": "00:01:00", + "service_type": 2 + }, + "model": "monitoring.service", + "pk": 4 + } + ] + with open('/tmp/default_monitoring_apps_docker.json', 'w') as fixturefile: + json.dump(default_fixture, fixturefile) + + +def _prepare_admin_fixture(admin_password, admin_email): + from django.contrib.auth.hashers import make_password + d = datetime.datetime.now() + mdext_date = d.isoformat()[:23] + "Z" + default_fixture = [ + { + "fields": { + "date_joined": mdext_date, + "email": admin_email, + "first_name": "", + "groups": [], + "is_active": True, + "is_staff": True, + "is_superuser": True, + "last_login": mdext_date, + "last_name": "", + "password": make_password(admin_password), + "user_permissions": [], + "username": "admin" + }, + "model": "people.Profile", + "pk": 1000 + } + ] + with open('/tmp/django_admin_docker.json', 'w') as fixturefile: + json.dump(default_fixture, fixturefile) diff --git a/thumbnail/__init__.py b/thumbnail/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/thumbnail/admin.py b/thumbnail/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/thumbnail/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/thumbnail/migrations/__init__.py b/thumbnail/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/thumbnail/models.py b/thumbnail/models.py deleted file mode 100644 index 71a8362..0000000 --- a/thumbnail/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/thumbnail/tests.py b/thumbnail/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/thumbnail/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/thumbnail/views.py b/thumbnail/views.py deleted file mode 100644 index 2c8d16b..0000000 --- a/thumbnail/views.py +++ /dev/null @@ -1,40 +0,0 @@ -from django.shortcuts import render - -import base64 - -from django.http import HttpResponse, HttpResponseRedirect -from django.conf import settings -from geonode.layers.views import _resolve_layer -try: - import json -except ImportError: - from django.utils import simplejson as json - -if 'geonode.geoserver' in settings.INSTALLED_APPS: - from geonode.geoserver.helpers import _render_thumbnail - - -def layer_thumbnail(request, layername): - if request.method == 'POST': - layer_obj = _resolve_layer(request, layername) - try: - preview = json.loads(request.body).get('preview', None) - if preview and preview == 'react': - format, image = json.loads( - request.body)['image'].split(';base64,') - image = base64.b64decode(image) - else: - image = _render_thumbnail(request.body) - - if not image: - return - filename = "layer-%s-thumb.png" % layer_obj.uuid - layer_obj.save_thumbnail(filename, image) - - return HttpResponse('Thumbnail saved') - except: - return HttpResponse( - content='error saving thumbnail', - status=500, - content_type='text/plain' - ) diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000..6fcbfae --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,25 @@ +[uwsgi] +# socket = 0.0.0.0:8000 +http-socket = 0.0.0.0:8000 +logto = /var/log/geonode.log +pidfile = /tmp/geonode.pid + +chdir = /usr/src/haitidata/ +module = haitidata.wsgi:application + +processes = 8 +threads = 2 +enable-threads = true +master = true + +buffer-size = 32768 +max-requests = 500 +harakiri = 300 # respawn processes taking more than 5 minutes (300 seconds) +max-requests = 500 # respawn processes after serving 500 requests +# limit-as = 1024 # avoid Errno 12 cannot allocate memory +harakiri-verbose = true +# cron = -1 -1 -1 -1 -1 /usr/local/bin/python /usr/src/haitidata/manage.py collect_metrics -n +vacuum = true +thunder-lock = true + +touch-reload = /usr/src/haitidata/haitidata/wsgi.py \ No newline at end of file diff --git a/wait-for-databases.sh b/wait-for-databases.sh new file mode 100755 index 0000000..6eb6d64 --- /dev/null +++ b/wait-for-databases.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +host="$1" +shift + +until PGPASSWORD=postgres psql -h "$host" -U "postgres" -P "pager=off" -c '\l'; do + >&2 echo "Postgres is unavailable - sleeping" + sleep 1 +done + +until PGPASSWORD=${GEONODE_DATABASE_PASSWORD} psql -h "$host" -U ${GEONODE_DATABASE} -d ${GEONODE_DATABASE} -P "pager=off" -c '\l'; do + >&2 echo "${GEONODE_DATABASE} is unavailable - sleeping" + sleep 1 +done + +until PGPASSWORD=${GEONODE_GEODATABASE_PASSWORD} psql -h "$host" -U ${GEONODE_GEODATABASE} -d ${GEONODE_GEODATABASE} -P "pager=off" -c '\l'; do + >&2 echo "${GEONODE_GEODATABASE} is unavailable - sleeping" + sleep 1 +done + +>&2 echo "GeoNode databases are up - executing command" diff --git a/wfs_harvest/__init__.py b/wfs_harvest/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/wfs_harvest/admin.py b/wfs_harvest/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/wfs_harvest/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/wfs_harvest/migrations/__init__.py b/wfs_harvest/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/wfs_harvest/models.py b/wfs_harvest/models.py deleted file mode 100644 index 71a8362..0000000 --- a/wfs_harvest/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/wfs_harvest/templates/wfs-harvest/field_choice.html b/wfs_harvest/templates/wfs-harvest/field_choice.html deleted file mode 100644 index b9312ef..0000000 --- a/wfs_harvest/templates/wfs-harvest/field_choice.html +++ /dev/null @@ -1,41 +0,0 @@ -

      Field choice

      -

      Choose category field

      - -
      - -

      Choose quantity field

      - -
      -
      - Build Chart - Add Chart -
      - \ No newline at end of file diff --git a/wfs_harvest/tests.py b/wfs_harvest/tests.py deleted file mode 100644 index fb01967..0000000 --- a/wfs_harvest/tests.py +++ /dev/null @@ -1,20 +0,0 @@ -import urllib - -from django.test import SimpleTestCase -from django.core.urlresolvers import reverse - -from . import views - -# Create your tests here. -class GetFieldsView(SimpleTestCase): - def test_non_existing_lyr(self): - # url = reverse(views.get_fields) - enc_lyrname = urllib.urlencode({'lyrname': 'idontexist'}) - # complete_url = url + '?' + enc_lyrname - # self.client.get('/table') - # self.client.get(complete_url) - self.assertTrue(False) - - def test_non_existing_field(self): - # self.client.get(reverse('wfs_harvest:get_fields')) - self.assertTrue(False) \ No newline at end of file diff --git a/wfs_harvest/urls.py b/wfs_harvest/urls.py deleted file mode 100644 index c29d41e..0000000 --- a/wfs_harvest/urls.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.conf.urls import url - -from . import views - -urlpatterns = [ - url(r'^$', views.get_wfs_csv), - url(r'^fields$', views.get_fields) - ] diff --git a/wfs_harvest/utils.py b/wfs_harvest/utils.py deleted file mode 100644 index c599214..0000000 --- a/wfs_harvest/utils.py +++ /dev/null @@ -1,56 +0,0 @@ -import urllib -import xml.etree.ElementTree as ET - -from geonode.layers.models import Layer - - -def get_fields(layer_id): - layer = Layer.objects.get(pk=layer_id) - lyrname = layer.typename - params = urllib.urlencode({ - 'service':'WFS', - 'version':'1.1.0', - 'request':'DescribeFeatureType', - 'typename':lyrname - }) - - wfs_request = urllib.urlopen('http://localhost/geoserver/ows?%s' - % params) - content = wfs_request.read() - - root = ET.fromstring(content) - namespace = root.tag.split('}')[0] + '}' - xpath = ('./{0}complexType/{0}complexContent/' - '{0}extension/{0}sequence/{0}element').format(namespace) - numeric_types = ['byte', 'decimal', 'int', 'integer', 'long', 'short', - 'boolean', 'double', 'float'] - fields = {} - for element in root.findall(xpath): - type = element.attrib['type'] - if not type.startswith('gml:'): - fields[element.attrib['name']] = type[4:] - - fieldnames = fields.keys() - num_fieldnames = [k for k, v in fields.iteritems() if v in numeric_types] - - return fieldnames, num_fieldnames - - -def get_featno(layer_id): - lyr = Layer.objects.get(pk=layer_id) - wfs_baseurl = lyr.link_set.get(link_type='OGC:WFS').url - - params = urllib.urlencode({ - 'service': 'WFS', - 'version': '1.1.0', - 'request': 'GetFeature', - 'typename': lyr.typename, - 'resultType': 'hits' - }) - - wfs_count_request = urllib.urlopen(wfs_baseurl + '?%s' % params) - content = wfs_count_request.read() - - root = ET.fromstring(content) - - return int(root.attrib['numberOfFeatures']) diff --git a/wfs_harvest/views.py b/wfs_harvest/views.py deleted file mode 100644 index 6c4330e..0000000 --- a/wfs_harvest/views.py +++ /dev/null @@ -1,80 +0,0 @@ -import urllib -import xml.etree.ElementTree as ET - -from django.http import HttpResponse -from django.shortcuts import render -from django.conf import settings - -from geonode.layers.models import Layer - -from utils import get_featno - - -def get_fields(request): - lyrname = request.GET['lyrname'] - params = urllib.urlencode({ - 'service':'WFS', - 'version':'1.1.0', - 'request':'DescribeFeatureType', - 'typename':lyrname - }) - - wfs_request = urllib.urlopen('http://localhost/geoserver/ows?%s' - % params) - content = wfs_request.read() - - root = ET.fromstring(content) - namespace = root.tag.split('}')[0] + '}' - xpath = ('./{0}complexType/{0}complexContent/' - '{0}extension/{0}sequence/{0}element').format(namespace) - numeric_types = ['byte', 'decimal', 'int', 'integer', 'long', 'short', - 'boolean', 'double', 'float'] - fields = {} - for element in root.findall(xpath): - type = element.attrib['type'] - if not type.startswith('gml:'): - fields[element.attrib['name']] = type[4:] - - fieldnames = fields.keys() - num_fieldnames = [k for k, v in fields.iteritems() if v in numeric_types] - - context = { - 'lyrname': lyrname, - 'fieldnames': fieldnames, - 'num_fieldnames': num_fieldnames - } - return render(request, 'wfs_harvest/field_choice.html', context) - - -def get_wfs_csv(request): - qdict = request.GET - typename = qdict['lyrname'] - category_field = qdict['category'] - quantity_field = qdict['quantity'] - - lyr = Layer.objects.get(typename=typename) - featno = get_featno(lyr.id) - if featno > settings.MAX_CSV_RECORDS: - response = HttpResponse('{0} has too many records; csv download' - ' is not available for very large ' - 'datasets'.format(lyr.title)) - response.status_code = 413 - response.reason_phrase = 'REQUEST ENTITY TOO LARGE' - return response - - params = urllib.urlencode({ - 'service':'WFS', - 'version':'1.1.0', - 'request':'GetFeature', - 'typename':typename, - 'propertyName':category_field + ',' + quantity_field, - 'outputFormat':'csv', - 'maxFeatures': str(settings.MAX_CSV_RECORDS) - }) - - wfs_baseurl = lyr.link_set.get(link_type='OGC:WFS').url - wfs_request = urllib.urlopen(wfs_baseurl + '?%s' % params) - content = wfs_request.read() - response = HttpResponse(content, content_type='text/csv') - response['Content-Disposition'] = 'attachment; filename="myfile.csv"' - return response