diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..ea2a586a11 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git +.gitignore +HISTORY.md +mayan/media +db.sqlite* +docker +!docker/etc +!docker/entrypoint.sh +./.* +docs diff --git a/.gitignore b/.gitignore index 3405a7a43e..b45fabd5cd 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ static_collected/ /mayan/media/static/ /venv/ /whoosh_index/ +node_modules/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1cccdbe1eb..ba45a7239a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,41 +1,83 @@ -image: ubuntu:16.10 -services: - - mysql:latest - - postgres -before_script: - - echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale - - locale-gen en_US.UTF-8 - - update-locale LANG=en_US.UTF-8 - - export LC_ALL=en_US.UTF-8 - - apt-get update -qq - - apt-get install -qq curl graphviz python-dev python-pip gcc gnupg1 tesseract-ocr tesseract-ocr-deu ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice -variables: - POSTGRES_DB: "mayan_edms" - POSTGRES_PASSWORD: "postgres" - MYSQL_ALLOW_EMPTY_PASSWORD: "yes" - MYSQL_DATABASE: "mayan_edms" -test:mysql: +stages: + - test + - build + +job_docker_master: + stage: build + image: docker:latest + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - - apt-get install -qq libmysqlclient-dev - - pip install -r requirements/testing.txt - - pip install mysql-python - - apt-get install -qq mysql-client - - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;" - - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations - - codecov + - docker build --pull -t "$CI_REGISTRY_IMAGE" -f docker/Dockerfile . + - docker run --rm "$CI_REGISTRY_IMAGE" run-tests + - docker push "$CI_REGISTRY_IMAGE" + only: + - master + +job_docker_nightly: + stage: build + image: docker:latest + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" -f docker/Dockerfile . + - docker run --rm "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" run-tests + - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" + only: + - nightly + - staging + +.test_base: &test_base + stage: test + image: ubuntu:16.04 + cache: + paths: + - ~/.cache/pip/ + - /var/cache/apt/archives/ + before_script: + - apt-get -qq update + - apt-get install -qq locales + - echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale + - locale-gen en_US.UTF-8 + - update-locale LANG=en_US.UTF-8 + - export LC_ALL=en_US.UTF-8 + - apt-get install -qq curl gcc ghostscript gpgv gnupg graphviz libjpeg-dev libmagic1 libpng-dev libtiff-dev poppler-utils libreoffice poppler-utils python-dev python-pip tesseract-ocr tesseract-ocr-deu + - pip install -r requirements/testing.txt + +test-mysql: + <<: *test_base + variables: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_DATABASE: "mayan_edms" + services: + - mysql:8.0.3 + script: + - apt-get install -qq libmysqlclient-dev mysql-client + - pip install mysql-python + - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;" + - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations tags: - mysql -test:postgres: + +test-postgres: + <<: *test_base + variables: + POSTGRES_DB: "mayan_edms" + POSTGRES_PASSWORD: "postgres" + services: + - postgres script: - - apt-get install -qq libpq-dev - - pip install -r requirements/testing.txt - - pip install psycopg2 - - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations - - codecov + - apt-get install -qq libpq-dev + - pip install psycopg2 + - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations tags: - postgres -test:sqlite: + +test-sqlite: + <<: *test_base script: - - pip install -r requirements/testing.txt - - coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations - - codecov + - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ce1fd62061..95b9205ae3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,7 @@ with deployments, webservers, cloud providers, etc. Code ---- +1. Complete and mail, or scan and email the corresponding Contributor Assignment Agreement: [Mayan EDMS Individual Contributor Assignment Agreement](http://mayan.readthedocs.io/en/latest/topics/caa_individual.rst) or [Mayan EDMS Entity Contributor Assignment Agreement](http://mayan.readthedocs.io/en/latest/topics/caa_entity.rst). 1. Fork [the repository](http://gitlab.com/mayan-edms/mayan-edms). 1. Choose the version for which you want to develop. The code is divided in the following branches: diff --git a/HISTORY.rst b/HISTORY.rst index a8c6c13781..dfa70f89d3 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,184 @@ +3.0 (2018-06-29) +================ +- Rename the role groups link label from "Members" to "Groups". +- Rename the group users link label from "Members" to "Users". +- Don't show full document version label in the heading of the document + version list view. +- Show the number of pages of a document and of document versions in + the document list view and document versions list views respectively. +- Display a document version's thumbnail before other attributes. +- User Django's provided form for setting an users password. + This change allows displaying the current password policies + and validation. +- Add method to modify a group's role membership from the group's + view. +- Rename the group user count column label from "Members" to "Users". +- Backport support for global and object event notification. + GitLab issue #262. +- Remove Vagrant section of the document. Anything related to + Vagrant has been move into its own repository at: + https://gitlab.com/mayan-edms/mayan-edms-vagrant +- Add view to show list of events performed by an user. +- Allow filtering an event list by clicking on the user column. +- Display a proper message in the document type metadata type relationship + view when there are no metadata types exist. +- Require the document view permission to view trashed documents. +- Make the multi object form perform an auto submit when the value is changed. +- Improved styling and interaction of the multiple object action form. +- Add checkbox to allow selecting all item in the item list view. +- Revise and improve permission requirements for the documents app API. +- Downloading a document version now requires the document download permission + instead of just the document view permission. +- Creating a new document no longer works by having the document create + permission in a global manner. It is now possible to create a document via + the API by having the document permission for a specific document type. +- Viewing the version list of a document now required the document version + view permission instead of the document view permission. +- Not having the document version view permission for a document will not + return a 403 error. Instead a blank response will be returned. +- Reverting a document via API will new require the document version revert + permission instead of the document edit permission. +- Fix permission filtering when performing document page searching. +- Fix cabinet detail view pagination. +- Update project to work with Django 1.11.11. +- Fix deprecations in preparation for Django 2.0. +- Improve permission handling in the workflow app. +- The checkedout detail view permission is now required for the checked out document detail API view. +- Switch to a resource and service based API from previous app based one. +- Add missing services for the checkout API. +- Fix existing checkout APIs. +- Update API vies and serializers for the latest Django REST framework version. Replace DRF Swagger with DRF-YASG. +- Update to the latest version of Pillow, django-activity-stream, django-compressor, django-cors-headers, + django-formtools, django-qsstats-magic, django-stronghold, django-suit, furl, graphviz, pyocr, + python-dateutil, python-magic, pytz, sh. +- Update to the latest version the packages for building, development, documentation and testing. +- Add statistics script to produce a report of the views, APIs and test for each app. +- Merge base64 filename patch from Cornelius Ludmann. +- SearchModel retrun interface changed. The class no longer returns the result_set value. Use the queryset returned instead. +- Update to Font Awesome 5. +- Turn Mayan EDMS into a single page app. +- Split base.js into mayan_app.js, mayan_image.js, partial_navigation.js. +- Add a HOME_VIEW setting. Use it for the default view to be loaded. +- Fix bug in document page view. Was storing the URL and the querystring as a single url variable. +- Use history.back instead of history.go(-1). +- Don't use the previous variable when canceling a form action. Form now use only javascript's history.back(). +- Add template and modal to display server side errors. +- Remove the unused scrollable_content internal feature. +- Remove unused animate.css package. +- Add page loading indicator. +- Add periodic AJAX workers to update the value of the notifications link. +- Add notification count inside a badge on the notification link. +- Add the MERC specifying javascript library usage. +- Documents without at least a version are not scanned for duplicates. +- Use a SHA256 hex digest of the secret key at the name of the lockfile. This makes the generation of the name repeatable while unique between installations. +- Squashed apps migrations. +- Convert document thumbnails, preview, image preview and staging files to template base widgets. +- Unify all document widgets. +- Display resolution settings are now specified as width and height and not a single resolution value. +- Printed pages are now full width. +- Move the invalid document markup to a separate HTML template. +- Update to Fancybox 3. +- Update to jQuery 3.3.1 +- Move transfomations to their own module. +- Split documents.tests.test_views into base.py, test_deleted_document_views.py, + test_document_page_views.py, test_document_type_views.py, test_document_version_views.py, + test_document_views.py, test_duplicated_document_views.py +- Sort smart links by label. +- Rename the internal name of the document type permissions namespace. Existing permissions will need to be updated. +- Add support for OR type searches. Use the "OR" string between the terms. Example: term1 OR term2. +- Removed redundant permissions checks. +- Move the page count display to the top of the image. +- Unify the way to gather the project's metadata. Use mayan.__XX__ and a new common tag named {% project_information '' %} +- Return to the same source view after uploading a document. +- Add new WizardStep class to decouple the wizard step configuration. +- Add support for deregister upload wizard steps. +- Add wizard step to insert the document being uploaded to a cabinet. +- Fix documentation formatting. +- Add upload wizard step chapte. +- Improve and add additional diagrams. +- Change documenation theme to rtd. +- Fix carousel item height issues. +- Add the "to=" keyword argument to all ForeignKey, ManayToMany and OneToOne Fields. +- Add Makefile target to check the format of the README.rst file. +- Mark the feature to detect and fix the orientatin of PDF as experimental. +- Don't show documents with 0 duplicates in the duplicated document list. +- Clean up the duplicated document model after a document is deleted. +- Add support for roles ACLs. +- Add support for users ACLs. +- Add support for groups ACLs. +- Sort permission namespaces and permissions in the role permission views. +- Invert the columns in the ACL detail view. +- Fix issue #454. Thanks to Andrei Korostelev @kindkaktus for the issue and the + solution. +- Update the role permission edit view require the permission grant or permission + revoke permissions for the selected role. +- Only show the new document link if the user has access to create documents of + at least one document type. GitLab Issue #302. Thanks to kg @kgraves. +- Support passing arguments to the document, document cache and document signatures + storage backends. New settings: DOCUMENTS_STORAGE_BACKEND_ARGUMENTS, + DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS, SIGNATURES_STORAGE_BACKEND_ARGUMENTS +- Remove the setting STORAGE_FILESTORAGE_LOCATION. Document storage + location for the storage.backend.filebasedstorage.FileBasedStorage + backdend must now passed via the DOCUMENTS_STORAGE_BACKEND_ARGUMENTS, + DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS, or + SIGNATURES_STORAGE_BACKEND_ARGUMENTS if the backend is used to documents, + the document image cache and/or document signatures. Use + DOCUMENTS_STORAGE_BACKEND_ARGUMENTS = '{ location: }' + If no path is specified the backend will default to + 'mayan/media/document_storage'. +- Standardize the way storages are used. All apps that use storage now define + their storages in the .storages modules instead of the .runtime module. + The storage.backends.filebasedstorage.FileBasedStorage has been remove, + instead Django's default storage is used and each app is responsible + of specifying their default path. +- Unify checkbox selection code for list items and table items. +- Add smart checkbox manager. +- Update Chart.js version. +- Improve line chart appearance. Fix mouse hover label issue. +- Add JavaScript dependency manager. +- Add support for passing arguments to the OCR backend. +- Fix issue when using workflows transitions with the new version + upload event as trigger. Thanks to Sema @Miggaten for the find and + the solution. +- Removing running workflow instances in document of a specific type if + that document type is removed from the workflow. +- Make error messages persistent and increase the timeout of warning to 10 seconds. +- Improve rendering of the details form. +- Update rendering of the readonly multiselect widget to conform to Django's updated field class interface. +- Add warning when using SQLite as the database backend. +- Use Mailgun's flanker library to process the email sources. +- Add locking for interval sources. This reduces the chance of repeated documents from long running email downloads. +- Add the option to enable or disable parsing when uploading a document for each document type. +- Add a new setting option to enable automatic parsing for each new document type created. +- Add support for HTML bodies to the user mailers. +- Production ALLOWED_HOSTS settings now defaults to a safer ['127.0.0.1', 'localhost', '[::1]'] +- Capture menu resolution errors on invalid URLs. Closes GitLab issue #420. +- New environment variables: MAYAN_SECRET_KEY, MAYAN_CELERY_ALWAYS_EAGER, MAYAN_CELERY_RESULT_BACKEND, + MAYAN_BROKER_URL, MAYAN_DATABASE_ENGINE, MAYAN_DATABASE_CONN_MAX_AGE, MAYAN_DATABASE_NAME, + MAYAN_DATABASE_USER, MAYAN_DATABASE_PASSWORD, MAYAN_DATABASE_HOST, MAYAN_DATABASE_PORT, + MAYAN_DEBUG. +- Stricter defaults. CELERY_ALWAYS_EAGER to False, ALLOWED_HOSTS to ['127.0.0.1', 'localhost', '[::1]']. +- New initialization command. Creates media/system and populates the SECRET_KEY and VERSION files. +- Sane scanner source paper source now defaults to blank. +- Merge Docker image creation back into the main repository. +- Docker image now uses gunicorn and whitenoise instead of NGINX to server the app and + the static media. +- All installation artifact are now created and read from the media folder. +- Debian is now the Linux distribution used for the Docker image. +- Most Docker Celery workers are now execute using a lower OS priority number. +- Add COMMON_PRODUCTION_ERROR_LOGGING setting to control the logging of errors in production. Defaults to False. +- Change the error log file handle class to RotatingFileHandle to avoid an indefinitely growing log file. +- Disable embedded signatute verification during the perform upgrade command. +- Replace the DOCUMENTS_LANGUAGE_CHOICES setting option. Replaced with the new DOCUMENTS_LANGUAGE_CODES. +- Fix error when trying to upload a document from and email account with 'from' and 'subject' metadata. +- Fix typo on message.header get from 'Suject' to 'Subject'. +- On multi part emails keep the original From and Subject properties for all subsequent parts if the sub parts don't specify them. Fixes issue #481. Thanks to Robert Schöftner @robert.schoeftner for the report and debug information. +- Don't provide a default for the scanner source adf_mode. Some scanners throw an error even when the selection + if supported. +- Add a "Quick Download" action to reduce the number of steps to download a single document. GitLab issue #338. +- Recalculate a document's indexes when attaching or removing a tag from or to it. +- Recalculate all of a tag's documents when a tag is about to be deleted. + 2.7.3 (2017-09-11) ================== - Fix task manager queue list view. Thanks to LeVon Smoker for diff --git a/MANIFEST.in b/MANIFEST.in index 4d82143547..38fa56d556 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ include README.md LICENSE HISTORY.rst mayan/LICENSE -recursive-include mayan/apps *.txt *.html *.css *.ico *.png *.jpg *.js *.po *.mo *.ttf *.woff *.woff2 *.gif *.eot *.svg *.doc *.pdf *.tiff *.sig *.asc *.gpg *.zip +recursive-include mayan/apps *.txt *.html *.css *.ico *.png *.jpg *.js *.po *.mo *.ttf *.woff *.woff2 *.gif *.eot *.svg *.doc *.pdf *.tiff *.sig *.asc *.gpg *.zip package.json global-exclude mayan/settings/local.py mayan/settings/travis/* mayan/media/* diff --git a/Makefile b/Makefile index 4f8d9a7dd8..8d45a45673 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,14 @@ .PHONY: clean-pyc clean-build - -help: +help: docker-help @echo + @echo "**** Main makefile ****" @echo "clean-build - Remove build artifacts." @echo "clean-pyc - Remove Python artifacts." @echo "clean - Remove Python and build artifacts." - @echo "generate_setup - Create and updated setup.py" + @echo "generate-setup - Create and updated setup.py" + @echo "check-readme - Checks validity of the README.rst file for PyPI publication." + @echo "check-missing_migrations - Make sure all models have proper migrations." @echo "test-all - Run all tests." @echo "test MODULE= - Run tests for a single app, module or test class." @@ -17,43 +19,35 @@ help: @echo "test-with-oracle-all - Run all tests against a Oracle database container." @echo "test-oracle MODULE= - Run tests for a single app, module or test class against a Oracle database container." - @echo "docs_serve - Run the livehtml documentation generator." + @echo "docs-serve - Run the livehtml documentation generator." - @echo "translations_make - Refresh all translation files." - @echo "translations_compile - Compile all translation files." - @echo "translations_push - Upload all translation files to Transifex." - @echo "translations_pull - Download all translation files from Transifex." - - @echo "requirements_dev - Install development requirements." - @echo "requirements_docs - Install documentation requirements." - @echo "requirements_testing - Install testing requirements." + @echo "translations-make - Refresh all translation files." + @echo "translations-compile - Compile all translation files." + @echo "translations-push - Upload all translation files to Transifex." + @echo "translations-pull - Download all translation files from Transifex." @echo "sdist - Build the source distribution package." @echo "wheel - Build the wheel distribution package." @echo "release - Package (sdist and wheel) and upload a release." - @echo "test_release - Package (sdist and wheel) and upload to the PyPI test server." - @echo "release_test_via_docker_ubuntu - Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder." - @echo "release_test_via_docker_alpine - Package (sdist and wheel) and upload to the PyPI test server using an Alpine Docker builder." - @echo "release_via_docker_ubuntu - Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder." - @echo "release_via_docker_alpine - Package (sdist and wheel) and upload to PyPI using an Alpine Docker builder." - @echo "test_sdist_via_docker_ubuntu - Make an sdist packange and test it using an Ubuntu Docker container." - @echo "test_wheel_via_docker_ubuntu - Make a wheel package and test it using an Ubuntu Docker container." - + @echo "test-release - Package (sdist and wheel) and upload to the PyPI test server." + @echo "release-test-via-docker-ubuntu - Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder." + @echo "release-via-docker-ubuntu - Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder." + @echo "test-sdist-via-docker-ubuntu - Make an sdist packange and test it using an Ubuntu Docker container." + @echo "test-wheel-via-docker-ubuntu - Make a wheel package and test it using an Ubuntu Docker container." @echo "runserver - Run the development server." @echo "runserver_plus - Run the Django extension's development server." @echo "shell_plus - Run the shell_plus command." - @echo "docker_services_on - Launch and initialize production-like services using Docker (Postgres and Redis)." - @echo "docker_services_off - Stop and delete the Docker production-like services." - @echo "docker_services_frontend - Launch a front end instance that uses the production-like services." - @echo "docker_services_worker - Launch a worker instance that uses the production-like services." - @echo "docker_service_mysql_on - Launch and initialize a MySQL Docker container." - @echo "docker_service_mysql_off - Stop and delete the MySQL Docker container." - @echo "docker_service_postgres_on - Launch and initialize a PostgreSQL Docker container." - @echo "docker_service_postgres_off - Stop and delete the PostgreSQL Docker container." - - @echo "safety_check - Run a package safety check." + @echo "test-with-docker-services-on - Launch and initialize production-like services using Docker (Postgres and Redis)." + @echo "test-with-docker-services-off - Stop and delete the Docker production-like services." + @echo "test-with-docker-frontend - Launch a front end instance that uses the production-like services." + @echo "test-with-docker-worker - Launch a worker instance that uses the production-like services." + @echo "docker-mysql-on - Launch and initialize a MySQL Docker container." + @echo "docker-mysql-off - Stop and delete the MySQL Docker container." + @echo "docker-postgres-on - Launch and initialize a PostgreSQL Docker container." + @echo "docker-postgres-off - Stop and delete the PostgreSQL Docker container." + @echo "safety-check - Run a package safety check." # Cleaning @@ -136,7 +130,7 @@ test-with-oracle-all: test-launch-oracle # Documentation -docs_serve: +docs-serve: cd docs;make livehtml @@ -155,25 +149,14 @@ translations_pull: tx pull -f -# Requirements - -requirements_dev: - pip install -r requirements/development.txt - -requirements_docs: - pip install -r requirements/documentation.txt - -requirements_testing: - pip install -r requirements/testing.txt - -generate_setup: +generate-setup: @./generate_setup.py @echo "Complete." # Releases -test_release: clean wheel +test-release: clean wheel twine upload dist/* -r testpypi @echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms" @@ -188,7 +171,7 @@ wheel: clean sdist pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz ls -l dist -release_test_via_docker_ubuntu: +release-test-via-docker-ubuntu: docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ locale-gen en_US.UTF-8 && \ @@ -199,9 +182,9 @@ release_test_via_docker_ubuntu: apt-get install make python-pip -y && \ pip install -r requirements/build.txt && \ cp -r /host_home/.pypirc ~/.pypirc && \ - make test_release" + make test-release" -release_via_docker_ubuntu: +release-via-docker-ubuntu: docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ locale-gen en_US.UTF-8 && \ @@ -214,33 +197,7 @@ release_via_docker_ubuntu: cp -r /host_home/.pypirc ~/.pypirc && \ make release" -release_test_via_docker_alpine: - docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\ - echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ - locale-gen en_US.UTF-8 && \ - update-locale LANG=en_US.UTF-8 && \ - export LC_ALL=en_US.UTF-8 && \ - cp -r /host_source/* . && \ - apk update && \ - apk add python2 py2-pip make && \ - pip install -r requirements/build.txt && \ - cp -r /host_home/.pypirc ~/.pypirc && \ - make test_release" - -release_via_docker_alpine: - docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\ - echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ - locale-gen en_US.UTF-8 && \ - update-locale LANG=en_US.UTF-8 && \ - export LC_ALL=en_US.UTF-8 && \ - cp -r /host_source/* . && \ - apk update && \ - apk add python2 py2-pip make && \ - pip install -r requirements/build.txt && \ - cp -r /host_home/.pypirc ~/.pypirc && \ - make release" - -test_sdist_via_docker_ubuntu: +test-sdist-via-docker-ubuntu: docker run --rm --name mayan_sdist_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ cp -r /host_source/* . && \ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ @@ -250,10 +207,10 @@ test_sdist_via_docker_ubuntu: apt-get update && \ apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \ pip install -r requirements/development.txt && \ - make sdist_test_suit \ + make sdist-test-suit \ " -test_wheel_via_docker_ubuntu: +test-wheel-via-docker-ubuntu: docker run --rm --name mayan_wheel_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ cp -r /host_source/* . && \ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ @@ -263,10 +220,10 @@ test_wheel_via_docker_ubuntu: apt-get update && \ apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \ pip install -r requirements/development.txt && \ - make wheel_test_suit \ + make wheel-test-suit \ " -sdist_test_suit: sdist +sdist-test-suit: sdist rm -f -R _virtualenv virtualenv _virtualenv sh -c '\ @@ -277,7 +234,7 @@ sdist_test_suit: sdist _virtualenv/bin/mayan-edms.py test --mayan-apps \ ' -wheel_test_suit: wheel +wheel-test-suit: wheel rm -f -R _virtualenv virtualenv _virtualenv sh -c '\ @@ -291,50 +248,78 @@ wheel_test_suit: wheel # Dev server runserver: - ./manage.py runserver --settings=mayan.settings.development + ./manage.py runserver --settings=mayan.settings.development $(ADDRPORT) runserver_plus: - ./manage.py runserver_plus --settings=mayan.settings.development + ./manage.py runserver_plus --settings=mayan.settings.development $(ADDRPORT) shell_plus: ./manage.py shell_plus --settings=mayan.settings.development -docker_services_on: +test-with-docker-services-on: docker run -d --name redis -p 6379:6379 redis docker run -d --name postgres -p 5432:5432 postgres while ! nc -z 127.0.0.1 6379; do sleep 1; done while ! nc -z 127.0.0.1 5432; do sleep 1; done - sleep 2 + sleep 4 ./manage.py initialsetup --settings=mayan.settings.staging.docker -docker_services_off: +test-with-docker-services-off: docker stop postgres redis docker rm postgres redis -docker_services_frontend: +test-with-docker-frontend: ./manage.py runserver --settings=mayan.settings.staging.docker -docker_services_worker: +test-with-docker-worker: ./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair -docker_service_mysql_on: +docker-mysql-on: docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql while ! nc -z 127.0.0.1 3306; do sleep 1; done -docker_service_mysql_off: +docker-mysql-off: docker stop mysql docker rm mysql -docker_service_postgres_on: +docker-postgres-on: docker run -d --name postgres -p 5432:5432 postgres while ! nc -z 127.0.0.1 5432; do sleep 1; done -docker_service_postgres_off: +docker-postgres-off: docker stop postgres docker rm postgres # Security -safety_check: +safety-check: safety check + + +# Other +find-gitignores: + @export FIND_GITIGNORES=`find -name '.gitignore'| wc -l`; \ + if [ $${FIND_GITIGNORES} -gt 1 ] ;then echo "More than one .gitignore found."; fi + +build: + docker rm -f mayan-edms-build || true && \ + docker run --rm --name mayan-edms-build -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source python:2-slim sh -c "\ + rm /host_source/dist -R || true && \ + mkdir /host_source/dist || true && \ + export LC_ALL=C.UTF-8 && \ + cp -r /host_source/* . && \ + apt-get update && \ + apt-get install -y make && \ + pip install -r requirements/build.txt && \ + make wheel && \ + cp dist/* /host_source/dist/" + +check-readme: + python setup.py check -r -s + +check-missing-migrations: + ./manage.py makemigrations --dry-run --noinput --check + + +include docker/Makefile diff --git a/README.md b/README.md index 57b7f2c966..1dbea47ea4 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ [![coverage][cover]][cover-url] ![python][python] ![license][license] +[![Docker pulls](https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) +[![Docker Stars](https://img.shields.io/docker/stars/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) +[![Docker layers](https://images.microbadger.com/badges/image/mayanedms/mayanedms.svg)](https://microbadger.com/images/mayanedms/mayanedms) [pypi]: http://img.shields.io/pypi/v/mayan-edms.svg [pypi-url]: http://badge.fury.io/py/mayan-edms @@ -35,7 +38,7 @@

- +

@@ -46,9 +49,8 @@ The easiest way to use Mayan EDMS is by using the official [Docker](https://www.docker.com/) image. Make sure Docker is properly installed and working before attempting to install Mayan EDMS. -For the complete set of installation, configuration, upgrade, and backup -instructions visit the Mayan EDMS Docker Hub page at: -https://hub.docker.com/r/mayanedms/mayanedms/ +For the complete set of installation instructions visit the Mayan EDMS documentation +at: http://mayan.readthedocs.io/en/latest/topics/installation.html

Hardware requirements

diff --git a/README.rst b/README.rst index efb1199da2..7bd5d447fa 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -|pypi| |builds| |coverage| |python| |license| +|pypi| |builds| |coverage| |python| |license| |docker_pulls| |docker_stars| |docker_layers| .. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png @@ -14,15 +14,14 @@ are its workflow system, role based access control, and REST API. .. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif :align: center - + :width: 300 The easiest way to use Mayan EDMS is by using the official Docker_ image. Make sure Docker is properly installed and working before attempting to install Mayan EDMS. -For the complete set of installation, configuration, upgrade, and backup -instructions visit the Mayan EDMS Docker Hub page at: -https://hub.docker.com/r/mayanedms/mayanedms/ +For the complete set of installation instructions visit the Mayan EDMS documentation +at: http://mayan.readthedocs.io/en/latest/topics/installation.html .. _Docker: https://www.docker.com/ @@ -47,7 +46,6 @@ Important links - `Translations `__ - .. |pypi| image:: http://img.shields.io/pypi/v/mayan-edms.svg :target: http://badge.fury.io/py/mayan-edms .. |builds| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg @@ -56,3 +54,9 @@ Important links :target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master .. |python| image:: https://img.shields.io/pypi/pyversions/mayan-edms.svg .. |license| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat +.. |docker_pulls| image:: https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600 + :target: https://hub.docker.com/r/mayanedms/mayanedms/ +.. |docker_stars| image:: https://img.shields.io/docker/stars/mayanedms/mayanedms.svg?maxAge=3600 + :target: https://hub.docker.com/r/mayanedms/mayanedms/ +.. |docker_layers| image:: https://images.microbadger.com/badges/image/mayanedms/mayanedms.svg + :target: https://microbadger.com/images/mayanedms/mayanedms diff --git a/contrib/scripts/docker/run-tests.sh b/contrib/scripts/docker/run-tests.sh new file mode 100755 index 0000000000..3b47614625 --- /dev/null +++ b/contrib/scripts/docker/run-tests.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +apt-get update +apt-get install -y --no-install-recommends tesseract-ocr-deu + +pip install -r $DOCKER_ROOT/requirements-testing.txt + +mayan-edms.py test --mayan-apps --settings=mayan.settings.testing diff --git a/contrib/scripts/statistics.py b/contrib/scripts/statistics.py new file mode 100755 index 0000000000..0bd9008dda --- /dev/null +++ b/contrib/scripts/statistics.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +import os + +BASE_PATH = 'mayan/apps' + + +def print_views_summary(module_filename): + with open(module_filename) as file_object: + print ' module:', module_filename + count_class_based_views = 0 + count_function_based_views = 0 + for line in file_object: + if line.startswith('class') and 'View' in line: + count_class_based_views += 1 + + if line.startswith('def') and 'request' in line: + count_function_based_views += 1 + + print ' class based views: {}'.format(count_class_based_views) + print ' function based views: {}'.format(count_function_based_views) + return count_class_based_views, count_function_based_views + + +def print_tests_summary(module_filename): + with open(module_filename) as file_object: + print ' module:', module_filename + count_tests = 0 + for line in file_object: + if line.startswith(' def test'): + count_tests += 1 + + print ' tests: {}'.format(count_tests) + return count_tests + + +if __name__ == '__main__': + count_totals = { + 'Apps': 0, + 'Class based views': 0, + 'Function based views': 0, + 'Class based API views': 0, + 'Function based API views': 0, + 'Tests': 0, + } + + for app_name in sorted(os.listdir(BASE_PATH)): + if app_name != '__init__.py': + count_totals['Apps'] += 1 + print '\n\nApp name: {}'.format(app_name) + app_path = os.path.join(BASE_PATH, app_name) + + print '\n Views' + try: + module_filename = os.path.join(app_path, 'views.py') + count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename) + count_totals['Class based views'] += count_class_based_views + count_totals['Function based views'] += count_function_based_views + + except IOError: + # Check for multiple view files inside a view directory + try: + module_path = os.path.join(app_path, 'views') + for module_name in os.listdir(module_path): + if not module_name.startswith('__init__.py') and not module_name.endswith('.pyc'): + module_filename = os.path.join(module_path, module_name) + count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename) + count_totals['Class based views'] += count_class_based_views + count_totals['Function based views'] += count_function_based_views + except OSError: + # No views directory, skip app + print ' No views' + + print '\n API Views' + try: + module_filename = os.path.join(app_path, 'api_views.py') + count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename) + count_totals['Class based API views'] += count_class_based_views + count_totals['Function based API views'] += count_function_based_views + + except IOError: + # No API views directory, skip app + print ' No API views' + + print '\n Tests' + module_path = os.path.join(app_path, 'tests') + try: + for module_name in os.listdir(module_path): + if not module_name.startswith('__init__.py') and not module_name.endswith('.pyc'): + module_filename = os.path.join(module_path, module_name) + if module_name.startswith('test'): + count_tests = print_tests_summary(module_filename=module_filename) + count_totals['Tests'] += count_tests + + except OSError: + # No tests directory, skip app + print ' No tests' + + print '-' * 10 + + print 'Totals:' + for key, value in count_totals.items(): + print ' {}: {}'.format(key, value) diff --git a/contrib/settings/ldap_connection_settings.py b/contrib/settings/ldap_connection_settings.py index 9f22114621..6ae809a3be 100644 --- a/contrib/settings/ldap_connection_settings.py +++ b/contrib/settings/ldap_connection_settings.py @@ -3,8 +3,7 @@ from __future__ import absolute_import import ldap from django_auth_ldap.config import LDAPSearch -from .base import * -from django.conf import settings +from .base import * # NOQA from django.contrib.auth import get_user_model SECRET_KEY = '' @@ -27,22 +26,24 @@ AUTH_LDAP_BIND_DN = LDAP_ADMIN_DN AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD -AUTH_LDAP_USER_SEARCH = LDAPSearch('%s,%s'%(LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN), ldap.SCOPE_SUBTREE, "(uid=%(user)s)") -AUTH_LDAP_USER_ATTR_MAP = { - "first_name": "cn", - "last_name": "sn", - "email": "mail" - } - -AUTHENTICATION_BACKENDS = ( -'django_auth_ldap.backend.LDAPBackend', -'mayan.settings.settings_local.EmailOrUsernameModelBackend', +AUTH_LDAP_USER_SEARCH = LDAPSearch( + '%s,%s' % (LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN), + ldap.SCOPE_SUBTREE, '(uid=%(user)s)' ) +AUTH_LDAP_USER_ATTR_MAP = { + 'first_name': 'cn', + 'last_name': 'sn', + 'email': 'mail' +} +AUTHENTICATION_BACKENDS = ( + 'django_auth_ldap.backend.LDAPBackend', + 'mayan.settings.settings_local.EmailOrUsernameModelBackend', +) + class EmailOrUsernameModelBackend(object): """ This is a ModelBacked that allows authentication with either a username or an email address. - """ def authenticate(self, username=None, password=None): if '@' in username: @@ -53,7 +54,7 @@ class EmailOrUsernameModelBackend(object): user = get_user_model().objects.get(**kwargs) if user.check_password(password): return user - except User.DoesNotExist: + except get_user_model().DoesNotExist: return None def get_user(self, username): diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100755 index 0000000000..2de0839fb2 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,149 @@ +# vim:set ft=dockerfile: + +#################### +# Base image start # +#################### + +FROM debian:9.4-slim as BASE_IMAGE + +MAINTAINER Roberto Rosario "roberto.rosario@mayan-edms.com" + +ENV DEBIAN_FRONTEND noninteractive +ENV PYTHONUNBUFFERED 1 +ENV LC_ALL C.UTF-8 +ENV PROJECT_INSTALL_DIR=/usr/local/lib/python2.7/dist-packages/mayan + +ARG APT_PROXY +# Package caching +RUN if [ "${APT_PROXY}" ]; then echo "Acquire::http { Proxy \"http://${APT_PROXY}\"; };" > /etc/apt/apt.conf.d/01proxy; fi + +# Install base Ubuntu libraries +RUN apt-get update && \ +apt-get install -y --no-install-recommends \ + g++ \ + gcc \ + ghostscript \ + gpgv \ + gnupg1 \ + graphviz \ + libffi-dev \ + libjpeg-dev \ + libmagic1 \ + default-libmysqlclient-dev \ + libpng-dev \ + libpq-dev \ + libreoffice \ + libtiff-dev \ + poppler-utils \ + python-dev \ + python-pip \ + python-setuptools \ + python-wheel \ + redis-server \ + sane-utils \ + supervisor \ + tesseract-ocr \ + zlib1g-dev \ +&& \ +apt-get clean autoclean && \ +apt-get autoremove --purge -y && \ +rm -rf /var/lib/apt/lists/* && \ +rm -f /var/cache/apt/archives/*.deb + +# Install apt-get-install +ADD https://raw.githubusercontent.com/guilhem/apt-get-install/master/apt-get-install /usr/bin/ +RUN chmod +x /usr/bin/apt-get-install + +# Install Python clients for PostgreSQL, REDIS, librabbitmq +RUN pip install psycopg2==2.7.3.2 redis==2.10.6 mysql-python==1.2.5 librabbitmq==1.6.1 + +RUN adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" + +# Pillow can't find zlib or libjpeg on aarch64 (ODROID C2) +RUN if [ "$(uname -m)" = "aarch64" ]; then \ +ln -s /usr/lib/aarch64-linux-gnu/libz.so /usr/lib/ && \ +ln -s /usr/lib/aarch64-linux-gnu/libjpeg.so /usr/lib/ \ +; fi + +# Pillow can't find zlib or libjpeg on armv7l (ODROID HC1) +RUN if [ "$(uname -m)" = "armv7l" ]; then \ +apt-get install libssl-dev -y && \ +ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib/ && \ +ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib/ \ +; fi + +##################### +# Build image start # +##################### + +FROM debian:9.4-slim as BUILDER_IMAGE + +ARG APT_PROXY +# Package caching +RUN if [ "${APT_PROXY}" ]; then echo "Acquire::http { Proxy \"http://${APT_PROXY}\"; };" > /etc/apt/apt.conf.d/01proxy; fi + +WORKDIR /code + +COPY . /code + +RUN apt-get update && apt-get install make python-dev python-pip -y + +RUN pip install -r requirements/build.txt + +ENV LC_ALL C.UTF-8 + +RUN touch docker/Makefile + +RUN make wheel + +RUN chmod 777 dist -R + +##################### +# Final image start # +##################### + +FROM BASE_IMAGE + +WORKDIR /root/ + +COPY --from=BUILDER_IMAGE /code/dist/*.whl . + +COPY --from=BUILDER_IMAGE /code/contrib/scripts/docker/run-tests.sh . + +COPY --from=BUILDER_IMAGE /code/requirements/testing-base.txt requirements-testing.txt + +# Install build Mayan EDMS +RUN pip install *.whl && \ +rm *.whl + +# Setup supervisor +COPY docker/etc/supervisor/mayan.conf /etc/supervisor/conf.d + +# Fix ownership +RUN chown -R mayan:mayan $PROJECT_INSTALL_DIR + +# Allow flanker to autogenerate its PLY files +RUN chown -R mayan:mayan /usr/local/lib/python2.7/dist-packages/flanker/ + +RUN mkdir /var/lib/mayan +VOLUME ["/var/lib/mayan"] + +COPY docker/entrypoint.sh /usr/local/bin/ +RUN ln -s usr/local/bin/entrypoint.sh / # backwards compat +ENTRYPOINT ["entrypoint.sh"] + +EXPOSE 8000 +CMD ["mayan"] + +RUN rm /root/.cache -R +RUN rm -rf /tmp/* + +RUN apt-get -y autoremove --purge && apt-get -y autoclean && apt-get -y clean + +RUN rm -rf /usr/share/man/* +RUN rm -rf /usr/share/doc/* + +RUN find /var/lib/apt -type f | xargs rm -f +RUN find /var/cache -type f -exec rm -rf {} \; + +RUN find /var/log -type f | while read f; do echo -ne '' > $f; done; diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu new file mode 100755 index 0000000000..c2a9bfe14c --- /dev/null +++ b/docker/Dockerfile.ubuntu @@ -0,0 +1,150 @@ +# vim:set ft=dockerfile: + +#################### +# Base image start # +#################### + +FROM ubuntu:16.04 as BASE_IMAGE + +MAINTAINER Roberto Rosario "roberto.rosario@mayan-edms.com" + +ENV DEBIAN_FRONTEND noninteractive +ENV PYTHONUNBUFFERED 1 +ENV LANG en_US.UTF-8 +ENV PROJECT_INSTALL_DIR=/usr/local/lib/python2.7/dist-packages/mayan + +ARG APT_PROXY +# Package caching +RUN if [ "${APT_PROXY}" ]; then echo "Acquire::http { Proxy \"http://${APT_PROXY}\"; };" > /etc/apt/apt.conf.d/01proxy; fi + +# Install base Ubuntu libraries +RUN apt-get update && \ +apt-get install -y --no-install-recommends \ + curl \ + g++ \ + gcc \ + gettext-base \ + ghostscript \ + gpgv \ + graphviz \ + libffi-dev \ + libjpeg-dev \ + libmagic1 \ + libmysqlclient-dev \ + libpng-dev \ + libpq-dev \ + libreoffice \ + libtiff-dev \ + locales \ + netcat-openbsd \ + poppler-utils \ + python-dev \ + python-pip \ + python-setuptools \ + python-wheel \ + redis-server \ + supervisor \ + tesseract-ocr \ + zlib1g-dev \ +&& \ +apt-get clean autoclean && \ +apt-get autoremove --purge -y && \ +rm -rf /var/lib/apt/lists/* && \ +rm -f /var/cache/apt/archives/*.deb + +# Switch to UTF locale +RUN echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ +locale-gen en_US.UTF-8 && \ +update-locale LANG=en_US.UTF-8 && \ +export LC_ALL=en_US.UTF-8 + +# Install apt-get-install +ADD https://raw.githubusercontent.com/guilhem/apt-get-install/master/apt-get-install /usr/bin/ +RUN chmod +x /usr/bin/apt-get-install + +# Install Python clients for PostgreSQL, REDIS, librabbitmq +RUN pip install psycopg2==2.7.3.2 redis==2.10.6 mysql-python==1.2.5 librabbitmq==1.6.1 + +RUN adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" + +# Pillow can't find zlib or libjpeg on aarch64 +RUN if [ "$(uname -m)" = "aarch64" ]; then \ +ln -s /usr/lib/aarch64-linux-gnu/libz.so /usr/lib/ && \ +ln -s /usr/lib/aarch64-linux-gnu/libjpeg.so /usr/lib/ \ +; fi + +##################### +# Build image start # +##################### + +FROM python:2-alpine3.7 as BUILDER_IMAGE + +WORKDIR /code + +COPY . /code + +RUN apk update && \ + apk add make + +RUN pip install -r requirements/build.txt + +RUN make wheel + +RUN chmod 777 dist -R + +##################### +# Final image start # +##################### + +FROM BASE_IMAGE + +WORKDIR /root/ + +COPY --from=BUILDER_IMAGE /code/dist/*.whl . + +# Install build Mayan EDMS +RUN pip install *.whl && \ +rm *.whl + +# Setup supervisor +#RUN mkdir /etc/supervisor.d/ +COPY docker/etc/supervisor/beat.conf /etc/supervisor/conf.d +COPY docker/etc/supervisor/gunicorn.conf /etc/supervisor/conf.d +COPY docker/etc/supervisor/redis.conf /etc/supervisor/conf.d +COPY docker/etc/supervisor/workers.conf /etc/supervisor/conf.d + +# Create the directory for the logs +RUN mkdir /var/log/mayan + +# Fix ownership +RUN chown -R mayan:mayan $PROJECT_INSTALL_DIR + +# Allow flanker to autogenerate its PLY files +RUN chown -R mayan:mayan /usr/local/lib/python2.7/dist-packages/flanker/ + +RUN mkdir /var/lib/mayan +VOLUME ["/var/lib/mayan"] + +COPY docker/entrypoint.sh /usr/local/bin/ +RUN ln -s usr/local/bin/entrypoint.sh / # backwards compat +ENTRYPOINT ["entrypoint.sh"] + +# Healthcheck setup +HEALTHCHECK --interval=15s --timeout=1s --retries=20 \ + CMD curl -s -f http://localhost/authentication/login/ | grep 'form' > /dev/null || exit 1 + +EXPOSE 8000 +CMD ["mayan"] + +RUN rm /root/.cache -R +RUN rm -rf /tmp/* + +RUN apt-get -y autoremove --purge && apt-get -y autoclean && apt-get -y clean + +RUN rm -rf /usr/share/man/* +RUN rm -rf /usr/share/doc/* + +RUN find /var/lib/apt -type f | xargs rm -f +RUN find /var/cache -type f -exec rm -rf {} \; + +RUN find /var/log -type f | while read f; do echo -ne '' > $f; done; diff --git a/docker/Makefile b/docker/Makefile new file mode 100755 index 0000000000..203448c4f2 --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,33 @@ +APT_PROXY ?= `/sbin/ip route|awk '/docker0/ { print $$9 }'`:3142 +IMAGE_VERSION ?= `cat docker/version` +CONSOLE_COLUMNS ?= `echo $$(tput cols)` +CONSOLE_LINES ?= `echo $$(tput lines)` + +docker-help: + @echo + @echo "**** Docker makefile ****" + @echo "docker-build - Build a new image locally." + @echo "docker-build-with-proxy - Build a new image locally using an APT proxy." + @echo "docker-test-container - Build and run a test container." + @echo "docker-test-cleanup - Delete the test container and the test volume." + @echo "docker-test-all - Build and executed the test suite in a test container." + @echo "docker-shell - Launch a bash instance inside a running container. Pass the container name via DOCKER_CONTAINER." + +docker-build: + docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile . + +docker-build-with-proxy: + docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile --build-arg APT_PROXY=$(APT_PROXY) . + +docker-shell: + docker exec -e TERM=$(TERM) -e "COLUMNS=$(CONSOLE_COLUMNS)" -e "LINES=$(CONSOLE_LINES)" -it $(DOCKER_CONTAINER) /bin/bash + +docker-test-container: docker-build-with-proxy docker-test-cleanup + docker run -d --name test-mayan-edms -p 80:8000 -v test-mayan_data:/var/lib/mayan mayanedms/mayanedms:$(DOCKER_VERSION) + +docker-test-cleanup: + @docker rm -f test-mayan-edms || true + @docker volume rm test-mayan_data || true + +docker-test-all: docker-build-with-proxy + docker run --rm run-tests diff --git a/docker/README-short.txt b/docker/README-short.txt new file mode 100755 index 0000000000..f9e4eea8ef --- /dev/null +++ b/docker/README-short.txt @@ -0,0 +1 @@ +Mayan EDMS is a free open source electronic document management system. diff --git a/docker/README.md b/docker/README.md new file mode 100755 index 0000000000..94fe1fb77a --- /dev/null +++ b/docker/README.md @@ -0,0 +1,549 @@ +[![Docker pulls](https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) [![Docker Stars](https://img.shields.io/docker/stars/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) [![Docker layers](https://images.microbadger.com/badges/image/mayanedms/mayanedms.svg)](https://microbadger.com/images/mayanedms/mayanedms) [![Docker version](https://images.microbadger.com/badges/version/mayanedms/mayanedms.svg)](https://microbadger.com/images/mayanedms/mayanedms) ![Docker build](https://img.shields.io/docker/automated/mayanedms/mayanedms.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg?maxAge=3600) + +# Quick reference + +- **Where to get help**: + [the Docker Community Forums](https://forums.docker.com/), [the Docker Community Slack](https://blog.docker.com/2016/11/introducing-docker-community-directory-docker-community-slack/), or [Stack Overflow](https://stackoverflow.com/search?tab=newest&q=docker) + +- **Where to file issues**: + [https://gitlab.com/mayan-edms/mayan-edms-docker/issues](https://gitlab.com/mayan-edms/mayan-edms-docker/issues) + +- **Maintained by**: + [Roberto Rosario](https://gitlab.com/rosarior) + +- **Supported Docker versions**: + [the latest release](https://github.com/docker/docker/releases/latest) (down to 1.12 on a best-effort basis) + +# What is Mayan EDMS? + +Mayan EDMS, often simply "Mayan", is an electronic document management system with an emphasis on automation. + +As a document manager its main purpose is to store, introspect, and categorize files, with a strong emphasis on preserving the contextual and business information of documents. It also provide means to ease retrieval, as requested by users or other software applications, be it those on the same computer or those running on another computer across a network (including the Internet). It can handle workloads ranging from small single-machine applications to large enterprise applications with many concurrent users. It can also OCR, preview, label, sign, send, and receive documents. Other features of interest are its workflow system, role based access control, and REST API. + +> [wikipedia.org/wiki/Mayan_(software)](https://en.wikipedia.org/wiki/Mayan_%28software%29) + +![logo](https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png) + +# How to use this image + +## Start a Mayan EDMS instance + +With Docker properly installed, proceed to download the Mayan EDMS image using the command: + +```console +$ docker pull mayanedms/mayanedms:2.7.3 +``` + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:2.7.3 +``` + +The container will be available by browsing to [http://localhost](http://localhost) + +All files will be stored in the volume ``mayan_data`` + +If another web server is running on port 80 use a different port in the ``-p`` option, ie: ``-p 81:80``. + + +## Stopping and starting the container + +To stop the container use: + +```console +$ docker stop mayan-edms +``` + +To start the container again: + +```console +$ docker start mayan-edms +``` + +## Configuration + +To edit the settings file, check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +In this case the physical location of the ``mayan_data`` volume is ``/var/lib/docker/volumes/mayan_data/_data``. The settings file to change is named ``settings/local.py`` inside this volume. Edit the settings with your favorite editor, example: + +```console +$ sudo vi /var/lib/docker/volumes/mayan_data/_data/settings/local.py +``` + +Stop and start the container again for the changes to take effect. + + +## Environment Variables + +The Mayan EDMS image uses several environment variables. While none of the variables are required, they may significantly aid you in using the image. + +### `MAYAN_DATABASE_DRIVER` + +Defaults to ``None``. This environment variable configures the database backend to use. If left unset, SQLite will be used. The database backends supported by this Docker image are: + +- 'django.db.backends.postgresql' +- 'django.db.backends.mysql' +- 'django.db.backends.sqlite3' same as ``None`` + +When using the SQLite backend, the database file will be saved in the ``mayan_data`` volume. + + +### `MAYAN_DATABASE_NAME` + +Defaults to 'mayan'. This optional environment variable can be used to define the database name that Mayan EDMS will connect to. For more information read the pertinent Django documentation page: [Connecting to the database](https://docs.djangoproject.com/en/1.10/ref/databases/#connecting-to-the-database) + + +### `MAYAN_DATABASE_USER` + +Defaults to 'mayan'. This optional environment variable is used to set the username that will be used to connect to the database. For more information read the pertinent Django documentation page: [Settings, USER](https://docs.djangoproject.com/en/1.10/ref/settings/#user) + +### `MAYAN_DATABASE_PASSWORD` + +Defaults to ''. This optional environment variable is used to set the password that will be used to connect to the database. For more information read the pertinent Django documentation page: [Settings, PASSWORD](https://docs.djangoproject.com/en/1.10/ref/settings/#password) + +### `MAYAN_DATABASE_HOST` + +Defaults to `None`. This optional environment variable is used to set the hostname that will be used to connect to the database. This can be the hostname of another container or an IP address. For more information read the pertinent Django documentation page: [Settings, HOST](https://docs.djangoproject.com/en/1.10/ref/settings/#host) + +### `MAYAN_DATABASE_PORT` + +Defaults to `None`. This optional environment variable is used to set the port number to use when connecting to the database. An empty string means the default port. Not used with SQLite. For more information read the pertinent Django documentation page: [Settings, PORT](https://docs.djangoproject.com/en/1.11/ref/settings/#port) + +### `MAYAN_BROKER_URL` + +Defaults to 'redis://127.0.0.1:6379/0'. This optional environment variable is determines the broker that Celery will use to relay task messages between the frontend code and the background workers. For more information read the pertinent Celery Kombu documentation page: [Broker URL](http://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls) + +This Docker image supports using Redis and RabbitMQ as brokers. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment variables are specified, the built-in Redis server inside the container will be disabled. + +### `MAYAN_CELERY_RESULT_BACKEND` + +Defaults to 'redis://127.0.0.1:6379/0'. This optional environment variable is determines the results backend that Celery will use to relay result messages between from the background workers to the frontend code. For more information read the pertinent Celery Kombu documentation page: [Task result backend settings](http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend) + +This Docker image supports using Redis and RabbitMQ as result backends. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment variables are specified, the built-in Redis server inside the container will be disabled. + +### `MAYAN_NGINX_CLIENT_MAX_BODY_SIZE` + +Defaults to '500M'. Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size. Increase this if you are uploading files bigger than the default 500 megabytes. + +### `MAYAN_NGINX_PROXY_READ_TIMEOUT` + +Defaults to '600s'. Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed. This means that this is the maximum amount of time NGINX will wait for a connection Mayan EDMS to complete before returning an error. Increase this if you are uploading files that take more than the default 600 seconds to transfer. + +### `MAYAN_SETTINGS_LOCAL_STRING` + +Optional. Allows customizing the initial settings/local.py from the text content of the variable. + +### `MAYAN_SETTINGS_LOCAL_FILE` + +Optional. Allows customizing the initial settings/local.py from the text content of the file pointed by the variable. + +## Other defaults + +When using external database containers by means of the `MAYAN_DATABASE_NAME` environment variable, the database settings will add Django's option to keep connections alive for 60 seconds. For more information read the pertinent Django documentation page: [Settings, CONN_MAX_AGE](https://docs.djangoproject.com/en/1.10/ref/settings/#conn-max-age) + + +## Accessing outside data + +To use Mayan EDMS's staging folders or watch folders from Docker, the data for these source must be made accessible to the container. This is done by mounting the folders in the host computer to folders inside the container. This is necessary because Docker containers do not have access to host data on purpose. For example, to make a folder in the host accessible as a watch folder, add the following to the Docker command line when starting the container: + +```console +-v /opt/scanned_files:/srv/watch_folder +``` + +The complete command line would then be: + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan -v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:2.7.3 +``` + +Now create a watch folder in Mayan EDMS using the path `/srv/watch_folder` and the documents from the host folder `/opt/scanned_files` will be automatically available. Use the same procedure to mount host folders to be used as staging folderes. In this example `/srv/watch_folder` was as the container directory, but any path can be used as long as it is not an already existing path or a path used by any other program. + + +## Performing backups + +To backup the existing data, check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +Only the ``db.sqlite3`` file, the ``document_storage`` and ``settings`` folders need to be backed up: + +```console +$ sudo tar -zcvf backup.tar.gz /var/lib/docker/volumes/mayan_data/_data/document_storage /var/lib/docker/volumes/mayan_data/_data/settings /var/lib/docker/volumes/mayan_data/_data/db.sqlite3 +$ sudo chown `whoami` backup.tar.gz +``` + +If an external PostgreSQL or MySQL database or database containers, these too need to be backed up using their respective procedures. + + +## Restoring from a backup + +Uncompress the backup archive in the original docker volume using: + +```console +$ sudo tar -xvzf backup.tar.gz -C / +``` + +## Upgrading + +Upgrading a Mayan EDMS Docker container is actually a matter of stopping and deleting the container, downloading the most recent version of the image and starting a container again. The container will take care of updating the database structure to the newest version if necessary. + +**IMPORTANT!** Do not delete the volume `mayan_data`, only the container. + +Stop the container to be upgraded: + +```console +$ docker stop mayan-edms +``` + +Remove the container: + +```console +$ docker rm mayan-edms +``` + +Pull the new image version: + +```console +$ docker pull mayanedms/mayanedms:2.7.3 +``` + +Start the container again with the new image version: + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:2.7.3 +``` + +### Upgrading from a version 2.1 or earlier. + +Previous Mayan EDMS Docker images used two volumes, one for data, and the other for settings. These volumes are now consolidated into one. If you are upgrading from a version 2.1 or earlier Mayan EDMS Docker container, you need to merge the files of these containers into one. + +Stop the container to be upgraded: + +```console +$ docker stop mayan-edms +``` + +Remove the container: + +```console +$ docker rm mayan-edms +``` + +Pull the new image version: + +```console +$ docker pull mayanedms/mayanedms:2.7.3 +``` + +Create a new volume that will hold the contents of the ``mayan_media`` and the ``mayan_settings`` volumes. + +```console +$ docker volume create mayan_data +``` + +Check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +Copy the old SQLite database and document files to the new volume. + +```console +$ sudo cp -r /var/lib/docker/volumes/mayan_media/_data/* /var/lib/docker/volumes/mayan_data/_data/ +``` + +Create a folder for the settings in the new volume. + +```console +$ sudo mkdir /var/lib/docker/volumes/mayan_data/_data/settings +``` + +Create two empty `__init__.py` files. One in the top folder of the new volume. + +```console +$ sudo touch /var/lib/docker/volumes/mayan_data/_data/__init__.py +``` + +And the other in the settings folder of the new volume. + +```console +$ sudo touch /var/lib/docker/volumes/mayan_data/_data/settings/__init__.py +``` + +Create a `base.py` file in the settings folder of the new volume. + +```console +$ sudo cat << EOF > /var/lib/docker/volumes/mayan_data/_data/settings/base.py +# Empty base.py to allow local.py to run +from mayan.settings.docker import * # NOQA +EOF +``` + +Copy the `local.py` settings file from the old `mayan_settings` volume to the new `mayan_data` volume. + +```console +$ sudo cp /var/lib/docker/volumes/mayan_settings/_data/local.py /var/lib/docker/volumes/mayan_data/_data/settings/ +``` + +Launch a container with the new version of the Docker image using the new `mayan_data` volume. + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:2.7.3 +``` + +Verify that all your previous documents are present and accesible. Delete the old volumes using: + +```console +$ docker volume rm mayan_media +``` + +```console +$ docker volume rm mayan_settings +``` + +### Upgrading from version 2.2. + +Perform all the steps above as if upgrading from a version 2.1 or earlier, up to the step copying the `local.py` file, the step before launching of a container using then new image version. + +Edit the `local.py` settings file and delete all lines, leaving only the lines: + +```console +from __future__ import absolute_import + +from .base import * +SECRET_KEY = '< keep your random secret key >' +``` + +This is necesary because version 2.2 included experimental support for Postgres as a database backend. Now that Postgres support has been made standard, the custom configuration lines that version 2.2 added to the `local.py` file are not necesary and need to be removed to avoid configuration conflicts. + +Save the file and launch a container using the new version. + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:2.7.3 +``` + +Verify that all your previous documents are present and accesible. Delete the old volumes using: + +```console +$ docker volume rm mayan_media +``` + +```console +$ docker volume rm mayan_settings +``` + +## Building the image + +Clone the repository with: + +```console +$ git clone https://gitlab.com/mayan-edms/mayan-edms-docker.git +``` + +Change to the directory of the cloned repository: + +```console +$ cd mayan-edms-docker +``` + +Execute Docker's build command: + +```console +$ docker build -t mayanedms/mayanedms:2.7.3 . +``` + +Or using an apt cacher to speed up the build: + +```console +$ docker build -t mayanedms/mayanedms:2.7.3 --build-arg APT_PROXY=172.17.0.1:3142 . +``` + +Replace the IP address `172.17.0.1` with the IP address of the Docker host used from which these commands are running. + + +## Customizing the image + +### Simple method + +If you just need to add a few Ubuntu or Python packages to your installation, +you can use the following environment variables:: + +**`MAYAN_APT_INSTALLS`** + +Specifies a list of Ubuntu .deb packages to be installed via APT when the +container is first created. The installed packages are not lost when the image +is stopped. Example: To install the Tesseract OCR language packs for German +and Spanish add the following in your `docker start` command line: + +```console +-e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa" +``` + +**`MAYAN_PIP_INSTALLS`** + +Specifies a list of Python packages to be installed via `pip`. Packages will be +downloaded from the Python Package Index (https://pypi.python.org) by default. +If you need to use local packages, copy them to the folder `/pip_installs` in +the `mayan_data` volume and specify their full path in the environment variable. +Example: To install Werkzeug fromt the web and your local Python package, copy +you local Python package before running a new container with: + +```console +$ sudo cp my_package.whl /var/lib/docker/volumes/mayan_data/_data/pip_installs/ +``` + +If the folder `pip_installs` doesn't exists because you are upgrading from a +previous version you can create it with: + +```console +$ sudo mkdir /var/lib/docker/volumes/mayan_data/_data/pip_installs/ +``` + +Then specify `Werkzeug` and you local package's path in the environment variable. +The path to the local package will be `/var/lib/mayan/pip_installs` because is +where the `mayan_data` volume is mounted: + + +```console +-e MAYAN_PIP_INSTALLS="Werkzeug /var/lib/mayan/pip_installs/my_package.whl" +``` + +### Advanced method + +Use this method when you need to change more things in the default image than +just Ubuntu or Python packages. + +As an example, let's create a new image that adds German OCR support. + +Create a file name `Dockerfile`. This will create a new local image of Mayan EDMS that builds on top of the official image. This is how Docker works, by layering images. Create a new file called `Dockerfile.local` with the following content: + +*Dockerfile.local* + +```console + # Custom Dockerfile to add German OCR library + # This Dockerfile uses the official Mayan EDMS image + # as a base. + + FROM mayanedms/mayanedms:2.7.3 + + ENV DEBIAN_FRONTEND noninteractive + + # Install Ubuntu German OCR package and clean up afterwards + + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + tesseract-ocr-deu \ + && \ + apt-get clean autoclean && \ + apt-get autoremove -y && \ + rm -rf /var/lib/apt/lists/* && \ + rm -f /var/cache/apt/archives/*.deb + + # Retain the original entrypoint and command + ENTRYPOINT ["entrypoint.sh"] + CMD ["mayan"] +``` + +Now proceed to build your own custom image with the following command: + +```console +$ docker build -t my_images/mayanedms -f Dockerfile.local . +``` + +Then use all the normal subsequent commands, changing every instance of `mayanedms/mayanedms` to `my_images/mayanedms`. + +## Testing + +Start a Vagrant box from the include Vagrant file. This Vagrant box will builds the Docker image and then start a container: + +```console +$ vagrant up +``` + +Create the same Vagrant box using an apt cacher to speed up the build: + +```console +$ APT_PROXY=172.17.0.1:3142 vagrant up +``` + +Replace the IP address `172.17.0.1` with the IP address of the Docker host used from which these commands are running. + +## Using Docker compose + +To deploy a complete production stack using the included Docker compose file execute: + +```console +$ docker-compose -f docker-compose.yml up -d +``` + +This Docker compose file will provision four containers: + +- Postgres as the database +- Redis as the Celery result storage +- RabbitMQ as the Celery broker +- Mayan EDMS using the above service containers + +To stop the stack use: + +```console +$ docker-compose -f docker-compose.yml stop +``` + +The stack will also create four volumes to store the data of each container. These are: + +- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose. +- mayan_broker - The broker volume, in this case RabbitMQ. +- mayan_db - The database volume, in this case Postgres. +- mayan_results - The celery result backend volume, in this case Redis. diff --git a/docker/README.md.tmpl b/docker/README.md.tmpl new file mode 100755 index 0000000000..ec5162a3a7 --- /dev/null +++ b/docker/README.md.tmpl @@ -0,0 +1,549 @@ +[![Docker pulls](https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) [![Docker Stars](https://img.shields.io/docker/stars/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) [![Docker layers](https://images.microbadger.com/badges/image/mayanedms/mayanedms.svg)](https://microbadger.com/images/mayanedms/mayanedms) [![Docker version](https://images.microbadger.com/badges/version/mayanedms/mayanedms.svg)](https://microbadger.com/images/mayanedms/mayanedms) ![Docker build](https://img.shields.io/docker/automated/mayanedms/mayanedms.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg?maxAge=3600) + +# Quick reference + +- **Where to get help**: + [the Docker Community Forums](https://forums.docker.com/), [the Docker Community Slack](https://blog.docker.com/2016/11/introducing-docker-community-directory-docker-community-slack/), or [Stack Overflow](https://stackoverflow.com/search?tab=newest&q=docker) + +- **Where to file issues**: + [https://gitlab.com/mayan-edms/mayan-edms-docker/issues](https://gitlab.com/mayan-edms/mayan-edms-docker/issues) + +- **Maintained by**: + [Roberto Rosario](https://gitlab.com/rosarior) + +- **Supported Docker versions**: + [the latest release](https://github.com/docker/docker/releases/latest) (down to 1.12 on a best-effort basis) + +# What is Mayan EDMS? + +Mayan EDMS, often simply "Mayan", is an electronic document management system with an emphasis on automation. + +As a document manager its main purpose is to store, introspect, and categorize files, with a strong emphasis on preserving the contextual and business information of documents. It also provide means to ease retrieval, as requested by users or other software applications, be it those on the same computer or those running on another computer across a network (including the Internet). It can handle workloads ranging from small single-machine applications to large enterprise applications with many concurrent users. It can also OCR, preview, label, sign, send, and receive documents. Other features of interest are its workflow system, role based access control, and REST API. + +> [wikipedia.org/wiki/Mayan_(software)](https://en.wikipedia.org/wiki/Mayan_%28software%29) + +![logo](https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png) + +# How to use this image + +## Start a Mayan EDMS instance + +With Docker properly installed, proceed to download the Mayan EDMS image using the command: + +```console +$ docker pull mayanedms/mayanedms:${VERSION} +``` + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:${VERSION} +``` + +The container will be available by browsing to [http://localhost](http://localhost) + +All files will be stored in the volume ``mayan_data`` + +If another web server is running on port 80 use a different port in the ``-p`` option, ie: ``-p 81:80``. + + +## Stopping and starting the container + +To stop the container use: + +```console +$ docker stop mayan-edms +``` + +To start the container again: + +```console +$ docker start mayan-edms +``` + +## Configuration + +To edit the settings file, check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +In this case the physical location of the ``mayan_data`` volume is ``/var/lib/docker/volumes/mayan_data/_data``. The settings file to change is named ``settings/local.py`` inside this volume. Edit the settings with your favorite editor, example: + +```console +$ sudo vi /var/lib/docker/volumes/mayan_data/_data/settings/local.py +``` + +Stop and start the container again for the changes to take effect. + + +## Environment Variables + +The Mayan EDMS image uses several environment variables. While none of the variables are required, they may significantly aid you in using the image. + +### `MAYAN_DATABASE_DRIVER` + +Defaults to ``None``. This environment variable configures the database backend to use. If left unset, SQLite will be used. The database backends supported by this Docker image are: + +- 'django.db.backends.postgresql' +- 'django.db.backends.mysql' +- 'django.db.backends.sqlite3' same as ``None`` + +When using the SQLite backend, the database file will be saved in the ``mayan_data`` volume. + + +### `MAYAN_DATABASE_NAME` + +Defaults to 'mayan'. This optional environment variable can be used to define the database name that Mayan EDMS will connect to. For more information read the pertinent Django documentation page: [Connecting to the database](https://docs.djangoproject.com/en/1.10/ref/databases/#connecting-to-the-database) + + +### `MAYAN_DATABASE_USER` + +Defaults to 'mayan'. This optional environment variable is used to set the username that will be used to connect to the database. For more information read the pertinent Django documentation page: [Settings, USER](https://docs.djangoproject.com/en/1.10/ref/settings/#user) + +### `MAYAN_DATABASE_PASSWORD` + +Defaults to ''. This optional environment variable is used to set the password that will be used to connect to the database. For more information read the pertinent Django documentation page: [Settings, PASSWORD](https://docs.djangoproject.com/en/1.10/ref/settings/#password) + +### `MAYAN_DATABASE_HOST` + +Defaults to `None`. This optional environment variable is used to set the hostname that will be used to connect to the database. This can be the hostname of another container or an IP address. For more information read the pertinent Django documentation page: [Settings, HOST](https://docs.djangoproject.com/en/1.10/ref/settings/#host) + +### `MAYAN_DATABASE_PORT` + +Defaults to `None`. This optional environment variable is used to set the port number to use when connecting to the database. An empty string means the default port. Not used with SQLite. For more information read the pertinent Django documentation page: [Settings, PORT](https://docs.djangoproject.com/en/1.11/ref/settings/#port) + +### `MAYAN_BROKER_URL` + +Defaults to 'redis://127.0.0.1:6379/0'. This optional environment variable is determines the broker that Celery will use to relay task messages between the frontend code and the background workers. For more information read the pertinent Celery Kombu documentation page: [Broker URL](http://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls) + +This Docker image supports using Redis and RabbitMQ as brokers. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment variables are specified, the built-in Redis server inside the container will be disabled. + +### `MAYAN_CELERY_RESULT_BACKEND` + +Defaults to 'redis://127.0.0.1:6379/0'. This optional environment variable is determines the results backend that Celery will use to relay result messages between from the background workers to the frontend code. For more information read the pertinent Celery Kombu documentation page: [Task result backend settings](http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend) + +This Docker image supports using Redis and RabbitMQ as result backends. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment variables are specified, the built-in Redis server inside the container will be disabled. + +### `MAYAN_NGINX_CLIENT_MAX_BODY_SIZE` + +Defaults to '500M'. Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size. Increase this if you are uploading files bigger than the default 500 megabytes. + +### `MAYAN_NGINX_PROXY_READ_TIMEOUT` + +Defaults to '600s'. Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed. This means that this is the maximum amount of time NGINX will wait for a connection Mayan EDMS to complete before returning an error. Increase this if you are uploading files that take more than the default 600 seconds to transfer. + +### `MAYAN_SETTINGS_LOCAL_STRING` + +Optional. Allows customizing the initial settings/local.py from the text content of the variable. + +### `MAYAN_SETTINGS_LOCAL_FILE` + +Optional. Allows customizing the initial settings/local.py from the text content of the file pointed by the variable. + +## Other defaults + +When using external database containers by means of the `MAYAN_DATABASE_NAME` environment variable, the database settings will add Django's option to keep connections alive for 60 seconds. For more information read the pertinent Django documentation page: [Settings, CONN_MAX_AGE](https://docs.djangoproject.com/en/1.10/ref/settings/#conn-max-age) + + +## Accessing outside data + +To use Mayan EDMS's staging folders or watch folders from Docker, the data for these source must be made accessible to the container. This is done by mounting the folders in the host computer to folders inside the container. This is necessary because Docker containers do not have access to host data on purpose. For example, to make a folder in the host accessible as a watch folder, add the following to the Docker command line when starting the container: + +```console +-v /opt/scanned_files:/srv/watch_folder +``` + +The complete command line would then be: + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan -v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:${VERSION} +``` + +Now create a watch folder in Mayan EDMS using the path `/srv/watch_folder` and the documents from the host folder `/opt/scanned_files` will be automatically available. Use the same procedure to mount host folders to be used as staging folderes. In this example `/srv/watch_folder` was as the container directory, but any path can be used as long as it is not an already existing path or a path used by any other program. + + +## Performing backups + +To backup the existing data, check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +Only the ``db.sqlite3`` file, the ``document_storage`` and ``settings`` folders need to be backed up: + +```console +$ sudo tar -zcvf backup.tar.gz /var/lib/docker/volumes/mayan_data/_data/document_storage /var/lib/docker/volumes/mayan_data/_data/settings /var/lib/docker/volumes/mayan_data/_data/db.sqlite3 +$ sudo chown `whoami` backup.tar.gz +``` + +If an external PostgreSQL or MySQL database or database containers, these too need to be backed up using their respective procedures. + + +## Restoring from a backup + +Uncompress the backup archive in the original docker volume using: + +```console +$ sudo tar -xvzf backup.tar.gz -C / +``` + +## Upgrading + +Upgrading a Mayan EDMS Docker container is actually a matter of stopping and deleting the container, downloading the most recent version of the image and starting a container again. The container will take care of updating the database structure to the newest version if necessary. + +**IMPORTANT!** Do not delete the volume `mayan_data`, only the container. + +Stop the container to be upgraded: + +```console +$ docker stop mayan-edms +``` + +Remove the container: + +```console +$ docker rm mayan-edms +``` + +Pull the new image version: + +```console +$ docker pull mayanedms/mayanedms:${VERSION} +``` + +Start the container again with the new image version: + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:${VERSION} +``` + +### Upgrading from a version 2.1 or earlier. + +Previous Mayan EDMS Docker images used two volumes, one for data, and the other for settings. These volumes are now consolidated into one. If you are upgrading from a version 2.1 or earlier Mayan EDMS Docker container, you need to merge the files of these containers into one. + +Stop the container to be upgraded: + +```console +$ docker stop mayan-edms +``` + +Remove the container: + +```console +$ docker rm mayan-edms +``` + +Pull the new image version: + +```console +$ docker pull mayanedms/mayanedms:${VERSION} +``` + +Create a new volume that will hold the contents of the ``mayan_media`` and the ``mayan_settings`` volumes. + +```console +$ docker volume create mayan_data +``` + +Check the physical location of the ``mayan_data`` volume using: + +```console +$ docker volume inspect mayan_data +``` + +Which should produce an output similar to this one: + +```console + [ + { + "Name": "mayan_data", + "Driver": "local", + "Mountpoint": "/var/lib/docker/volumes/mayan_data/_data", + "Labels": null, + "Scope": "local" + } + ] +``` + +Copy the old SQLite database and document files to the new volume. + +```console +$ sudo cp -r /var/lib/docker/volumes/mayan_media/_data/* /var/lib/docker/volumes/mayan_data/_data/ +``` + +Create a folder for the settings in the new volume. + +```console +$ sudo mkdir /var/lib/docker/volumes/mayan_data/_data/settings +``` + +Create two empty `__init__.py` files. One in the top folder of the new volume. + +```console +$ sudo touch /var/lib/docker/volumes/mayan_data/_data/__init__.py +``` + +And the other in the settings folder of the new volume. + +```console +$ sudo touch /var/lib/docker/volumes/mayan_data/_data/settings/__init__.py +``` + +Create a `base.py` file in the settings folder of the new volume. + +```console +$ sudo cat << EOF > /var/lib/docker/volumes/mayan_data/_data/settings/base.py +# Empty base.py to allow local.py to run +from mayan.settings.docker import * # NOQA +EOF +``` + +Copy the `local.py` settings file from the old `mayan_settings` volume to the new `mayan_data` volume. + +```console +$ sudo cp /var/lib/docker/volumes/mayan_settings/_data/local.py /var/lib/docker/volumes/mayan_data/_data/settings/ +``` + +Launch a container with the new version of the Docker image using the new `mayan_data` volume. + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:${VERSION} +``` + +Verify that all your previous documents are present and accesible. Delete the old volumes using: + +```console +$ docker volume rm mayan_media +``` + +```console +$ docker volume rm mayan_settings +``` + +### Upgrading from version 2.2. + +Perform all the steps above as if upgrading from a version 2.1 or earlier, up to the step copying the `local.py` file, the step before launching of a container using then new image version. + +Edit the `local.py` settings file and delete all lines, leaving only the lines: + +```console +from __future__ import absolute_import + +from .base import * +SECRET_KEY = '< keep your random secret key >' +``` + +This is necesary because version 2.2 included experimental support for Postgres as a database backend. Now that Postgres support has been made standard, the custom configuration lines that version 2.2 added to the `local.py` file are not necesary and need to be removed to avoid configuration conflicts. + +Save the file and launch a container using the new version. + +```console +$ docker run -d --name mayan-edms --restart=always -p 80:80 -v mayan_data:/var/lib/mayan mayanedms/mayanedms:${VERSION} +``` + +Verify that all your previous documents are present and accesible. Delete the old volumes using: + +```console +$ docker volume rm mayan_media +``` + +```console +$ docker volume rm mayan_settings +``` + +## Building the image + +Clone the repository with: + +```console +$ git clone https://gitlab.com/mayan-edms/mayan-edms-docker.git +``` + +Change to the directory of the cloned repository: + +```console +$ cd mayan-edms-docker +``` + +Execute Docker's build command: + +```console +$ docker build -t mayanedms/mayanedms:${VERSION} . +``` + +Or using an apt cacher to speed up the build: + +```console +$ docker build -t mayanedms/mayanedms:${VERSION} --build-arg APT_PROXY=172.17.0.1:3142 . +``` + +Replace the IP address `172.17.0.1` with the IP address of the Docker host used from which these commands are running. + + +## Customizing the image + +### Simple method + +If you just need to add a few Ubuntu or Python packages to your installation, +you can use the following environment variables:: + +**`MAYAN_APT_INSTALLS`** + +Specifies a list of Ubuntu .deb packages to be installed via APT when the +container is first created. The installed packages are not lost when the image +is stopped. Example: To install the Tesseract OCR language packs for German +and Spanish add the following in your `docker start` command line: + +```console +-e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa" +``` + +**`MAYAN_PIP_INSTALLS`** + +Specifies a list of Python packages to be installed via `pip`. Packages will be +downloaded from the Python Package Index (https://pypi.python.org) by default. +If you need to use local packages, copy them to the folder `/pip_installs` in +the `mayan_data` volume and specify their full path in the environment variable. +Example: To install Werkzeug fromt the web and your local Python package, copy +you local Python package before running a new container with: + +```console +$ sudo cp my_package.whl /var/lib/docker/volumes/mayan_data/_data/pip_installs/ +``` + +If the folder `pip_installs` doesn't exists because you are upgrading from a +previous version you can create it with: + +```console +$ sudo mkdir /var/lib/docker/volumes/mayan_data/_data/pip_installs/ +``` + +Then specify `Werkzeug` and you local package's path in the environment variable. +The path to the local package will be `/var/lib/mayan/pip_installs` because is +where the `mayan_data` volume is mounted: + + +```console +-e MAYAN_PIP_INSTALLS="Werkzeug /var/lib/mayan/pip_installs/my_package.whl" +``` + +### Advanced method + +Use this method when you need to change more things in the default image than +just Ubuntu or Python packages. + +As an example, let's create a new image that adds German OCR support. + +Create a file name `Dockerfile`. This will create a new local image of Mayan EDMS that builds on top of the official image. This is how Docker works, by layering images. Create a new file called `Dockerfile.local` with the following content: + +*Dockerfile.local* + +```console + # Custom Dockerfile to add German OCR library + # This Dockerfile uses the official Mayan EDMS image + # as a base. + + FROM mayanedms/mayanedms:${VERSION} + + ENV DEBIAN_FRONTEND noninteractive + + # Install Ubuntu German OCR package and clean up afterwards + + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + tesseract-ocr-deu \ + && \ + apt-get clean autoclean && \ + apt-get autoremove -y && \ + rm -rf /var/lib/apt/lists/* && \ + rm -f /var/cache/apt/archives/*.deb + + # Retain the original entrypoint and command + ENTRYPOINT ["entrypoint.sh"] + CMD ["mayan"] +``` + +Now proceed to build your own custom image with the following command: + +```console +$ docker build -t my_images/mayanedms -f Dockerfile.local . +``` + +Then use all the normal subsequent commands, changing every instance of `mayanedms/mayanedms` to `my_images/mayanedms`. + +## Testing + +Start a Vagrant box from the include Vagrant file. This Vagrant box will builds the Docker image and then start a container: + +```console +$ vagrant up +``` + +Create the same Vagrant box using an apt cacher to speed up the build: + +```console +$ APT_PROXY=172.17.0.1:3142 vagrant up +``` + +Replace the IP address `172.17.0.1` with the IP address of the Docker host used from which these commands are running. + +## Using Docker compose + +To deploy a complete production stack using the included Docker compose file execute: + +```console +$ docker-compose -f docker-compose.yml up -d +``` + +This Docker compose file will provision four containers: + +- Postgres as the database +- Redis as the Celery result storage +- RabbitMQ as the Celery broker +- Mayan EDMS using the above service containers + +To stop the stack use: + +```console +$ docker-compose -f docker-compose.yml stop +``` + +The stack will also create four volumes to store the data of each container. These are: + +- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose. +- mayan_broker - The broker volume, in this case RabbitMQ. +- mayan_db - The database volume, in this case Postgres. +- mayan_results - The celery result backend volume, in this case Redis. diff --git a/docker/docker-compose-development.yml b/docker/docker-compose-development.yml new file mode 100755 index 0000000000..a086cfd198 --- /dev/null +++ b/docker/docker-compose-development.yml @@ -0,0 +1,72 @@ +version: '2.1' + +volumes: + broker: + driver: local + app: + driver: local + db: + driver: local + results: + driver: local + +services: + broker: + container_name: mayan-edms-broker + image: healthcheck/rabbitmq + environment: + RABBITMQ_DEFAULT_USER: mayan + RABBITMQ_DEFAULT_PASS: mayan + RABBITMQ_DEFAULT_VHOST: mayan + volumes: + - broker:/var/lib/rabbitmq + results: + container_name: mayan-edms-results + image: healthcheck/redis + volumes: + - results:/data + #db: + # container_name: mayan-edms-db + # image: healthcheck/mysql + # environment: + # MYSQL_DATABASE: mayan + # MYSQL_PASSWORD: mayan-password + # MYSQL_ROOT_PASSWORD: root-password + # MYSQL_USER: mayan + # volumes: + # - db:/var/lib/mysql + db: + container_name: mayan-edms-db + image: healthcheck/postgres + environment: + POSTGRES_DB: mayan + POSTGRES_PASSWORD: mayan-password + POSTGRES_USER: mayan + volumes: + - db:/var/lib/postgresql/data + mayan-edms: + container_name: mayan-edms-app + image: mayan-edms/next + build: + context: ./ + args: + - APT_PROXY=172.18.0.1:3142 + depends_on: + broker: + condition: service_healthy + db: + condition: service_healthy + results: + condition: service_healthy + environment: + MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan + MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0 + MAYAN_DATABASE_DRIVER: django.db.backends.postgres + MAYAN_DATABASE_HOST: db + MAYAN_DATABASE_NAME: mayan + MAYAN_DATABASE_PASSWORD: mayan-password + MAYAN_DATABASE_USER: mayan + ports: + - "80:80" + volumes: + - app:/var/lib/mayan diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100755 index 0000000000..523df7b4ae --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,58 @@ +version: '2.1' + +volumes: + broker: + driver: local + app: + driver: local + db: + driver: local + results: + driver: local + +services: + broker: + container_name: mayan-edms-broker + image: healthcheck/rabbitmq + environment: + RABBITMQ_DEFAULT_USER: mayan + RABBITMQ_DEFAULT_PASS: mayan + RABBITMQ_DEFAULT_VHOST: mayan + volumes: + - broker:/var/lib/rabbitmq + results: + container_name: mayan-edms-results + image: healthcheck/redis + volumes: + - results:/data + db: + container_name: mayan-edms-db + image: healthcheck/postgres + environment: + POSTGRES_DB: mayan + POSTGRES_PASSWORD: mayan-password + POSTGRES_USER: mayan + volumes: + - db:/var/lib/postgresql/data + mayan-edms: + container_name: mayan-edms-app + image: mayanedms/mayanedms:latest + depends_on: + broker: + condition: service_healthy + db: + condition: service_healthy + results: + condition: service_healthy + environment: + MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan + MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0 + MAYAN_DATABASE_DRIVER: django.db.backends.postgres + MAYAN_DATABASE_HOST: db + MAYAN_DATABASE_NAME: mayan + MAYAN_DATABASE_PASSWORD: mayan-password + MAYAN_DATABASE_USER: mayan + ports: + - "80:8000" + volumes: + - app:/var/lib/mayan diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 0000000000..40ba68ea37 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +set -e +echo "mayan: starting entrypoint.sh" +INSTALL_FLAG=/var/lib/mayan/media/system/SECRET_KEY +export DOCKER_ROOT=/root + +export MAYAN_DEFAULT_BROKER_URL=redis://127.0.0.1:6379/0 +export MAYAN_DEFAULT_CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0 + +export MAYAN_ALLOWED_HOSTS=* +export MAYAN_BIN=/usr/local/lib/python2.7/dist-packages/mayan/bin/mayan-edms.py +export MAYAN_BROKER_URL=${MAYAN_BROKER_URL:-${MAYAN_DEFAULT_BROKER_URL}} +export MAYAN_CELERY_RESULT_BACKEND=${MAYAN_CELERY_RESULT_BACKEND:-${MAYAN_DEFAULT_CELERY_RESULT_BACKEND}} +export MAYAN_GUNICORN_WORKERS=${MAYAN_GUNICORN_WORKERS:-2} +export MAYAN_INSTALL_DIR=/usr/local/lib/python2.7/dist-packages/mayan +export MAYAN_PYTHON_DIR=/usr/local/bin +export MAYAN_MEDIA_ROOT=/var/lib/mayan +export MAYAN_SETTINGS_MODULE=${MAYAN_SETTINGS_MODULE:-mayan.settings.production} + +export CELERY_ALWAYS_EAGER=False +export PYTHONPATH=$PYTHONPATH:$MAYAN_MEDIA_ROOT + +chown mayan:mayan /var/lib/mayan -R + +initialize() { + echo "mayan: initialize()" + su mayan -c "mayan-edms.py initialsetup --force" + su mayan -c "mayan-edms.py collectstatic --noinput --clear" +} + +upgrade() { + echo "mayan: upgrade()" + su mayan -c "mayan-edms.py performupgrade" + su mayan -c "mayan-edms.py collectstatic --noinput --clear" +} + +start() { + echo "mayan: start()" + rm -rf /var/run/supervisor.sock + exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf +} + +os_package_installs() { + echo "mayan: os_package_installs()" + if [ "${MAYAN_APT_INSTALLS}" ]; then + apt-get-install $MAYAN_APT_INSTALLS + fi +} + +pip_installs() { + echo "mayan: pip_installs()" + if [ "${MAYAN_PIP_INSTALLS}" ]; then + pip install $MAYAN_PIP_INSTALLS + fi +} + +os_package_installs || true +pip_installs || true + +case "$1" in + +mayan) # Check if this is a new install, otherwise try to upgrade the existing + # installation on subsequent starts + if [ ! -f $INSTALL_FLAG ]; then + initialize + else + upgrade + fi + start + ;; + +run-tests) # Check if this is a new install, otherwise try to upgrade the existing + # installation on subsequent starts + if [ ! -f $INSTALL_FLAG ]; then + initialize + else + upgrade + fi + $DOCKER_ROOT/run-tests.sh + ;; + +*) su mayan -c "$@"; + ;; + +esac diff --git a/docker/etc/supervisor/mayan.conf b/docker/etc/supervisor/mayan.conf new file mode 100644 index 0000000000..121aab92e7 --- /dev/null +++ b/docker/etc/supervisor/mayan.conf @@ -0,0 +1,80 @@ +[program:mayan-gunicorn] +autorestart = false +autostart = true +command = /bin/bash -c "cd ${MAYAN_PYTHON_DIR}; gunicorn -w ${MAYAN_GUNICORN_WORKERS} mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --env DJANGO_SETTINGS_MODULE=${MAYAN_SETTINGS_MODULE}" +redirect_stderr = true +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +user = mayan + +[program:redis] +autorestart = false +autostart = true +command = /bin/bash -c "if [ ${MAYAN_BROKER_URL} == ${MAYAN_DEFAULT_BROKER_URL} ] && [ ${MAYAN_CELERY_RESULT_BACKEND} == ${MAYAN_DEFAULT_CELERY_RESULT_BACKEND} ];then /usr/bin/redis-server /etc/redis/;fi" +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +user = root + +[program:mayan-worker-fast] +autorestart = false +autostart = true +command = nice -n 1 /bin/bash -c "cd ${MAYAN_PYTHON_DIR}; python ${MAYAN_BIN} celery --settings=${MAYAN_SETTINGS_MODULE} worker -Ofair -l ERROR -Q converter -n mayan-worker-fast.%%h --concurrency=1" +killasgroup = true +numprocs = 1 +priority = 998 +startsecs = 10 +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +stopwaitsecs = 1 +user = mayan + +[program:mayan-worker-medium] +autorestart = false +autostart = true +command = nice -n 18 /bin/bash -c "cd ${MAYAN_PYTHON_DIR}; python ${MAYAN_BIN} celery --settings=${MAYAN_SETTINGS_MODULE} worker -Ofair -l ERROR -Q checkouts_periodic,documents_periodic,indexing,metadata,sources,sources_periodic,uploads,documents -n mayan-worker-medium.%%h --concurrency=1" +killasgroup = true +numprocs = 1 +priority = 998 +startsecs = 10 +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +stopwaitsecs = 1 +user = mayan + +[program:mayan-worker-slow] +autorestart = false +autostart = true +command = nice -n 19 /bin/bash -c "cd ${MAYAN_PYTHON_DIR}; python ${MAYAN_BIN} celery --settings=${MAYAN_SETTINGS_MODULE} worker -Ofair -l ERROR -Q mailing,tools,statistics,parsing,ocr -n mayan-worker-slow.%%h --concurrency=1" +killasgroup = true +numprocs = 1 +priority = 998 +startsecs = 10 +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +stopwaitsecs = 1 +user = mayan + +[program:mayan-celery-beat] +autorestart = false +autostart = true +command = nice -n 1 /bin/bash -c "cd ${MAYAN_PYTHON_DIR}; python ${MAYAN_BIN} celery --settings=${MAYAN_SETTINGS_MODULE} beat --pidfile= -l ERROR" +killasgroup = true +numprocs = 1 +priority = 998 +stderr_logfile = /dev/fd/2 +stderr_logfile_maxbytes = 0 +stdout_logfile = /dev/fd/1 +stdout_logfile_maxbytes = 0 +startsecs = 10 +stopwaitsecs = 1 +user = mayan diff --git a/docker/stack.yml b/docker/stack.yml new file mode 100644 index 0000000000..90721ed230 --- /dev/null +++ b/docker/stack.yml @@ -0,0 +1,30 @@ +version: '3.1' + +volumes: + app: + driver: local + db: + driver: local + +services: + + db: + image: postgres + environment: + POSTGRES_DB: mayan + POSTGRES_PASSWORD: mayan-password + POSTGRES_USER: mayan + + app: + image: mayanedms/mayanedms:latest + ports: + - 80:8000 + environment: + MAYAN_DATABASE_ENGINE: django.db.backends.postgresql + MAYAN_DATABASE_HOST: db + MAYAN_DATABASE_NAME: mayan + MAYAN_DATABASE_PASSWORD: mayan-password + MAYAN_DATABASE_USER: mayan + volumes: + - app:/var/lib/mayan + diff --git a/docker/version b/docker/version new file mode 100755 index 0000000000..9f55b2ccb5 --- /dev/null +++ b/docker/version @@ -0,0 +1 @@ +3.0 diff --git a/docs/_static/overview.gif b/docs/_static/overview.gif index 416fe297fc..971d0e2ad2 100644 Binary files a/docs/_static/overview.gif and b/docs/_static/overview.gif differ diff --git a/docs/conf.py b/docs/conf.py index 19e9d860e1..6a15fcbb36 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -33,7 +33,7 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext")) # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. #extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] #extensions = ["djangodocs", "sphinx.ext.intersphinx"] -extensions = ['djangodocs', 'sphinxcontrib.blockdiag'] +extensions = ['sphinxcontrib.blockdiag'] blockdiag_antialias = True blockdiag_html_image_format = "SVG" @@ -53,7 +53,7 @@ master_doc = 'index' # General information about the project. project = mayan.__title__ -copyright = mayan.__copyright__ +copyright = mayan.__copyright_short__ # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -179,6 +179,9 @@ html_static_path = ['_static'] # Output file base name for HTML help builder. htmlhelp_basename = 'MayanEDMSdoc' +html_show_sourcelink = False + +html_show_sphinx = False # -- Options for LaTeX output -------------------------------------------------- @@ -224,28 +227,8 @@ latex_documents = [ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'mayanedms', 'Mayan EDMS Documentation', + ('index', 'mayanedms', '{} Documentation'.format(mayan.__title__), [mayan.__author__], 1) ] - -# -- Custom options -import alabaster - -html_theme_path = [alabaster.get_path()] -extensions.append('alabaster') -html_theme = 'alabaster' -html_sidebars = { - '**': [ - 'about.html', 'donate.html', 'navigation.html', 'searchbox.html', - ] -} -html_theme_options = { - 'description': mayan.__description__, - 'github_button': False, - 'travis_button': False, - 'gratipay_user': 'rosarior', - 'github_banner': False, -} - -html_logo = '_static/logo_pyramid_only.png' +html_theme = 'sphinx_rtd_theme' diff --git a/docs/index.rst b/docs/index.rst index 51f7d0a5c9..069919f820 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,11 @@ Welcome to Mayan EDMS! ====================== +.. image:: /_static/mayan_logo.png + :alt: Logo is a trademark of Roberto Rosario + :align: center + + Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_, coded in the Python language using the Django_ web application framework and released under the `Apache 2.0 License`_. It provides an electronic vault or @@ -14,17 +19,43 @@ repository for electronic documents. Installation Features - Advanced deployment Release notes and upgrading - Concepts + + ACLs + Backups + Checkouts + Document types + File storage + Document indexes + Document languages + Document signatures + Mailing + Metadata + OCR + Permissions + Settings + Sources + Smart links + Tags + Transformations + Upload wizard + Versioning + + Docker image + Advanced deployment + Development App creation - Roadmap + Pending work + Code statistics Translations - Contributors Licensing FAQ Contact + MERCs + Pending work + Individual Contributor Assignment Agreement + Entity Contributor Assignment Agreement .. _Docker: https://www.docker.com/ .. _Django: http://www.djangoproject.com/ diff --git a/docs/mercs/0001-merc-process.rst b/docs/mercs/0001-merc-process.rst new file mode 100644 index 0000000000..764389ac45 --- /dev/null +++ b/docs/mercs/0001-merc-process.rst @@ -0,0 +1,211 @@ +============================== +MERC 1: Purpose and Guidelines +============================== + +:MERC: 1 +:Author: Michael Price +:Status: Accepted +:Type: Process +:Created: 2018-02-17 +:Last-Modified: 2018-02-17 + +.. contents:: Table of Contents + :depth: 3 + :local: + +What is a MERC? +=============== + +A Mayan EDMS Request For Comment document or MERC document is a design +document providing information to the Mayan EDMS community, or +describing a new feature or process for Mayan EDMS. MERCs provide +concise technical specifications of features, along with rationales. + +MERC Types +========== + +There are three kinds of MERCs: + +1. A **Feature** MERC describes a new feature or implementation +for Mayan EDMS. Most MERCs will be Feature MERCs. + +2. An **Informational** MERC describes a Mayan EDMS design issue, or +provides general guidelines or information to the Mayan EDMS community, +but does not propose a new feature. Informational MERCs do not +necessarily represent a community consensus or +recommendation, so users and implementers are free to ignore +Informational MERCs or follow their advice. + +3. A **Process** MERC describes a process surrounding Mayan EDMS, or +proposes a change to (or an event in) a process. Process MERCs are +like Feature MERCs but apply to areas other than the Mayan EDMS +framework itself. They may propose an implementation, but not to +Mayan EDMS's codebase; they often require community consensus; unlike +Informational MERCs, they are more than recommendations, and users +are typically not free to ignore them. Examples include +procedures, guidelines, changes to the decision-making process, and +changes to the tools or environment used in Mayan EDMS development. +Any meta-MERC is also considered a Process MERC. (So this document +is a Process MERC). + +MERC submission workflow +======================== + +Pre-proposal +------------ + +The MERC process begins with a new idea for Mayan EDMS. It is highly recommended +that a single MERC contain a single key proposal or new idea. Small enhancements +or patches usually don't need a MERC and follow Mayan EDMS's normal contribution +process. + +MERCs should be focused on a single topic. If in doubt, split your MERC +into several well-focused ones. + +Once the idea's been vetted, a draft MERC should be presented to the +Mayan EDMS mailing list. This gives the author a chance to flesh out the +draft MERC to make sure it's properly formatted, of high quality, and to address +initial concerns about the proposal. + +The Core Developers will be responsible for accepting or rejecting the MERC proposal. + + +Submitting the draft +-------------------- + +Following the discussion on Mayan EDMS mailing list, the proposal +should be sent as a merge request to the Mayan EDMS repository. The draft must +be written in MERC style; if it isn't the merge request may be rejected until proper +formatting rules are followed. + + +Implementation +-------------- + +Finally, once a MERC has been accepted, the implementation must be completed. In +many cases some (or all) implementation will actually happen during the MERC +process: Feature MERCs will often have fairly complete implementations before +being reviewed. When the implementation is complete and incorporated +into the main source code repository, the status will be changed to +"Final". + +MERC format +=========== + +MERCs need to follow a common format and outline; this section describes +that format. + +MERCs must be written in `reStructuredText `_ +(the same format as Mayan EDMS's documentation). + +Each MERC should have the following parts: + +#. A short descriptive title (e.g. "User document filters"), which is also reflected + in the MERC's filename (e.g. ``0002-user-document-filters.rst``). + +#. A preamble -- a rST `field list `_ + containing metadata about the MERC, including the MERC number and so forth. See + `MERC Metadata`_ below for specific details. + +#. Abstract -- a short (~200 word) description of the technical issue + being addressed. + +#. Specification -- The technical specification should describe the syntax and + semantics of any new feature. The specification should be detailed enough to + allow implementation -- that is, developers other than the author should + (given the right experience) be able to independently implement the feature, + given only the MERC. + +#. Motivation -- The motivation is critical for MERCs that want to add + substantial new features or materially refactor existing ones. It should + clearly explain why the existing solutions are inadequate to address the + problem that the MERC solves. MERC submissions without sufficient motivation + may be rejected outright. + +#. Rationale -- The rationale fleshes out the specification by describing what + motivated the design and why particular design decisions were made. It + should describe alternate designs that were considered and related work. + + The rationale should provide evidence of consensus within the community and + discuss important objections or concerns raised during discussion. + +#. Backwards Compatibility -- All MERCs that introduce backwards + incompatibilities must include a section describing these incompatibilities + and their severity. The MERC must explain how the author proposes to deal + with these incompatibilities. MERC submissions without a sufficient backwards + compatibility treatise may be rejected outright. + +#. Reference Implementation -- The reference implementation must be completed + before any MERC is given status "Final", but it need not be completed before + the MERC is accepted. While there is merit to the approach of reaching + consensus on the specification and rationale before writing code, the + principle of "rough consensus and running code" is still useful when it comes + to resolving many discussions of API details. + + The final implementation must include tests and documentation, per Mayan EDMS + development guide. + + +MERC Metadata +------------- + +Each MERC must begin with some metadata given as an rST +`field list `_. +The headers must contain the following fields: + +``MERC`` + The MERC number. In an initial merge request, this can be left out or given + as ``XXXX``; the reviewer who merges the pull request will assign the MERC + number. +``Type`` + ``Feature``, ``Informational``, or ``Process`` +``Status`` + ``Draft``, ``Accepted``, ``Rejected``, ``Withdrawn``, ``Final``, or ``Superseded`` +``Created`` + Original creation date of the MERC (in ``yyyy-mm-dd`` format) +``Last-Modified`` + Date the MERC was last modified (in ``yyyy-mm-dd`` format) +``Author`` + The MERC's author(s). +``Implementation-Team`` + The person/people who have committed to implementing this MERC +``Requires`` + If this MERC depends on another MERC being implemented first, + this should be a link to the required MERC. +``Mayan EDMS-Version`` (optional) + For Feature MERCs, the version of Mayan EDMS (e.g. ``2.7.3``) that this + feature will be released in. +``Replaces`` and ``Superseded-By`` (optional) + These fields indicate that a MERC has been rendered obsolete. The newer MERC + must have a ``Replaces`` header containing the number of the MERC that it + rendered obsolete; the older MERC has a ``Superseded-By`` header pointing to + the newer MERC. +``Resolution`` (optional) + For MERCs that have been decided upon, this can be a link to the final + rationale for acceptance/rejection. It's also reasonable to simply update + the MERC with a "Resolution" section, in which case this header can be left + out. + +Auxiliary Files +--------------- + +MERCs may include auxiliary files such as diagrams. Such files must be named +``XXXX-descriptive-title.ext``, where "XXXX" is the MERC number, +"descriptive-title" is a short slug indicating what the file contains, and +"ext" is replaced by the actual file extension (e.g. "png"). + +Reporting MERC Bugs, or Submitting MERC Updates +=============================================== + +How you report a bug, or submit a MERC update depends on several factors, such as +the maturity of the MERC, the preferences of the MERC author, and the nature of +your comments. For the early draft stages of the MERC, it's probably best to +send your comments and changes directly to the MERC author. For more mature, or +finished MERCs you can submit corrections as repository issues or merge requests +against the git repository. + +When in doubt about where to send your changes, please check first with the MERC +author and/or a core developer. + +MERC authors with git push privileges for the MERC repository can update the MERCs +themselves. diff --git a/docs/mercs/0002-test-writing.rst b/docs/mercs/0002-test-writing.rst new file mode 100644 index 0000000000..0e7a542863 --- /dev/null +++ b/docs/mercs/0002-test-writing.rst @@ -0,0 +1,82 @@ +===================== +MERC 2: Test writing +===================== + +:MERC: 2 +:Author: Michael Price +:Status: Accepted +:Type: Feature +:Created: 2018-02-22 +:Last-Modified: 2018-04-01 + +.. contents:: Table of Contents + :depth: 3 + :local: + +Abstract +======== + +This MERC proposes a standard methodology for writing tests for Mayan EDMS. + +Motivation +========== + +Having a standard methodology for writing tests has the following advantages: + +1. Scaffolding can be reduced by providing the most frequently used + paradigms as methods or helper functions. +2. Reduce the probabilities of errors slipping through poorly written tests. + + +Specification +============= + +1. Tests must test each view in at least two ways: + + A. Object creations views must be tested with and without permissions. + B. Object detail, list and delete views must be tested with and without + object access. + +2. Tests must assert the status code of the response even + when the expected status is HTTP 200. +3. The actual request performed must be enclosed in a private methods + so that the fail and pass tests use the same HTTP request. +4. Test must verify that changes happened and didn't happened in the + database regardless of the return code. Even is an edit view returns + and error 4XX (404-Not found, 403-Forbidden, etc), the test must + ensure that the data was not indeed modified. +5. All tests must use the test user created by the BaseAPITestCase and not + an super user unless absolutely required by the test. +6. Each test must test just one thing. +7. If a test object needs to be created before the execution of a request + this object must be created by a private method. + +Example: + +.. code-block:: python + + def _request_tag_create(self): + return self.post( + viewname='rest_api:tag-list', data={ + 'label': TEST_TAG_LABEL, 'color': TEST_TAG_COLOR + } + ) + + def test_tag_create_view_no_permission(self): + response = self._request_tag_create() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(Tag.objects.count(), 0) + + def test_tag_create_view_with_permission(self): + self.grant_permission(permission=permission_tag_create) + response = self._request_tag_create() + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + tag = Tag.objects.first() + self.assertEqual(response.data['id'], tag.pk) + self.assertEqual(response.data['label'], TEST_TAG_LABEL) + self.assertEqual(response.data['color'], TEST_TAG_COLOR) + + self.assertEqual(Tag.objects.count(), 1) + self.assertEqual(tag.label, TEST_TAG_LABEL) + self.assertEqual(tag.color, TEST_TAG_COLOR) diff --git a/docs/mercs/0003-using-javascript-libraries.rst b/docs/mercs/0003-using-javascript-libraries.rst new file mode 100644 index 0000000000..76235fa68e --- /dev/null +++ b/docs/mercs/0003-using-javascript-libraries.rst @@ -0,0 +1,74 @@ +================================== +MERC 3: Using javascript libraries +================================== + +:MERC: 3 +:Author: Eric Riggs +:Status: Accepted +:Type: Feature +:Created: 2018-03-08 +:Last-Modified: 2018-06-04 + +.. contents:: Table of Contents + :depth: 3 + :local: + + +Abstract +======== + +This MERC proposes a standard way to use javascript libraries. + +Rationale +========= + +Mayan EDMS uses several javascript libraries for user interface features. +Currently, the libraries are not installed using any javascript package +manager but copied uncompressed. Installing the libraries in this manner +carries some disadvantages. + +Motivation +========== + +The inclusion of the libraries in source form is required by many licenses +if the library is not installed by a package manager in distributable form. +There are several disavantages with the current approach: + +1. Having the library in source form means that the entire weight of the + library's size carries over the overall size of the Mayan EDMS distribution files. + The justification for not doing this is the same as with the Python libraries + which are not copied with the code but downloaded upon installation. +2. Upgrading the libraries means manually examining the version of the + installed in the project and manually searching, downloading, compressing + and adding the files to the repository. +3. The source form of the libraries includes normal and minified versions + of the code and the accompaning CSS files. There is no define preference + and through the project both versions of the libraries are loaded + interchangeably. Using a packager manager the minified version would be + used of a pipeline to minify the installed libraries should be added. + +Backwards Compatibility +======================= + +There are no backwards compatibility issues with this proposal. + + +Specification +============= + +Changes needed: + +1. Python based javascript package manager. Alternatively a Python wrapper + for a javascript package manager could be used. +2. Package manifest for the javascript libraries used. +3. Installation pipeline to install the javascript libraries during the + installation and setup of the project. + +References: + +- https://github.com/JDeuce/powser +- https://github.com/javrasya/version-manager +- https://github.com/inveniosoftware-attic/setuptools-bower +- https://pypi.python.org/pypi/django-bower-cache/0.5.0 +- http://django-pipeline.readthedocs.io/en/latest/index.html +- https://github.com/nvbn/django-bower diff --git a/docs/mercs/index.rst b/docs/mercs/index.rst new file mode 100644 index 0000000000..cf812de48e --- /dev/null +++ b/docs/mercs/index.rst @@ -0,0 +1,51 @@ +===== +MECRs +===== + +Mayan EDMS Request For Comment documents index. + +.. contents:: Table of Contents + :depth: 2 + :local: + +Status +====== + +Accepted +-------- + +.. toctree:: + :maxdepth: 1 + + 0001-merc-process + 0002-test-writing + 0003-using-javascript-libraries + +Draft +----- + +.. toctree:: + :maxdepth: 1 + + merging-roles-and-groups + support-forum + + +Type +==== + +Process +------- +.. toctree:: + :maxdepth: 1 + + 0001-merc-process + + +Feature +------- +.. toctree:: + :maxdepth: 1 + + 0002-test-writing + 0003-using-javascript-libraries diff --git a/docs/mercs/merging-roles-and-groups.rst b/docs/mercs/merging-roles-and-groups.rst new file mode 100644 index 0000000000..874c944ee6 --- /dev/null +++ b/docs/mercs/merging-roles-and-groups.rst @@ -0,0 +1,67 @@ +=============================== +MERC XX: Unify Roles and Groups +=============================== + +:MERC: XX +:Author: Michael Price +:Status: Draft +:Type: Feature +:Created: 2018-02-27 +:Last-Modified: 2018-02-27 + +.. contents:: Table of Contents + :depth: 3 + :local: + +Abstract +======== + +This MERC proposes the merging of the Roles and Group models. + +Rationale +========= + +Mayan EDMS uses Groups as units of users that are meant to mirror an +organization's actual user hierarchy. Roles are used as permission units. + +Separation of concerns is a concept Mayan EDMS executes very successfully +but when it comes to the Roles/Groups relationship that execution causes +overheads without providing advantages in the day to day operations. + +In reality there is almost a 1 to 1 correlation between Roles and Groups. +Other permissions systems already use Groups as permission units without +disavantages. An example of this is LDAP and its commercial counterpart +Active Directory. + +Motivation +========== + +Merging the Role and Group model will reduce some complexity when initially +setting up Mayan EDMS. The merge allows removing a Mayan EDMS model in +favor of using a native Django model for the same task. + +Merging the Role and Group models will also provide a speed boost in every +permission check and queryset filtering. These checks are nested in nature. +Since the access checks are performed for every view and for every link +in the view the performace gain should be substantial. + +Backwards Compatibility +======================= + +To avoid loss of role configuration a data migration will be needed to +convert existing roles to groups. + + +Specification +============= + +Changes needed: + +1. Data migration to convert existing roles to groups. +2. Prepend or append an identifier to the migrated roles. +3. Intermediate model to map permissions to a group. This will substitute + the Role model's permissions many to many field. +4. Update the ``AccessControlList`` models roles field to point to the group + models. +5. Update the role checks in the ``check_access`` and ``filter_by_access`` + ``AccessControlList`` model manager methods. diff --git a/docs/mercs/support-forum.rst b/docs/mercs/support-forum.rst new file mode 100644 index 0000000000..c6385df639 --- /dev/null +++ b/docs/mercs/support-forum.rst @@ -0,0 +1,48 @@ +====================== +MERC XX: Support forum +====================== + +:MERC: XX +:Author: Michael Price +:Status: Draft +:Type: Process +:Created: 2018-02-27 +:Last-Modified: 2018-02-27 + +.. contents:: Table of Contents + :depth: 3 + :local: + +Abstract +======== + +This MERC proposes the move of the official community meeting place +from Google Group to a self hosted forum platform. + +Motivation +========== + +Google Groups is not a proper forum platform and as such is lacking many +features that would increase participation. Google Groups has not had any +significant update in years and the age of the platform is visible. There +are no official mobile apps for Google Groups, no responsible template +is not provided. There are not integration options. These factors +contribute to the problems of knowledge dilution and one time +participation being experienced in the Mayan EDMS community. + +Other concerns for moving the community to a self hosted forum solution +are that Google Groups presents a single point of failure by relying on +a free product hosted by a commercial company with no continuation plan +for the product. Google Groups doesn't provide archiving features and +the current archive solution relies on other third party services, one +of which (GMANE) has stopped working. Recent user privacy and censorship +issues regarding Google, reinforce the need for a self hosted solution. + + +Specification +============= + +The proposed solution is to use the bbPress (https://wordpress.org/plugins/bbpress/) +forum plugin for Wordpress. After 14 years, Wordpress dominance continues +unrivaled. The wealth of material, themes, templates and professional avaialbe make +it a safe option. diff --git a/docs/releases/2.5.1.rst b/docs/releases/2.5.1.rst index 0b1af58a4d..b1e25506c9 100644 --- a/docs/releases/2.5.1.rst +++ b/docs/releases/2.5.1.rst @@ -63,8 +63,6 @@ Backward incompatible changes Bugs fixed or issues closed =========================== -* None -======= * `GitLab issue #378 `_ Add metadata widget changes from @Macrobb * `GitLab issue #379 `_ Add new document version list view permission. diff --git a/docs/releases/3.0.rst b/docs/releases/3.0.rst new file mode 100644 index 0000000000..8116dc5014 --- /dev/null +++ b/docs/releases/3.0.rst @@ -0,0 +1,627 @@ +============================= +Mayan EDMS v3.0 release notes +============================= + +Released: June 29, 2018 + +What's new +========== + +Turning Mayan EDMS into a single page app +----------------------------------------- +Historically, Mayan EDMS has steered away from adding too much Javascript +in its code. The goal was to be able to maintain a robust, backend-based +page rendering method that will be as future-proof as possible. +This approach comes at the cost of some page loading speed, and reduced +user interface interactivity. + +The whole system has been update to work as a modern Single Page App. +Single Page Applications (SPAs) rewrite the current page dynamically +rather than loading the entire page on each click of the mouse. This +makes the web application feel and behave more like a desktop +application. Because the majority of the styling and Javascript code +is loaded only once, there is also the added benefit of less data down +the wire. Thus the application becomes lighter and provides a faster +response time to user events. Because the style is loaded and +interpreted at the beginning, the browser is also able to apply it to +the new content faster. + +This redesign was achieved using only HTML5 and jQuery. Aside from two +additional jQuery libraries, there are no extra framework dependencies. +With the conversion to an SPA, many other petitions for user interface +improvements are now possible. + + +Upgrading to Django 1.11 +------------------------ +The move to Django 1.11 proved to be a real challenge. Even though +Django 1.11 is a minor release, it breaks compatibility and interfaces +in several key areas. Among these were templates and form widgets. + +Mayan EDMS uses a complex template, form and widget system. The system +mimics object-oriented concepts like inheritance at the rendering stage. +This allows the more than 300 views to be serviced with just a handful +of forms classes and base templates. Testing and auditing all the views +and forms after the upgrade was a lot of work. + +Along with the upgrade to Django 1.11, many deprecations +warning were fixed in preparation for an eventual upgrade to Django 2.0. + + +Notification improvements +------------------------- +These work by allowing users to subscribe to a particular event like Document +Uploads or to an event of a particular document like when an invoice is edited. +If these events occurs, the user gets a reminder next to the bell icon in the +main menu bar. + + +Dependencies upgrades +--------------------- +Most of the requirements, dependencies and libraries were upgraded to +their latest release. + +- Pillow: 5.0.0 +- django-activity-stream: 0.6.5 +- django-compressor: 2.2 +- django-cors-headers: 2.2.0 +- django-formtools: 2.1 +- django-qsstats-magic: 1.0.0 +- django-stronghold: 0.3.0 +- django-suit: 0.2.26 +- furl: 1.0.1 +- graphviz: 0.8.2 +- pyocr: 0.5.1 +- python-dateutil: 2.6.1 +- python-magic: 0.4.15 +- pytz: 2018.3 +- sh: 1.12.14 +- rest_framework_swagger replaced with drf-yasg: 1.5.0 +- FancyBox was upgraded to version 3, Font Awesome to version 5, jQuery to version 3.3.1. ajaxForm version 4.2.2, URI.js 1.19.1 and pace 0.7.8 were added as part of the conversion to single page app. + + +Search syntax +------------- +Searching without using a specialized search database is difficult. +Mayan’s design calls avoiding a separate search engine at the cost of some +missing search syntax. The OR and the negative term support are the first +attempts at adding special syntax to Mayan’s search code. + +By default now, search terms are routed to an “AND” query. That means +that a search for: + +``Tag1 Tag2`` + +will only return documents with both tags attached. To offer the +opposite choice we added an “OR” syntax. Searching for: + +``Tag1 OR Tag2`` + +will return documents with either tag attached. + +Support for literals terms was also added. + +Searching for: + +``blue car`` + +will return documents with the words “blue” and “car”, even if they are +not together. That means getting documents with the phrases “blue sky” +and “slow car”. To search for exact terms enclose them in quotes: + +``“blue car”`` + +This will return only documents with the exact phrase “blue car”. + + +Running multiple instances of Mayan EDMS +---------------------------------------- +If you've ever tried running two instances of Mayan EDMS, you would +have noticed that they both try to create a lock file in the ``/tmp`` +directory with the same name. Only the first instance will be able to run. + +The lock filename needs to be unique to each instance, yet predictable +so that the workers of an instance can also access the same lock file. + +This issues was solved by using a hexadecimal hash representation of the +installation’s unique ``SECRET_KEY`` setting. The use of a hash makes +reversing the value in order to obtain the ``SECRET_KEY`` impossible for +all practical purposes. + + +Display resolution settings +--------------------------- +Display sizes for document display, previews, and thumbnail were specified +as a string that included the horizontal and the vertical resolution +separated by the character “x”. Using an “x” character to separate +resolution elements is not standard. + +This version splits the settings for specifying resolutions into two settings +for each size. One setting for horizontal resolution and another for vertical +resolution. + +The settings are now: + +``DOCUMENTS_DISPLAY_WIDTH``, ``DOCUMENTS_DISPLAY_HEIGHT``, ``DOCUMENTS_PREVIEW_WIDTH``, +``DOCUMENTS_PREVIEW_HEIGHT``, ``DOCUMENTS_PRINT_WIDTH``, ``DOCUMENTS_PRINT_HEIGHT``, +``DOCUMENTS_THUMBNAIL_WIDTH``, ``DOCUMENTS_THUMBNAIL_HEIGHT`` + + +Dynamic upload wizard steps +--------------------------- +The steps needed to upgrade a document using form-tools' SessionWizard +were hardcoded in the source app. This made it very difficult to add or remove +wizard steps. + +The steps of the wizard are now defined by a new class called +``sources.wizard.WizardStep``. The existing steps to select a document type, +enter metadata and tag the document, have been converted to function as +WizardSteps subclasses. The converted steps now live in + +``sources.wizards.WizardStepDocumentType``, ``tag.wizard_steps.WizardStepTags``, +and ``metadata.wizard_steps.WizardStepMetadata``. + +The steps need to define the following methods: + +- ``done``: This method is execute when the wizard finished the last step + an enter the step where the actual file are uploaded. This steps is used + to encode form data into the URL query string that will be passed to the + document upload view for each file uploaded. + +- ``condition``: This method is used to display the step conditionally. + If this method return True it will be displayed during the upload wizard + execution. To skip the step, return False or None. + +- ``get_form_initial``: This method is used to return the initial data + for the step form. Use this method to set up initial values for the step's + form fields. + +- ``step_post_upload_process``: This method will be executed once the + document finishes uploading. Use this method to process the information + encoded in the URL querystring by the step's `done`` method. + +Once the ``WizardStep`` subclass is defined, it needs to be registered. This +is done by calling the ``.register`` method of the ``WizardStep`` class with +the subclass as the argument. Example:: + + WizardStep.register(WizardStepMetadata) + +This statement must be located after the subclass definition. Finally, +the module defining the wizard step must be imported so that it is loaded +with the rest of the code and enabled. The best place to do this is in the +``.ready`` method of the apps' ``apps.py`` module. Example:: + + class TagsApp(MayanAppConfig): + has_rest_api = True + has_tests = True + name = 'tags' + verbose_name = _('Tags') + + def ready(self): + super(TagsApp, self).ready() + from actstream import registry + + from .wizard_steps import WizardStepTags # NOQA + +The WizardStep class also allows for unregistering existing steps. This +is accomplished by calling the ``.deregister`` method of the ``WizardStep`` +class and passing the subclass as the argument. This method should +also be called inside the ``.ready`` method of an apps' ``apps.py`` +module. Example:: + + + class TagsApp(MayanAppConfig): + has_rest_api = True + has_tests = True + name = 'tags' + verbose_name = _('Tags') + + def ready(self): + super(TagsApp, self).ready() + from actstream import registry + + from metadata.wizard_steps import WizardStepMetadata # NOQA + from sources.wizards import WizardStep # NOQA + from .wizard_steps import WizardStepTags # NOQA + + WizardStep.deregister(WizardStepTags) + + +This will cause the tags assigment step to not be assigned to the upload +wizard anymore. + + +New upload step +--------------- +Using the new ``WizardStep`` class a new upload wizard step was added +to assign documents being uploaded to any number of cabinets while +being uploaded. This step was been assigned number 4 in the order of +step for uploading a file. + + +Fix carousel item height issues +------------------------------- +On some devices the height of the pages on the document preview view were +squashed. The CSS for this view was updated to fix this issue. + + +Orientation detection +--------------------- +After reports that it is not working in 100% of the cases, the feature that +detects and fixes the orientation of PDF has been marked experimental and +now defaults to being disabled. + + +New proposal system +------------------- +The Mayan EDMS Request for Comments or MERCs will be use to propose and or +document the new features, the existing code, and the processes governing the +project. MERCs 1 and 2 have been approved. MERC-1 outlines the MERC process +itself and MERC-2 documents the way API tests are to be written for Mayan EDMS. + + +Duplicated documents +-------------------- +The duplicated documents system has been improved to also better detect when +the duplicate of a primary document has been move to the trash. In this +instance the duplicate count of the primary document would be zero and will +cause the primary document to not show in the duplicated document list view. + +If the duplicated document is deleted from the trash the system now will launch +a background clean up task to permanently delete the empty primary document's +duplicate document entry from the database. + +Storage +------- +It is now possible to pass arguments to the document, document cache and +document signatures storage backends. To pass the arguments, use the new +settings: ``DOCUMENTS_STORAGE_BACKEND_ARGUMENTS``, +``DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS``, and ``SIGNATURES_STORAGE_BACKEND_ARGUMENTS``. + +The ``FileBasedStorage`` driver originally provided has been removed. +With this change the setting ``STORAGE_FILESTORAGE_LOCATION`` has also been removed. +The storage driver now default to Django's own ``FileSystemStorage`` driver. +By using this driver each app is responsible of specifying their storage +path. The path path (or location) is configure via the +``DOCUMENTS_STORAGE_BACKEND_ARGUMENTS``, ``DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS``, or +``SIGNATURES_STORAGE_BACKEND_ARGUMENTS`` for the documents, document cache and document signatures respectively. + +For example, to change the document storage location use:: + + DOCUMENTS_STORAGE_BACKEND_ARGUMENTS = '{ location: }' + +If no path is specified the backend will default to ``mayan/media/document_storage``. + +Finally, to standardize the way app use storage, the ``storages.py`` modules is now used +instead of the ``runtime.py`` module. + +User event filtering +-------------------- +When viewing the event list, the Actor (user) column is not displayed +as a link. Clicking this link will filter the event list and display +the events performed by that user. The view of event for each user can +also be viewed using a new link added to the user list view in the setup +menu. + +Smart checkbox selection +------------------------ +A faster way to select multiple item has been added. Click the checkbox of the first, +hold the Shift key, and then click the checkbox of the last item of the selection. +This will select the first, the last and all items in between. To deselect multiple +items the same procedure is used. This code was donated by the Paperattor +project (www.paperattor.com). + +Add JavaScript dependency manager +--------------------------------- +An internal utility to install and upgrade the JavaScript dependencies was added. +This depency manager allows for the easier maintenace of the JavaScript libraries +used through the project. + +Previously JavaScript libraries we downloaded and installed by manually. These +libraries were them checked into the Git repository. Finally to enable them +the correspoding imports were added to the base templates in the apppeance app. + +This new manager is the first step to start resolving these issues. The manager +allows apps to specify their own dependencies. These dependecies are then +downloaded when the project is installed or upgraded. As such they are not +part of the repository and lower the file size of the project. + +Workflow changes +---------------- +Removing a document type from a workflow will now also remove all running +instances of that workflow for documents of the document type just removed. + +Adoption of Contributor Assignment Agreements +--------------------------------------------- +To facilitate the inclusion of submissions provided by third parties, +the project has adopted the use of individual and entity contributor +assignment agreements. These agreements make clear the process to +transfer the rights to submissions. With these agreements in place +we now have a documented and legally sound method to accept +submissions that we couldn't before. + +SQLite +------ +Starting with version 3.0, a warning message will be shown in the console and +in the user interface when using SQLite as the database engine. When it comes to +Mayan EDMS, SQLite should only be used for development or testing, never for +production. This is due to Mayan EDMS exceeding the concurrency capabilities of +SQLite. The results are duplicated documents, frequency database locked errors, +among other issues. Suggested database backends are PostgreSQL and MySQL +(or MariaDB) using a transaction aware storage engine like InnoDB. + +Received email processing +------------------------- +Parsing email messages is a complex task. To increase compatibility with the +many interpretations of the standards that govern email messaging, Mayan EDMS +now uses Mailgun's flanker library (https://github.com/mailgun/flanker). +Thanks to flanker, Mayan EDMS now gains new capabilities when it comes to +parsing incoming email. For example, in addition to mail attachments, it is now +possible to process files included in emails as inline content. + +Other changes worth mentioning +------------------------------ +- Add Makefile target to check the format of the README.rst file. +- Fix permission filtering when performing document page searching +- base.js was splitted into mayan_app.js, mayan_image.js, and + partial_navigation.js. +- Cabinet detail view pagination was fixed. +- Improve permission handling in the workflow app. +- The checkedout detail view permission is now required for the checked out + document detail API view. +- Add missing services for the checkout API. +- Fix existing checkout APIs. +- Update API views and serializers for the latest Django REST framework + version. +- Update to the latest version the packages for building, development, + documentation and testing. +- Add statistics script to produce a report of the views, APIs and test for + each app. +- Merge base64 filename patch from Cornelius Ludmann. +- SearchModel return interface changed. The class no longer + returns the result_set value. Use the queryset returned instead. +- Remove the unused scrollable_content internal feature. +- Remove unused animate.css package. +- Add the MERC specifying javascript library usage. +- Documents without at least a version are not scanned for duplicates. +- Convert document thumbnails, preview, image preview and staging files to + template base widgets. +- Unify all document widgets. +- Printed pages are now full width. +- Move the invalid document markup to a separate HTML template. +- Move transfomations to their own module. +- Split documents.tests.test_views into: + + - base.py + - test_deleted_document_views.py + - test_document_page_views.py + - test_document_type_views.py + - test_document_version_views.py + - test_document_views.py + - test_duplicated_document_views.py + +- Sort smart links by label. +- Rename the internal name of the document type permissions namespace. + Existing permissions will need to be updated. +- Removed redundant permissions checks. +- Total test count increased to 753 +- Fix documentation formatting. +- Add upload wizard step documentation chapter. +- Improve and add additional diagrams. +- Change documenation theme to rtd. +- Add the "to=" keyword argument to all ForeignKey, ManayToMany and + OneToOne Fields. +- Rename the role groups link label from "Members" to "Groups". +- Rename the group users link label from "Members" to "Users". +- Don't show full document version label in the heading of the document + version list view. +- Show the number of pages of a document and of document versions in + the document list view and document versions list views respectively. +- Display a document version's thumbnail before other attributes. +- Use Django's provided form for setting an users password. + This change allows displaying the current password policies + and validation. +- Add method to modify a group's role membership from the group's + view. +- Rename the group user count column label from "Members" to "Users". +- Backport support for global and object event notification. + GitLab issue #262. +- Remove Vagrant section of the document. Anything related to + Vagrant has been move into its own repository at: + https://gitlab.com/mayan-edms/mayan-edms-vagrant +- Revise and improve permission requirements for the documents app API. + + - Downloading a document version now requires the document download + permission instead of just the document view permission. + - Creating a new document no longer works by having the document create + permission in a global manner. It is now possible to create a document via + the API by having the document permission for a specific document type. + - Viewing the version list of a document now required the document version + view permission instead of the document view permission. Not having the + document version view permission for a document will not return a 403 + error. Instead a blank response will be returned. + - Reverting a document via API will new require the document version revert + permission instead of the document edit permission. + - ``Document view`` permissions is nor required to view the details of + a trashed document. + +- Revise and improve permission requirements for the document states app API. + + - Require the ``Workflow view`` permission for the workflow to be able + to view a document type's workflow list. + - Fix the permission check to create workflows. Previously it had + not effect as it has using the ``mayan_object_permissions`` instead + of the ``mayan_view_permissions`` dictionary. + - Require the ``Workflow view`` permission to view the workflow instance + list. + - Require the ``Workflow view`` permission to view a workflow instance's + details. + +- Display a proper message in the document type metadata type relationship + view when there are no metadata types exist. +- Improved styling and interaction of the multiple object action form. +- Add checkbox to allow selecting all item in the item list view. +- Update the role permission edit view require the permission grant or + permission revoke permissions for the selected role. +- Add support for roles ACLs. +- Add support for users ACLs. +- Add support for groups ACLs. +- Sort permission namespaces and permissions in the role permission views. +- Invert the columns in the ACL detail view. +- Remove the data filters feature. +- Update Chart.js version. +- Improve line chart appearance. Fix issue with mouse over labels next other + chart margin. +- Add support for passing arguments to the OCR backend. +- Fix issue when using workflows transitions with the new version + upload event as trigger. Thanks to Sema @Miggaten for the find and + the solution. +- Make error messages persistent and increase the timeout of warning to + 10 seconds. +- Improve rendering of the details form. +- Update rendering of the readonly multiselect widget to conform to Django's + updated field class interface. +- Add locking for interval sources. This reduces the chance of repeated + documents from long running email downloads. +- Add the option to enable or disable parsing when uploading a document for + each document type. +- Add a new setting option to enable automatic parsing for each new document + type created. +- Add support for HTML bodies to the user mailers. +- Production ALLOWED_HOSTS settings now defaults to a safer + ['127.0.0.1', 'localhost', '[::1]'] +- Capture menu resolution errors on invalid URLs. Closes GitLab issue #420. +- New environment variables: MAYAN_SECRET_KEY, MAYAN_CELERY_ALWAYS_EAGER, + MAYAN_CELERY_RESULT_BACKEND, MAYAN_BROKER_URL, MAYAN_DATABASE_ENGINE, + MAYAN_DATABASE_CONN_MAX_AGE, MAYAN_DATABASE_NAME, MAYAN_DATABASE_USER, + MAYAN_DATABASE_PASSWORD, MAYAN_DATABASE_HOST, MAYAN_DATABASE_PORT, + MAYAN_DEBUG. +- Stricter defaults. CELERY_ALWAYS_EAGER to False, ALLOWED_HOSTS to + ['127.0.0.1', 'localhost', '[::1]']. +- New initialization command. Creates media/system and populates the + SECRET_KEY and VERSION files. +- Sane scanner source paper source now defaults to blank. +- Merge Docker image creation back into the main repository. +- Docker image now uses gunicorn and whitenoise instead of NGINX to server + the app and the static media. +- All installation artifact are now created and read from the media folder. +- Debian is now the Linux distribution used for the Docker image. +- Most Docker Celery workers are now execute using a lower OS priority number. +- Add COMMON_PRODUCTION_ERROR_LOGGING setting to control the logging of + errors in production. Defaults to False. +- Change the error log file handle class to RotatingFileHandle to avoid an + indefinitely growing log file. +- Disable embedded signatute verification during the perform upgrade command. +- Replace the DOCUMENTS_LANGUAGE_CHOICES setting option. Replaced with the + new DOCUMENTS_LANGUAGE_CODES. +- Reduce default language code choice from 7800 to the top 100 spoken + languages and related (https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers) +- Fix error when trying to upload a document from and email account with 'from' and 'subject' metadata. +- Fix typo on message.header get from 'Suject' to 'Subject'. +- On multi part emails keep the original From and Subject properties for all subsequent parts if the sub parts don't specify them. Fixes issue #481. Thanks to Robert Schöftner @robert.schoeftner for the report and debug information. +- Don't provide a default for the scanner source adf_mode. Some scanners throw an error even when the selection + if supported. +- Add a "Quick Download" action to reduce the number of steps to download a single document. GitLab issue #338. +- Recalculate a document's indexes when attaching or removing a tag from or to it. +- Recalculate all of a tag's documents when a tag is about to be deleted. + +Removals +-------- +* Data filters app. +* DOCUMENTS_LANGUAGE_CHOICES setting option. Replaced with + DOCUMENTS_LANGUAGE_CODES. + +Known issues +------------ +The newly added 'flanker' dependency used to process email, produces a number +of warnings on the console that are imposible to turn off. These are not +critical and are related to coding practices in the library. All warning +from flanker can be ignored. + +Example: "WARNING:flanker.addresslib._parser.parser:Symbol 'domain' is unreachable" + + +Upgrading from a previous version +--------------------------------- + + +Using PIP +~~~~~~~~~ + +Type in the console:: + + $ pip install mayan-edms==3.0 + +the requirements will also be updated automatically. + + +Using Git +~~~~~~~~~ + +If you installed Mayan EDMS by cloning the Git repository issue the commands:: + + $ git reset --hard HEAD + $ git pull + +otherwise download the compressed archived and uncompress it overriding the +existing installation. + +Next upgrade/add the new requirements:: + + $ pip install --upgrade -r requirements.txt + + +Common steps +~~~~~~~~~~~~ + +Migrate existing database schema with:: + + $ mayan-edms.py performupgrade + +Add new static media:: + + $ mayan-edms.py collectstatic --noinput + +The upgrade procedure is now complete. + + +Backward incompatible changes +============================= + +* None + +Bugs fixed or issues closed +=========================== + +* `GitLab issue #211 `_ Remove all workflows when removing them from a document type +* `GitLab issue #262 `_ Event notifications +* `GitLab issue #278 `_ Detect non migrated models +* `GitLab issue #302 `_ 'New Document' button available to users who do not have permission +* `GitLab issue #332 `_ Add option to pass configuration parameters to the OCR backend as mentioned in #319 +* `GitLab issue #338 `_ Quick download link in documents list view +* `GitLab issue #370 `_ Advanced search appears to OR the fields instead of AND them +* `GitLab issue #380 `_ Features removal for version 3.0 +* `GitLab issue #405 `_ Add wizard steps from external apps +* `GitLab issue #407 `_ Improve search syntax to support search query types: AND, OR +* `GitLab issue #408 `_ Improve document checkbox selection. +* `GitLab issue #420 `_ Mayan raises a 500 instead of 404 in production mode +* `GitLab issue #427 `_ /tmp/mayan_locks.tmp is always owned by root +* `GitLab issue #430 `_ Can't use STATICFILES_STORAGE that requires running collectstatic first +* `GitLab issue #437 `_ Record users who upload or edit documents +* `GitLab issue #439 `_ Toastr library missing after update +* `GitLab issue #444 `_ Error in retrieving documents via POP3 +* `GitLab issue #446 `_ Document searcher +* `GitLab issue #447 `_ API Security Bug Chinese wall breach +* `GitLab issue #449 `_ OCR Error: 'int' object has no attribute 'split' +* `GitLab issue #452 `_ Workflow ACL Doesn't works +* `GitLab issue #454 `_ Invalid next month calculation in statistics app, causes failstop +* `GitLab issue #467 `_ mail attachments without content-disposition are lost +* `GitLab issue #468 `_ plain text e-mails without charset do not work +* `GitLab issue #470 `_ Enable Django variable for HTML encoded emails +* `GitLab issue #474 `_ Provide option to serve Mayan EDMS without a webserver (using Tornado o similar). +* `GitLab issue #480 `_ Wrong Environment Variables names in documentation +* `GitLab issue #481 `_ IMAP sources with metadata not working in 3.0rc1 +* `GitHub issue #264 `_ migrate fails on document_states 0004_workflow_internal_name +* `GitHub issue #269 `_ Lack of authentication for document previews + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/index.rst b/docs/releases/index.rst index d462ab7ba0..6b35a19ea4 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.rst @@ -17,6 +17,14 @@ Final releases Below are release notes through Mayan EDMS |version| and its minor releases. Newer versions of the documentation contain the release notes for any later releases. +3.0 series +---------- +.. toctree:: + :maxdepth: 1 + + 3.0 + + 2.0 series ---------- .. toctree:: diff --git a/docs/topics/.development.rst.swp b/docs/topics/.development.rst.swp deleted file mode 100644 index 57cb51857d..0000000000 Binary files a/docs/topics/.development.rst.swp and /dev/null differ diff --git a/docs/topics/acls.rst b/docs/topics/acls.rst index 0e6dd26d0f..94539ecf53 100644 --- a/docs/topics/acls.rst +++ b/docs/topics/acls.rst @@ -11,11 +11,13 @@ system-wide. .. blockdiag:: blockdiag { + default_shape = roundedbox + document [ label = 'Document' ]; role [ label = 'Role' ]; permission [ label = 'Permission' ]; - role -> document <- permission; + role -> permission -> document; } Example: @@ -23,11 +25,13 @@ Example: .. blockdiag:: blockdiag { + default_shape = roundedbox + document [ label = '2015 Payroll report.txt', width=200 ]; role [ label = 'Accountants' ]; permission [ label = 'View document' ]; - role -> document <- permission; + role -> permission -> document; } In this scenario only users in groups belonging to the ``Accountants`` role @@ -43,11 +47,14 @@ permission for all documents of that type. .. blockdiag:: blockdiag { + default_shape = roundedbox document_type [ label = 'Document type' ]; role [ label = 'Role' ]; permission [ label = 'Permission' ]; + documents [shape = "note", stacked]; - role -> document_type <- permission; + role -> permission -> document_type ; + document_type -> documents [folded, label = "inherit" ]; } Example: @@ -55,11 +62,14 @@ Example: .. blockdiag:: blockdiag { + default_shape = roundedbox document_type [ label = 'Payroll reports', width=200 ]; role [ label = 'Accountants' ]; permission [ label = 'View document' ]; + documents [shape = "note", stacked, label="payroll_report*.pdf" ]; - role -> document_type <- permission; + role -> permission -> document_type ; + document_type -> documents [folded, label = "inherit" ]; } The role ``Accountants`` is given the permission ``document view`` for the diff --git a/docs/topics/backups.rst b/docs/topics/backups.rst index 83077433ee..8fb62b8ae4 100644 --- a/docs/topics/backups.rst +++ b/docs/topics/backups.rst @@ -4,12 +4,66 @@ Backups To backup your install of Mayan EDMS just copy the actual document files and the database content. If you are using the default storage backend, the -document files should be found in ``mayan/media/document_storage/``. +document files should be found in the ``media`` folder of your installation. To dump the content of your database manager refer to the documentation chapter regarding database data "dumping". -Example: +Here is an example of how to perform a backup and a restore of a PostgreSQL +database. + +To dump the database into an SQL text file:: + + pg_dump -h -U -c -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql + +Example:: + + pg_dump -h 127.0.0.1 -U mayan -c mayan -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql + +To restore the database from the SQL text file:: + + psql -h -U -d -W -f + +Example:: + + psql -h 127.0.0.1 -U mayan -d mayan -W -f 2018-06-07_18-10-56.sql + +Here is an example of how to perform a backup and a restore of a PostgreSQL +Docker container using a compressed dump file. A dump file is not compatible or +can be used interchangeable with an SQL text file. + +To backup a PostgreSQL Docker container:: + + docker exec pg_dump -U -Fc -c > `date +%Y-%m-%d"_"%H-%M-%S`.dump + +Example:: + + docker exec mayan-edms-db pg_dump -U mayan -Fc -c mayan > `date +%Y-%m-%d"_"%H-%M-%S`.dump + +This will produce a compressed dump file with the current date and time as the filename. + +To restore a PostgreSQL Docker container:: + + docker exec -i pg_restore -U -d < + +Since it is not possible to drop a currently open PostgreSQL database, this +command must be used on a new and empty PostsgreSQL container. + +Example:: + + docker run -d \ + --name mayan-edms-pg-new \ + --restart=always \ + -p 5432:5432 \ + -e POSTGRES_USER=mayan \ + -e POSTGRES_DB=mayan \ + -e POSTGRES_PASSWORD=mayanuserpass \ + -v /docker-volumes/mayan-edms/postgres-new:/var/lib/postgresql/data \ + -d postgres:9.5 + + docker exec -i mayan-edms-pg-new pg_restore -U mayan -d mayan < 2018-06-07_17-09-34.dump + +More information at: - Postgresl: http://www.postgresql.org/docs/current/static/backup.html - MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html diff --git a/docs/topics/caa_entity.rst b/docs/topics/caa_entity.rst new file mode 100644 index 0000000000..be253eb938 --- /dev/null +++ b/docs/topics/caa_entity.rst @@ -0,0 +1,217 @@ +================================================== +Mayan EDMS Entity Contributor Assignment Agreement +================================================== + +Thank you for your interest in contributing to Mayan EDMS ("We" or "Us"). + +This contributor agreement ("Agreement") documents the rights granted by +contributors to Us. To make this document effective, please print it, sign it +(by copyright holder or authorized party) and send it to Us by email to +caa@mayan-edms.com. This is a legally binding document, so please read it +carefully before agreeing to it. The Agreement may cover more than one +software project managed by Us. + +1. Definitions +-------------- +"You" means any Legal Entity on behalf of whom a Contribution has been received +by Us. "Legal Entity" means an entity which is not a natural person. +"Affiliates" means other Legal Entities that control, are controlled by, or +under common control with that Legal Entity. For the purposes of this +definition, "control" means (i) the power, direct or indirect, to cause the +direction or management of such Legal Entity, whether by contract or otherwise, +(ii) ownership of fifty percent (50%) or more of the outstanding shares or +securities which vote to elect the management or other persons who direct such +Legal Entity or (iii) beneficial ownership of such entity. + +"Contribution" means any work of authorship that is Submitted by You to Us in +which You own or assert ownership of the Copyright. We cannot accept +contributions for which you do not own the Copyright or for which you don't +have the necesary legal power to transfer. + +"Copyright" means all rights protecting works of authorship owned or controlled +by You or Your Affiliates, including copyright, moral and neighboring rights, +as appropriate, for the full term of their existence including any extensions +by You. + +"Material" means the work of authorship which is made available by Us to third +parties. When this Agreement covers more than one software project, the +Material means the work of authorship to which the Contribution was Submitted. +After You Submit the Contribution, it may be included in the Material. + +"Submit" means any form of electronic, verbal, or written communication sent +to Us or our representatives, including but not limited to electronic mailing +lists, source code control systems, and issue tracking systems that are managed +by, or on behalf of, Us for the purpose of discussing and improving the +Material, but excluding communication that is conspicuously marked or otherwise +designated in writing by You as "Not a Contribution." + +"Submission Date" means the date on which You Submit a Contribution to Us. + +"Effective Date" means the date You execute this Agreement or the date You +first Submit a Contribution to Us, whichever is earlier. + +2. Grant of Rights +------------------ +2.1 Copyright Assignment +~~~~~~~~~~~~~~~~~~~~~~~~ + +a. At the time the Contribution is Submitted, You assign to Us all right, title, + and interest worldwide in all Copyright covering the Contribution; provided + that this transfer is conditioned upon compliance with Section 2.3. + +b. To the extent that any of the rights in Section 2.1(a) cannot be assigned by + You to Us, You grant to Us a perpetual, worldwide, exclusive, royalty-free, + transferable, irrevocable license under such non-assigned rights, with rights + to sublicense through multiple tiers of sublicensees, to practice such + non-assigned rights, including, but not limited to, the right to reproduce, + modify, display, perform and distribute the Contribution; provided that this + license is conditioned upon compliance with Section 2.3. + +c. To the extent that any of the rights in Section 2.1(a) can neither be + assigned nor licensed by You to Us, You irrevocably waive and agree never to + assert such rights against Us, any of our successors in interest, or any of + our licensees, either direct or indirect; provided that this agreement not + to assert is conditioned upon compliance with Section 2.3. + +d. Upon such transfer of rights to Us, the Contribution will be licenses under + the terms of the Material. + +2.2 Patent License +~~~~~~~~~~~~~~~~~~ +For patent claims including, without limitation, method, process, and apparatus +claims which You or Your Affiliates own, control or have the right to grant, +now or in the future, You grant to Us a perpetual, worldwide, non-exclusive, +transferable, royalty-free, irrevocable patent license, with the right to +sublicense these rights to multiple tiers of sublicensees, to make, have made, +use, sell, offer for sale, import and otherwise transfer the Contribution and +the Contribution in combination with the Material (and portions of such +combination). This license is granted only to the extent that the exercise of +the licensed rights infringes such patent claims; and provided that this license +is conditioned upon compliance with Section 2.3. + +2.3 Outbound License +~~~~~~~~~~~~~~~~~~~~ +As a condition on the grant of rights in Sections 2.1 and 2.2, We agree to +license the Contribution only under the terms of the license or licenses which +We are using on the Submission Date for the Material (including any rights to +adopt any future version of a license if permitted). + +2.4 Moral Rights +~~~~~~~~~~~~~~~~ +If moral rights apply to the Contribution, to the maximum extent permitted by +law, You waive and agree not to assert such moral rights against Us or our +successors in interest, or any of our licensees, either direct or indirect. + +2.5 Our Rights +~~~~~~~~~~~~~~ +You acknowledge that We are not obligated to use Your Contribution as part of +the Material and may decide to include any Contribution We consider appropriate. + +2.6 Reservation of Rights +~~~~~~~~~~~~~~~~~~~~~~~~~ +Any rights not expressly assigned or licensed under this section are expressly +reserved by You. + +3. Agreement +------------ +You confirm that: + +a. You have the legal authority to enter into this Agreement. + +b. You or Your Affiliates own the Copyright and patent claims covering the + Contribution which are required to grant the rights under Section 2. + +c. The grant of rights under Section 2 does not violate any grant of rights + which You or Your Affiliates have made to third parties. + + +4. Disclaimer +------------- +EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, THE CONTRIBUTION IS PROVIDED +"AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, +WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US +AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, +SUCH WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW. + +5. Consequential Damage Waiver +------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR US +BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, +INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT +OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT +OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. + +6. Miscellaneous +---------------- +6.1 Juristiction +~~~~~~~~~~~~~~~~ +This Agreement will be governed by and construed in accordance with the laws of +Puerto Rico excluding its conflicts of law provisions. Under certain circumstances, +the governing law in this section might be superseded by the United Nations +Convention on Contracts for the International Sale of Goods ("UN Convention") +and the parties intend to avoid the application of the UN Convention to this +Agreement and, thus, exclude the application of the UN Convention in its +entirety to this Agreement. + +6.2 Acceptance +~~~~~~~~~~~~~~ +This Agreement sets out the entire agreement between You and Us for Your +Contributions to Us and overrides all other agreements or understandings. + +6.3 Third parties +~~~~~~~~~~~~~~~~~ +If You or We assign the rights or obligations received through this Agreement +to a third party, as a condition of the assignment, that third party must +agree in writing to abide by all the rights and obligations in the Agreement. + +6.4 Unmet responsabilities +~~~~~~~~~~~~~~~~~~~~~~~~~~ +The failure of either party to require performance by the other party of any +provision of this Agreement in one situation shall not affect the right of a +party to require such performance at any time in the future. A waiver of +performance under a provision in one situation shall not be considered a +waiver of the performance of the provision in the future or a waiver of the +provision in its entirety. + +6.5 Continuation +~~~~~~~~~~~~~~~~ +If any provision of this Agreement is found void and unenforceable, such +provision will be replaced to the extent possible with a provision that comes +closest to the meaning of the original provision and which is enforceable. +The terms and conditions set forth in this Agreement shall apply +notwithstanding any failure of essential purpose of this Agreement or any +limited remedy to the maximum extent possible under law. + + +:: + + + Name: _________________________________________________ + + + Email: ________________________________________________ + + + Address: ______________________________________________ + + + Address (cont): _______________________________________ + + + Country: ______________________________________________ + + + Phone number: _________________________________________ + + + Fax number: ___________________________________________ + + + + _______________________________________________________ + Signature + + + +Mayan EDMS Entity CAA Version 1.0 April 8, 2018 diff --git a/docs/topics/caa_individual.rst b/docs/topics/caa_individual.rst new file mode 100644 index 0000000000..793a39781a --- /dev/null +++ b/docs/topics/caa_individual.rst @@ -0,0 +1,211 @@ +====================================================== +Mayan EDMS Individual Contributor Assignment Agreement +====================================================== + +Thank you for your interest in contributing to Mayan EDMS ("We" or "Us"). + +This contributor agreement ("Agreement") documents the rights granted by +contributors to Us. To make this document effective, please print it, sign it +(by copyright holder or authorized party) and send it to Us by email to +caa@mayan-edms.com. This is a legally binding document, so please read it +carefully before agreeing to it. The Agreement may cover more than one +software project managed by Us. + +1. Definitions +-------------- + +"You" means the individual who Submits a Contribution to Us. + +"Contribution" means any work of authorship that is Submitted by You to Us +in which You own or assert ownership of the Copyright. We cannot accept +contributions for which you do not own the Copyright or for which you don't +have the necesary legal power to transfer. + +"Copyright" means all rights protecting works of authorship owned or +controlled by You, including copyright, moral and neighboring rights, +as appropriate, for the full term of their existence including any extensions +by You. + +"Material" means the work of authorship which is made available by Us to third +parties. When this Agreement covers more than one software project, the Material +means the work of authorship to which the Contribution was Submitted. After +You Submit the Contribution, it may be included in the Material. + +"Submit" means any form of electronic, verbal, or written communication +sent to Us or our representatives, including but not limited to +electronic mailing lists, source code control systems, and issue tracking systems +that are managed by, or on behalf of, Us for the purpose of discussing and +improving the Material, but excluding communication that is conspicuously marked +or otherwise designated in writing by You as "Not a Contribution." + +"Submission Date" means the date on which You Submit a Contribution to Us. + +"Effective Date" means the date You execute this Agreement or the date You first +Submit a Contribution to Us, whichever is earlier. + +2. Grant of Rights +------------------ + +2.1 Copyright Assignment +~~~~~~~~~~~~~~~~~~~~~~~~ +a. At the time the Contribution is Submitted, You assign to Us all right, + title, and interest worldwide in all Copyright covering the Contribution; + provided that this transfer is conditioned upon compliance with Section 2.3. + +b. To the extent that any of the rights in Section 2.1(a) cannot be assigned + by You to Us, You grant to Us a perpetual, worldwide, exclusive, royalty-free, + transferable, irrevocable license under such non-assigned rights, with rights + to sublicense through multiple tiers of sublicensees, to practice such + non-assigned rights, including, but not limited to, the right to reproduce, + modify, display, perform and distribute the Contribution; provided that + this license is conditioned upon compliance with Section 2.3. + +c. To the extent that any of the rights in Section 2.1(a) can neither be + assigned nor licensed by You to Us, You irrevocably waive and agree never to + assert such rights against Us, any of our successors in interest, or any of + our licensees, either direct or indirect; provided that this agreement not + to assert is conditioned upon compliance with Section 2.3. + +d. Upon such transfer of rights to Us, the Contribution will be licenses under + the terms of the Material. + +2.2 Patent License +~~~~~~~~~~~~~~~~~~ +For patent claims including, without limitation, method, process, and apparatus +claims which You own, control or have the right to grant, now or in the future, +You grant to Us a perpetual, worldwide, non-exclusive, transferable, royalty-free, +irrevocable patent license, with the right to sublicense these rights to multiple +tiers of sublicensees, to make, have made, use, sell, offer for sale, import and +otherwise transfer the Contribution and the Contribution in combination with +the Material (and portions of such combination). This license is granted only +to the extent that the exercise of the licensed rights infringes such patent claims; +and provided that this license is conditioned upon compliance with Section 2.3. + +2.3 Outbound License +~~~~~~~~~~~~~~~~~~~~ +As a condition on the grant of rights in Sections 2.1 and 2.2, We agree to +license the Contribution only under the terms of the license or licenses which +We are using on the Submission Date for the Material (including any rights to +adopt any future version of a license if permitted). + +2.4 Moral Rights +~~~~~~~~~~~~~~~~ +If moral rights apply to the Contribution, to the maximum extent permitted by law, +You waive and agree not to assert such moral rights against Us or our successors +in interest, or any of our licensees, either direct or indirect. + +2.5 Our Rights +~~~~~~~~~~~~~~ +You acknowledge that We are not obligated to use Your Contribution as part of +the Material and may decide to include any Contribution We consider appropriate. + +2.6 Reservation of Rights +~~~~~~~~~~~~~~~~~~~~~~~~~ +Any rights not expressly assigned or licensed under this section are expressly +reserved by You. + +3. Agreement +------------ +You confirm that: + +a. You have the legal authority to enter into this Agreement. + +b. You own the Copyright and patent claims covering the Contribution which are + required to grant the rights under Section 2. + +c. The grant of rights under Section 2 does not violate any grant of rights + which You have made to third parties, including Your employer. If You are an + employee, You have had Your employer approve this Agreement or sign the Entity + version of this document. If You are less than eighteen years old, please have + Your parents or guardian sign the Agreement. + +4. Disclaimer +------------- +EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, THE CONTRIBUTION IS PROVIDED +"AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT +LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US +TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH +WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW. + +5. Consequential Damage Waiver +------------------------------ +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR US +BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, +INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT +OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT +OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. + +6. Miscellaneous +---------------- +6.1 Juristiction +~~~~~~~~~~~~~~~~ +This Agreement will be governed by and construed in accordance with the laws of +Puerto Rico excluding its conflicts of law provisions. Under certain circumstances, +the governing law in this section might be superseded by the United Nations +Convention on Contracts for the International Sale of Goods ("UN Convention") +and the parties intend to avoid the application of the UN Convention to this +Agreement and, thus, exclude the application of the UN Convention in its +entirety to this Agreement. + +6.2 Acceptance +~~~~~~~~~~~~~~ +This Agreement sets out the entire agreement between You and Us for Your +Contributions to Us and overrides all other agreements or understandings. + +6.3 Third parties +~~~~~~~~~~~~~~~~~ +If You or We assign the rights or obligations received through this Agreement +to a third party, as a condition of the assignment, that third party must +agree in writing to abide by all the rights and obligations in the Agreement. + +6.4 Unmet responsabilities +~~~~~~~~~~~~~~~~~~~~~~~~~~ +The failure of either party to require performance by the other party of any +provision of this Agreement in one situation shall not affect the right of a +party to require such performance at any time in the future. A waiver of +performance under a provision in one situation shall not be considered a +waiver of the performance of the provision in the future or a waiver of the +provision in its entirety. + +6.5 Continuation +~~~~~~~~~~~~~~~~ +If any provision of this Agreement is found void and unenforceable, +such provision will be replaced to the extent possible with a provision that +comes closest to the meaning of the original provision and which is enforceable. +The terms and conditions set forth in this Agreement shall apply notwithstanding +any failure of essential purpose of this Agreement or any limited remedy to +the maximum extent possible under law. + + +:: + + + Name: _________________________________________________ + + + Email: ________________________________________________ + + + Address: ______________________________________________ + + + Address (cont): _______________________________________ + + + Country: ______________________________________________ + + + Phone number: _________________________________________ + + + Fax number: ___________________________________________ + + + + _______________________________________________________ + Signature + + + +Mayan EDMS Individual CAA Version 1.0 April 8, 2018 diff --git a/docs/topics/code_statistics.rst b/docs/topics/code_statistics.rst new file mode 100644 index 0000000000..dfe990721f --- /dev/null +++ b/docs/topics/code_statistics.rst @@ -0,0 +1,662 @@ +Code statistics +--------------- + +As of Wed Mar 14 19:31:49 2018 (commit f3ba6ee2cca99acbbb2403d69cc3f922b0f2b0a2 + +App name: acls + + Views + module: mayan/apps/acls/views.py + class based views: 4 + function based views: 0 + + API Views + module: mayan/apps/acls/api_views.py + class based views: 4 + function based views: 0 + + Tests + module: mayan/apps/acls/tests/test_models.py + tests: 8 + module: mayan/apps/acls/tests/test_actions.py + tests: 2 + module: mayan/apps/acls/tests/test_links.py + tests: 4 + module: mayan/apps/acls/tests/test_api.py + tests: 9 + module: mayan/apps/acls/tests/test_views.py + tests: 8 + + +App name: appearance + + Views + No views + + API Views + No API views + + Tests + No tests + + +App name: authentication + + Views + module: mayan/apps/authentication/views.py + class based views: 0 + function based views: 7 + + API Views + No API views + + Tests + module: mayan/apps/authentication/tests/test_views.py + tests: 10 + + +App name: cabinets + + Views + module: mayan/apps/cabinets/views.py + class based views: 9 + function based views: 0 + + API Views + module: mayan/apps/cabinets/api_views.py + class based views: 5 + function based views: 0 + + Tests + module: mayan/apps/cabinets/tests/test_models.py + tests: 5 + module: mayan/apps/cabinets/tests/test_events.py + tests: 2 + module: mayan/apps/cabinets/tests/test_api.py + tests: 13 + module: mayan/apps/cabinets/tests/test_views.py + tests: 15 + + +App name: checkouts + + Views + module: mayan/apps/checkouts/views.py + class based views: 4 + function based views: 0 + + API Views + module: mayan/apps/checkouts/api_views.py + class based views: 2 + function based views: 0 + + Tests + module: mayan/apps/checkouts/tests/test_models.py + tests: 10 + module: mayan/apps/checkouts/tests/test_api.py + tests: 10 + module: mayan/apps/checkouts/tests/test_views.py + tests: 7 + + +App name: common + + Views + module: mayan/apps/common/views.py + class based views: 17 + function based views: 1 + + API Views + module: mayan/apps/common/api_views.py + class based views: 1 + function based views: 0 + + Tests + module: mayan/apps/common/tests/test_api.py + tests: 1 + module: mayan/apps/common/tests/test_commands.py + tests: 1 + module: mayan/apps/common/tests/test_views.py + tests: 3 + + +App name: converter + + Views + module: mayan/apps/converter/views.py + class based views: 4 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/converter/tests/test_classes.py + tests: 6 + module: mayan/apps/converter/tests/test_views.py + tests: 6 + + +App name: django_gpg + + Views + module: mayan/apps/django_gpg/views.py + class based views: 9 + function based views: 0 + + API Views + module: mayan/apps/django_gpg/api_views.py + class based views: 2 + function based views: 0 + + Tests + module: mayan/apps/django_gpg/tests/test_models.py + tests: 15 + module: mayan/apps/django_gpg/tests/test_api.py + tests: 6 + module: mayan/apps/django_gpg/tests/test_views.py + tests: 4 + + +App name: document_comments + + Views + module: mayan/apps/document_comments/views.py + class based views: 3 + function based views: 0 + + API Views + module: mayan/apps/document_comments/api_views.py + class based views: 2 + function based views: 0 + + Tests + module: mayan/apps/document_comments/tests/test_api.py + tests: 8 + + +App name: document_indexing + + Views + module: mayan/apps/document_indexing/views.py + class based views: 13 + function based views: 0 + + API Views + module: mayan/apps/document_indexing/api_views.py + class based views: 6 + function based views: 0 + + Tests + module: mayan/apps/document_indexing/tests/test_models.py + tests: 4 + module: mayan/apps/document_indexing/tests/test_views.py + tests: 8 + + +App name: document_parsing + + Views + module: mayan/apps/document_parsing/views.py + class based views: 6 + function based views: 0 + + API Views + module: mayan/apps/document_parsing/api_views.py + class based views: 1 + function based views: 0 + + Tests + module: mayan/apps/document_parsing/tests/test_parsers.py + tests: 1 + module: mayan/apps/document_parsing/tests/test_events.py + tests: 2 + module: mayan/apps/document_parsing/tests/test_api.py + tests: 2 + module: mayan/apps/document_parsing/tests/test_views.py + tests: 4 + + +App name: document_signatures + + Views + module: mayan/apps/document_signatures/views.py + class based views: 8 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/document_signatures/tests/test_models.py + tests: 13 + module: mayan/apps/document_signatures/tests/test_links.py + tests: 4 + module: mayan/apps/document_signatures/tests/test_views.py + tests: 12 + + +App name: document_states + + Views + module: mayan/apps/document_states/views.py + class based views: 29 + function based views: 0 + + API Views + module: mayan/apps/document_states/api_views.py + class based views: 12 + function based views: 0 + + Tests + module: mayan/apps/document_states/tests/test_models.py + tests: 3 + module: mayan/apps/document_states/tests/test_actions.py + tests: 0 + module: mayan/apps/document_states/tests/test_api.py + tests: 66 + module: mayan/apps/document_states/tests/test_views.py + tests: 33 + + +App name: documents + + Views + No views + + API Views + module: mayan/apps/documents/api_views.py + class based views: 16 + function based views: 0 + + Tests + module: mayan/apps/documents/tests/test_document_type_views.py + tests: 12 + module: mayan/apps/documents/tests/test_duplicated_document_views.py + tests: 4 + module: mayan/apps/documents/tests/test_document_views.py + tests: 31 + module: mayan/apps/documents/tests/test_utils.py + tests: 1 + module: mayan/apps/documents/tests/test_models.py + tests: 12 + module: mayan/apps/documents/tests/test_events.py + tests: 4 + module: mayan/apps/documents/tests/test_widgets.py + tests: 1 + module: mayan/apps/documents/tests/test_links.py + tests: 6 + module: mayan/apps/documents/tests/test_search.py + tests: 4 + module: mayan/apps/documents/tests/test_api.py + tests: 39 + module: mayan/apps/documents/tests/test_deleted_document_views.py + tests: 8 + module: mayan/apps/documents/tests/test_document_version_views.py + tests: 4 + module: mayan/apps/documents/tests/test_document_page_views.py + tests: 2 + + +App name: dynamic_search + + Views + module: mayan/apps/dynamic_search/views.py + class based views: 4 + function based views: 0 + + API Views + module: mayan/apps/dynamic_search/api_views.py + class based views: 3 + function based views: 0 + + Tests + module: mayan/apps/dynamic_search/tests/test_models.py + tests: 4 + module: mayan/apps/dynamic_search/tests/test_api.py + tests: 3 + module: mayan/apps/dynamic_search/tests/test_views.py + tests: 1 + + +App name: events + + Views + module: mayan/apps/events/views.py + class based views: 9 + function based views: 0 + + API Views + module: mayan/apps/events/api_views.py + class based views: 7 + function based views: 0 + + Tests + module: mayan/apps/events/tests/test_api.py + tests: 1 + module: mayan/apps/events/tests/test_views.py + tests: 2 + + +App name: linking + + Views + module: mayan/apps/linking/views.py + class based views: 11 + function based views: 0 + + API Views + module: mayan/apps/linking/api_views.py + class based views: 7 + function based views: 0 + + Tests + module: mayan/apps/linking/tests/test_models.py + tests: 1 + module: mayan/apps/linking/tests/test_api.py + tests: 34 + module: mayan/apps/linking/tests/test_views.py + tests: 8 + + +App name: lock_manager + + Views + No views + + API Views + No API views + + Tests + module: mayan/apps/lock_manager/tests/test_backends.py + tests: 6 + + +App name: mailer + + Views + module: mayan/apps/mailer/views.py + class based views: 10 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/mailer/tests/test_models.py + tests: 5 + module: mayan/apps/mailer/tests/test_views.py + tests: 12 + + +App name: mayan_statistics + + Views + module: mayan/apps/mayan_statistics/views.py + class based views: 4 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/mayan_statistics/tests/test_views.py + tests: 4 + + +App name: metadata + + Views + module: mayan/apps/metadata/views.py + class based views: 9 + function based views: 0 + + API Views + module: mayan/apps/metadata/api_views.py + class based views: 6 + function based views: 0 + + Tests + module: mayan/apps/metadata/tests/test_models.py + tests: 14 + module: mayan/apps/metadata/tests/test_wizard_steps.py + tests: 1 + module: mayan/apps/metadata/tests/test_api.py + tests: 35 + module: mayan/apps/metadata/tests/test_views.py + tests: 8 + + +App name: mimetype + + Views + No views + + API Views + No API views + + Tests + No tests + + +App name: mirroring + + Views + No views + + API Views + No API views + + Tests + No tests + + +App name: motd + + Views + module: mayan/apps/motd/views.py + class based views: 4 + function based views: 0 + + API Views + module: mayan/apps/motd/api_views.py + class based views: 2 + function based views: 0 + + Tests + module: mayan/apps/motd/tests/test_models.py + tests: 4 + module: mayan/apps/motd/tests/test_api.py + tests: 10 + + +App name: navigation + + Views + No views + + API Views + No API views + + Tests + module: mayan/apps/navigation/tests/test_classes.py + tests: 9 + + +App name: ocr + + Views + module: mayan/apps/ocr/views.py + class based views: 8 + function based views: 0 + + API Views + module: mayan/apps/ocr/api_views.py + class based views: 3 + function based views: 0 + + Tests + module: mayan/apps/ocr/tests/test_models.py + tests: 2 + module: mayan/apps/ocr/tests/test_events.py + tests: 2 + module: mayan/apps/ocr/tests/test_api.py + tests: 6 + module: mayan/apps/ocr/tests/test_views.py + tests: 4 + + +App name: permissions + + Views + module: mayan/apps/permissions/views.py + class based views: 7 + function based views: 0 + + API Views + module: mayan/apps/permissions/api_views.py + class based views: 3 + function based views: 0 + + Tests + module: mayan/apps/permissions/tests/test_models.py + tests: 2 + module: mayan/apps/permissions/tests/test_api.py + tests: 17 + module: mayan/apps/permissions/tests/test_views.py + tests: 3 + + +App name: rest_api + + Views + No views + + API Views + module: mayan/apps/rest_api/api_views.py + class based views: 1 + function based views: 0 + + Tests + + +App name: smart_settings + + Views + module: mayan/apps/smart_settings/views.py + class based views: 2 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/smart_settings/tests/test_classes.py + tests: 1 + module: mayan/apps/smart_settings/tests/test_view_permissions.py + tests: 2 + + +App name: sources + + Views + module: mayan/apps/sources/views.py + class based views: 10 + function based views: 0 + + API Views + module: mayan/apps/sources/api_views.py + class based views: 4 + function based views: 0 + + Tests + module: mayan/apps/sources/tests/test_models.py + tests: 3 + module: mayan/apps/sources/tests/test_classes.py + tests: 1 + module: mayan/apps/sources/tests/test_views.py + tests: 15 + + +App name: storage + + Views + No views + + API Views + No API views + + Tests + No tests + + +App name: tags + + Views + module: mayan/apps/tags/views.py + class based views: 8 + function based views: 0 + + API Views + module: mayan/apps/tags/api_views.py + class based views: 5 + function based views: 0 + + Tests + module: mayan/apps/tags/tests/test_models.py + tests: 1 + module: mayan/apps/tags/tests/test_actions.py + tests: 2 + module: mayan/apps/tags/tests/test_wizard_steps.py + tests: 1 + module: mayan/apps/tags/tests/test_api.py + tests: 28 + module: mayan/apps/tags/tests/test_views.py + tests: 18 + + +App name: task_manager + + Views + module: mayan/apps/task_manager/views.py + class based views: 4 + function based views: 0 + + API Views + No API views + + Tests + module: mayan/apps/task_manager/tests/test_views.py + tests: 8 + + +App name: user_management + + Views + module: mayan/apps/user_management/views.py + class based views: 11 + function based views: 0 + + API Views + module: mayan/apps/user_management/api_views.py + class based views: 6 + function based views: 0 + + Tests + module: mayan/apps/user_management/tests/test_api.py + tests: 31 + module: mayan/apps/user_management/tests/test_views.py + tests: 10 + +Totals: + Tests: 753 + Function based API views: 0 + Function based views: 8 + Apps: 34 + Class based API views: 98 + Class based views: 207 + +These are the defined views and tests defined. Actual executable views or +tests could be higher if subclassed. + +Actual test executed: 757 as lock manager app subclasses its 6 tests once diff --git a/docs/topics/contributors.rst b/docs/topics/contributors.rst deleted file mode 100644 index 59989fe853..0000000000 --- a/docs/topics/contributors.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. _contributors: - -============ -Contributors -============ - - -How to contribute? ------------------- - -You can help further the development of Mayan EDMS by testing, reporting -bugs, submitting documentation or code patches. - -Lead developer --------------- -* Roberto Rosario (roberto.rosario@mayan-edms.com) - -Contributors (in alphabetical order) ------------------------------------- -* Aziz M. Bookwala (https://github.com/azizmb) -* Bertrand Bordage (https://github.com/BertrandBordage) -* Brian E (brian@realize.org) -* David Herring (https://github.com/abadger1406) -* Emlyn Clay (https://github.com/EmlynC) -* Jens Kadenbach (https://github.com/audax) -* Kolmar Kafran -* Helga Carrero -* IHLeanne (https://github.com/IHLeanne) -* Iliya Georgiev (ikgeorgiev@gmail.com) -* Lars Kruse (devel@sumpfralle.de) -* Mathias Behrle -* Meurig Freeman (https://github.com/meurig) -* Nate Aune (nate@appsembler.com) -* Paul Whipp [https://github.com/pwhipp] [http://paulwhippconsulting.com] -* Rafael Esparra -* Sergey Glita (s.v.glita@gmail.com) -* Simone Federici [https://twitter.com/aldaranalton] [https://github.com/simone] -* Webfaction (https://www.webfaction.com) diff --git a/docs/topics/deploying.rst b/docs/topics/deploying.rst index 88af0bcd2f..c6a8901420 100644 --- a/docs/topics/deploying.rst +++ b/docs/topics/deploying.rst @@ -1,3 +1,5 @@ +.. _deploying: + =================== Advanced deployment =================== @@ -19,258 +21,123 @@ Ubuntu If using a Debian_ or Ubuntu_ based Linux distribution, get the executable requirements using:: - apt-get install graphviz nginx supervisor redis-server postgresql \ - libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice \ - libtiff-dev gcc ghostscript gnupg python-dev python-virtualenv \ - tesseract-ocr poppler-utils -y + sudo apt-get install g++ gcc ghostscript gnupg1 graphviz libjpeg-dev libmagic1 \ + libpq-dev libpng-dev libreoffice libtiff-dev poppler-utils postgresql \ + python-dev python-pip python-virtualenv redis-server sane-utils supervisor \ + tesseract-ocr zlib1g-dev -y -If using Ubuntu 16.10 also install GPG version 1 (as GPG version 2 is the new default for this distribution and not yet supported by Mayan EDMS) :: +Create an user account for the installation:: - apt-get install gnupg1 -y + sudo adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" +Create the parent directory where the project will be deployed:: -Mac OSX -------- - -Mayan EDMS is dependent on a number of binary packages and the recommended -way is to use a package manager such as `MacPorts `_ -or `Homebrew `_. - - -Use MacPorts to install binary dependencies -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -With MacPorts installed run the command: - -.. code-block:: bash - - sudo port install python-dev gcc tesseract-ocr unpaper \ - python-virtualenv ghostscript libjpeg-dev libpng-dev \ - poppler-utils - -Set the Binary paths -******************** - -Mayan EDMS by default will look in /usr/bin/ for the binary files it needs -so either you can symlink the binaries installed via MacPorts in /opt/local/bin/ -to /usr/bin/ with ... - -.. code-block:: bash - - sudo ln -s /opt/local/bin/tesseract /usr/bin/tesseract - -Alternatively, set the paths in the ``settings/locals.py`` - -.. code-block:: python - - LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice' - -Or Use Homebrew -~~~~~~~~~~~~~~~ - -With Homebrew installed run the command: - -.. code-block:: bash - - brew install python gcc tesseract unpaper poppler libpng postgresql - -Set the Binary paths -******************** - -Mayan EDMS by default will look in /usr/bin/ for the binary files it needs. -You can symlink the binaries installed via brew in /usr/local/bin/ -to /usr/bin/ with: - -.. code-block:: bash - - sudo ln -s /usr/local/bin/tesseract /usr/bin/tesseract && \ - sudo ln -s /usr/local/bin/unpaper /usr/bin/unpaper && \ - sudo ln -s /usr/local/bin/pdftotext /usr/bin/pdftotext && \ - sudo ln -s /usr/local/bin/gs /usr/bin/gs - -Alternatively, set the paths in the ``settings/locals.py`` - -.. code-block:: python - - LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice' - - -Common steps ------------- -Switch to superuser:: - - sudo -i - -Change to the directory where the project will be deployed:: - - cd /usr/share + sudo mkdir /opt Create the Python virtual environment for the installation:: - virtualenv mayan-edms + sudo virtualenv /opt/mayan-edms -Activate the virtualenv:: +Make the mayan user the owner of the installation directory:: - source mayan-edms/bin/activate + sudo chown mayan:mayan /opt/mayan-edms -R Install Mayan EDMS from PyPI:: - pip install mayan-edms + sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir mayan-edms -Install the Python client for PostgreSQL, Redis, and uWSGI:: +Install the Python client for PostgreSQL and Redis:: - pip install psycopg2 redis uwsgi + sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir psycopg2==2.7.3.2 redis==2.10.6 Create the database for the installation:: - sudo -u postgres createuser -P mayan (provide password) + sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';" sudo -u postgres createdb -O mayan mayan -Create the directory for the log files:: +Initialize the project:: - mkdir /var/log/mayan - -Change the current directory to be the one of the installation:: - - cd mayan-edms - -Make a convenience symbolic link:: - - ln -s lib/python2.7/site-packages/mayan . - -Create an initial settings file:: - - mayan-edms.py createsettings - -Append the following to the ``mayan/settings/local.py`` file, paying attention to replace the ``PASSWORD`` value:: - - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'mayan', - 'USER': 'mayan', - 'PASSWORD': '', - 'HOST': 'localhost', - 'PORT': '5432', - } - } - - BROKER_URL = 'redis://127.0.0.1:6379/0' - CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' - -If using Ubuntu 16.10, also add this line to the ``mayan/settings/local.py`` file:: - - SIGNATURES_GPG_PATH = '/usr/bin/gpg1' - -Migrate the database or initialize the project:: - - mayan-edms.py initialsetup - -Disable the default NGINX site:: - - rm /etc/nginx/sites-enabled/default - -Create a ``uwsgi.ini`` file with the following contents:: - - [uwsgi] - chdir = /usr/share/mayan-edms/lib/python2.7/site-packages/mayan - chmod-socket = 664 - chown-socket = www-data:www-data - env = DJANGO_SETTINGS_MODULE=mayan.settings.production - gid = www-data - logto = /var/log/uwsgi/%n.log - pythonpath = /usr/share/mayan-edms/lib/python2.7/site-packages - master = True - max-requests = 5000 - socket = /usr/share/mayan-edms/uwsgi.sock - uid = www-data - vacuum = True - wsgi-file = /usr/share/mayan-edms/lib/python2.7/site-packages/mayan/wsgi.py - -Create the directory for the uWSGI log files:: - - mkdir /var/log/uwsgi - -Create the NGINX site file for Mayan EDMS, ``/etc/nginx/sites-available/mayan``:: - - server { - listen 80; - server_name localhost; - - location / { - include uwsgi_params; - uwsgi_pass unix:/usr/share/mayan-edms/uwsgi.sock; - - client_max_body_size 30M; # Increse if your plan to upload bigger documents - proxy_read_timeout 30s; # Increase if your document uploads take more than 30 seconds - } - - location /static { - alias /usr/share/mayan-edms/mayan/media/static; - expires 1h; - } - - location /favicon.ico { - alias /usr/share/mayan-edms/mayan/media/static/appearance/images/favicon.ico; - expires 1h; - } - } - -Enable the NGINX site for Mayan EDMS:: - - ln -s /etc/nginx/sites-available/mayan /etc/nginx/sites-enabled/ - -Create the supervisor file for the uWSGI process, ``/etc/supervisor/conf.d/mayan-uwsgi.conf``:: - - [program:mayan-uwsgi] - command = /usr/share/mayan-edms/bin/uwsgi --ini /usr/share/mayan-edms/uwsgi.ini - user = root - autostart = true - autorestart = true - redirect_stderr = true - -Create the supervisor file for the Celery worker, ``/etc/supervisor/conf.d/mayan-celery.conf``:: - - [program:mayan-worker] - command = /usr/share/mayan-edms/bin/python /usr/share/mayan-edms/bin/mayan-edms.py celery --settings=mayan.settings.production worker -Ofair -l ERROR - directory = /usr/share/mayan-edms - user = www-data - stdout_logfile = /var/log/mayan/worker-stdout.log - stderr_logfile = /var/log/mayan/worker-stderr.log - autostart = true - autorestart = true - startsecs = 10 - stopwaitsecs = 10 - killasgroup = true - priority = 998 - - [program:mayan-beat] - command = /usr/share/mayan-edms/bin/python /usr/share/mayan-edms/bin/mayan-edms.py celery --settings=mayan.settings.production beat -l ERROR - directory = /usr/share/mayan-edms - user = www-data - numprocs = 1 - stdout_logfile = /var/log/mayan/beat-stdout.log - stderr_logfile = /var/log/mayan/beat-stderr.log - autostart = true - autorestart = true - startsecs = 10 - stopwaitsecs = 1 - killasgroup = true - priority = 998 + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \ + /opt/mayan-edms/bin/mayan-edms.py initialsetup Collect the static files:: - mayan-edms.py collectstatic --noinput + sudo -u mayan MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \ + /opt/mayan-edms/bin/mayan-edms.py collectstatic --noinput -Make the installation directory readable and writable by the webserver user:: +Create the supervisor file at ``/etc/supervisor/conf.d/mayan.conf``:: - chown www-data:www-data /usr/share/mayan-edms -R + [supervisord] + environment= + MAYAN_ALLOWED_HOSTS="*", # Allow access to other network hosts other than localhost + MAYAN_CELERY_RESULT_BACKEND="redis://127.0.0.1:6379/0", + MAYAN_BROKER_URL="redis://127.0.0.1:6379/0", + PYTHONPATH=/opt/mayan-edms/lib/python2.7/site-packages:/opt/mayan-edms/data, + MAYAN_MEDIA_ROOT=/opt/mayan-edms/media, + MAYAN_DATABASE_ENGINE=django.db.backends.postgresql, + MAYAN_DATABASE_HOST=127.0.0.1, + MAYAN_DATABASE_NAME=mayan, + MAYAN_DATABASE_PASSWORD=mayanuserpass, + MAYAN_DATABASE_USER=mayan, + MAYAN_DATABASE_CONN_MAX_AGE=60, + DJANGO_SETTINGS_MODULE=mayan.settings.production + + [program:mayan-gunicorn] + autorestart = true + autostart = true + command = /opt/mayan-edms/bin/gunicorn -w 2 mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 + user = mayan + + [program:mayan-worker-fast] + autorestart = true + autostart = true + command = nice -n 1 /opt/mayan-edms/bin/mayan-edms.py celery worker -Ofair -l ERROR -Q converter -n mayan-worker-fast.%%h --concurrency=1 + killasgroup = true + numprocs = 1 + priority = 998 + startsecs = 10 + stopwaitsecs = 1 + user = mayan + + [program:mayan-worker-medium] + autorestart = true + autostart = true + command = nice -n 18 /opt/mayan-edms/bin/mayan-edms.py celery worker -Ofair -l ERROR -Q checkouts_periodic,documents_periodic,indexing,metadata,sources,sources_periodic,uploads,documents -n mayan-worker-medium.%%h --concurrency=1 + killasgroup = true + numprocs = 1 + priority = 998 + startsecs = 10 + stopwaitsecs = 1 + user = mayan + + [program:mayan-worker-slow] + autorestart = true + autostart = true + command = nice -n 19 /opt/mayan-edms/bin/mayan-edms.py celery worker -Ofair -l ERROR -Q mailing,tools,statistics,parsing,ocr -n mayan-worker-slow.%%h --concurrency=1 + killasgroup = true + numprocs = 1 + priority = 998 + startsecs = 10 + stopwaitsecs = 1 + user = mayan + + [program:mayan-celery-beat] + autorestart = true + autostart = true + command = nice -n 1 /opt/mayan-edms/bin/mayan-edms.py celery beat --pidfile= -l ERROR + killasgroup = true + numprocs = 1 + priority = 998 + startsecs = 10 + stopwaitsecs = 1 + user = mayan Enable and restart the services [1_]:: systemctl enable supervisor systemctl restart supervisor - systemctl restart nginx [1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740 diff --git a/docs/topics/development.rst b/docs/topics/development.rst index 9bd30e465e..4dfeee6f85 100644 --- a/docs/topics/development.rst +++ b/docs/topics/development.rst @@ -54,6 +54,12 @@ Whenever possible, but don't obsess over things like line length: $ flake8 --ignore=E501,E128,E122 |less +To perform automatic PEP8 checks, install flake8's git hook using: + +.. code-block:: bash + + $ flake8 --install-hook git + Imports ~~~~~~~ @@ -245,55 +251,9 @@ Steps to deploy a development version $ ./manage.py runserver -Setting up a development version using Vagrant ----------------------------------------------- -Make sure you have Vagrant and a provider properly installed as per -https://docs.vagrantup.com/v2/installation/index.html - -Start and provision a machine using: - -.. code-block:: bash - - $ vagrant up development - -To launch a standalone development server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: bash - - $ vagrant ssh - $ vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/ - $ vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate - $ vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000 - -To launch a development server with a celery worker and Redis as broker -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: bash - - $ vagrant ssh - $ vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/ - $ vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate - $ vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000 --settings=mayan.settings.celery_redis - -Then on a separate console launch a celery worker from the same provisioned Vagrant machine: - -.. code-block:: bash - - $ vagrant ssh - $ vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/ - $ vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate - $ vagrant@vagrant-ubuntu-trusty-32:~$ DJANGO_SETTINGS_MODULE='mayan.settings.celery_redis' celery -A mayan worker -l DEBUG -Q checkouts,mailing,uploads,converter,ocr,tools,indexing,metadata -Ofair -B - - Contributing changes -------------------- -Once your have created and committed some new code or feature, submit a Pull -Request. Be sure to merge with the development branch before doing a Pull -Request so that patches apply as cleanly as possible. If there are no conflicts, -Merge Requests can be merged directly from the website UI otherwise a manual -command line merge has to be done and your patches might take longer to get -merged. +Follow the latest contributing guidelines outlined here: https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md Debugging @@ -366,7 +326,7 @@ first need to install the documentation editing dependencies with:: Then, to build an HTML version of the documentation, run the following command from the **docs** directory:: - $ make docs_serve + $ make docs-serve The generated documentation can be viewed by browsing to http://127.0.0.1:8000 or by browsing to the ``docs/_build/html`` directory. @@ -439,40 +399,52 @@ Release checklist 1. Check for missing migrations:: - $ ./manage.py makemigrations + make check-missing-migrations 2. Synchronize translations:: - $ make translations_pull + make translations-pull 3. Compile translations:: - $ make translations_compile + make translations-compile 4. Write release notes. 5. Update changelog. -6. Update requirements version in `setup.py` -7. Bump version in `mayan/__init__.py` -8. Build source package and test:: +6. Scan the code with flake8 for simple style warnings. +7. Check README.rst format with:: - $ make test_sdist_via_docker_ubuntu + python setup.py check -r -s -9. Build wheel package and test:: +or with:: - $ make test_whell_via_docker_ubuntu + make check-readme -10. Tag version:: +8. Bump version in `mayan/__init__.py` and in `docker/version`. +9. Update requirements version in `setup.py` using:: - $ git tag -a vX.Y.Z -m "Version X.Y.Z" + make generate-setup -11. Push tag upstream:: +10. Build source package and test:: - $ git push --tags + make test-sdist-via-docker-ubuntu -12. Build and upload a test release:: +11. Build wheel package and test:: - $ make release_test_via_docker_ubuntu + make test-wheel-via-docker-ubuntu -13. Build and upload a final release:: +12. Tag version:: - $ make release_via_docker_ubuntu + git tag -a vX.Y.Z -m "Version X.Y.Z" + +13. Push tag upstream:: + + git push --tags + +14. Build and upload a test release:: + + make release-test-via-docker-ubuntu + +15. Build and upload a final release:: + + make release-via-docker-ubuntu diff --git a/docs/topics/docker.rst b/docs/topics/docker.rst new file mode 100644 index 0000000000..353f9b06c4 --- /dev/null +++ b/docs/topics/docker.rst @@ -0,0 +1,372 @@ +.. _docker: + + +============ +Docker image +============ + +How to use this image +===================== + +Start a Mayan EDMS instance +------------------------------ + +With Docker properly installed, proceed to download the Mayan EDMS image using the command:: + + docker pull mayanedms/mayanedms: + +Then download version 9.5 of the Docker PostgreSQL image:: + + docker pull postgres:9.5 + +Create and run a PostgreSQL container:: + + docker run -d \ + --name mayan-edms-postgres \ + --restart=always \ + -p 5432:5432 \ + -e POSTGRES_USER=mayan \ + -e POSTGRES_DB=mayan \ + -e POSTGRES_PASSWORD=mayanuserpass \ + -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \ + -d postgres:9.5 + +The PostgreSQL container will have one database named ``mayan``, with an user +named ``mayan`` too, with a password of ``mayanuserpass``. The container will +expose its internal 5432 port (PostgreSQL's default port) via the host's +5432 port. The data of this container will reside on the host's +``/docker-volumes/mayan-edms/postgres`` folder. + +Finally create and run a Mayan EDMS container. Change with the +latest version in numeric form (example: 2.7.3) or use the ``latest`` +identifier:: + + docker run -d \ + --name mayan-edms \ + --restart=always \ + -p 80:8000 \ + -e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ + -e MAYAN_DATABASE_HOST=172.17.0.1 \ + -e MAYAN_DATABASE_NAME=mayan \ + -e MAYAN_DATABASE_PASSWORD=mayanuserpass \ + -e MAYAN_DATABASE_USER=mayan \ + -e MAYAN_DATABASE_CONN_MAX_AGE=60 \ + -v /docker-volumes/mayan-edms/media:/var/lib/mayan \ + mayanedms/mayanedms: + +The Mayan EDMS container will connect to the PostgreSQL container via the +``172.17.0.1`` IP address (the Docker host's default IP address). It will +connect using the ``django.db.backends.postgresql`` database drivern and +connect to the ``mayan`` database using the ``mayan`` user with the password +``mayanuserpass``. The container will keep connections to the database +for up to 60 seconds in an attempt to reuse them increasing response time +and reducing memory usage. The files of the container will be store in the +host's ``/docker-volumes/mayan-edms/media`` folder. The container will +expose its web service running on port 8000 on the host's port 80. + +The container will be available by browsing to ``http://localhost`` or to +the IP address of the computer running the container. + +If another web server is running on port 80 use a different port in the +``-p`` option. For example: ``-p 81:8000``. + + +Stopping and starting the container +-------------------------------------- + +To stop the container use:: + + docker stop mayan-edms + + +To start the container again:: + + docker start mayan-edms + + +Environment Variables +--------------------- + +The Mayan EDMS image can be configure via environment variables. + +``MAYAN_DATABASE_ENGINE`` + +Defaults to ``None``. This environment variable configures the database +backend to use. If left unset, SQLite will be used. The database backends +supported by this Docker image are: + +- ``'django.db.backends.postgresql'`` +- ``'django.db.backends.mysql'`` +- ``'django.db.backends.sqlite3'`` + +When using the SQLite backend, the database file will be saved in the Docker +volume. The SQLite database as used by Mayan EDMS is meant only for development +or testing, never use it in production. + +``MAYAN_DATABASE_NAME`` + +Defaults to 'mayan'. This optional environment variable can be used to define +the database name that Mayan EDMS will connect to. For more information read +the pertinent Django documentation page: `Connecting to the database`_ + +.. _Connecting to the database: https://docs.djangoproject.com/en/1.10/ref/databases/#connecting-to-the-database + +``MAYAN_DATABASE_USER`` + +Defaults to 'mayan'. This optional environment variable is used to set the +username that will be used to connect to the database. For more information +read the pertinent Django documentation page: `Settings, USER`_ + +.. _Settings, USER: https://docs.djangoproject.com/en/1.10/ref/settings/#user + +``MAYAN_DATABASE_PASSWORD`` + +Defaults to ''. This optional environment variable is used to set the +password that will be used to connect to the database. For more information +read the pertinent Django documentation page: `Settings, PASSWORD`_ + +.. _Settings, PASSWORD: https://docs.djangoproject.com/en/1.10/ref/settings/#password + +``MAYAN_DATABASE_HOST`` + +Defaults to `None`. This optional environment variable is used to set the +hostname that will be used to connect to the database. This can be the +hostname of another container or an IP address. For more information read +the pertinent Django documentation page: `Settings, HOST`_ + +.. _Settings, HOST: https://docs.djangoproject.com/en/1.10/ref/settings/#host + +``MAYAN_DATABASE_PORT`` + +Defaults to `None`. This optional environment variable is used to set the +port number to use when connecting to the database. An empty string means +the default port. Not used with SQLite. For more information read the +pertinent Django documentation page: `Settings, PORT`_ + +.. _Settings, PORT: https://docs.djangoproject.com/en/1.11/ref/settings/#port + +``MAYAN_BROKER_URL`` + +This optional environment variable determines the broker that Celery will use +to relay task messages between the frontend code and the background workers. +For more information read the pertinent Celery Kombu documentation page: `Broker URL`_ + +.. _Broker URL: http://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls + +This Docker image supports using Redis and RabbitMQ as brokers. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment +variables are specified, the built-in Redis server inside the container will +be disabled. + +``MAYAN_CELERY_RESULT_BACKEND`` + +This optional environment variable determines the results backend that Celery +will use to relay result messages from the background workers to the frontend +code. For more information read the pertinent Celery Kombu documentation page: +`Task result backend settings`_ + +.. _Task result backend settings: http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend + +This Docker image supports using Redis and RabbitMQ as result backends. + +Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment +variables are specified, the built-in Redis server inside the container will +be disabled. + +``MAYAN_SETTINGS_MODULE`` + +Optional. Allows loading an alternate settings file. + + +``MAYAN_DATABASE_CONN_MAX_AGE`` + +Amount in seconds to keep a database connection alive. Allow reuse of database +connections. For more information read the pertinent Django documentation +page: `Settings, CONN_MAX_AGE`_ + +.. _Settings, CONN_MAX_AGE: https://docs.djangoproject.com/en/1.10/ref/settings/#conn-max-age + + +``MAYAN_SETTINGS_FILE`` + +Optional. Previously only the ``local.py`` file was the only settings file +available to allow users to make configuration changes to their installations. +Now with this environment variable, users are free to create multiple settings +files and tell the Mayan EDMS container which setting file to import. The +only requirement is that the setting file starts with a global import of +``mayan.settings.production``. In the form:: + + from mayan.settings.production import * + + +``MAYAN_GUNICORN_WORKERS`` + +Optional. This environment variable controls the number of frontend workers +that will be executed. If not specified the default is 2. For heavier loads, +user a higher number. A formula recommended for this setting is the number +of CPU cores + 1. + +Accessing outside data +====================== + +To use Mayan EDMS's staging folders or watch folders from Docker, the data +for these source must be made accessible to the container. This is done by +mounting the folders in the host computer to folders inside the container. +This is necessary because Docker containers do not have access to host data +on purpose. For example, to make a folder in the host accessible as a watch +folder, add the following to the Docker command line when starting the +container:: + + -v /opt/scanned_files:/srv/watch_folder + +The command line would look like this:: + + docker run ... -v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:latest + +Now create a watch folder in Mayan EDMS using the path ``/srv/watch_folder`` +and the documents from the host folder ``/opt/scanned_files`` will be +automatically available. Use the same procedure to mount host folders to be +used as staging folderes. In this example ``/srv/watch_folder`` was as the +container directory, but any path can be used as long as it is not an +already existing path or a path used by any other program. + + +Performing backups +================== + +To backup the existing data, stop the image and copy the content of the volume. +For the example:: + + docker run -d --name mayan-edms --restart=always -p 80:8000 \ + -v /docker-volumes/mayan:/var/lib/mayan \ + -v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:latest + +That would be the ``/docker-volumes/mayan folder``:: + + sudo tar -zcvf backup.tar.gz /docker-volumes/mayan + sudo chown `whoami` backup.tar.gz + +If using an external PostgreSQL or MySQL database or database containers, these +too need to be backed up using their respective procedures. A simple solution +is to copy the entire database container volume after the container has +been stopped. + +Restoring from a backup +======================= + +Uncompress the backup archive in the original docker volume using:: + + sudo tar -xvzf backup.tar.gz -C / + +Upgrading +========= + +Upgrading a Mayan EDMS Docker container is actually a matter of stopping and +deleting the container, downloading the most recent version of the image and +starting a container again. The container will take care of updating the +database structure to the newest version if necessary. + +**IMPORTANT!** Do not delete the volume storing the data, only the container. + +Stop the container to be upgraded:: + + docker stop mayan-edms + + +Remove the container:: + + docker rm mayan-edms + + +Pull the new image version:: + + docker pull mayanedms/mayanedms:latest + + +Start the container again with the new image version:: + + docker run -d --name mayan-edms --restart=always -p 80:8000 -v /docker-volumes/mayan:/var/lib/mayan mayanedms/mayanedms:latest + +Building the image +================== + +Clone the repository with:: + + git clone https://gitlab.com/mayan-edms/mayan-edms.git + +Change to the directory of the cloned repository:: + + cd mayan-edms + +Execute Docker's build command using the provided makefile:: + + make docker-build + +Or using an apt cacher to speed up the build:: + + make docker-build-with-proxy APT_PROXY=172.17.0.1:3142 + +Replace the IP address `172.17.0.1` with the IP address of the computer +running the APT proxy and caching service. + +Customizing the image +===================== + +Simple method +------------- + +If you just need to add a few Ubuntu or Python packages to your installation, +you can use the following environment variables: + +``MAYAN_APT_INSTALLS`` + +Specifies a list of Ubuntu .deb packages to be installed via APT when the +container is first created. The installed packages are not lost when the image +is stopped. Example: To install the Tesseract OCR language packs for German +and Spanish add the following in your ``docker start`` command line:: + + -e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa" + +``MAYAN_PIP_INSTALLS`` + +Specifies a list of Python packages to be installed via ``pip``. Packages will +be downloaded from the Python Package Index (https://pypi.python.org) by +default. + +Using Docker compose +==================== + +To deploy a complete production stack using the included Docker compose file +execute:: + + docker-compose -f docker-compose.yml up -d + +This Docker compose file will provision four containers: + +- Postgres as the database +- Redis as the Celery result storage +- RabbitMQ as the Celery broker +- Mayan EDMS using the above service containers + +To stop the stack use:: + + docker-compose -f docker-compose.yml stop + +The stack will also create four volumes to store the data of each container. +These are: + +- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose. +- mayan_broker - The broker volume, in this case RabbitMQ. +- mayan_db - The database volume, in this case Postgres. +- mayan_results - The celery result backend volume, in this case Redis. + + +Nightly images +============== +The continious integration pipeline used for testing development builds also +produces a resulting Docker image. These are build automatically and their +stability is not guaranteed. They should never be used in production. +If you want to try out the Docker images the development uses or want a sneak +peek at the new features being worked on checkout the container registry at: +https://gitlab.com/mayan-edms/mayan-edms/container_registry diff --git a/docs/topics/document_types.rst b/docs/topics/document_types.rst index f5d8b9893b..7ee5d40675 100644 --- a/docs/topics/document_types.rst +++ b/docs/topics/document_types.rst @@ -9,6 +9,46 @@ uploaded. It is not possible to upload documents without assigning them a document type. Examples of document type: **invoices**, **blueprints**, **receipts**. +.. blockdiag:: + + blockdiag { + default_shape = roundedbox + + document_type [ label = 'Document type' ]; + documents [ label = 'Documents' ]; + + document_type -> documents; + } + + +Examples: + +.. blockdiag:: + + blockdiag { + default_shape = roundedbox + + document_type [ label = 'Invoice' ]; + documents_1 [ label = 'invoice_001.pdf', width=200 ]; + documents_2 [ label = 'invoice_032.pdf', width=200 ]; + + document_type -> documents_1, documents_2; + } + + +.. blockdiag:: + + blockdiag { + default_shape = roundedbox + + document_type [ label = 'Receipts' ]; + documents_1 [ label = 'groceries_18-01-11.pdf', width=200 ]; + documents_2 [ label = 'car_payment-17-01-02.png', width=200 ]; + + document_type -> documents_1, documents_2; + } + + Settings and attributes are applied to document types and documents will inherit those settings and attributes based on the document type they were assigned when uploaded into Mayan EDMS. A document can only be of one diff --git a/docs/topics/faq.rst b/docs/topics/faq.rst index 987e0d2a43..913330eba5 100644 --- a/docs/topics/faq.rst +++ b/docs/topics/faq.rst @@ -121,6 +121,8 @@ A the moment no, but it is something being considered. Not at the moment. When all the projects and libraries upon which Mayan is dependent support Python 3 then will the project move to fully support Python 3. +Update 2018-06-04: Python 3 will be required from Django 2.0 onwards. As such +this is now a bigger priority and the transition to Python 3 has begun. **Q: The watched folder feature is not working** diff --git a/docs/topics/file_storage.rst b/docs/topics/file_storage.rst index ed39309c3e..56efab30fe 100644 --- a/docs/topics/file_storage.rst +++ b/docs/topics/file_storage.rst @@ -9,6 +9,7 @@ without extension, and stored in a simple flat arrangement in a directory. .. blockdiag:: blockdiag { + default_shape = roundedbox file [ label = 'mayan_1-1.pdf', width=120]; document [ label = 'mayan/media/document_storage/ab6c1cfe-8a8f-4a30-96c9-f54f606b9248', width=450]; file -> document [label = "upload"]; diff --git a/docs/topics/index.rst b/docs/topics/index.rst index b9310f8ac3..c937e20d94 100644 --- a/docs/topics/index.rst +++ b/docs/topics/index.rst @@ -1,5 +1,5 @@ -Concepts -======== +Topics +====== Introductions to all the key parts of Mayan EDMS you'll need to know: @@ -24,3 +24,7 @@ Introductions to all the key parts of Mayan EDMS you'll need to know: settings file_storage backups + upload_wizard + pending_work + code_statistics + docker diff --git a/docs/topics/indexes.rst b/docs/topics/indexes.rst index 8990fa6064..3898544c6f 100644 --- a/docs/topics/indexes.rst +++ b/docs/topics/indexes.rst @@ -23,6 +23,9 @@ Example: .. blockdiag:: blockdiag { + default_shape = roundedbox + span_width = 30; + index [ label = 'Product sheets per year', width=180 ]; root [ label = 'Root (Has document links? No)', width=450]; level_2 [ label = '{{ document.metadata_value_of.product_year }} (Has document links? Yes)', width=450]; @@ -50,6 +53,8 @@ that will be generate based on the tree template would be as follows: .. blockdiag:: blockdiag { + default_shape = roundedbox + index [ label = 'Product sheets per year', width=180 ]; year_1 [ label = '2001', width = 60 ]; year_2 [ label = '2002', width = 60 ]; @@ -89,5 +94,20 @@ via the network with network file system software like `Samba `_ or `NFS `_. +.. blockdiag:: + + blockdiag { + orientation = portrait + span_width = 200; + + index [ label = 'Product sheets per year', width=180 ]; + block_device [ height = 100, label = "Block device\n(Hard drive)", shape = flowchart.database ]; + network [ label = "Network", shape = cloud ]; + user [ label = "Users", shape = actor ]; + + index -> block_device [ label = "mirroring", fontsize = 8 ]; + block_device -> network -> user; + } + Indexes and mirrored indexes are Read Only as they are generated as a result of prior activities like document uploads, metadata changes. diff --git a/docs/topics/installation.rst b/docs/topics/installation.rst index e831bae59e..83d05d70da 100644 --- a/docs/topics/installation.rst +++ b/docs/topics/installation.rst @@ -14,9 +14,29 @@ Hardware requirements Docker procedure ---------------- -For the complete set of installation, configuration, upgrade, and backup -instructions visit the Mayan EDMS Docker Hub page at: -https://hub.docker.com/r/mayanedms/mayanedms/ +Docker is a computer program that performs operating-system-level +virtualization also known as containerization. It allows independent +"containers" to run within a single Linux instance, avoiding the overhead +of starting and maintaining virtual machines (VMs). + +Docker can be installed using their automated script:: + + wget -qO- https://get.docker.com/ | sh + +This installs the latest versions of Docker. If you don't want run an automated +script follow the instructions outlined in their documentation: https://docs.docker.com/install/ + +Once the Docker installtion is finished, proceed to the link below to install +the Docker image for Mayan EDMS. + +Docker image chapter: :ref:`docker` + +Direct installation +------------------- + +For users with knowledge of Python, Django, Ubuntu, and databases. + +Advanced deployment chapter: :ref:`deploying` .. _Docker: https://www.docker.com/ diff --git a/docs/topics/languages.rst b/docs/topics/languages.rst index 277ed0a38a..8318ba37d6 100644 --- a/docs/topics/languages.rst +++ b/docs/topics/languages.rst @@ -4,10 +4,10 @@ Languages The list of languages choices in the language dropdown used for documents is based on the current ISO 639 list. This list can be quite extensive. To reduce -the number of languages available use the settings ``DOCUMENTS_LANGUAGE_CHOICES``, +the number of languages available use the settings ``DOCUMENTS_LANGUAGE_CODES``, and set it to a nested list of abbreviations + languages names like:: - DOCUMENTS_LANGUAGE_CHOICES = (('eng', 'English'), ('spa', 'Spanish')) + DOCUMENTS_LANGUAGE_CODES = ('eng', 'spa') The default language to appear on the dropdown can also be configured using:: diff --git a/docs/topics/pending_work.rst b/docs/topics/pending_work.rst new file mode 100644 index 0000000000..e47d81ebcd --- /dev/null +++ b/docs/topics/pending_work.rst @@ -0,0 +1,312 @@ +============ +Pending work +============ + +Release blockers +---------------- + +These are errors or issues that are blocking a release. + +- None + +Pending work +------------ + +These are tasks that need to be completed but are missing a dependency or +a design decision. As more information is added to each, they should be +converted into a MERC. + +API +~~~ +- User API edit view: Should not be able to add of remove groups without + corresponding group access. +- User group list API get & post views: Should adding a group to an user + via the API return 201 or 200. Currently returns 201. +- Consistent API return code for delete views without access. Some views + return 403 other return 404. +- Update API docstrings. The upgrade to the latest DRF broke all formatting. +- Make views smaller. Much as much as possible to serializers. +- Switch to ViewSets. +- Add API filtering. Example unread notifications. + + +Documents +~~~~~~~~~ +- Navigating to the interactive document page image is not triggering + the document view event. + + +Events +~~~~~~ +- New event: document emailed. + + +Forms processing +~~~~~~~~~~~~~~~~ +- Remove usage of self.cleaned_data. Use self.clean_data instead. + + +Permissions +~~~~~~~~~~~ +- Permission should be reciprocal. Example: To be able to add a tag to a + document, the user must hold the tag add permission for the document + and for the tag to be added. To be able to enable a metadata type to a + document type, the user must hold the metadata add permissions for the + metadata type and for the document type. +- Edit type permissions should only grant the ability to edit the properties + of an object. To modify its relationship with other objects a reciprocal + permission check should be instead. + + +Search +~~~~~~ +- Rename SearchModel.pk to id + + +Sources +~~~~~~~ +- Add ACLs support to sources. +- Provide error message/feedback when scanning from a remote scanner fails. +- Require a permission for document types to avoid a user that has the workflow + creation permission to attach a workflow to a document type they don't + control. +- Research making APIWorkflowDocumentTypeList a subclass of documents.api_views.APIDocumentTypeList +- A POST request to APIWorkflowDocumentTypeList should require some permission + on the document type part to avoid adding non controlled document types + to a new workflow. +- To transition a workflow, the transition permission is only needed for the + workflow. Make it necesary to have the same permission for the document + of document type. +- To view the transition log, the workflow view permission is only needed for the + document. Make it necesary to have the same permission for the workflow or + for the transition and the states. +- Render date time of scanned documents using SANE to a better output + (like document versions). + + +Testing +~~~~~~~ +- Add document test mixin that creates documents types and documents + (to be used in dynamic_search.test_api). +- Update all API tests using self.client to just self. and the HTTP method. +- Add test for searches for each app that uses search. + + +UI - Frontend +~~~~~~~~~~~~~ +- Fix menu not collapsing at the same width of nav parent. +- Move direct CSS style from code into base.css. grep 'style' * -R. Style code in: + + * appearance/templates/appearance/generic_list_items_subtemplate.html + * appearance/templates/appearance/base.html + * appearance/templates/appearance/generic_list_subtemplate.html + * appearance/templates/navigation/generic_link_instance.html + +- Check if location is found in partial and remove it. Avoid circular loading. +- Add location to history after a form submit redirect. + + +UI +~~ +- Shift click select to seletect multiple documents. +- During the document upload wizard and the option to double click to + select document type and submit the form. The purpose is to speed up + the step with less mouse travel since this is a common screen. +- Add metadata to the Menu class to allow UI code to decide where and how + to display each menu. +- Reduce the facet buttons paddings. +- Make facet action button smaller. Reduce margin-bottom. +- Remove previous from the views.py. It is not longer used by the form's cancel button. + + +Workflows +~~~~~~~~~ +- Workflow trigger filters. Example: {{ document.document_type.name = 'invoice' }} + or same UI as the smart links app. Will allow restricting the firing of workflow + actions by an user defined filter criteria. +- Require a permission for document types to avoid a user that has the workflow + creation permission to attach a workflow to a document type they don't + control. +- Research making APIWorkflowDocumentTypeList a subclass of + documents.api_views.APIDocumentTypeList +- A POST request to APIWorkflowDocumentTypeList should require some permission + on the document type part to avoid adding non controlled document types + to a new workflow. +- To transition a workflow, the transition permission is only needed for the + workflow. Make it necesary to have the same permission for the document + of document type. +- To view the transition log, the workflow view permission is only needed for + the document. Make it necesary to have the same permission for the workflow or + for the transition and the states. + + +New features +------------ + + +API +~~~ +- Add converter API +- Document signatures API +- Smart settings API +- Use REST_API's 'mayan_permission_attribute_check' to simplify API views access checking and filtering. +- DRF filtering using the URL query. + + +Converter +~~~~~~~~~ +- New zoom transformation. Resample, not just bigger final size but do + a resize * zoom multiple before. Produces a bigger image or higher + quality than the original. + + +Caching +~~~~~~~ +- Size limited caching. A new model in the common app will keep track + of all cache files. A manager method will be provided that will + return the cache files in other of age to be deleted. + + +Distribution +~~~~~~~~~~~~ +- Python based Javascript package manager. Each app specifies what + library and version needs. The common app (or a new app) will add all + the JS loading lines automatically so that compress can detect them. + + +Metadata +~~~~~~~~ +- Metadata lookup memory. Add a select2 style widget that will query a + new metadata API endpoint that will return all used values so far. +- Metadata validation_choices and parser_choices as static model methods +- Metadata.api as Metadata.utils and manager + + +Search +~~~~~~ +- Add support for highlighting the search results in pages. + + +Settings +~~~~~~~~ +- Database based settings. + + +Sources +~~~~~~~ +- UI improvement for staging folders files selection. GitLab issue. + + +UI +~~ +- Upgrade to Bootstrap 4. +- Upgrade to Flatly 4. +- Better workflow transition UI. Instead of a dropdown show all the + available transitions as buttons. + + +Workflows +~~~~~~~~~ +- Workflow trigger filters. Example: {{ document.document_type.name = 'invoice' }} or same + UI as the smart links app. Will allow restricting the firing of workflow + actions by an user defined filter criteria. +- New workflow action: send email. Subject and content are templates. + + +Other +~~~~~ +- Python based Javascript package manager. Each app specifies what + library and version needs. The common app (or a new app) will add all + the JS loading lines automatically so that compress can detect them. +- When moving documents to the trash update the message to "submitted" + and not "moved" or "deleted" since this is handled by a task queue + and is not immediate and doesn't delete the document. +- When emptying the trash update the message to "submitted" + since this is handled by a task queue and is not immediate. +- New app that allows creating user document filters. Will provide the + same service as the document filters class. Interface can be made + using the template language or the same UI as the smart links. +- Allow add queue metadata that can be exported via a management command. + This will allow creating supervisor templates without all the worker + entries being hardcoded. +- Delete .gitignore files from copied packages. Include .gitignore files + keep compiled or distributable files from being included in the main + repository. Temporary measure until a Javascript library manager is + added. +- Automatically capture license information from installed Javascript + libraries. +- Automatically capture license information from installed Python + packages. +- Update celery to 4.1.0 +- Update to use the new class based views in the authentication app. + password_change(), password_change_done(), password_reset(), + password_reset_done(), password_reset_confirm(), and password_reset_complete() + function-based views are deprecated in favor of new class-based views + PasswordChangeView, PasswordChangeDoneView, PasswordResetView, + PasswordResetDoneView, PasswordResetConfirmView, and PasswordResetCompleteView. +- django.utils.translation.string_concat() is deprecated in favor of + django.utils.text.format_lazy(). string_concat(strings) can be + replaced by format_lazy('{}' x len(strings), strings). + Found in converter/classes.py and metadata/forms.py. +- Fix warnings in preparation for Django 2.0. +- Update all tempfile.mkstemp() to tempfile.mkstemp(dir=setting_temporary_directory.value) +- Get rid of common.utils.get_descriptor only used by common.utils.copyfile +- Update common.utils.copyfile to use only file objects. +- Change metadata label column from CharField to Label +- Start testing to Python 3 compatibility. +- Unify all RelationshipForms into a common class. +- Add test for event subscription view. +- Repeated templates: password_reset_confirm.html and password_reset_form.html +- Remove unused text=get_notification_count from events.links +- Reduce number of languages so dropzone view starts faster. +- In DocumentComment model, rename comment field to text. +- class MultipleInstanceActionMixin is deprecated. Replace views using this with + MultipleObjectFormActionView or MultipleObjectConfirmActionView +- Subscribe to tag events +- Subscribe to workflow events +- Subscribe to workflow state events +- Link to go from event notification to view. Example document workflow notification to document workflow views. +- Find replacement for ``python-gnupg``. Unstable & inconsistent API. +- New app that allows creating user document filters. Will provide the + same service as the document filters class. Interface can be made + using the template language or the same UI as the smart links. +- Allow add queue metadata that can be exported via a management command. + This will allow creating supervisor templates without all the worker + entries being hardcoded. +- Automatically capture license information from installed Javascript + libraries. +- Automatically capture license information from installed Python + packages. +- Finish and merge improved compressed file branch. +- Improve and merge PCL support branch. +- Swtich to self hosted documentation. +- Unify error logs in a common model. Fields: Datetime, namespace, + message, content type, object id. +- Export documents as PDF. Each document image is used to create a PDF + dinamycally. +- Document splitting. Only for PDF files first. A document versions + relationship between the documents has to be designed. +- Manually linking documents. +- Migrate settings/base.py to Django's 1.11 format. +- Rename model methods to use ``get_`` or ``do_`` +- Hunt TODO +- Hunt FIXME +- Convert SETTING_GPG_BACKEND into a setting option similar to converter and converter options. +- Reorganize modelForms Meta class and methods. +- Periodic messages, like notifications. Using an AJAX worker. +- Find replacement for ``python-gnupg``. Unstable & inconsistent API. +- Google docs integration. Upload document from Google Drive. +- Get ``dumpdata`` and ``loaddata`` working flawlessly. Will allow for easier backups, restores and database backend migrations. +- Add generic list ordering. ``django.views.generic.list.MultipleObjectMixin`` (https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin) now supports an ``ordering`` parameter. +- Add support to convert any document to PDF. https://gitlab.mister-muffin.de/josch/img2pdf +- Add support for combining documents. +- Add support for splitting documents. +- Add new document source to get documents from an URL. +- Add support for metadata mapping files. CSV file containing filename to metadata values mapping, useful for bulk upload and migrations. +- Add support for registering widgets to the home screen. +- Merge mimetype and converter apps. +- Metadata widgets (Date, time, timedate). +- Datatime widget: https://github.com/smalot/bootstrap-datetimepicker +- Add events for document signing app (uploaded detached signateure, signed document, deleted signature) +- A configurable conversion process. Being able to invoke different binaries for file conversion, as opposed to the current libreoffice only solution. +- A tool in the admin interface to mass (re)convert the files (basically the page count function, but then applied on all documents). diff --git a/docs/topics/permissions.rst b/docs/topics/permissions.rst index 5162484836..7808b42419 100644 --- a/docs/topics/permissions.rst +++ b/docs/topics/permissions.rst @@ -10,6 +10,11 @@ that permission can exercise it throughout the entire system. .. blockdiag:: blockdiag { + orientation = portrait + default_shape = roundedbox + span_width = 240; + span_height = 100; + user [ label = 'Users' ]; group [ label = 'Groups' ]; role [ label = 'Roles' ]; diff --git a/docs/topics/roadmap.rst b/docs/topics/roadmap.rst deleted file mode 100644 index 3273a3a8a8..0000000000 --- a/docs/topics/roadmap.rst +++ /dev/null @@ -1,74 +0,0 @@ -======= -Roadmap -======= - -- Workflow: - - - Improve workflow system - - Workflow actions. Predefined actions to be execute on document leaving or entering a state or a transition. Example: "Add to folder X", "Attach tag X". - - Add support for state recipients. - - Add workflow document inbox notification. - -- Indexing - - - Replace indexing and smart linking template language (use Jinja2 instead of Django's). - -- Distribution: - - - Debian packages. Limited success so far using https://github.com/astraw/stdeb. - -- Notifications: - - - Add support for subscribing to a document's events. - - Add support for subscribing to a document type events. - - Add support for subscribing specific events. - -- OCR: - - - Add image preprocessing for OCR. Increase effectiveness of Tesseract. - -- Python 3: - - - Complete support for Python3. - - Find replacement for pdfminer (Python3 support blocker). Use pdfminer.six (#257). - -- Simple serving: - - - Provide option to serve Mayan EDMS without a webserver (using Tornado o similar). Work started in branch: ``/feature/tornado`` - -- Upload wizard: - - - Make wizard step configurable. Create ``WirzardStep`` class so apps can add their own upload wizard steps, instead of the steps being hardcoded in the sources app. - - Add upload wizard step to add the new documents to a folder. - -- Other - - - Use a sequence and not the document upload date to determine the document version sequence. MySQL doesn't store milisecond value in dates and if several version are uploaded in a single second there is no way to know the order or which one is the latests. This is why the document version tests include a 2 second delay. Possible solution: http://schinckel.net/2015/05/17/django-second-autofield/ - - Include external app Mayan-EXIF into main code. - - Convert all views from functions to class based views (CBV). - - Increase test coverage. - - Mock external services in tests. For example the ``django_GPG`` app key search and receive tests. - - Pluggable icon app. Make switching icon set easier. - - Reduce dependency on binary executables for a default install. - - Find replacement for ``cssmin`` & ``django-compressor``. - - Find replacement for ``python-gnupg``. Unstable & inconsistent API. - - Google docs integration. Upload document from Google Drive. - - Get ``dumpdata`` and ``loaddata`` working flawlessly. Will allow for easier backups, restores and database backend migrations. - - Add generic list ordering. ``django.views.generic.list.MultipleObjectMixin`` (https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin) now supports an ``ordering`` parameter. - - Add support to convert any document to PDF. https://gitlab.mister-muffin.de/josch/img2pdf - - Add support for combining documents. - - Add support for splitting documents. - - Add new document source to get documents from an URL. - - Document overlay support. Such as watermarks. https://gist.github.com/umrashrf/8616550 - - Add support for metadata mapping files. CSV file containing filename to metadata values mapping, useful for bulk upload and migrations. - - Add support for registering widgets to the home screen. - - Merge mimetype and converter apps. - - Add GPG key generation. - - If SourceColumn label is None take description from model. Avoid unnecessary translatable strings. - - Metadata widgets (Date, time, timedate). - - Datatime widget: https://github.com/smalot/bootstrap-datetimepicker - - Separate Event class instances with a parent namespace class: EventNamespace. - - Add events for document signing app (uploaded detached signateure, signed document, deleted signature) - - A configurable conversion process. Being able to invoke different binaries for file conversion, as opposed to the current libreoffice only solution. - - A tool in the admin interface to mass (re)convert the files (basically the page count function, but then applied on all documents). - - Find solution so that documents in watched folders are not processed until they are ready. Use case scanning directly to scanned folders. diff --git a/docs/topics/settings.rst b/docs/topics/settings.rst index a5a9955b4a..c6302ea7a3 100644 --- a/docs/topics/settings.rst +++ b/docs/topics/settings.rst @@ -2,17 +2,77 @@ Settings ======== -When Mayan EDMS is initially installed a ``local.py`` file is created inside the -``/mayan/settings/`` folder. So if you installed Mayan EDMS according to the -instructions provided in this documentation your ``local.py`` should be located in -the directory: ``/usr/share/mayan-edms/mayan/settings/local.py``. +Mayan EDMS can be configure via environment variables or by setting files. -For a list of all the configuration options, go to "Setup" then "Settings" on -your browser. This is also a good place to check if your overrided setting -option value in your ``local.py`` file is being interpreted correctly. +Via environment variables +========================= -Settings can also be changed via environment variables by prepending the string -"MAYAN_" to the configuration name. For example, to change the number of documents -displayed per page (COMMON_PAGINATE_BY, by default 40), use:: +To use environment variables, lookup the name of the setting you want to +override in the "Settings" menu. The "Settings" menu is located inside the +"Setup" main menu. To pass a value via an environment variable append +``"MAYAN_"`` to the name of the settings option. For example, to change +the number of documents displayed per page (COMMON_PAGINATE_BY, by default 40), +use:: - MAYAN_COMMON_PAGINATE_BY=10 + export MAYAN_COMMON_PAGINATE_BY=10 + +Restart Mayan EDMS and the new value will take effect. The "Settings" menu +can be used to verify if the overrided setting value is being interpreted +correctly. + +Via settings files +================== + +Another way to configure Mayan EDMS is via Python-style, settings files. +If Mayan EDMS was installed using the Python package a ``mayan_settings`` +folder will created for this purpose. If you installed Mayan EDMS +according to the :ref:`deploying` instructions provided in this +documentation your ``mayan_settings`` folder should be located in the directory: +``/usr/share/mayan-edms/mayan/media/mayan_settings``. + +If Mayan EDMS was installed using Docker, the ``mayan_settings`` folder +will be found inside the install Docker volume. If you installed Mayan EDMS +according to the :ref:`docker` instructions provided in this documentation +your ``mayan_settings`` folder should be located in the directory: +``/docker-volumes/mayan/mayan_settings``. + +Create a file with any valid name and a ``.py`` extension in the +``mayan_settings`` folder. The file must starts with a global import of +``mayan.settings.production``. In the form:: + + from mayan.settings.production import * + +Now add the corresponding lines to override the default settings. +In the settings file, it is not necesary to prepend the string ``MAYAN_`` to +the setting option. For example, to change the number of documents displayed +per page (COMMON_PAGINATE_BY, by default 40), +use:: + + COMMON_PAGINATE_BY=10 + +versus:: + + export MAYAN_COMMON_PAGINATE_BY=10 + +when using the environment variable method. + +For this example let's assume the file was saved with the name ``mysettings.py``. + +The way used to tell Mayan EDMS to import this file will vary based on the +installation method. + +For the :ref:`deploying` method, the full import path will be +``mayan.media.mayan_settings.mysettings`` and can be passed via the +``--settings`` command line argument like this:: + + python manage.py runserver --settings=mayan.media.mayan_settings.mysettings + +or via the ``DJANGO_SETTINGS_MODULE`` environment variable like this:: + + export DJANGO_SETTINGS_MODULE=mayan.media.mayan_settings.mysettings + +For the :ref:`docker` installation method, the full import path will be +``mayan_settings.mysettings`` and can only be passed via the +``MAYAN_SETTINGS_MODULE`` environment variable like this:: + + docker run <...> -e MAYAN_SETTINGS_MODULE=mayan_settings.mysettings diff --git a/docs/topics/signatures.rst b/docs/topics/signatures.rst index f9efcc1e18..105f5b30a8 100644 --- a/docs/topics/signatures.rst +++ b/docs/topics/signatures.rst @@ -8,6 +8,25 @@ uploaded, this signature is readily detected as part of the document inspection step. The status of the signature can be verified by accessing the signatures sections of a document. +.. blockdiag:: + + blockdiag { + orientation = portrait + span_width = 240; + + user [ shape = "actor" ]; + key [ shape = flowchart.database, label = "Key" ]; + document [ shape = "note", label = "Document" ]; + document_signed [ label = "Signed\nDocument" ]; + + + key -> user -> document -> document_signed; + } + +Signed documents are tamper-proof. That means that if any part of the document's +file is edited (even just one character or one pixel), the document's +signature becomes invalid alerting that an unathorized change has ocurred. + Existing non signed documents can be signed in one of two ways: by downloading the document, signing it, and uploading the signed document as a new version of the existing one or by creating a detached signature for @@ -21,6 +40,6 @@ keys no longer needed can also be deleted from this menu. Only `GNU Privacy Guard`_ signatures are support at the moment. -Only version 1 of `GNU Privacy Guard`_ is supported for now. +Only version 1 of `GNU Privacy Guard`_ is supported at the moment. .. _`GNU Privacy Guard`: www.gnupg.org/ diff --git a/docs/topics/sources.rst b/docs/topics/sources.rst index b4e720d366..e38f576c6e 100644 --- a/docs/topics/sources.rst +++ b/docs/topics/sources.rst @@ -31,6 +31,27 @@ The current document sources supported are: when the quality of the scans is irrelevant or when they will be known to be of good quality, such as when receiving e-faxes as PDFs. +.. blockdiag:: + + blockdiag { + mayan [shape = "roundedbox", label = "Mayan EDMS" ]; + email_pop3 [shape = "mail", label = "e-mail (POP3)"]; + email_imap [shape = "mail", label = "e-mail (IMAP)"]; + staging [shape = "flowchart.database", label = "Staging folder" ]; + watch [shape = "flowchart.database", label = "Watch folder" ]; + automatic [shape = "box", label = "Automatic\n(via schedule)" ]; + manual [shape = "actor", height=60, label = "Manual\n(user interaction)" ]; + web [shape = "note", label = "Webform upload" ]; + + automatic -> mayan; + email_pop3 -> automatic; + email_imap -> automatic; + watch -> automatic; + manual -> mayan; + staging -> manual; + web -> manual; + } + Document source can be configure to allow document bundles to uploaded as compressed files which are decompressed and their content uploaded as separate documents. This feature is useful when migrating from another document diff --git a/docs/topics/upload_wizard.rst b/docs/topics/upload_wizard.rst new file mode 100644 index 0000000000..32a268aee7 --- /dev/null +++ b/docs/topics/upload_wizard.rst @@ -0,0 +1,84 @@ +============= +Upload wizard +============= + +The steps needed to upgrade a document using form-tools' ``SessionWizard`` +were hardcoded in the ``source`` app. This made it very difficult to add or remove +wizard steps. + +The steps of the wizard are now defined by a new class called +``sources.wizard.WizardStep``. The existing steps to select a document type, +enter metadata and tag the document, have been converted to function as +``WizardSteps`` subclasses. The converted steps now live in + +``sources.wizards.WizardStepDocumentType``, ``tag.wizard_steps.WizardStepTags``, +and ``metadata.wizard_steps.WizardStepMetadata``. + +The steps need to define the following methods: + +- ``done``: This method is execute when the wizard finished the last step + an enter the step where the actual file are uploaded. This steps is used + to encode form data into the URL query string that will be passed to the + document upload view for each file uploaded. + +- ``condition``: This method is used to display the step conditionally. + If this method return True it will be displayed during the upload wizard + execution. To skip the step, return False or None. + +- ``get_form_initial``: This method is used to return the initial data + for the step form. Use this method to set up initial values for the step's + form fields. + +- ``step_post_upload_process``: This method will be executed once the + document finishes uploading. Use this method to process the information + encoded in the URL querystring by the step's `done`` method. + +Once the ``WizardStep`` subclass is defined, it needs to be registered. This +is done by calling the ``.register`` method of the ``WizardStep`` class with +the subclass as the argument. Example:: + + WizardStep.register(WizardStepMetadata) + +This statement must be located after the subclass definition. Finally, +the module defining the wizard step must be imported so that it is loaded +with the rest of the code and enabled. The best place to do this is in the +``.ready`` method of the apps' ``apps.py`` module. Example:: + + class TagsApp(MayanAppConfig): + has_rest_api = True + has_tests = True + name = 'tags' + verbose_name = _('Tags') + + def ready(self): + super(TagsApp, self).ready() + from actstream import registry + + from .wizard_steps import WizardStepTags # NOQA + +The ``WizardStep`` class also allows for unregistering existing steps. This +is accomplished by calling the ``.deregister`` method of the ``WizardStep`` +class and passing the subclass as the argument. This method should +also be called inside the ``.ready`` method of an apps' ``apps.py`` +module. Example:: + + + class TagsApp(MayanAppConfig): + has_rest_api = True + has_tests = True + name = 'tags' + verbose_name = _('Tags') + + def ready(self): + super(TagsApp, self).ready() + from actstream import registry + + from metadata.wizard_steps import WizardStepMetadata # NOQA + from sources.wizards import WizardStep # NOQA + from .wizard_steps import WizardStepTags # NOQA + + WizardStep.deregister(WizardStepTags) + + +This will cause the tags assigment step to not be assigned to the upload +wizard anymore. diff --git a/docs/topics/versioning.rst b/docs/topics/versioning.rst index 922c27b34e..2ed26469c2 100644 --- a/docs/topics/versioning.rst +++ b/docs/topics/versioning.rst @@ -8,5 +8,41 @@ version changes in comparison with the previous one. If a new version was uploaded by mistake or such new version is no longer necessary the option to revert to a previous version of the document is provided. +.. blockdiag:: + + blockdiag { + default_shape = roundedbox + orientation = portrait + node_width = 200; + version_1 [ label = "Version 1" ]; + version_2 [ label = "Version 2" ]; + document_1 [ label = "payroll_report.pdf" ]; + document_2 [ label = "payroll_report_fixed.pdf" ]; + upload_1 [ label = "payroll_report.pdf" ]; + upload_2 [ label = "payroll_report_fixed.pdf" ]; + + upload_1 -> version_1 -> document_1; + upload_2 -> version_2 -> document_2; + document_1 -> document_2; + } + Only the interactive document sources (:doc:`sources`) (``Web`` and ``Staging folders``) are available to upload new document versions. + +There is no limit to the number of versions a document can have. + +.. blockdiag:: + + blockdiag { + default_shape = roundedbox + orientation = portrait + node_width = 200; + + document [ label = "payroll_report.pdf" ]; + versions [ label = "Versions", stacked ]; + + document -> versions; + } + +By default, the last version will be showed when working with the document +but any of the versions can be inspected and viewed. diff --git a/mayan/__init__.py b/mayan/__init__.py index 011a851b23..a38e83461e 100644 --- a/mayan/__init__.py +++ b/mayan/__init__.py @@ -1,10 +1,13 @@ from __future__ import unicode_literals __title__ = 'Mayan EDMS' -__version__ = '2.7.3' -__build__ = 0x020703 +__version__ = '3.0' +__build__ = 0x030000 __author__ = 'Roberto Rosario' __author_email__ = 'roberto.rosario@mayan-edms.com' __description__ = 'Free Open Source Electronic Document Management System' __license__ = 'Apache 2.0' -__copyright__ = 'Copyright 2011-2016 Roberto Rosario' +__copyright_short__ = '2011-2018 Roberto Rosario' +__copyright__ = '{} {}'.format('Copyright', __copyright_short__) +__website__ = 'https://www.mayan-edms.com' + diff --git a/mayan/apps/acls/api_views.py b/mayan/apps/acls/api_views.py index a93f3e09c8..13c07b7299 100644 --- a/mayan/apps/acls/api_views.py +++ b/mayan/apps/acls/api_views.py @@ -1,13 +1,10 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 from rest_framework import generics -from permissions import Permission - from .models import AccessControlList from .permissions import permission_acl_edit, permission_acl_view from .serializers import ( @@ -18,13 +15,10 @@ from .serializers import ( class APIObjectACLListView(generics.ListCreateAPIView): - def get(self, *args, **kwargs): - """ - Returns a list of all the object's access control lists - """ - - return super(APIObjectACLListView, self).get(*args, **kwargs) - + """ + get: Returns a list of all the object's access control lists + post: Create a new access control list for the selected object. + """ def get_content_object(self): content_type = get_object_or_404( ContentType, app_label=self.kwargs['app_label'], @@ -40,14 +34,10 @@ class APIObjectACLListView(generics.ListCreateAPIView): else: permission_required = permission_acl_edit - try: - Permission.check_permissions( - self.request.user, permissions=(permission_required,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_required, self.request.user, content_object - ) + AccessControlList.objects.check_access( + permissions=permission_required, user=self.request.user, + obj=content_object + ) return content_object @@ -58,13 +48,21 @@ class APIObjectACLListView(generics.ListCreateAPIView): """ Extra context provided to the serializer class. """ + context = super(APIObjectACLListView, self).get_serializer_context() + if self.kwargs: + context.update( + { + 'content_object': self.get_content_object(), + } + ) - return { - 'content_object': self.get_content_object(), - 'format': self.format_kwarg, - 'request': self.request, - 'view': self - } + return context + + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super(APIObjectACLListView, self).get_serializer(*args, **kwargs) def get_serializer_class(self): if self.request.method == 'GET': @@ -72,31 +70,14 @@ class APIObjectACLListView(generics.ListCreateAPIView): else: return WritableAccessControlListSerializer - def post(self, *args, **kwargs): - """ - Create a new access control list for the selected object. - """ - - return super(APIObjectACLListView, self).post(*args, **kwargs) - class APIObjectACLView(generics.RetrieveDestroyAPIView): + """ + delete: Delete the selected access control list. + get: Returns the details of the selected access control list. + """ serializer_class = AccessControlListSerializer - def delete(self, *args, **kwargs): - """ - Delete the selected access control list. - """ - - return super(APIObjectACLView, self).delete(*args, **kwargs) - - def get(self, *args, **kwargs): - """ - Returns the details of the selected access control list. - """ - - return super(APIObjectACLView, self).get(*args, **kwargs) - def get_content_object(self): if self.request.method == 'GET': permission_required = permission_acl_view @@ -112,14 +93,10 @@ class APIObjectACLView(generics.RetrieveDestroyAPIView): content_type.model_class(), pk=self.kwargs['object_pk'] ) - try: - Permission.check_permissions( - self.request.user, permissions=(permission_required,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_required, self.request.user, content_object - ) + AccessControlList.objects.check_access( + permissions=permission_required, user=self.request.user, + obj=content_object + ) return content_object @@ -128,15 +105,10 @@ class APIObjectACLView(generics.RetrieveDestroyAPIView): class APIObjectACLPermissionListView(generics.ListCreateAPIView): - def get(self, *args, **kwargs): - """ - Returns the access control list permission list. - """ - - return super( - APIObjectACLPermissionListView, self - ).get(*args, **kwargs) - + """ + get: Returns the access control list permission list. + post: Add a new permission to the selected access control list. + """ def get_acl(self): return get_object_or_404( self.get_content_object().acls, pk=self.kwargs['pk'] @@ -152,20 +124,22 @@ class APIObjectACLPermissionListView(generics.ListCreateAPIView): content_type.model_class(), pk=self.kwargs['object_pk'] ) - try: - Permission.check_permissions( - self.request.user, permissions=(permission_acl_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_view, self.request.user, content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_view, user=self.request.user, + obj=content_object + ) return content_object def get_queryset(self): return self.get_acl().permissions.all() + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super(APIObjectACLPermissionListView, self).get_serializer(*args, **kwargs) + def get_serializer_class(self): if self.request.method == 'GET': return AccessControlListPermissionSerializer @@ -173,45 +147,25 @@ class APIObjectACLPermissionListView(generics.ListCreateAPIView): return WritableAccessControlListPermissionSerializer def get_serializer_context(self): - return { - 'acl': self.get_acl(), - 'format': self.format_kwarg, - 'request': self.request, - 'view': self - } + context = super(APIObjectACLPermissionListView, self).get_serializer_context() + if self.kwargs: + context.update( + { + 'acl': self.get_acl(), + } + ) - def post(self, *args, **kwargs): - """ - Add a new permission to the selected access control list. - """ - - return super( - APIObjectACLPermissionListView, self - ).post(*args, **kwargs) + return context class APIObjectACLPermissionView(generics.RetrieveDestroyAPIView): + """ + delete: Remove the permission from the selected access control list. + get: Returns the details of the selected access control list permission. + """ lookup_url_kwarg = 'permission_pk' serializer_class = AccessControlListPermissionSerializer - def delete(self, *args, **kwargs): - """ - Remove the permission from the selected access control list. - """ - - return super( - APIObjectACLPermissionView, self - ).delete(*args, **kwargs) - - def get(self, *args, **kwargs): - """ - Returns the details of the selected access control list permission. - """ - - return super( - APIObjectACLPermissionView, self - ).get(*args, **kwargs) - def get_acl(self): return get_object_or_404( self.get_content_object().acls, pk=self.kwargs['pk'] @@ -227,14 +181,10 @@ class APIObjectACLPermissionView(generics.RetrieveDestroyAPIView): content_type.model_class(), pk=self.kwargs['object_pk'] ) - try: - Permission.check_permissions( - self.request.user, permissions=(permission_acl_view,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_acl_view, self.request.user, content_object - ) + AccessControlList.objects.check_access( + permissions=permission_acl_view, user=self.request.user, + obj=content_object + ) return content_object @@ -242,9 +192,12 @@ class APIObjectACLPermissionView(generics.RetrieveDestroyAPIView): return self.get_acl().permissions.all() def get_serializer_context(self): - return { - 'acl': self.get_acl(), - 'format': self.format_kwarg, - 'request': self.request, - 'view': self - } + context = super(APIObjectACLPermissionView, self).get_serializer_context() + if self.kwargs: + context.update( + { + 'acl': self.get_acl(), + } + ) + + return context diff --git a/mayan/apps/acls/apps.py b/mayan/apps/acls/apps.py index 8825df70b2..9d31ac3e77 100644 --- a/mayan/apps/acls/apps.py +++ b/mayan/apps/acls/apps.py @@ -4,12 +4,12 @@ from django.utils.translation import ugettext_lazy as _ from common import MayanAppConfig, menu_object, menu_sidebar from navigation import SourceColumn -from rest_api.classes import APIEndPoint from .links import link_acl_create, link_acl_delete, link_acl_permissions class ACLsApp(MayanAppConfig): + has_rest_api = True has_tests = True name = 'acls' verbose_name = _('ACLs') @@ -17,16 +17,14 @@ class ACLsApp(MayanAppConfig): def ready(self): super(ACLsApp, self).ready() - APIEndPoint(app=self, version_string='1') - AccessControlList = self.get_model('AccessControlList') SourceColumn( - source=AccessControlList, label=_('Permissions'), - attribute='get_permission_titles' + source=AccessControlList, label=_('Role'), attribute='role' ) SourceColumn( - source=AccessControlList, label=_('Role'), attribute='role' + source=AccessControlList, label=_('Permissions'), + attribute='get_permission_titles' ) menu_object.bind_links( diff --git a/mayan/apps/acls/classes.py b/mayan/apps/acls/classes.py index 4d1a0608dc..7d3b2e35d3 100644 --- a/mayan/apps/acls/classes.py +++ b/mayan/apps/acls/classes.py @@ -56,7 +56,7 @@ class ModelPermission(object): permissions = [] - class_permissions = cls._registry.get(type(instance)) + class_permissions = cls.get_for_class(klass=type(instance)) if class_permissions: permissions.extend(class_permissions) diff --git a/mayan/apps/acls/icons.py b/mayan/apps/acls/icons.py new file mode 100644 index 0000000000..1c6a5ffbcb --- /dev/null +++ b/mayan/apps/acls/icons.py @@ -0,0 +1,5 @@ +from __future__ import absolute_import, unicode_literals + +from appearance.classes import Icon + +icon_acl_list = Icon(driver_name='fontawesome', symbol='lock') diff --git a/mayan/apps/acls/links.py b/mayan/apps/acls/links.py index e7bd35458f..6133478695 100644 --- a/mayan/apps/acls/links.py +++ b/mayan/apps/acls/links.py @@ -5,6 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from navigation import Link +from .icons import icon_acl_list from .permissions import permission_acl_view, permission_acl_edit @@ -27,24 +28,25 @@ def get_kwargs_factory(variable_name): link_acl_delete = Link( - permissions=(permission_acl_edit,), permissions_related='content_object', - tags='dangerous', text=_('Delete'), view='acls:acl_delete', - args='resolved_object.pk' + args='resolved_object.pk', permissions=(permission_acl_edit,), + permissions_related='content_object', tags='dangerous', text=_('Delete'), + view='acls:acl_delete', ) link_acl_list = Link( - permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list', - kwargs=get_kwargs_factory('resolved_object') + kwargs=get_kwargs_factory('resolved_object'), + permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list' ) link_acl_list_with_icon = Link( - icon='fa fa-lock', permissions=(permission_acl_view,), text=_('ACLs'), - view='acls:acl_list', kwargs=get_kwargs_factory('resolved_object') + icon_class=icon_acl_list, kwargs=get_kwargs_factory('resolved_object'), + permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list' ) link_acl_create = Link( + kwargs=get_kwargs_factory('resolved_object'), permissions=(permission_acl_edit,), text=_('New ACL'), - view='acls:acl_create', kwargs=get_kwargs_factory('resolved_object') + view='acls:acl_create' ) link_acl_permissions = Link( - permissions=(permission_acl_edit,), permissions_related='content_object', - text=_('Permissions'), view='acls:acl_permissions', - args='resolved_object.pk' + args='resolved_object.pk', permissions=(permission_acl_edit,), + permissions_related='content_object', text=_('Permissions'), + view='acls:acl_permissions', ) diff --git a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo index b8c865d1b0..a55cf308b8 100644 Binary files a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po index 530597d5b1..42e849c275 100644 --- a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "الصلاحيات" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "الصلاحيات" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "لا شيء" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo index e13dfdb962..56e5be6240 100644 Binary files a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po index 3606a43604..3f20c3f1ea 100644 --- a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Разрешения" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Разрешения" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "достъп вписване" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "достъп вписвания" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Няма" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo index 2883981753..a6b3fe8b9e 100644 Binary files a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po index 7adee171fe..5b00b651cb 100644 --- a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Dozvole" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Dozvole" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Pristupni unos" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Pristupni unosi" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Nijedno" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/da/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/da/LC_MESSAGES/django.mo index 37c73529a3..fceebd9856 100644 Binary files a/mayan/apps/acls/locale/da/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/da/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/da/LC_MESSAGES/django.po b/mayan/apps/acls/locale/da/LC_MESSAGES/django.po index c0305736c6..eab7bbf53b 100644 --- a/mayan/apps/acls/locale/da/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/da/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Ingen" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo index e2a477358c..2f5889e839 100644 Binary files a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po index db6a1ed968..1f2c09bebf 100644 --- a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-23 21:29+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -20,23 +20,23 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Zugriffsberechtigungen" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Berechtigungen" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Rolle" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Berechtigungen" + +#: links.py:32 msgid "Delete" msgstr "Löschen" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Neue Berechtigung" @@ -45,20 +45,20 @@ msgstr "Neue Berechtigung" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Berechtigungseintrag" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Berechtigungseinträge" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Berechtigungen \"%(permissions)s\" zur Rolle \"%(role)s\" für \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Keine" @@ -127,12 +127,12 @@ msgstr "Verfügbare Berechtigungen" msgid "Granted permissions" msgstr "Erteilte Berechtigungen" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt." diff --git a/mayan/apps/acls/locale/en/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/en/LC_MESSAGES/django.mo index b6dcbc54c0..6c5906d1cd 100644 Binary files a/mayan/apps/acls/locale/en/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/en/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/en/LC_MESSAGES/django.po b/mayan/apps/acls/locale/en/LC_MESSAGES/django.po index 07743a6d22..b4314bc655 100644 --- a/mayan/apps/acls/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,23 +17,23 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo index b709937a62..2b9c823f97 100644 Binary files a/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/es/LC_MESSAGES/django.po b/mayan/apps/acls/locale/es/LC_MESSAGES/django.po index 6c21d673ab..d5f75c0b61 100644 --- a/mayan/apps/acls/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/es/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:38+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-23 21:29+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -20,23 +20,23 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "LCAs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permisos" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Rol" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permisos" + +#: links.py:32 msgid "Delete" msgstr "Borrar" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nueva LCA" @@ -45,20 +45,20 @@ msgstr "Nueva LCA" msgid "Insufficient access for: %s" msgstr "Acceso insuficiente para: %s" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Entrada de acceso" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Entradas de acceso" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Permisos \"%(permissions)s\" para el rol \"%(role)s\" para \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Ninguno" @@ -127,12 +127,12 @@ msgstr "Permisos disponibles" msgid "Granted permissions" msgstr "Permisos otorgados" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Los permisos inactivos se heredan de un objeto precedente." diff --git a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo index dd4c14fe0f..218b9793db 100644 Binary files a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po index 9e0534c199..e2abb85623 100644 --- a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po @@ -3,60 +3,61 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Mehdi Amani , 2017 # Nima Towhidi , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-03-12 13:25+0000\n" +"Last-Translator: Mehdi Amani \n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" -msgstr "ACLs" +msgstr "دسترسی ها" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "مجوزها" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "نقش" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "مجوزها" + +#: links.py:32 msgid "Delete" msgstr "حذف" -#: links.py:43 +#: links.py:45 msgid "New ACL" -msgstr "" +msgstr "دسترسی جدید" #: managers.py:57 managers.py:86 #, python-format msgid "Insufficient access for: %s" -msgstr "" +msgstr "کمبود دسترسی برای: %s" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "ورودی دسترسی" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "ورودیهای دسترسی" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" -msgstr "" +msgstr "اچازه های \"%(permissions)s\" به نقش \"%(role)s\" برای \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "هیچکدام." @@ -75,42 +76,42 @@ msgstr "دیدن دسترسی ها" #: serializers.py:24 serializers.py:132 msgid "" "API URL pointing to the list of permissions for this access control list." -msgstr "" +msgstr "API URL اشاره گر به لیست اجازه های این دسترسی." #: serializers.py:57 msgid "" "API URL pointing to a permission in relation to the access control list to " "which it is attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "URL API اشاره به اجازه در رابطه با لیست کنترل دسترسی که به آن متصل است. این URL متفاوت از URL کارآفرینی کانونی است." #: serializers.py:87 msgid "Primary key of the new permission to grant to the access control list." -msgstr "" +msgstr "کلید اولیه مجوز جدید برای اعطای لیست کنترل دسترسی." #: serializers.py:111 serializers.py:187 #, python-format msgid "No such permission: %s" -msgstr "" +msgstr "این اجازه ئوجود ندارد: %s" #: serializers.py:126 msgid "" "Comma separated list of permission primary keys to grant to this access " "control list." -msgstr "" +msgstr "لیست مجوز از کلیدهای مجاز مجاز برای حذف این لیست کنترل دسترسی جداگانه را از یکدیگر جدا کنید." #: serializers.py:138 msgid "Primary keys of the role to which this access control list binds to." -msgstr "" +msgstr "کلید اصلی نقش که این لیست کنترل دسترسی به آن متصل می شود." #: views.py:74 #, python-format msgid "New access control lists for: %s" -msgstr "" +msgstr "لیست کنترل دسترسی جدید برای: %s" #: views.py:101 #, python-format msgid "Delete ACL: %s" -msgstr "" +msgstr "حذف لیست دسترسی ها: %s" #: views.py:139 #, python-format @@ -125,31 +126,31 @@ msgstr "مجوزهای موجود" msgid "Granted permissions" msgstr "مجوزهای داده شده" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" -msgstr "" +msgstr "نقش\"%(role)s\" دارای اجازه برای \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "مجوزهای غیرفعال، از شیء بالاتر به ارث رسیده‌اند." #: workflow_actions.py:25 msgid "Object type" -msgstr "" +msgstr "نوع شی" #: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "نوع شی که دسترسی به آن تغییر خواهد کرد." #: workflow_actions.py:34 msgid "Object ID" -msgstr "" +msgstr "شناسه اشیاء" #: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." -msgstr "" +msgstr "شناسه عددی شئی که دسترسی به آن تغییر خواهد کرد." #: workflow_actions.py:42 msgid "Roles" @@ -157,17 +158,17 @@ msgstr "نقش ها" #: workflow_actions.py:44 msgid "Roles whose access will be modified." -msgstr "" +msgstr "نقش هایی که دسترسی به آنها تغییر خواهد کرد." #: workflow_actions.py:51 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." -msgstr "" +msgstr "مجوز برای اعطای / لغو به / از نقش مورد انتخاب شده در بالا." #: workflow_actions.py:59 msgid "Grant access" -msgstr "" +msgstr "دادن دسترسی" #: workflow_actions.py:129 msgid "Revoke access" -msgstr "" +msgstr "لغو دسترسی" diff --git a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo index e8e87c0191..895ccdd911 100644 Binary files a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po index 8877fc5348..d3f0f09c6a 100644 --- a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po @@ -5,13 +5,14 @@ # Translators: # Christophe CHAUVET , 2016-2017 # Christophe CHAUVET , 2015 +# Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-04-11 14:37+0000\n" +"Last-Translator: Yves Dubois \n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,64 +20,64 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Droits" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permissions" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Rôle" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Autorisations" + +#: links.py:32 msgid "Delete" msgstr "Suppression" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nouveau droit" #: managers.py:57 managers.py:86 #, python-format msgid "Insufficient access for: %s" -msgstr "" - -#: models.py:54 -msgid "Access entry" -msgstr "Entrée d'accès" +msgstr "Droits d'accès insuffisants pour : %s" #: models.py:55 -msgid "Access entries" -msgstr "Entrées d'accès" +msgid "Access entry" +msgstr "Autorisation d'accès" -#: models.py:59 +#: models.py:56 +msgid "Access entries" +msgstr "Autorisations d'accès" + +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" -msgstr "Permissions \"%(permissions)s\" du rôle \"%(role)s\" pour \"%(object)s\"" +msgstr "Autorisations \"%(permissions)s\" du rôle \"%(role)s\" pour \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Aucun" #: permissions.py:7 msgid "Access control lists" -msgstr "Liste de contrôle des accès" +msgstr "Listes de contrôle des droits d'accès" #: permissions.py:10 msgid "Edit ACLs" -msgstr "Editer les droits" +msgstr "Éditer les droits" #: permissions.py:13 msgid "View ACLs" -msgstr "voir les droits d'accès" +msgstr "Voir les droits" #: serializers.py:24 serializers.py:132 msgid "" "API URL pointing to the list of permissions for this access control list." -msgstr "URL de l'API indiquant la liste des autorisations pour cette liste de contrôle d'accès." +msgstr "URL de l'API pointant vers la liste des autorisations pour cette liste de contrôle d'accès." #: serializers.py:57 msgid "" @@ -86,18 +87,18 @@ msgstr "URL de l'API pointant vers une autorisation en relation avec la liste de #: serializers.py:87 msgid "Primary key of the new permission to grant to the access control list." -msgstr "Clé principale de la nouvelle autorisation pour autoriser à la liste de contrôle d'accès." +msgstr "Clé principale de la nouvelle autorisation à accorder à la liste de contrôle d'accès." #: serializers.py:111 serializers.py:187 #, python-format msgid "No such permission: %s" -msgstr "Aucune autorisation de ce genre: %s" +msgstr "Aucune autorisation de ce genre : %s" #: serializers.py:126 msgid "" "Comma separated list of permission primary keys to grant to this access " "control list." -msgstr "Liste séparée par des virgules des clés primaires d'autorisation pour autoriser à cette liste de contrôle d'accès." +msgstr "Liste séparée par des virgules des clés primaires d'autorisation à accorder à cette liste de contrôle d'accès." #: serializers.py:138 msgid "Primary keys of the role to which this access control list binds to." @@ -106,51 +107,51 @@ msgstr "Clés primaires du rôle auquel cette liste de contrôle d'accès se rat #: views.py:74 #, python-format msgid "New access control lists for: %s" -msgstr "Nouvelle liste de contrôle d'accès pour: %s" +msgstr "Nouvelle liste de contrôle d'accès pour : %s" #: views.py:101 #, python-format msgid "Delete ACL: %s" -msgstr "Supprimer le droit: %s" +msgstr "Supprimer le droit : %s" #: views.py:139 #, python-format msgid "Access control lists for: %s" -msgstr "Liste des contrôle d'accès pour: %s" +msgstr "Liste de contrôle d'accès pour : %s" #: views.py:151 msgid "Available permissions" -msgstr "Permissions disponibles" +msgstr "Autorisations disponibles" #: views.py:152 msgid "Granted permissions" -msgstr "Permissions autorisées" +msgstr "Autorisations accordées" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" -msgstr "Permission du rôle \"%(role)s\" pour \"%(object)s\"@" +msgstr "Autorisation du rôle \"%(role)s\" pour \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." -msgstr "La désactivation de permission est hérité de l'objet parent" +msgstr "Les autorisations révoquées sont héritées de l'objet parent." #: workflow_actions.py:25 msgid "Object type" -msgstr "" +msgstr "Type d'objet" #: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "Type d'objet pour lequel les droits d'accès vont être modifiés." #: workflow_actions.py:34 msgid "Object ID" -msgstr "" +msgstr "Identifiant de l'objet" #: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." -msgstr "" +msgstr "Identifiant numérique de l'objet pour lequel les droits d'accès vont être modifiés." #: workflow_actions.py:42 msgid "Roles" @@ -158,17 +159,17 @@ msgstr "Rôles" #: workflow_actions.py:44 msgid "Roles whose access will be modified." -msgstr "" +msgstr "Rôles pour lesquels les droits d'accès vont être modifiés." #: workflow_actions.py:51 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." -msgstr "" +msgstr "Autorisations à accorder/révoquer au rôle pour l'objet sélectionné ci-dessus." #: workflow_actions.py:59 msgid "Grant access" -msgstr "" +msgstr "Accorder le droit d'accès" #: workflow_actions.py:129 msgid "Revoke access" -msgstr "" +msgstr "Révoquer le droit d'accès" diff --git a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo index ad662ebe47..1892c13abc 100644 Binary files a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po index ecee2fcab0..d5ae7f9867 100644 --- a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACL-ek" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Engedélyek" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Szerepkör" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Engedélyek" + +#: links.py:32 msgid "Delete" msgstr "Törlés" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Hozzáférési bejegyzés" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Hozzáférési bejegyzések" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Semmi" @@ -124,12 +124,12 @@ msgstr "Elérhető jogosúltságok" msgid "Granted permissions" msgstr "Élvezett jogosúltságok" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo index 25d6ae654b..4fa151041c 100644 Binary files a/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/id/LC_MESSAGES/django.po b/mayan/apps/acls/locale/id/LC_MESSAGES/django.po index f58da2e63f..42e149a68d 100644 --- a/mayan/apps/acls/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/id/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" "PO-Revision-Date: 2017-08-27 16:32+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" @@ -17,23 +17,23 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo index 2242b5e323..af141ff639 100644 Binary files a/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/it/LC_MESSAGES/django.po b/mayan/apps/acls/locale/it/LC_MESSAGES/django.po index a8d28775de..aa6b1bede6 100644 --- a/mayan/apps/acls/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/it/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-23 21:29+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" @@ -18,23 +18,23 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permessi" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Ruolo" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permessi" + +#: links.py:32 msgid "Delete" msgstr "Cancella" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nuova ACL" @@ -43,20 +43,20 @@ msgstr "Nuova ACL" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Voce di accesso" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Voci di accesso" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Permessi \"%(permissions)s\" del ruolo \"%(role)s\" per \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Nessuna " @@ -125,12 +125,12 @@ msgstr "Autorizzazioni disponibili " msgid "Granted permissions" msgstr "Autorizzazioni concesse " -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Il permesso disabilita è ereditato dall'oggetto padre" diff --git a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo index 12a01df2fe..31f6b390f4 100644 Binary files a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po index 92af3fc879..279ad59a3d 100644 --- a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -19,23 +19,23 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Authorisatielijsten" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permissies" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Gebruikersrol" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permissies" + +#: links.py:32 msgid "Delete" msgstr "Verwijder" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nieuwe authorisatielijst" @@ -44,20 +44,20 @@ msgstr "Nieuwe authorisatielijst" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Authorisatie invoer" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Authorisaties invoer" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Permissies \"%(permissions)s\" voor gebruikersrol \"%(role)s\" voor \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Geen" @@ -126,12 +126,12 @@ msgstr "Beschikbare permissies" msgid "Granted permissions" msgstr "Toegekende permissies" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Rol \"%(role)s\" permissies voor \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Uitgeschakelde permissies zijn geërfd van een parent object." diff --git a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo index ffaba327d3..570f9186e9 100644 Binary files a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po index 81bf25b352..1f57080f38 100644 --- a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Daniel Winiarski , 2017 # Wojtek Warczakowski , 2016 -# Wojtek Warczakowski , 2017 +# Wojtek Warczakowski , 2017-2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-01-22 19:19+0000\n" +"Last-Translator: Wojtek Warczakowski \n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,45 +20,45 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Listy ACL" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Uprawnienia" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Rola" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Uprawnienia" + +#: links.py:32 msgid "Delete" msgstr "Usuń" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nowa lista ACL" #: managers.py:57 managers.py:86 #, python-format msgid "Insufficient access for: %s" -msgstr "" +msgstr "Niewystarczający dostęp dla: %s" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Zgłoszenie dostępu" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Zgłoszenia dostępu" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Uprawnienia \"%(permissions)s\" dla roli \"%(role)s\" dotyczące \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Brak" @@ -126,31 +127,31 @@ msgstr "Dostępne uprawnienia" msgid "Granted permissions" msgstr "Przyznane uprawnienia" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Uprawnienia roli \"%(role)s\" dla obiektu \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego." #: workflow_actions.py:25 msgid "Object type" -msgstr "" +msgstr "Typ obiektu" #: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "Typ obiektu, dla którego dostęp zostanie zmodyfikowany." #: workflow_actions.py:34 msgid "Object ID" -msgstr "" +msgstr "ID obiektu" #: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." -msgstr "" +msgstr "Numeryczny identyfikator obiektu, dla którego dostęp zostanie zmodyfikowany." #: workflow_actions.py:42 msgid "Roles" @@ -158,17 +159,17 @@ msgstr "Role" #: workflow_actions.py:44 msgid "Roles whose access will be modified." -msgstr "" +msgstr "Role, których dostęp zostanie zmodyfikowany." #: workflow_actions.py:51 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." -msgstr "" +msgstr "Uprawnienia do nadawania/odwoływania do/z roli dla obiektu." #: workflow_actions.py:59 msgid "Grant access" -msgstr "" +msgstr "Przyznaj dostęp" #: workflow_actions.py:129 msgid "Revoke access" -msgstr "" +msgstr "Odwołaj dostęp" diff --git a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo index dcfa01cde7..b07fbe0159 100644 Binary files a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po index 9168f17c1d..c7c0879a4f 100644 --- a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACL's" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permissões" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permissões" + +#: links.py:32 msgid "Delete" msgstr "Eliminar" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Nenhum" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo index e5f6bd4dcf..bbe8b76bd7 100644 Binary files a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po index 42e7a40cdd..341412775a 100644 --- a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -19,23 +19,23 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Controle Acesso \"ACLs\"" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permissões" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Regras" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permissões" + +#: links.py:32 msgid "Delete" msgstr "Excluir" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Nova regra" @@ -44,20 +44,20 @@ msgstr "Nova regra" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Acesso entrada" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Entradas de acesso" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "Permissões \"%(permissions)s\" do papel \"%(role)s\" para \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Nenhum" @@ -126,12 +126,12 @@ msgstr "Permissões disponíveis" msgid "Granted permissions" msgstr "Permissões outorgadas" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "As permissões inativas foram herdadas de um objeto precedente." diff --git a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo index 3ce568ed09..69194d1aaf 100644 Binary files a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po index fb385715a7..52da3a9d03 100644 --- a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACL-uri" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Permisiuni" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Permisiuni" + +#: links.py:32 msgid "Delete" msgstr "Șterge" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Nici unul" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo index 7639fe975a..88b45a28f8 100644 Binary files a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po index 13a358f2e1..37cf2e86ab 100644 --- a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -18,23 +18,23 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "СУДы" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "Разрешения" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Роль" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "Разрешения" + +#: links.py:32 msgid "Delete" msgstr "Удалить" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Создать СУД" @@ -43,20 +43,20 @@ msgstr "Создать СУД" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Элемент доступа" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Элементы доступа" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Пусто" @@ -125,12 +125,12 @@ msgstr "Доступные разрешения" msgid "Granted permissions" msgstr "Предоставленные разрешения" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Права роли \"%(role)s\" для \"%(object)s\"" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Отключенные права наследуются от родительского объекта." diff --git a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo index 3858cbeee4..905529e1b5 100644 Binary files a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po index a275fd0ae8..567a4f7126 100644 --- a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# kontrabant , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-10-11 10:08+0000\n" +"Last-Translator: kontrabant \n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,45 +18,45 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Pravice" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 +#: apps.py:23 models.py:47 +msgid "Role" +msgstr "Vloga" + +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 msgid "Permissions" msgstr "Pravice" -#: apps.py:29 models.py:47 -msgid "Role" -msgstr "" - -#: links.py:31 +#: links.py:32 msgid "Delete" -msgstr "" +msgstr "Izbriši" -#: links.py:43 +#: links.py:45 msgid "New ACL" -msgstr "" +msgstr "Novi ACL" #: managers.py:57 managers.py:86 #, python-format msgid "Insufficient access for: %s" -msgstr "" +msgstr "Nezadosten dostop za: %s" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Vstopna točka" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Vstopne točke" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" -msgstr "" +msgstr "Dovoljenja \"%(permissions)s\" do vloge \"%(role)s\" za \"%(object)s\"" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Brez" @@ -74,42 +75,42 @@ msgstr "Preglej dostopne pravice" #: serializers.py:24 serializers.py:132 msgid "" "API URL pointing to the list of permissions for this access control list." -msgstr "" +msgstr "URL za API, ki kaže na seznam dovoljenj za ta nadzorni seznam dostopa." #: serializers.py:57 msgid "" "API URL pointing to a permission in relation to the access control list to " "which it is attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "UR API-ja, ki kaže na dovoljenae v zvezi s seznamom za nadzor dostopa, na katerega je priključen. Ta URL je drugačen od kanoničnega URL-ja poteka dela." #: serializers.py:87 msgid "Primary key of the new permission to grant to the access control list." -msgstr "" +msgstr "Primarni ključ novega dovoljenja za odobritev na seznamu za nadzor dostopa." #: serializers.py:111 serializers.py:187 #, python-format msgid "No such permission: %s" -msgstr "" +msgstr "Neobstoječe dovoljenje: %s" #: serializers.py:126 msgid "" "Comma separated list of permission primary keys to grant to this access " "control list." -msgstr "" +msgstr "Seznam primarnih ključev dovolilnic, ločenih z vejicami, za dodelitev tega seznama za nadzor dostopa." #: serializers.py:138 msgid "Primary keys of the role to which this access control list binds to." -msgstr "" +msgstr "Primarni ključi vloge, na katere se ta kontrolni seznam za dostop poveže." #: views.py:74 #, python-format msgid "New access control lists for: %s" -msgstr "" +msgstr "Novi seznami za nadzor dostopa za: %s" #: views.py:101 #, python-format msgid "Delete ACL: %s" -msgstr "" +msgstr "Brisanje ACL: %s" #: views.py:139 #, python-format @@ -118,37 +119,37 @@ msgstr "Dostopne pravice za %s" #: views.py:151 msgid "Available permissions" -msgstr "" +msgstr "Razpoložljiva dovoljenja" #: views.py:152 msgid "Granted permissions" -msgstr "" +msgstr "Dodeljena dovoljenja" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" -msgstr "" +msgstr "Vloga »%(role)s« dovoljenja za »%(object)s«" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." -msgstr "" +msgstr "Onemogočena dovoljenja so podedovana od nadrejenega objekta." #: workflow_actions.py:25 msgid "Object type" -msgstr "" +msgstr "Vrsta objekta" #: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "Vrsta predmeta, za katerega bo dostop spremenjen." #: workflow_actions.py:34 msgid "Object ID" -msgstr "" +msgstr "ID objekta" #: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." -msgstr "" +msgstr "Številčni identifikator predmeta, za katerega bo dostop spremenjen." #: workflow_actions.py:42 msgid "Roles" @@ -156,17 +157,17 @@ msgstr "Vloge" #: workflow_actions.py:44 msgid "Roles whose access will be modified." -msgstr "" +msgstr "Vloge, katerih dostop bo spremenjen." #: workflow_actions.py:51 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." -msgstr "" +msgstr "Dovoljenja za odobritev/preklic v/iz vlog za zgoraj izbrani objekt." #: workflow_actions.py:59 msgid "Grant access" -msgstr "" +msgstr "Dovoli dostop" #: workflow_actions.py:129 msgid "Revoke access" -msgstr "" +msgstr "Prekliči dostop" diff --git a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo index 65b29248ff..9c91f3c268 100644 Binary files a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po index 4b9aea1565..9bc74771a5 100644 --- a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po @@ -8,33 +8,33 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 21:28+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "Erişim Kontrol Listeleri" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "İzinler" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "Rol" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "İzinler" + +#: links.py:32 msgid "Delete" msgstr "Sil" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "Yeni Erişim Kontrol Listesi" @@ -43,20 +43,20 @@ msgstr "Yeni Erişim Kontrol Listesi" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "Erişim Girişi" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "Erişim Girişleri" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "\"%(permissions)s\", \"%(object)s\" için \"%(role)s\" rolüne izinler" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "Yok" @@ -125,12 +125,12 @@ msgstr "Kullanılabilir izinler" msgid "Granted permissions" msgstr "İzinler izin verildi" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "\"%(role)s\" yetkisi \"%(object)s\" için rol" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "Devre Dışı İzinler üst nesneden devralınır." diff --git a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo index 32c2495be6..e0d2b21c8d 100644 Binary files a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po index 65ca0cc25a..32292bf3f3 100644 --- a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "ACLs" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "None" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.mo index 55dc31d285..fe598e3dac 100644 Binary files a/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.po b/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.po index af15e834eb..b01e82f74e 100644 --- a/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/zh_CN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 16:32+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2017-09-22 13:25+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -17,23 +17,23 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:15 links.py:35 links.py:39 +#: apps.py:15 links.py:37 links.py:41 msgid "ACLs" msgstr "访问控制列表" -#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48 -msgid "Permissions" -msgstr "权限" - -#: apps.py:29 models.py:47 +#: apps.py:23 models.py:47 msgid "Role" msgstr "" -#: links.py:31 +#: apps.py:26 links.py:50 models.py:43 workflow_actions.py:48 +msgid "Permissions" +msgstr "权限" + +#: links.py:32 msgid "Delete" msgstr "" -#: links.py:43 +#: links.py:45 msgid "New ACL" msgstr "" @@ -42,20 +42,20 @@ msgstr "" msgid "Insufficient access for: %s" msgstr "" -#: models.py:54 +#: models.py:55 msgid "Access entry" msgstr "访问入口" -#: models.py:55 +#: models.py:56 msgid "Access entries" msgstr "多个访问入口" -#: models.py:59 +#: models.py:60 #, python-format msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\"" msgstr "" -#: models.py:76 +#: models.py:77 msgid "None" msgstr "无" @@ -124,12 +124,12 @@ msgstr "" msgid "Granted permissions" msgstr "" -#: views.py:207 +#: views.py:214 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" -#: views.py:227 +#: views.py:234 msgid "Disabled permissions are inherited from a parent object." msgstr "" diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index 1f2173f4a9..bedddd3d39 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -8,7 +8,7 @@ from django.db import models from django.db.models import Q from django.utils.translation import ugettext, ugettext_lazy as _ -from common.utils import return_attrib +from common.utils import return_attrib, return_related from permissions import Permission from permissions.models import StoredPermission @@ -92,8 +92,10 @@ class AccessControlListManager(models.Manager): def filter_by_access(self, permission, user, queryset): if user.is_superuser or user.is_staff: - logger.debug('Unfiltered queryset returned to user "%s" as superuser or staff', - user) + logger.debug( + 'Unfiltered queryset returned to user "%s" as superuser or staff', + user + ) return queryset try: @@ -115,7 +117,7 @@ class AccessControlListManager(models.Manager): else: instance = queryset.first() if instance: - parent_object = getattr(instance, parent_accessor) + parent_object = return_related(instance, parent_accessor) try: # Try to see if parent_object is a function diff --git a/mayan/apps/acls/migrations/0003_auto_20180402_0339.py b/mayan/apps/acls/migrations/0003_auto_20180402_0339.py new file mode 100644 index 0000000000..1b00baf213 --- /dev/null +++ b/mayan/apps/acls/migrations/0003_auto_20180402_0339.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.11 on 2018-04-02 03:39 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('acls', '0002_auto_20150703_0513'), + ] + + operations = [ + migrations.AlterModelOptions( + name='accesscontrollist', + options={'ordering': ('pk',), 'verbose_name': 'Access entry', 'verbose_name_plural': 'Access entries'}, + ), + ] diff --git a/mayan/apps/acls/models.py b/mayan/apps/acls/models.py index 4c972ef285..171938c8be 100644 --- a/mayan/apps/acls/models.py +++ b/mayan/apps/acls/models.py @@ -30,8 +30,8 @@ class AccessControlList(models.Model): in the Setup menu. """ content_type = models.ForeignKey( - ContentType, on_delete=models.CASCADE, - related_name='object_content_type' + on_delete=models.CASCADE, related_name='object_content_type', + to=ContentType ) object_id = models.PositiveIntegerField() content_object = GenericForeignKey( @@ -39,17 +39,18 @@ class AccessControlList(models.Model): ) # TODO: limit choices to the permissions valid for the content_object permissions = models.ManyToManyField( - StoredPermission, blank=True, related_name='acls', + blank=True, related_name='acls', to=StoredPermission, verbose_name=_('Permissions') ) role = models.ForeignKey( - Role, on_delete=models.CASCADE, related_name='acls', + on_delete=models.CASCADE, related_name='acls', to=Role, verbose_name=_('Role') ) objects = AccessControlListManager() class Meta: + ordering = ('pk',) unique_together = ('content_type', 'object_id', 'role') verbose_name = _('Access entry') verbose_name_plural = _('Access entries') diff --git a/mayan/apps/acls/tests/test_api.py b/mayan/apps/acls/tests/test_api.py index ec74d12d74..42d1c61fc5 100644 --- a/mayan/apps/acls/tests/test_api.py +++ b/mayan/apps/acls/tests/test_api.py @@ -1,40 +1,25 @@ from __future__ import absolute_import, unicode_literals -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.test import override_settings -from django.urls import reverse - -from rest_framework.test import APITestCase from documents.models import DocumentType from documents.permissions import permission_document_view from documents.tests.literals import ( TEST_DOCUMENT_TYPE_LABEL, TEST_SMALL_DOCUMENT_PATH ) -from permissions.classes import Permission -from permissions.models import Role from permissions.tests.literals import TEST_ROLE_LABEL -from user_management.tests.literals import ( - TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME -) +from rest_api.tests import BaseAPITestCase from ..models import AccessControlList from ..permissions import permission_acl_view @override_settings(OCR_AUTO_OCR=False) -class ACLAPITestCase(APITestCase): +class ACLAPITestCase(BaseAPITestCase): def setUp(self): - self.admin_user = get_user_model().objects.create_superuser( - username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL, - password=TEST_ADMIN_PASSWORD - ) - - self.client.login( - username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD - ) - + super(ACLAPITestCase, self).setUp() + self.login_admin_user() self.document_type = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_LABEL ) @@ -44,12 +29,9 @@ class ACLAPITestCase(APITestCase): file_object=file_object ) - self.role = Role.objects.create(label=TEST_ROLE_LABEL) - self.document_content_type = ContentType.objects.get_for_model( self.document ) - Permission.invalidate_cache() def tearDown(self): if hasattr(self, 'document_type'): @@ -66,14 +48,12 @@ class ACLAPITestCase(APITestCase): def test_object_acl_list_view(self): self._create_acl() - response = self.client.get( - reverse( - 'rest_api:accesscontrollist-list', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk - ) + response = self.get( + viewname='rest_api:accesscontrollist-list', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk ) ) @@ -88,14 +68,12 @@ class ACLAPITestCase(APITestCase): def test_object_acl_delete_view(self): self._create_acl() - response = self.client.delete( - reverse( - 'rest_api:accesscontrollist-detail', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk - ) + response = self.delete( + viewname='rest_api:accesscontrollist-detail', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk ) ) @@ -105,14 +83,12 @@ class ACLAPITestCase(APITestCase): def test_object_acl_detail_view(self): self._create_acl() - response = self.client.get( - reverse( - 'rest_api:accesscontrollist-detail', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk - ) + response = self.get( + viewname='rest_api:accesscontrollist-detail', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk ) ) self.assertEqual( @@ -127,15 +103,13 @@ class ACLAPITestCase(APITestCase): self._create_acl() permission = self.acl.permissions.first() - response = self.client.delete( - reverse( - 'rest_api:accesscontrollist-permission-detail', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk, - permission.pk - ) + response = self.delete( + viewname='rest_api:accesscontrollist-permission-detail', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk, + permission.pk ) ) self.assertEqual(response.status_code, 204) @@ -145,15 +119,13 @@ class ACLAPITestCase(APITestCase): self._create_acl() permission = self.acl.permissions.first() - response = self.client.get( - reverse( - 'rest_api:accesscontrollist-permission-detail', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk, - permission.pk - ) + response = self.get( + viewname='rest_api:accesscontrollist-permission-detail', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk, + permission.pk ) ) @@ -164,14 +136,12 @@ class ACLAPITestCase(APITestCase): def test_object_acl_permission_list_view(self): self._create_acl() - response = self.client.get( - reverse( - 'rest_api:accesscontrollist-permission-list', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk - ) + response = self.get( + viewname='rest_api:accesscontrollist-permission-list', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk ) ) @@ -183,14 +153,12 @@ class ACLAPITestCase(APITestCase): def test_object_acl_permission_list_post_view(self): self._create_acl() - response = self.client.post( - reverse( - 'rest_api:accesscontrollist-permission-list', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk, self.acl.pk - ) + response = self.post( + viewname='rest_api:accesscontrollist-permission-list', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk, self.acl.pk ), data={'permission_pk': permission_acl_view.pk} ) @@ -203,14 +171,12 @@ class ACLAPITestCase(APITestCase): ) def test_object_acl_post_no_permissions_added_view(self): - response = self.client.post( - reverse( - 'rest_api:accesscontrollist-list', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk - ) + response = self.post( + viewname='rest_api:accesscontrollist-list', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk ), data={'role_pk': self.role.pk} ) @@ -226,14 +192,12 @@ class ACLAPITestCase(APITestCase): ) def test_object_acl_post_with_permissions_added_view(self): - response = self.client.post( - reverse( - 'rest_api:accesscontrollist-list', - args=( - self.document_content_type.app_label, - self.document_content_type.model, - self.document.pk - ) + response = self.post( + viewname='rest_api:accesscontrollist-list', + args=( + self.document_content_type.app_label, + self.document_content_type.model, + self.document.pk ), data={ 'role_pk': self.role.pk, 'permissions_pk_list': permission_acl_view.pk diff --git a/mayan/apps/acls/tests/test_links.py b/mayan/apps/acls/tests/test_links.py index 8722d3032c..0ccc5ca63c 100644 --- a/mayan/apps/acls/tests/test_links.py +++ b/mayan/apps/acls/tests/test_links.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.contrib.contenttypes.models import ContentType from django.urls import reverse -from documents.tests.test_views import GenericDocumentViewTestCase +from documents.tests import GenericDocumentViewTestCase from ..links import ( link_acl_delete, link_acl_list, link_acl_create, link_acl_permissions diff --git a/mayan/apps/acls/tests/test_views.py b/mayan/apps/acls/tests/test_views.py index 5c87c33c8e..7c77c7b734 100644 --- a/mayan/apps/acls/tests/test_views.py +++ b/mayan/apps/acls/tests/test_views.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType -from documents.tests.test_views import GenericDocumentViewTestCase +from documents.tests import GenericDocumentViewTestCase from ..models import AccessControlList from ..permissions import permission_acl_edit, permission_acl_view @@ -82,7 +82,6 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase): Test creating a duplicate ACL entry: same object & role Result: Should redirect to existing ACL for object + role combination """ - acl = AccessControlList.objects.create( content_object=self.document, role=self.role ) @@ -110,7 +109,6 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase): Test creating an ACL entry for an object with no model permissions. Result: Should display a blank permissions list (not optgroup) """ - self.login_user() self.role.permissions.add( diff --git a/mayan/apps/acls/urls.py b/mayan/apps/acls/urls.py index 325dccb67a..ea0adb9d8b 100644 --- a/mayan/apps/acls/urls.py +++ b/mayan/apps/acls/urls.py @@ -28,19 +28,19 @@ urlpatterns = [ api_urls = [ url( - r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/$', + r'^objects/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/$', APIObjectACLListView.as_view(), name='accesscontrollist-list' ), url( - r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/$', + r'^objects/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/$', APIObjectACLView.as_view(), name='accesscontrollist-detail' ), url( - r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/permissions/$', + r'^objects/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/permissions/$', APIObjectACLPermissionListView.as_view(), name='accesscontrollist-permission-list' ), url( - r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/permissions/(?P\d+)/$', + r'^objects/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/acls/(?P\d+)/permissions/(?P\d+)/$', APIObjectACLPermissionView.as_view(), name='accesscontrollist-permission-detail' ), ] diff --git a/mayan/apps/acls/views.py b/mayan/apps/acls/views.py index 9f156e1fc3..3e4c8d60de 100644 --- a/mayan/apps/acls/views.py +++ b/mayan/apps/acls/views.py @@ -155,6 +155,13 @@ class ACLPermissionsView(AssignRemoveView): def generate_choices(entries): results = [] + entries = sorted( + entries, key=lambda x: ( + x.get_volatile_permission().namespace.label, + x.get_volatile_permission().label + ) + ) + for namespace, permissions in itertools.groupby(entries, lambda entry: entry.namespace): permission_options = [ (force_text(permission.pk), permission) for permission in permissions diff --git a/mayan/apps/appearance/classes.py b/mayan/apps/appearance/classes.py new file mode 100644 index 0000000000..7089779201 --- /dev/null +++ b/mayan/apps/appearance/classes.py @@ -0,0 +1,39 @@ +from __future__ import unicode_literals + +from django.template import Context, Template + + +class IconDriver(object): + _registry = {} + + @classmethod + def get(cls, name): + return cls._registry[name] + + @classmethod + def register(cls, driver_class): + cls._registry[driver_class.name] = driver_class + + +class FontAwesomeDriver(IconDriver): + name = 'fontawesome' + template_text = '' + + def __init__(self, symbol): + self.symbol = symbol + + def render(self): + return Template(self.template_text).render( + context=Context({'symbol': self.symbol}) + ) + + +class Icon(object): + def __init__(self, driver_name, **kwargs): + self.driver = IconDriver.get(name=driver_name)(**kwargs) + + def render(self, **kwargs): + return self.driver.render(**kwargs) + + +IconDriver.register(driver_class=FontAwesomeDriver) diff --git a/mayan/apps/appearance/licenses.py b/mayan/apps/appearance/licenses.py index abb148ea7f..0f4180e2d0 100644 --- a/mayan/apps/appearance/licenses.py +++ b/mayan/apps/appearance/licenses.py @@ -26,9 +26,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''') -Package(label='Animate.css', license_text=''' -Animate.css is licensed under the MIT license. (http://opensource.org/licenses/MIT) -''') Package(label='Bootswatch', license_text=''' The MIT License (MIT) diff --git a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo index b345361d65..a864ae6355 100644 Binary files a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po index 53f20e1a92..2ca7df6cef 100644 --- a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "لم يتم العثور على الصفحة" msgid "Sorry, but the requested page could not be found." msgstr "عفواً، لا يمكن العثور على الصفحة المطلوبة." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "الاصدار" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "الإجراءات" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "لا" msgid "required" msgstr "مطلوب" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "حفظ" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "إلغاء" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "معرف" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Login" @@ -215,43 +220,44 @@ msgstr "Login" msgid "First time login" msgstr "First time login" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "You have just finished installing Mayan EDMS, congratulations!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Login using the following credentials:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Username: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Be sure to change the password to increase security and to disable this message." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo index 74287bae46..5830b6e8d4 100644 Binary files a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po index 7d83ac7db9..383995ff7b 100644 --- a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "Страницата не е намерена" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "Версия" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Действия" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "Не" msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Запазване" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Подаване" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Отказ" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Идентификатор" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Влез" @@ -215,43 +220,44 @@ msgstr "Влез" msgid "First time login" msgstr "Логване за първи път" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Вие приключихте инсталирането на Mayan EDMS, поздравления!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Логване, използвайки следните параметри:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Потребителско име: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Парола: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Моля променете паролата, за да повишите нивото на сигурност и да деактивирате това съобщение." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo index e778d94141..051593c960 100644 Binary files a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po index f25be1b669..2e221abe31 100644 --- a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "Stranica nije pronađena" msgid "Sorry, but the requested page could not be found." msgstr "Žao nam je, ali tražena stranica ne može biti pronađena." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "Verzija" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Akcije" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "Ne" msgid "required" msgstr "potrebno" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Sačuvati" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Podnijeti" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Otkazati" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identifikator" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Prijava" @@ -215,43 +220,44 @@ msgstr "Prijava" msgid "First time login" msgstr "Prijava - prvi put" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Upravo ste završili instalaciju Mayan EDMS, čestitamo!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Prijava korištenjem sljedećih podataka:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Korisnik: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Pasvord: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Ne zaboravite promijeniti pasvord da pojačate sigurnost i onemogućite dalje prikazivanje ove poruke." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/da/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/da/LC_MESSAGES/django.mo index 5010efa6b2..0c51b1e176 100644 Binary files a/mayan/apps/appearance/locale/da/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/da/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/da/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/da/LC_MESSAGES/django.po index dabd729791..e9b7f095f2 100644 --- a/mayan/apps/appearance/locale/da/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/da/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "Version" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Handlinger" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "" msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Log ind" @@ -215,43 +220,44 @@ msgstr "Log ind" msgid "First time login" msgstr "" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format -msgid "Password: %(password)s" +msgid "Email: %(email)s" msgstr "" #: templates/authentication/login.html:29 +#, python-format +msgid "Password: %(password)s" +msgstr "" + +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo index 30e5ccb03e..85914d1bb9 100644 Binary files a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po index c96fcb547d..8e1705f7a7 100644 --- a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" @@ -39,7 +39,7 @@ msgstr "Seite nicht gefunden" msgid "Sorry, but the requested page could not be found." msgstr "Die angeforderte Seite konnte leider nicht gefunden werden" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Serverfehler" @@ -49,12 +49,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Es kam zu einem Fehler. Der Fehler wurde per E-Mail and die Administratoren gemeldet und sollte bald behoben werden. Vielen Dank für Ihre Geduld." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Wenn Sie Hilfe brauchen, können Sie den Fehler über folgende Kennung referenzieren: " - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Über" @@ -68,24 +62,20 @@ msgstr "Version" msgid "Build number: %(build_number)s" msgstr "Build Nummer: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Veröffentlicht unter der Apache 2.0 Lizenz" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Warnung" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Navigation ein-/ausschalten" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Aktionen" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Ausklappmenü ein-/ausschalten" @@ -136,31 +126,30 @@ msgstr "Nein" msgid "required" msgstr "erforderlich" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Kein Ergebnis" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Speichern" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Absenden" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Abbrechen" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Kein Ergebnis" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -177,7 +166,7 @@ msgstr "Gesamt (%(start)s - %(end)s von %(total)s) (Seite %(page_number)s von %( msgid "Total: %(total)s" msgstr "Gesamt: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Bezeichner" @@ -209,6 +198,22 @@ msgstr "Erweitert" msgid "Search documents" msgstr "Dokumente durchsuchen" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Navigation ein-/ausschalten" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Login" @@ -217,43 +222,44 @@ msgstr "Login" msgid "First time login" msgstr "Erstanmeldung" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Herzlichen Glückwunsch! Sie haben die Installation von Mayan EDMS erfolgreich abgeschlossen. " - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Einloggen mit folgenden Zugangsdaten:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Benutzername: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "E-Mail: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Passwort: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Bitte ändern Sie das Passwort, um die Sicherheit zu erhöhen und diese Nachricht zu deaktivieren." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Anmelden" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.mo index b6dcbc54c0..6c5906d1cd 100644 Binary files a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po index dd53304954..c5f12d6469 100644 --- a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,7 +37,7 @@ msgstr "" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "" msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "" @@ -215,43 +220,44 @@ msgstr "" msgid "First time login" msgstr "" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format -msgid "Password: %(password)s" +msgid "Email: %(email)s" msgstr "" #: templates/authentication/login.html:29 +#, python-format +msgid "Password: %(password)s" +msgstr "" + +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo index 5bb793107b..76c83288fd 100644 Binary files a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po index 0f8cd12b39..bb72d02aec 100644 --- a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po @@ -3,13 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Roberto Rosario, 2015-2017 +# Roberto Rosario, 2015-2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-27 17:01+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -38,7 +38,7 @@ msgstr "Página no encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Lo sentimos, pero no se pudo encontrar la página solicitada." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Error de servidor" @@ -48,12 +48,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Ha habido un error. Se ha informado a los administradores del sitio vía e-mail y debería corregirse en breve. Gracias por su paciencia." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Si necesita ayuda, puede hacer referencia a este error mediante el siguiente identificador:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Sobre" @@ -67,24 +61,20 @@ msgstr "Versión" msgid "Build number: %(build_number)s" msgstr "Número de compilación: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Liberado bajo la licencia Apache 2.0" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "Publicado bajo la licencia:" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Todos los derechos reservados © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Advertencia" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Activar/Desactivar navegación" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Acciones" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Alternar desplegable" @@ -135,31 +125,30 @@ msgstr "No" msgid "required" msgstr "requerido" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Ningún resultado" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Guardar" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Ningún resultado" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -176,7 +165,7 @@ msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(t msgid "Total: %(total)s" msgstr "Total: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identificador" @@ -208,6 +197,22 @@ msgstr "Avanzada" msgid "Search documents" msgstr "Buscar documentos" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Activar/Desactivar navegación" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "Cerrar" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "Error de comunicación del servidor" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "Verifique su conexión de red y vuelva a intentarlo en unos momentos." + #: templates/authentication/login.html:10 msgid "Login" msgstr "Iniciar sesión" @@ -216,43 +221,44 @@ msgstr "Iniciar sesión" msgid "First time login" msgstr "Primer inicio de sesión" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "!Felicitaciones! Acaba de terminar de instalar Mayan EDMS" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "Acaba de instalar %(project_title)s, ¡felicidades!" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Inicie sesión con las siguientes credenciales:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Usuario: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Correo electrónico: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Contraseña: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Asegúrese de cambiar su contraseña para aumentar la seguridad y para desactivar este mensaje" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Entrar" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "¿Olvidaste tu contraseña?" diff --git a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo index eb83deb847..f0e4861fe9 100644 Binary files a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po index a0c023d4b8..5cc8ed1405 100644 --- a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po @@ -3,23 +3,24 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Mehdi Amani , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:12 settings.py:9 msgid "Appearance" -msgstr "" +msgstr "ظاهر" #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" @@ -37,21 +38,15 @@ msgstr "صفحه پیدا نشد." msgid "Sorry, but the requested page could not be found." msgstr "متاسفانه صفحه درخواستی پیدا نشد." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" -msgstr "" +msgstr "خطای سرور" #: templates/500.html:11 msgid "" "There's been an error. It's been reported to the site administrators via " "e-mail and should be fixed shortly. Thanks for your patience." -msgstr "" - -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" +msgstr "یک خطا وجود دارد از طریق پست الکترونیکی به مدیران سایت گزارش شده است و باید به زودی تنظیم شود. از صبر و شکیبایی شما متشکریم" #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" @@ -64,28 +59,24 @@ msgstr "نسخه" #: templates/appearance/about.html:64 #, python-format msgid "Build number: %(build_number)s" +msgstr "شماره ساخت: %(build_number)s" + +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "تحت لیسانس Apache 2.0" - -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "کپی رایت و کپی" - -#: templates/appearance/base.html:56 -msgid "Toggle navigation" +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "عملیات" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" -msgstr "" +msgstr "تغییر وضعیت dropdown" #: templates/appearance/calculate_form_title.html:16 #, python-format @@ -103,7 +94,7 @@ msgstr "ایجاد" #: templates/appearance/dashboard_widget.html:25 msgid "View details" -msgstr "" +msgstr "دیدن جزئیات" #: templates/appearance/generic_confirm.html:6 #: templates/appearance/generic_confirm.html:13 @@ -117,7 +108,7 @@ msgstr "تائید حذف" #: templates/appearance/generic_confirm.html:27 #, python-format msgid "Delete: %(object)s?" -msgstr "" +msgstr "حذف: %(object)s" #: templates/appearance/generic_confirm.html:48 msgid "Yes" @@ -134,38 +125,37 @@ msgstr "خیر" msgid "required" msgstr "الزامی" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "بی جواب و یا بی جواب" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "ذخیره" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "لغو" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "بی جواب و یا بی جواب" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format msgid "" "Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " "%(total_pages)s)" -msgstr "" +msgstr "مجموع (%(start)s - %(end)s از %(total)s) (صفحه %(page_number)s از %(total_pages)s)" #: templates/appearance/generic_list_items_subtemplate.html:26 #: templates/appearance/generic_list_items_subtemplate.html:29 @@ -173,27 +163,27 @@ msgstr "" #: templates/appearance/generic_list_subtemplate.html:17 #, python-format msgid "Total: %(total)s" -msgstr "" +msgstr "مجموع: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "مشخصه Identifier" #: templates/appearance/home.html:9 templates/appearance/home.html:21 msgid "Dashboard" -msgstr "" +msgstr "داشبورد" #: templates/appearance/home.html:30 msgid "Getting started" -msgstr "" +msgstr "شروع کردن" #: templates/appearance/home.html:33 msgid "Before you can fully use Mayan EDMS you need the following:" -msgstr "" +msgstr "قبل از اینکه بتوانید به طور کامل از EDMS مایان استفاده کنید، به موارد زیر نیاز دارید:" #: templates/appearance/home.html:54 msgid "Search pages" -msgstr "" +msgstr "صفحات جستجو" #: templates/appearance/home.html:56 templates/appearance/home.html:66 msgid "Search" @@ -201,10 +191,26 @@ msgstr "جستجو" #: templates/appearance/home.html:57 templates/appearance/home.html:67 msgid "Advanced" -msgstr "" +msgstr "پیشرفته" #: templates/appearance/home.html:64 msgid "Search documents" +msgstr "جستجو اسناد" + +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "تغییر ناوبری" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." msgstr "" #: templates/authentication/login.html:10 @@ -215,45 +221,46 @@ msgstr "لاگین" msgid "First time login" msgstr "دفعه اول لاگین " -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "You have just finished installing Mayan EDMS, congratulations!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "نام کاربری و پسورد زیر را استفاده کنید" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Username: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "برای امنیت بیشتر پسورد خود را تغییر دهید" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" -msgstr "" +msgstr "ورود" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" -msgstr "" +msgstr "رمز عبور خود را فراموش کرده اید؟" #: templates/authentication/password_reset_complete.html:8 #: templates/authentication/password_reset_confirm.html:8 @@ -262,19 +269,19 @@ msgstr "" #: templates/authentication/password_reset_form.html:8 #: templates/authentication/password_reset_form.html:20 msgid "Password reset" -msgstr "" +msgstr "تنظیم مجدد رمز عبور" #: templates/authentication/password_reset_complete.html:15 msgid "Password reset complete! Click the link below to login." -msgstr "" +msgstr "تنظیم مجدد رمز عبور کامل است! روی لینک زیر کلیک کنید تا وارد شوید" #: templates/authentication/password_reset_complete.html:17 msgid "Login page" -msgstr "" +msgstr "صفحه ورود" #: templates/authentication/password_reset_done.html:15 msgid "Password reset email sent!" -msgstr "" +msgstr "ایمیل فرستادن تنظیم مجدد" #: templatetags/appearance_tags.py:16 msgid "None" diff --git a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo index c8927e609a..5c8436d33a 100644 Binary files a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po index 66c99991fd..3fb0107a45 100644 --- a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po @@ -4,14 +4,16 @@ # # Translators: # Christophe CHAUVET , 2017 +# Frédéric Escudero , 2017 # Thierry Schott , 2016 +# Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-24 19:27+0000\n" -"Last-Translator: Christophe CHAUVET \n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,7 +31,7 @@ msgstr "Droits insuffisants" #: templates/403.html:11 msgid "You don't have enough permissions for this operation." -msgstr "Vous n'avez pas les permissions requises pour cette opération." +msgstr "Vous n'avez pas les autorisations requises pour cette opération." #: templates/404.html:5 templates/404.html:9 msgid "Page not found" @@ -39,7 +41,7 @@ msgstr "Page non trouvée" msgid "Sorry, but the requested page could not be found." msgstr "Désolé, la page demandée n'a pu être trouvée." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Erreur du serveur" @@ -49,12 +51,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Une erreur vient de se produire. Elle a été signalée aux administrateurs du site par courriel et devrait être résolue rapidement. Merci de votre patience." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Si vous avez besoin d'assistance, vous pouvez faire référence à cette erreur grâce à l'identifiant suivant :" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "A propos" @@ -68,24 +64,20 @@ msgstr "Version" msgid "Build number: %(build_number)s" msgstr "Numéro de build : %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Publié sous licence Apache 2.0" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "Publié sous la licence :" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Avertissement" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Activer la navigation" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Actions" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Activer la liste déroulante" @@ -97,7 +89,7 @@ msgstr "Détails de : %(object)s " #: templates/appearance/calculate_form_title.html:19 #, python-format msgid "Edit: %(object)s" -msgstr "Modifie r: %(object)s" +msgstr "Modifier : %(object)s" #: templates/appearance/calculate_form_title.html:21 msgid "Create" @@ -136,38 +128,37 @@ msgstr "Non" msgid "required" msgstr "Requis" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Pas de résultats" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Enregistrer" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Soumettre" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Annuler" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Pas de résultats" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format msgid "" "Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " "%(total_pages)s)" -msgstr "Total (%(start)s - %(end)s surof %(total)s) (Page %(page_number)s sur %(total_pages)s)" +msgstr "Total (%(start)s - %(end)s sur %(total)s) (Page %(page_number)s sur %(total_pages)s)" #: templates/appearance/generic_list_items_subtemplate.html:26 #: templates/appearance/generic_list_items_subtemplate.html:29 @@ -177,7 +168,7 @@ msgstr "Total (%(start)s - %(end)s surof %(total)s) (Page %(page_number)s sur %( msgid "Total: %(total)s" msgstr "Total : %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identifiant" @@ -209,6 +200,22 @@ msgstr "Avancé" msgid "Search documents" msgstr "Rechercher des documents" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Activer la navigation" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "Fermer" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "Erreur de communication serveur" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "Vérifiez votre connexion réseau et réessayez dans quelques instants." + #: templates/authentication/login.html:10 msgid "Login" msgstr "Connexion" @@ -217,43 +224,44 @@ msgstr "Connexion" msgid "First time login" msgstr "Première connexion" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Vous venez de finaliser l'installation de Mayan EDMS, félicitations!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "Vous venez d'installer %(project_title)s, félicitations!" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Connectez-vous en utilisant les informations d'identification suivantes :" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Nom d'utilisateur : %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Courriel : %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Mot de passe : %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." -msgstr "Assurez-vous de modifier votre mot de passe pour accroître la sécurité et pour ne plus avoir ce message." +msgstr "Assurez-vous de modifier votre mot de passe pour accroître la sécurité et pour ne plus afficher ce message." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Connexion" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "Mot de passe oublié?" @@ -268,7 +276,7 @@ msgstr "Réinitialiser le mot de passe" #: templates/authentication/password_reset_complete.html:15 msgid "Password reset complete! Click the link below to login." -msgstr "Réinitialisation du mot de passe terminée Cliquez sur le lien ci-dessous pour vous connecter." +msgstr "Réinitialisation du mot de passe terminée! Cliquez sur le lien ci-dessous pour vous connecter." #: templates/authentication/password_reset_complete.html:17 msgid "Login page" @@ -276,7 +284,7 @@ msgstr "Page de connexion" #: templates/authentication/password_reset_done.html:15 msgid "Password reset email sent!" -msgstr "Réinitialisation du mot de passe envoyé!" +msgstr "Courriel de réinitialisation du mot de passe envoyé!" #: templatetags/appearance_tags.py:16 msgid "None" diff --git a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo index 76ac27e5ed..878a1d4b00 100644 Binary files a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po index 251beec4d0..4ce26e4053 100644 --- a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-08-05 14:42+0000\n" -"Last-Translator: molnars \n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,7 +38,7 @@ msgstr "Oldal nem található" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -48,12 +48,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -67,24 +61,20 @@ msgstr "Verzió" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Műveletek" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -135,31 +125,30 @@ msgstr "Nem" msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -176,7 +165,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "" @@ -208,6 +197,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Bejelentkezés" @@ -216,43 +221,44 @@ msgstr "Bejelentkezés" msgid "First time login" msgstr "" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format -msgid "Password: %(password)s" +msgid "Email: %(email)s" msgstr "" #: templates/authentication/login.html:29 +#, python-format +msgid "Password: %(password)s" +msgstr "" + +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo index 2540c461a3..5a862a99a0 100644 Binary files a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po index d7b0448b5e..c21bd4ef5e 100644 --- a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Tentang" @@ -66,24 +60,20 @@ msgstr "" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "" msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "" @@ -215,43 +220,44 @@ msgstr "" msgid "First time login" msgstr "" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format -msgid "Password: %(password)s" +msgid "Email: %(email)s" msgstr "" #: templates/authentication/login.html:29 +#, python-format +msgid "Password: %(password)s" +msgstr "" + +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo index 5aa76f8782..ee0c88cece 100644 Binary files a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po index 0982d31c92..fada4a8dcf 100644 --- a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Andrea Evangelisti , 2018 # Marco Camplese , 2016-2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-10 07:11+0000\n" -"Last-Translator: Marco Camplese \n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,7 +39,7 @@ msgstr "Pagina non trovata" msgid "Sorry, but the requested page could not be found." msgstr "Scusa ma la pagina richiesta non è disponibile" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Errore del server" @@ -48,12 +49,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "C'è stato un errore. Questo è stato riportato all'amministratore del sito via e-mail e dovrebbe essere risolto presto. Grazie per la pazienza.." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Se hai bisogno di assistenza, ti puoi riferire a questo errore con questo numero:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Informazioni" @@ -67,24 +62,20 @@ msgstr "Versione" msgid "Build number: %(build_number)s" msgstr "Build numbero: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Rilasciato sotto la licenza Apache 2.0" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "Rilasciato sotto la licenza:" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Attenzione" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Cambia navigazione" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Azioni " -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Apri dropdown" @@ -135,31 +126,30 @@ msgstr "No" msgid "required" msgstr "richiesto" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Nessun risultato" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Salva" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Conferma" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Annullare" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Nessun risultato" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -176,7 +166,7 @@ msgstr "Totale (%(start)s - %(end)s di %(total)s) (Pagina %(page_number)s di %(t msgid "Total: %(total)s" msgstr "Totale: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identificatore" @@ -208,6 +198,22 @@ msgstr "Avanzato" msgid "Search documents" msgstr "Cerca documenti" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Cambia navigazione" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "Chiudi" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "Errore di comunicazione del Server" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "Controlla la connessione di rete e riprova" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Login" @@ -216,43 +222,44 @@ msgstr "Login" msgid "First time login" msgstr "Primo login" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Complimenti!, Hai finito di installare Mayan EDMS" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "Hai appena completato l'installazione di %(project_title)s , congratulazioni!" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Accedi con le seguenti credenziali:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Nome utente: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Ricordati di cambiare la password per aumentare la sicurezza e disabilitare questo messaggio." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Accedi" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "Dimenticato la password?" diff --git a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo index 3236c963cf..3b0aeec6b0 100644 Binary files a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po index 76c65fd2bc..04bf045a5a 100644 --- a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -39,7 +39,7 @@ msgstr "Pagina niet gevonden" msgid "Sorry, but the requested page could not be found." msgstr "Excuses, maar de opgevraagde pagina kan niet worden gevonden." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Server fout" @@ -49,12 +49,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Er heeft een fout plaatsgevonden. Dit is gerapporteerd via email aan de beheerders van deze site en zou snel verholpen moeten worden. Bedankt voor uw geduld." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Als u hulp nodig heeft, kunt u naar deze fout refereren via de volgende identifier:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Informatie" @@ -68,24 +62,20 @@ msgstr "Versie" msgid "Build number: %(build_number)s" msgstr "Build nummer: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Vrijgegeven onder de Apache 2.0 licentie" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Waarschuwing" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Toggle navigatie" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Acties" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Toggle Dropdown" @@ -136,31 +126,30 @@ msgstr "Nee" msgid "required" msgstr "Verplicht" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Geen resultaten" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Opslaan" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Verstuur" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Onderbreek" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Geen resultaten" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -177,7 +166,7 @@ msgstr "Totaal (%(start)s - %(end)s van %(total)s) (Pagina %(page_number)s van % msgid "Total: %(total)s" msgstr "Totaal: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identifier" @@ -209,6 +198,22 @@ msgstr "Geavanceerd" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Toggle navigatie" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Aanmelden" @@ -217,43 +222,44 @@ msgstr "Aanmelden" msgid "First time login" msgstr "Eerste aanmelding" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "U heeft de installatie volbracht Mayan EDMS, gefeliciteerd!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Meld u aan met de volgende gegevens:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Gebruikersnaam: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Wachtwoord: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Pas het wachtwoord aan om de beveiliging te verbeteren en om deze melding uit te schakelen." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Meld u aan" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo index 2c3c15c65a..80fe5a9629 100644 Binary files a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po index 2507a65275..76e208ed84 100644 --- a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 18:16+0000\n" -"Last-Translator: Wojtek Warczakowski \n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -40,7 +40,7 @@ msgstr "Nie znaleziono strony" msgid "Sorry, but the requested page could not be found." msgstr "Przepraszamy, ale żądana strona nie została znaleziona." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Błąd serwera" @@ -50,12 +50,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Wystąpił błąd. Wiadomość o tym została przekazana do administratorów i wkrótce problem zostanie rozwiązany. Dziękujemy za cierpliwość." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Jeśli potrzebujesz pomocy, możesz odwołać się do tego błędu poprzez następujący identyfikator:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Informacje" @@ -69,24 +63,20 @@ msgstr "Wersja" msgid "Build number: %(build_number)s" msgstr "Numer wersji: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Wydano na licencji Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Prawa autorskie © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Ostrzeżenie" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Rozwiń nawigację" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Akcje" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Rozwiń listę" @@ -137,31 +127,30 @@ msgstr "Nie" msgid "required" msgstr "wymagane" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Brak wyników" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Zapisz" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Wykonaj" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Anuluj" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Brak wyników" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -178,7 +167,7 @@ msgstr "Razem (%(start)s - %(end)s z %(total)s) (Strona %(page_number)s z %(tota msgid "Total: %(total)s" msgstr "Razem: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identyfikator" @@ -210,6 +199,22 @@ msgstr "Zaawansowane" msgid "Search documents" msgstr "Przeszukaj dokumenty" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Rozwiń nawigację" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Logowanie" @@ -218,43 +223,44 @@ msgstr "Logowanie" msgid "First time login" msgstr "Pierwsze logowanie" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Właśnie ukończyłeś instalację Mayan EDMS. Gratulacje!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Logowanie przy użyciu następujących poświadczeń:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Nazwa użytkownika: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Hasło: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Aby poprawić bezpieczeństwo i usunąć ten komunikat, nie zapomnij zmienić hasła." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Zaloguj" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "Zapomniałeś hasło?" diff --git a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo index 79abcdce8e..87be066bf9 100644 Binary files a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po index dbdf805e79..5072540b39 100644 --- a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "Página não encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Desculpe, mas a página solicitada não foi encontrada." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "Versão" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Ações" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "Não" msgid "required" msgstr "obrigatório" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Sem resultados" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Guardar" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Submeter" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Sem resultados" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identificador" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Iniciar a sessão" @@ -215,43 +220,44 @@ msgstr "Iniciar a sessão" msgid "First time login" msgstr "Primeiro início de sessão" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format +msgid "Email: %(email)s" +msgstr "" + +#: templates/authentication/login.html:29 +#, python-format msgid "Password: %(password)s" msgstr "Senha: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Certifique-se de que altera a senha para aumentar a segurança e que desativa esta mensagem." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo index ce59e10a1a..cdbb2c7fcc 100644 Binary files a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po index 2b484477be..f68866e7aa 100644 --- a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -39,7 +39,7 @@ msgstr "Página não encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Desculpe, mas a página solicitada não pôde ser encontrada." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Erro de servidor" @@ -49,12 +49,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Houve um erro. Os administradores da página foram informados por e-mail e deverão corrigir em breve. Obrigado pela paciência." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Se você precisar de ajuda, você pode fazer referência a este erro através do seguinte identificador:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Sobre" @@ -68,24 +62,20 @@ msgstr "Versão" msgid "Build number: %(build_number)s" msgstr "Número de compilação: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Lançado sob a licença Apache 2.0" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Todos os direitos reservados © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Advertência" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Ativar/desativar navegação" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Ações" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Mostrar/esconder menu" @@ -136,31 +126,30 @@ msgstr "Não" msgid "required" msgstr "requerido" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Nenhum resultado" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Salvar" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Nenhum resultado" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -177,7 +166,7 @@ msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(t msgid "Total: %(total)s" msgstr "Total: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Identificador" @@ -209,6 +198,22 @@ msgstr "Avançada" msgid "Search documents" msgstr "Pesquisar documentos" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Ativar/desativar navegação" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Iniciar sessão" @@ -217,43 +222,44 @@ msgstr "Iniciar sessão" msgid "First time login" msgstr "Primeiro início de sessão" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Você acaba de terminar de instalar Maia EDMS , parabéns!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Entre usando as seguintes credenciais" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Nome: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "E-mail: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Senha: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Certifique-se de alterar a senha para aumentar a segurança e para desativar esta mensagem." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Entrar" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo index 73922c517a..30e3be1b82 100644 Binary files a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po index 2fe8c3221f..4b6e572fa2 100644 --- a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -38,7 +38,7 @@ msgstr "Pagina nu a fost gasită" msgid "Sorry, but the requested page could not be found." msgstr "Ne pare rău, dar pagina solicitată nu a putut fi găsit." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -48,12 +48,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Despre" @@ -67,24 +61,20 @@ msgstr "Versiune" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "" +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Alertă" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Acţiuni" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -135,31 +125,30 @@ msgstr "Nu" msgid "required" msgstr "necesar" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "salvează" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Trimiteţi" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Anulează" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -176,7 +165,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "ID" @@ -208,6 +197,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Conectare" @@ -216,43 +221,44 @@ msgstr "Conectare" msgid "First time login" msgstr "Prima autentificare" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Tocmai ați terminat de instalat Mayan EDMS, felicitări!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Intrare utilizând acreditările următoarele:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Utilizator: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Parola: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Asigurați-vă că pentru a schimba parola pentru a spori securitatea și pentru a dezactiva acest mesaj." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Înscriere" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo index 5377fc114e..e2b3483529 100644 Binary files a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po index 744ff2f741..00948ac379 100644 --- a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -38,7 +38,7 @@ msgstr "Страница не найдена" msgid "Sorry, but the requested page could not be found." msgstr "Извините, но запрашиваемая страница не найдена." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Ошибка сервера" @@ -48,12 +48,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Тут какая-то ошибка. Её нужно сообщить администрации сайта по электронной почте, и она будет исправлена. Спасибо за терпение." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Если вам нужна помощь, вы можете сослаться на эту ошибку по следующему идентификатору:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Инфо" @@ -67,24 +61,20 @@ msgstr "Версия" msgid "Build number: %(build_number)s" msgstr "Версия сборки: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Выпущено под лицензией Apache 2.0" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "© 2011-2015 Roberto Rosario, все права защищены." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "Предупреждение" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Переключение навигации" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Действия" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Переключение выпадающего списка" @@ -135,31 +125,30 @@ msgstr "Нет" msgid "required" msgstr "требуется" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Нет результатов" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Сохранить" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Подтвердить" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "Отменить" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Нет результатов" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -176,7 +165,7 @@ msgstr "Всего (%(start)s - %(end)s из %(total)s) (Страница %(page msgid "Total: %(total)s" msgstr "Всего: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Идентификатор" @@ -208,6 +197,22 @@ msgstr "Дополнительно" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Переключение навигации" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Войти" @@ -216,43 +221,44 @@ msgstr "Войти" msgid "First time login" msgstr "Первое время входа в систему" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Вы только что закончили установку Mayan EDMS, поздравляем!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Войти, используя следующие учетные данные:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Имя пользователя: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "Адрес электронной почты: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Пароль: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Обязательно измените пароль для повышения безопасности и отключения этого сообщения." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Вход" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo index 1cce053d85..b0f6070708 100644 Binary files a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po index 24a5b85d59..980b156599 100644 --- a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# kontrabant , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -19,145 +20,134 @@ msgstr "" #: apps.py:12 settings.py:9 msgid "Appearance" -msgstr "" +msgstr "Videz" #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" -msgstr "" +msgstr "Nezadostna dovoljenja" #: templates/403.html:11 msgid "You don't have enough permissions for this operation." -msgstr "" +msgstr "Za to operacijo nimate dovolj pravic." #: templates/404.html:5 templates/404.html:9 msgid "Page not found" -msgstr "" +msgstr "Stran ni najdena" #: templates/404.html:11 msgid "Sorry, but the requested page could not be found." -msgstr "" +msgstr "Žal, toda zahtevane strani ni bilo mogoče najti." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" -msgstr "" +msgstr "Napaka strežnika" #: templates/500.html:11 msgid "" "There's been an error. It's been reported to the site administrators via " "e-mail and should be fixed shortly. Thanks for your patience." -msgstr "" - -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" +msgstr "Prišlo je do napake. Sporočena je administratorjem spletnega mesta po elektronski pošti in naj bi bila kmalu odpravljena. Hvala za potrpljenje." #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" -msgstr "" +msgstr " O programu" #: templates/appearance/about.html:62 msgid "Version" -msgstr "" +msgstr "Različica" #: templates/appearance/about.html:64 #, python-format msgid "Build number: %(build_number)s" +msgstr "Številka izgradnje: %(build_number)s" + +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "" - -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" -msgstr "" +msgstr "Akcije" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" -msgstr "" +msgstr "Preklopi spustni seznam" #: templates/appearance/calculate_form_title.html:16 #, python-format msgid "Details for: %(object)s" -msgstr "" +msgstr "Podrobnosti za: %(object)s" #: templates/appearance/calculate_form_title.html:19 #, python-format msgid "Edit: %(object)s" -msgstr "" +msgstr "Uredi: %(object)s" #: templates/appearance/calculate_form_title.html:21 msgid "Create" -msgstr "" +msgstr "Ustvari" #: templates/appearance/dashboard_widget.html:25 msgid "View details" -msgstr "" +msgstr "Ogled podrobnosti" #: templates/appearance/generic_confirm.html:6 #: templates/appearance/generic_confirm.html:13 msgid "Confirm" -msgstr "" +msgstr "Potrdi" #: templates/appearance/generic_confirm.html:11 msgid "Confirm delete" -msgstr "" +msgstr "Potrdi izbris" #: templates/appearance/generic_confirm.html:27 #, python-format msgid "Delete: %(object)s?" -msgstr "" +msgstr "Izbris: %(object)s?" #: templates/appearance/generic_confirm.html:48 msgid "Yes" -msgstr "" +msgstr "Da" #: templates/appearance/generic_confirm.html:52 msgid "No" -msgstr "" +msgstr "Ne" #: templates/appearance/generic_form_instance.html:49 #: templates/appearance/generic_form_instance.html:55 #: templates/appearance/generic_form_subtemplate.html:51 #: templates/appearance/generic_multiform_subtemplate.html:41 msgid "required" -msgstr "" +msgstr "zahtevano" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Ni rezultatov" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" -msgstr "" +msgstr "Shrani" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" -msgstr "" +msgstr "Pošlji" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" -msgstr "" - -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" +msgstr "Prekliči" #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 @@ -165,7 +155,7 @@ msgstr "" msgid "" "Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " "%(total_pages)s)" -msgstr "" +msgstr "Skupaj (%(start)s - %(end)s od %(total)s) (Stran %(page_number)s od %(total_pages)s)" #: templates/appearance/generic_list_items_subtemplate.html:26 #: templates/appearance/generic_list_items_subtemplate.html:29 @@ -173,15 +163,15 @@ msgstr "" #: templates/appearance/generic_list_subtemplate.html:17 #, python-format msgid "Total: %(total)s" -msgstr "" +msgstr "Skupaj: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" -msgstr "" +msgstr "Identifikator" #: templates/appearance/home.html:9 templates/appearance/home.html:21 msgid "Dashboard" -msgstr "" +msgstr "Nadzorna plošča" #: templates/appearance/home.html:30 msgid "Getting started" @@ -207,6 +197,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Preklopi navigacijo" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "" @@ -215,43 +221,44 @@ msgstr "" msgid "First time login" msgstr "" -#: templates/authentication/login.html:24 +#: templates/authentication/login.html:25 +#, python-format msgid "" -"You have just finished installing Mayan EDMS, " +"You have just finished installing %(project_title)s, " "congratulations!" msgstr "" -#: templates/authentication/login.html:25 -msgid "Login using the following credentials:" -msgstr "" - #: templates/authentication/login.html:26 -#, python-format -msgid "Username: %(account)s" +msgid "Login using the following credentials:" msgstr "" #: templates/authentication/login.html:27 #, python-format -msgid "Email: %(email)s" +msgid "Username: %(account)s" msgstr "" #: templates/authentication/login.html:28 #, python-format -msgid "Password: %(password)s" +msgid "Email: %(email)s" msgstr "" #: templates/authentication/login.html:29 +#, python-format +msgid "Password: %(password)s" +msgstr "" + +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo index 48e4caa82c..c05f8ce448 100644 Binary files a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po index aba43173c2..bd88ef320a 100644 --- a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po @@ -9,15 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-30 19:10+0000\n" -"Last-Translator: serhatcan77 \n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:12 settings.py:9 msgid "Appearance" @@ -39,7 +39,7 @@ msgstr "sayfa bulunamadı" msgid "Sorry, but the requested page could not be found." msgstr "Üzgünüz, ancak istenen sayfa bulunamadı." -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "Server hatası" @@ -49,12 +49,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "Bir hata oldu. Site yöneticilerine e-posta yoluyla bildirildi ve kısa süre içinde düzeltilmesi gerekiyor. Sabrınız için teşekkürler." -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "Yardıma ihtiyacınız varsa, aşağıdaki tanımlayıcı aracılığıyla bu hataya başvurabilirsiniz:" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "Hakkında" @@ -68,24 +62,20 @@ msgstr "Versiyon" msgid "Build number: %(build_number)s" msgstr "Yapım numarası: %(build_number)s" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "Apache 2.0 Lisansı altında yayınlandı" +#: templates/appearance/about.html:77 +msgid "Released under the license:" +msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." -msgstr "Telif hakkı © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" +msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "Gezinmeyi aç / kapat" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Eylemler" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "Açılır pencereyi aç / kapat" @@ -136,31 +126,30 @@ msgstr "Hayır" msgid "required" msgstr "Gerekli" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "Sonuç yok" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "Kaydet" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "Gönder" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "İptal" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "Sonuç yok" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -177,7 +166,7 @@ msgstr "Toplam (%(start)s - %(end)s / %(total)s) (Sayfa %(page_number)s / %(tota msgid "Total: %(total)s" msgstr "Toplam: %(total)s" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "Tanımlayıcı" @@ -209,6 +198,22 @@ msgstr "İleri düzey" msgid "Search documents" msgstr "Belgeleri ara" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "Gezinmeyi aç / kapat" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Oturum aç" @@ -217,43 +222,44 @@ msgstr "Oturum aç" msgid "First time login" msgstr "Ilk kez giriş" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Mayan EDMS 'yi kurmayı henüz bitirdiniz, tebrikler!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Aşağıdaki kimlik bilgilerini kullanarak giriş yapın:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Kullanıcı adı: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "E-posta: %(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Parola: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Güvenliği arttırmak ve bu mesajı devre dışı bırakmak için şifreyi değiştirdiğinizden emin olun." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "Oturum aç" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "Parolanızı mı unuttunuz?" diff --git a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo index 59b2f0ffb4..faebae8a48 100644 Binary files a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po index ce639d23b1..877e0cb2cc 100644 --- a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "Không tìm thấy trang" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "Phiên bản" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" -msgstr "" - -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "Các thao tác" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "" msgid "required" msgstr "yêu cầu" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "Đăng nhập" @@ -215,43 +220,44 @@ msgstr "Đăng nhập" msgid "First time login" msgstr "Đăng nhập lần đầu" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "Bạn đã cài đặt xong Hệ thống quản lý tài liệu điện tử Mayan EDMS. Xin chúc mừng bạn!" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "Đăng nhập dùng các thông tin sau:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "Người dùng: %(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "Mật khẩu: %(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "Bạn nên thay đổi mật khẩu để tăng tính bảo mật và để không nhìn thấy lời nhắc này nữa." -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.mo index a12e3e1afe..1b7c23ad92 100644 Binary files a/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.po index 7b3e14fe4b..a9415175dc 100644 --- a/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/zh_CN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-27 12:45-0400\n" -"PO-Revision-Date: 2017-07-09 06:34+0000\n" +"POT-Creation-Date: 2018-06-07 21:02-0400\n" +"PO-Revision-Date: 2018-06-08 01:08+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -37,7 +37,7 @@ msgstr "页不存在" msgid "Sorry, but the requested page could not be found." msgstr "抱歉,请求页不存在。" -#: templates/500.html:5 templates/500.html:9 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:98 msgid "Server error" msgstr "" @@ -47,12 +47,6 @@ msgid "" "e-mail and should be fixed shortly. Thanks for your patience." msgstr "" -#: templates/500.html:14 -msgid "" -"If you need assistance, you may reference this error via the following " -"identifier:" -msgstr "" - #: templates/appearance/about.html:8 templates/appearance/about.html:57 msgid "About" msgstr "" @@ -66,24 +60,20 @@ msgstr "版本" msgid "Build number: %(build_number)s" msgstr "" -#: templates/appearance/about.html:76 -msgid "Released under the Apache 2.0 License" -msgstr "基于Apache 2.0许可证" - -#: templates/appearance/about.html:88 -msgid "Copyright © 2011-2015 Roberto Rosario." +#: templates/appearance/about.html:77 +msgid "Released under the license:" msgstr "" -#: templates/appearance/base.html:56 -msgid "Toggle navigation" +#: templates/appearance/base.html:33 +msgid "Warning" msgstr "" -#: templates/appearance/base.html:114 +#: templates/appearance/base.html:61 #: templates/navigation/generic_navigation.html:6 msgid "Actions" msgstr "操作" -#: templates/appearance/base.html:116 +#: templates/appearance/base.html:63 msgid "Toggle Dropdown" msgstr "" @@ -134,31 +124,30 @@ msgstr "否" msgid "required" msgstr "必填" -#: templates/appearance/generic_form_subtemplate.html:71 +#: templates/appearance/generic_form_subtemplate.html:61 +#: templates/appearance/generic_list_horizontal.html:21 +#: templates/appearance/generic_list_items_subtemplate.html:118 +#: templates/appearance/generic_list_subtemplate.html:109 +msgid "No results" +msgstr "" + +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Save" msgstr "保存" -#: templates/appearance/generic_form_subtemplate.html:71 -#: templates/appearance/generic_list_items_subtemplate.html:45 -#: templates/appearance/generic_list_subtemplate.html:33 +#: templates/appearance/generic_form_subtemplate.html:76 #: templates/appearance/generic_multiform_subtemplate.html:63 #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 msgid "Submit" msgstr "提交" -#: templates/appearance/generic_form_subtemplate.html:74 +#: templates/appearance/generic_form_subtemplate.html:79 #: templates/appearance/generic_multiform_subtemplate.html:67 msgid "Cancel" msgstr "取消" -#: templates/appearance/generic_list_horizontal.html:21 -#: templates/appearance/generic_list_items_subtemplate.html:118 -#: templates/appearance/generic_list_subtemplate.html:112 -msgid "No results" -msgstr "" - #: templates/appearance/generic_list_items_subtemplate.html:24 #: templates/appearance/generic_list_subtemplate.html:12 #, python-format @@ -175,7 +164,7 @@ msgstr "" msgid "Total: %(total)s" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:53 +#: templates/appearance/generic_list_subtemplate.html:50 msgid "Identifier" msgstr "标识" @@ -207,6 +196,22 @@ msgstr "" msgid "Search documents" msgstr "" +#: templates/appearance/root.html:54 +msgid "Toggle navigation" +msgstr "" + +#: templates/appearance/root.html:103 +msgid "Close" +msgstr "" + +#: templates/appearance/root.html:122 +msgid "Server communication error" +msgstr "" + +#: templates/appearance/root.html:124 +msgid "Check you network connection and try again in a few moments." +msgstr "" + #: templates/authentication/login.html:10 msgid "Login" msgstr "登录" @@ -215,43 +220,44 @@ msgstr "登录" msgid "First time login" msgstr "第一次登录" -#: templates/authentication/login.html:24 -msgid "" -"You have just finished installing Mayan EDMS, " -"congratulations!" -msgstr "恭喜您!您已经成功安装 Mayan EDMS。" - #: templates/authentication/login.html:25 +#, python-format +msgid "" +"You have just finished installing %(project_title)s, " +"congratulations!" +msgstr "" + +#: templates/authentication/login.html:26 msgid "Login using the following credentials:" msgstr "使用如下凭证登录:" -#: templates/authentication/login.html:26 +#: templates/authentication/login.html:27 #, python-format msgid "Username: %(account)s" msgstr "用户名:%(account)s" -#: templates/authentication/login.html:27 +#: templates/authentication/login.html:28 #, python-format msgid "Email: %(email)s" msgstr "邮箱:%(email)s" -#: templates/authentication/login.html:28 +#: templates/authentication/login.html:29 #, python-format msgid "Password: %(password)s" msgstr "密码:%(password)s" -#: templates/authentication/login.html:29 +#: templates/authentication/login.html:30 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "请修改密码以提高安全性,并且禁止显示此信息。" -#: templates/authentication/login.html:45 -#: templates/authentication/login.html:53 +#: templates/authentication/login.html:46 +#: templates/authentication/login.html:54 msgid "Sign in" msgstr "" -#: templates/authentication/login.html:58 +#: templates/authentication/login.html:59 msgid "Forgot your password?" msgstr "" diff --git a/mayan/apps/appearance/static/appearance/css/base.css b/mayan/apps/appearance/static/appearance/css/base.css index 0352d1add7..ee03bad652 100644 --- a/mayan/apps/appearance/static/appearance/css/base.css +++ b/mayan/apps/appearance/static/appearance/css/base.css @@ -66,10 +66,6 @@ body { left: auto; } -.thin_border { - border: 1px solid black; -} - .mayan-page-wrapper-interactive { overflow: auto; } @@ -84,6 +80,7 @@ body { .carousel-item { margin: 5px 10px 10px 10px; + min-height: 100%; } .carousel-item-page-number { @@ -120,6 +117,7 @@ img.lazy-load-carousel { .instance-image-widget { text-align: center; + height: 100%; } hr { @@ -276,3 +274,447 @@ a i { .cabinet-display { font-style: italic; } + +/* Dropzone */ +@-webkit-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@-moz-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30%, 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); } } +@-webkit-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@-moz-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); } } +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } } +@-moz-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } } +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); } +} + +.dropzone * { + box-sizing: border-box;} + +.dropzone.dz-clickable { + cursor: pointer; } +.dropzone.dz-clickable * { + cursor: default; } +.dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * { + cursor: pointer; } + +.dropzone.dz-started .dz-message { + display: none; } + +.dropzone.dz-drag-hover { + border-style: solid; } + +.dropzone.dz-drag-hover .dz-message { + opacity: 0.5; } + +.dropzone-previews, .dropzone .dz-message { + text-align: center; + margin: 2em 0; + min-height: 100px; + border: 2px solid rgba(0, 0, 0, 0.3); + background: white; + padding: 40px 20px; } + +.dropzone .dz-preview { + position: relative; + display: inline-block; + vertical-align: top; + margin: 16px; + min-height: 100px; } + +.dropzone .dz-preview:hover { + z-index: 1000; } + +.dropzone .dz-preview:hover .dz-details { + opacity: 1; } + +.dropzone .dz-preview.dz-file-preview .dz-image { + border-radius: 20px; + background: #999; + background: linear-gradient(to bottom, #eee, #ddd); } + +.dropzone .dz-preview.dz-file-preview .dz-details { + opacity: 1; } + +.dropzone .dz-preview.dz-image-preview { + background: white; } + +.dropzone .dz-preview.dz-image-preview .dz-details { + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; } + +.dropzone .dz-preview .dz-remove { + font-size: 14px; + text-align: center; + display: block; + cursor: pointer; + border: none; } + +.dropzone .dz-preview .dz-remove:hover { + text-decoration: underline; } + +.dropzone .dz-preview:hover .dz-details { + opacity: 1; } + +.dropzone .dz-preview .dz-details { + z-index: 20; + position: absolute; + top: 25px; + left: 0; + opacity: 0; + font-size: 13px; + min-width: 100%; + max-width: 100%; + padding: 2em 1em; + text-align: center; + color: rgba(0, 0, 0, 0.9); + line-height: 150%; } + +.dropzone .dz-preview .dz-details .dz-size { + margin-bottom: 1em; + font-size: 16px; } + +.dropzone .dz-preview .dz-details .dz-filename { + white-space: nowrap; } + +.dropzone .dz-preview .dz-details .dz-filename:hover span { + border: 1px solid rgba(200, 200, 200, 0.8); + background-color: rgba(255, 255, 255, 0.8); } + +.dropzone .dz-preview .dz-details .dz-filename:not(:hover) { + overflow: hidden; + text-overflow: ellipsis; } + +.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span { + border: 1px solid transparent; } + +.dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span { + background-color: rgba(255, 255, 255, 0.4); + padding: 0 0.4em; + border-radius: 3px; } + +.dropzone .dz-preview:hover .dz-image img { + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + -webkit-filter: blur(8px); + filter: blur(8px); } + +.dropzone .dz-preview .dz-image { + border-radius: 20px; + overflow: hidden; + width: 120px; + height: 120px; + position: relative; + display: block; + z-index: 10; } + +.dropzone .dz-preview .dz-image img { + display: block; } + +.dropzone .dz-preview.dz-success .dz-success-mark { + -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); } + +.dropzone .dz-preview.dz-error .dz-error-mark { + opacity: 1; + -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); } + +.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark { + pointer-events: none; + opacity: 0; + z-index: 500; + position: absolute; + display: block; + top: 50%; + left: 50%; + margin-left: -27px; + margin-top: -27px; } + +.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg { + display: block; + width: 54px; + height: 54px; } + +.dropzone .dz-preview.dz-processing .dz-progress { + opacity: 1; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -ms-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; } + +.dropzone .dz-preview.dz-complete .dz-progress { + opacity: 0; + -webkit-transition: opacity 0.4s ease-in; + -moz-transition: opacity 0.4s ease-in; + -ms-transition: opacity 0.4s ease-in; + -o-transition: opacity 0.4s ease-in; + transition: opacity 0.4s ease-in; } + +.dropzone .dz-preview:not(.dz-processing) .dz-progress { + -webkit-animation: pulse 6s ease infinite; + -moz-animation: pulse 6s ease infinite; + -ms-animation: pulse 6s ease infinite; + -o-animation: pulse 6s ease infinite; + animation: pulse 6s ease infinite; } + +.dropzone .dz-preview .dz-progress { + opacity: 1; + z-index: 1000; + pointer-events: none; + position: absolute; + height: 16px; + left: 50%; + top: 60%; + margin-top: -8px; + width: 80px; + margin-left: -40px; + background: rgba(255, 255, 255, 0.9); + -webkit-transform: scale(1); + border-radius: 8px; + overflow: hidden; } + +.dropzone .dz-preview .dz-progress .dz-upload { + background: #333; + background: linear-gradient(to bottom, #666, #444); + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 0; + -webkit-transition: width 300ms ease-in-out; + -moz-transition: width 300ms ease-in-out; + -ms-transition: width 300ms ease-in-out; + -o-transition: width 300ms ease-in-out; + transition: width 300ms ease-in-out; } + +.dropzone .dz-preview.dz-error .dz-error-message { + display: block; } + +.dropzone .dz-preview.dz-error:hover .dz-error-message { + opacity: 1; + pointer-events: auto; } + +.dropzone .dz-preview .dz-error-message { + pointer-events: none; + z-index: 1000; + position: absolute; + display: block; + display: none; + opacity: 0; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -ms-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; + border-radius: 8px; + font-size: 13px; + top: 130px; + left: -10px; + width: 140px; + background: #be2626; + background: linear-gradient(to bottom, #be2626, #a92222); + padding: 0.5em 1.2em; + color: white; } + +.dropzone .dz-preview .dz-error-message:after { + content: ''; + position: absolute; + top: -6px; + left: 64px; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #be2626; } + + +.staging-file-thumbnail-container { + width: 150px; + margin: auto; +} + +.thin_border { + border: 1px solid black; +} + + +.thin_border-thumbnail { + display: block; + max-width: 100%; + max-height: 200px; + width: auto; + height: auto; + margin: auto; +} diff --git a/mayan/apps/appearance/static/appearance/js/base.js b/mayan/apps/appearance/static/appearance/js/base.js index 549e21988d..72f0978ecc 100644 --- a/mayan/apps/appearance/static/appearance/js/base.js +++ b/mayan/apps/appearance/static/appearance/js/base.js @@ -1,233 +1,26 @@ 'use strict'; -var App = function (parameters) { - var self = this; - - parameters = parameters || {} - - this.window = $(window); -} - -App.tagSelectionTemplate = function (tag, container) { - var $tag = $( - ' ' + tag.text + '' - ); - container[0].style.background = tag.element.style.color; - return $tag; -} - -App.tagResultTemplate = function (tag) { - if (!tag.element) { return ''; } - var $tag = $( - ' ' + tag.text + '' - ); - return $tag; -} - -App.prototype.setupScrollView = function () { - $('.scrollable').scrollview(); -} - -App.prototype.setupTableSelector = function () { - $('th input:checkbox').click(function(e) { - var table = $(e.target).closest('table'); - var checked = $(e.target).prop('checked'); - $('td input:checkbox', table).prop('checked', checked); - }); -} - -App.prototype.setupWindowPopUp = function () { - $('a.new_window').click(function(event) { - event.preventDefault(); - var newWindow = window.open($(this).attr('href'), '_blank'); - newWindow.focus(); - }); -} - -App.prototype.setupSelect2 = function () { - $('.select2').select2({ - dropdownAutoWidth: true, - width: '100%' - }); - - $('.select2-tags').select2({ - templateSelection: App.tagSelectionTemplate, - templateResult: App.tagResultTemplate, - width: '100%' - }); -} - -App.prototype.setupFullHeightResizing = function () { - var self = this; - - this.resizeFullHeight(); - - this.window.resize(function() { - self.resizeFullHeight(); - }); -} - -App.prototype.resizeFullHeight = function () { - $('.full-height').height(this.window.height() - $('.full-height').data('height-difference')); -} - -App.prototype.doToastrMessages = function () { - toastr.options = { - 'closeButton': true, - 'debug': false, - 'newestOnTop': true, - 'positionClass': 'toast-top-right', - 'preventDuplicates': false, - 'onclick': null, - 'showDuration': '300', - 'hideDuration': '1000', - 'timeOut': '5000', - 'extendedTimeOut': '1000', - 'showEasing': 'swing', - 'hideEasing': 'linear', - 'showMethod': 'fadeIn', - 'hideMethod': 'fadeOut' - } - - // Add invisible bootstrap messages to copy the styles to toastr.js - - $('body').append('\ - \ - \ - \ - \ - '); - - // Copy the bootstrap style from the sample alerts to toaster.js via - // dynamic document style tag - - $('head').append('\ - \ - '); - - $.each(DjangoMessages, function (index, value) { - var options = {}; - - if (value.tags === 'error') { - // Error messages persist - options['timeOut'] = 10000; - } - toastr[value.tags](value.message, '', options); - }); -} - -/* MayanImage class */ - -var MayanImage = function (options) { - this.element = options.element; - this.load(); -} - -MayanImage.intialize = function () { - $('a.fancybox').fancybox({ - beforeShow : function(){ - this.title = $(this.element).data('caption'); - }, - openEffect : 'elastic', - closeEffect : 'elastic', - prevEffect : 'none', - nextEffect : 'none', - titleShow : true, - type : 'image', - autoResize : true, - }); - - $('img.lazy-load').lazyload({ - appear: function(elements_left, settings) { - new MayanImage({element: $(this)}); - }, - threshold: 400, - }); - - $('img.lazy-load-carousel').lazyload({ - appear: function(elements_left, settings) { - new MayanImage({element: $(this)}); - }, - container: $('#carousel-container'), - threshold: 2000 - }); - - $('.lazy-load').on('load', function() { - $(this).hide(); - $(this).fadeIn(); - $(this).siblings('.spinner-container').remove(); - $(this).removeClass('lazy-load pull-left'); - }); - - $('.lazy-load-carousel').on('load', function() { - $(this).hide(); - $(this).fadeIn(); - $(this).siblings('.spinner-container').remove(); - $(this).removeClass('lazy-load-carousel pull-left'); - }); -} - -MayanImage.prototype.onImageError = function () { - this.element.parent().parent().html(''); - // Remove border to indicate non interactive image - this.element.removeClass('thin_border'); - - var container = this.element.parent().parent(); - // Save img HTML - var html = this.element.parent().html(); - // Remove anchor - this.element.parent().remove(); - // Place again img - container.html(html); -}; - -MayanImage.prototype.load = function () { - var self = this; - - this.element.error(function(event) { - self.onImageError(); - }); - - this.element.attr('src', this.element.attr('data-url')); - $.fn.matchHeight._update(); - $.fn.matchHeight._maintainScroll = true; -}; +var app = new App(); +var partialNavigation = new PartialNavigation({ + initialURL: initialURL, + excludeAnchorClasses: ['fancybox', 'new_window', 'non-ajax'], + formBeforeSerializeCallbacks: [App.MultiObjectFormProcess], +}); jQuery(document).ready(function() { - var app = new App(); - + app.setupAutoSubmit(); app.setupFullHeightResizing(); - - MayanImage.intialize(); - - app.doToastrMessages(); - - app.setupSelect2(); - - app.setupScrollView(); - - app.setupTableSelector(); - - app.setupWindowPopUp(); + app.setupItemsSelector(); + app.setupNavbarCollapse(); + app.setupNewWindowAnchor(); + app.setupAJAXperiodicWorkers(); + partialNavigation.initialize(); }); + +var afterBaseLoad = function () { + MayanImage.intialize(); + app.doToastrMessages(); + app.resizeFullHeight(); + app.setupSelect2(); + app.setupScrollView(); +} diff --git a/mayan/apps/appearance/static/appearance/js/mayan_app.js b/mayan/apps/appearance/static/appearance/js/mayan_app.js new file mode 100644 index 0000000000..efcdd0dc38 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/js/mayan_app.js @@ -0,0 +1,284 @@ +'use strict'; + +var App = function (parameters) { + var self = this; + + parameters = parameters || {} + + this.window = $(window); +} + +// Class methods and variables + +App.mayanNotificationBadge = function (options, data) { + // Callback to add the notifications count inside a badge markup + var notifications = data[options.attributeName]; + + if (notifications > 0) { + // Save the original link text before adding the initial badge markup + if (!options.element.data('mn-saved-text')) { + options.element.data('mn-saved-text', options.element.html()); + } + + options.element.html( + options.element.data('mn-saved-text') + ' ' + notifications + '' + ); + } else { + if (options.element.data('mn-saved-text')) { + // If there is a saved original link text, restore it + options.element.html( + options.element.data('mn-saved-text') + ); + } + } +} + +App.MultiObjectFormProcess = function ($form, options) { + /* + * ajaxForm callback to add the external item checkboxes to the + * submitted form + */ + + if ($form.hasClass('form-multi-object-action')) { + // Turn form data into an object + var formArray = $form.serializeArray().reduce(function (obj, item) { + obj[item.name] = item.value; + return obj; + }, {}); + + // Add all checked checkboxes to the form data + $('.form-multi-object-action-checkbox:checked').each(function() { + var $this = $(this); + formArray[$this.attr('name')] = $this.attr('value'); + }); + + // Set the form data as the data to send + options.data = formArray; + } +} + +App.tagSelectionTemplate = function (tag, container) { + var $tag = $( + ' ' + tag.text + '' + ); + container[0].style.background = tag.element.dataset.color; + return $tag; +} + +App.tagResultTemplate = function (tag) { + if (!tag.element) { return ''; } + var $tag = $( + ' ' + tag.text + '' + ); + return $tag; +} + +// Instance methods + +App.prototype.AJAXperiodicWorker = function (options) { + var app = this; + + $.ajax({ + complete: function() { + if (!options.app) { + // Preserve the app reference between consecutive calls + options.app = app; + } + setTimeout(options.app.AJAXperiodicWorker, options.interval, options); + }, + success: function(data) { + if (options.callback) { + // Conver the callback string to an actual function + var callbackFunction = window; + + $.each(options.callback.split('.'), function (index, value) { + callbackFunction = callbackFunction[value] + }); + + callbackFunction(options, data); + } else { + options.element.text(data[options.attributeName]); + } + }, + url: options.APIURL + }); +} + +App.prototype.doToastrMessages = function () { + toastr.options = { + 'closeButton': true, + 'debug': false, + 'newestOnTop': true, + 'positionClass': 'toast-top-right', + 'preventDuplicates': false, + 'onclick': null, + 'showDuration': '300', + 'hideDuration': '1000', + 'timeOut': '5000', + 'extendedTimeOut': '1000', + 'showEasing': 'swing', + 'hideEasing': 'linear', + 'showMethod': 'fadeIn', + 'hideMethod': 'fadeOut' + } + + // Add invisible bootstrap messages to copy the styles to toastr.js + + $('body').append('\ + \ + \ + \ + \ + '); + + // Copy the bootstrap style from the sample alerts to toaster.js via + // dynamic document style tag + + $('head').append('\ + \ + '); + + $.each(DjangoMessages, function (index, value) { + var options = {}; + + if (value.tags === 'error') { + // Error messages persist + options['timeOut'] = 0; + } + if (value.tags === 'warning') { + // Error messages persist + options['timeOut'] = 10000; + } + + toastr[value.tags](value.message, '', options); + }); +} + +App.prototype.setupAJAXperiodicWorkers = function () { + var app = this; + + $('a[data-apw-url]').each(function() { + var $this = $(this); + + app.AJAXperiodicWorker({ + attributeName: $this.data('apw-attribute'), + APIURL: $this.data('apw-url'), + callback: $this.data('apw-callback'), + element: $this, + interval: $this.data('apw-interval'), + }); + }); +} + +App.prototype.setupAutoSubmit = function () { + $('body').on('change', '.select-auto-submit', function () { + if ($(this).val()) { + $(this.form).trigger('submit'); + } + }); +} + +App.prototype.setupNavbarCollapse = function () { + $(document).keyup(function(e) { + if (e.keyCode === 27) { + $('.navbar-collapse').collapse('hide'); + } + }); + + $('body').on('click', 'a', function (event) { + if (!$(this).hasAnyClass(['dropdown-toggle'])) { + $('.navbar-collapse').collapse('hide'); + } + }); +} + +App.prototype.setupNewWindowAnchor = function () { + $('body').on('click', 'a.new_window', function (event) { + event.preventDefault(); + var newWindow = window.open($(this).attr('href'), '_blank'); + newWindow.focus(); + }); +} + +App.prototype.setupScrollView = function () { + $('.scrollable').scrollview(); +} + +App.prototype.setupItemsSelector = function () { + var app = this; + app.lastChecked = null; + + $('body').on('click', '.check-all', function (event) { + var checked = $(event.target).prop('checked'); + var $checkBoxes = $('.check-all-slave'); + + $checkBoxes.prop('checked', checked); + $checkBoxes.trigger('change'); + }); + + $('body').on('click', '.check-all-slave', function(e) { + if(!app.lastChecked) { + app.lastChecked = this; + return; + } + if(e.shiftKey) { + var $checkBoxes = $('.check-all-slave'); + + var start = $checkBoxes.index(this); + var end = $checkBoxes.index(app.lastChecked); + + $checkBoxes.slice( + Math.min(start,end), Math.max(start,end) + 1 + ).prop('checked', app.lastChecked.checked).trigger('change'); + } + app.lastChecked = this; + }) +} + +App.prototype.setupSelect2 = function () { + $('.select2').select2({ + dropdownAutoWidth: true, + width: '100%' + }); + + $('.select2-tags').select2({ + templateSelection: App.tagSelectionTemplate, + templateResult: App.tagResultTemplate, + width: '100%' + }); +} + +App.prototype.setupFullHeightResizing = function () { + var self = this; + + this.resizeFullHeight(); + + this.window.resize(function() { + self.resizeFullHeight(); + }); +} + +App.prototype.resizeFullHeight = function () { + $('.full-height').height(this.window.height() - $('.full-height').data('height-difference')); +} diff --git a/mayan/apps/appearance/static/appearance/js/mayan_image.js b/mayan/apps/appearance/static/appearance/js/mayan_image.js new file mode 100644 index 0000000000..1d9103364e --- /dev/null +++ b/mayan/apps/appearance/static/appearance/js/mayan_image.js @@ -0,0 +1,71 @@ +'use strict'; + +var MayanImage = function (options) { + this.element = options.element; + this.load(); +} + +MayanImage.intialize = function () { + var app = this; + + this.fancybox = $().fancybox({ + animationDuration : 400, + buttons : [ + 'fullScreen', + 'close', + ], + selector: 'a.fancybox', + afterShow: function (instance, current) { + $('a.a-caption').on('click', function(event) { + instance.close(true); + }); + }, + infobar: true, + + }); + + $('img.lazy-load').lazyload({ + appear: function(elements_left, settings) { + new MayanImage({element: $(this)}); + }, + threshold: 400, + }); + + $('img.lazy-load-carousel').lazyload({ + appear: function(elements_left, settings) { + new MayanImage({element: $(this)}); + }, + container: $('#carousel-container'), + threshold: 2000, + }); + + $('.lazy-load').on('load', function() { + $(this).hide(); + $(this).fadeIn(); + $(this).siblings('.spinner-container').remove(); + $(this).removeClass('lazy-load pull-left'); + }); + + $('.lazy-load-carousel').on('load', function() { + $(this).hide(); + $(this).fadeIn(); + $(this).siblings('.spinner-container').remove(); + $(this).removeClass('lazy-load-carousel pull-left'); + }); +} + +MayanImage.templateInvalidDocument = $('#template-invalid-document').html(); + + +MayanImage.prototype.load = function () { + var self = this; + var container = this.element.parent().parent().parent(); + + this.element.on('error', (function(event) { + container.html(MayanImage.templateInvalidDocument); + })); + + this.element.attr('src', this.element.attr('data-url')); + $.fn.matchHeight._update(); + $.fn.matchHeight._maintainScroll = true; +}; diff --git a/mayan/apps/appearance/static/appearance/js/partial_navigation.js b/mayan/apps/appearance/static/appearance/js/partial_navigation.js new file mode 100644 index 0000000000..b1590a0869 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/js/partial_navigation.js @@ -0,0 +1,286 @@ +'use strict'; + +$.fn.hasAnyClass = function() { + /* + * Return true is an element has any of the passed classes + * The classes are bassed as an array + */ + for (var i = 0; i < arguments[0].length; i++) { + if (this.hasClass(arguments[0][i])) { + return true; + } + } + return false; +} + +var PartialNavigation = function (parameters) { + parameters = parameters || {}; + + // lastLocation - used as the AJAX referer + this.lastLocation = null; + + // initialURL - the URL to send users when trying to access the / URL + this.initialURL = parameters.initialURL || null; + + // excludeAnchorClasses - Anchors with any of these classes will not be processes as AJAX anchors + this.excludeAnchorClasses = parameters.excludeAnchorClasses || []; + + // formBeforeSerializeCallbacks - Callbacks to execute before submitting an ajaxForm + this.formBeforeSerializeCallbacks = parameters.formBeforeSerializeCallbacks || []; + + if (!this.initialURL) { + alert('Need to setup initialURL'); + } +} + +PartialNavigation.prototype.initialize = function () { + this.setupAjaxAnchors(); + this.setupAjaxNavigation(); + this.setupAjaxForm(); +} + +PartialNavigation.prototype.filterLocation = function (newLocation) { + /* + * Method to validate new locations + */ + var uri = new URI(newLocation); + var currentLocation = new URI(location); + + if (uri.path() === '') { + // href with no path remain in the same location + // We strip the same location query and use the new href's one + uri.path( + new URI(currentLocation.fragment()).path() + ) + return uri.toString(); + } + + if (uri.path() === '/') { + // Root URL is not allowed + return this.initialURL; + } + + return newLocation; +} + +PartialNavigation.prototype.loadAjaxContent = function (url) { + /* + * Method to load and display partial backend views to the main + * view port. + */ + var app = this; + + url = this.filterLocation(url); + $.ajax({ + async: true, + mimeType: 'text/html; charset=utf-8', // ! Need set mimeType only when run from local file + url: url, + type: 'GET', + success: function (data, textStatus, response){ + if (response.status == 278) { + // Handle redirects + var newLocation = response.getResponseHeader('Location'); + + app.setLocation(newLocation); + app.lastLocation = newLocation; + } else { + app.lastLocation = url; + if (response.getResponseHeader('Content-Disposition')) { + window.location = this.url; + } else { + $('#ajax-content').html(data); + } + } + }, + error: function (jqXHR, textStatus, errorThrown){ + app.processAjaxRequestError(jqXHR); + }, + dataType: 'html', + }); +} + +PartialNavigation.prototype.onAnchorClick = function ($this, event) { + /* + * Anchor click event manager. We intercept all click events and + * route them to load the content via AJAX instead. + */ + var url; + + if ($this.hasAnyClass(this.excludeAnchorClasses)) { + return true; + } + + url = $this.attr('href'); + if (url === undefined) { + return true; + } + + if (url.indexOf('javascript:;') > -1) { + // Ignore links meant to execute javascript on click. + return true; + } + + if (url === '#') { + // Ignore links with hash at the. + return true; + } + + event.preventDefault(); + + if (event.ctrlKey) { + window.open(url); + return false; + } + + if (!($this.hasClass('disabled') || $this.parent().hasClass('disabled'))) { + this.setLocation(url); + } +} + +PartialNavigation.prototype.processAjaxRequestError = function (jqXHR) { + /* + * Method to process an AJAX request and make it presentable to the + * user. + */ + + if (djangoDEBUG) { + $('#ajax-content').html('
' + jqXHR.responseText + '
'); + } else { + if (jqXHR.status == 0) { + $('#modal-server-error .modal-body').html($('#template-error').html()); + $('#modal-server-error').modal('show') + } else { + $('#ajax-content').html(jqXHR.responseText); + } + } +} + +PartialNavigation.prototype.setLocation = function (newLocation, pushState) { + /* + * Method to update the browsers history and trigger a page update. + */ + + // Validate the new location first. + newLocation = this.filterLocation(newLocation); + + if (typeof pushState === 'undefined') { + // Check if we should just load the content or load the content + // and update the history. + pushState = true; + } + + var currentLocation = new URI(location); + currentLocation.fragment(newLocation); + + if (pushState) { + history.pushState({}, '', currentLocation); + } + this.loadAjaxContent(newLocation); +} + +PartialNavigation.prototype.setupAjaxAnchors = function () { + /* + * Setup the new click event handler. + */ + var app = this; + $('body').on('click', 'a', function (event) { + app.onAnchorClick($(this), event); + }); +} + +PartialNavigation.prototype.setupAjaxForm = function () { + /* + * Method to setup the handling of form in an AJAX way. + */ + var app = this; + var lastAjaxFormData = {}; + + $('form').ajaxForm({ + async: true, + beforeSerialize: function($form, options) { + // Manage any callback registered to preprocess the form. + $.each(app.formBeforeSerializeCallbacks, function (index, value) { + value($form, options); + }); + }, + beforeSubmit: function(arr, $form, options) { + var uri = new URI(location); + var uriFragment = uri.fragment(); + var url = $form.attr('action') || uriFragment; + + options.url = url; + lastAjaxFormData.url = url + '?' + decodeURIComponent($form.serialize()); + + if ($form.attr('target') == '_blank') { + // If the form has a target attribute we emulate it by + // opening a new window and passing the form serialized + // data as the query. + window.open( + $form.attr('action') + '?' + decodeURIComponent($form.serialize()) + ); + + return false; + } + }, + dataType: 'html', + delegation: true, + error: function(jqXHR, textStatus, errorThrown){ + app.processAjaxRequestError(jqXHR); + }, + mimeType: 'text/html; charset=utf-8', // ! Need set mimeType only when run from local file + success: function(data, textStatus, request){ + if (request.status == 278) { + // Handle redirects after submitting the form + var newLocation = request.getResponseHeader('Location'); + var uri = new URI(newLocation); + var uriFragment = uri.fragment(); + var currentUri = new URI(window.location.hash); + var currentUriFragment = currentUri.fragment(); + var url = uriFragment || currentUriFragment; + + app.setLocation(newLocation); + } else { + var currentUri = new URI(window.location.hash); + currentUri.fragment(lastAjaxFormData.url); + history.pushState({}, '', currentUri); + $('#ajax-content').html(data); + } + } + }); +} + +PartialNavigation.prototype.setupAjaxNavigation = function () { + /* + * Setup the navigation method using the hash of the location. + * Also handles the back button event and loads via AJAX any + * URL in the location when the app first launches. Registers + * a callback to send an emulated HTTP_REFERER so that the backends + * code will still work without change. + */ + var app = this; + + // Load ajax content when the hash changes + if (window.history && window.history.pushState) { + $(window).on('popstate', function() { + var uri = new URI(location); + var uriFragment = uri.fragment(); + app.setLocation(uriFragment, false); + }); + } + + // Load any initial address in the URL of the browser + if (window.location.hash) { + var uri = new URI(window.location.hash); + var uriFragment = uri.fragment(); + this.setLocation(uriFragment); + } else { + this.setLocation('/'); + } + + $.ajaxSetup({ + beforeSend: function (jqXHR, settings) { + // Emulate the HTTP_REFERER. + jqXHR.setRequestHeader('X-Alt-Referer', app.lastLocation); + }, + }); +} diff --git a/mayan/apps/appearance/static/appearance/package-lock.json b/mayan/apps/appearance/static/appearance/package-lock.json new file mode 100644 index 0000000000..05ba817573 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/package-lock.json @@ -0,0 +1,1303 @@ +{ + "name": "appearance", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "almond": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/almond/-/almond-0.3.3.tgz", + "integrity": "sha1-oOfJWsdiTWQXtElLHmi/9pMWiiA=" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" + } + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "requires": { + "readable-stream": "2.0.6" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "bootstrap": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", + "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=" + }, + "bootswatch": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/bootswatch/-/bootswatch-3.3.7.tgz", + "integrity": "sha1-62+amoUjuHpwbqkd7sPg1+qoqx8=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cli": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", + "integrity": "sha1-ePlIXNFhtWbppsctcXDEJw6B22E=", + "requires": { + "glob": "3.1.21" + } + }, + "coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=" + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "concat-stream": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", + "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "console-browserify": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz", + "integrity": "sha1-0SijwLuINQ61YmxufHGm8P1ImDw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=" + }, + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extract-zip": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "requires": { + "concat-stream": "1.5.0", + "debug": "0.7.4", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "faye-websocket": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", + "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=" + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, + "findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "requires": { + "async": "2.6.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "requires": { + "lodash": "4.17.5" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + } + } + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + } + } + }, + "gaze": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.4.3.tgz", + "integrity": "sha1-5Tj0/15P5kj0c6l+HrslPS3hJ7U=", + "requires": { + "globule": "0.1.0" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "requires": { + "is-property": "1.0.2" + } + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=" + } + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=" + } + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=" + }, + "grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "requires": { + "async": "0.1.22", + "coffee-script": "1.3.3", + "colors": "0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.1.3", + "getobject": "0.1.0", + "glob": "3.1.21", + "grunt-legacy-log": "0.1.3", + "grunt-legacy-util": "0.2.0", + "hooker": "0.2.3", + "iconv-lite": "0.2.11", + "js-yaml": "2.0.5", + "lodash": "0.9.2", + "minimatch": "0.2.14", + "nopt": "1.0.10", + "rimraf": "2.2.8", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "grunt-contrib-jasmine": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/grunt-contrib-jasmine/-/grunt-contrib-jasmine-0.5.3.tgz", + "integrity": "sha1-jwNNBut6IxnBLGhRW1kDBK+G3+M=", + "requires": { + "grunt-lib-phantomjs": "0.5.0", + "rimraf": "2.1.4" + }, + "dependencies": { + "rimraf": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.1.4.tgz", + "integrity": "sha1-Wm62Lu2gaPUe3lDymz5c0i89m7I=", + "requires": { + "graceful-fs": "1.2.3" + } + } + } + }, + "grunt-contrib-jshint": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.6.5.tgz", + "integrity": "sha1-OvtGdnRTZMxKGe7nk0wOBgCLVm4=", + "requires": { + "jshint": "2.1.11" + } + }, + "grunt-contrib-uglify": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz", + "integrity": "sha1-5r2lHgxAoUWfbOrUI8Ze/XJaG/c=", + "requires": { + "grunt-lib-contrib": "0.6.1", + "uglify-js": "2.4.24" + } + }, + "grunt-contrib-watch": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.5.3.tgz", + "integrity": "sha1-fZ61Rl1Qb6FPqspH5uh5CoLBye4=", + "requires": { + "gaze": "0.4.3", + "tiny-lr": "0.0.4" + } + }, + "grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "requires": { + "colors": "0.6.2", + "grunt-legacy-log-utils": "0.1.1", + "hooker": "0.2.3", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "requires": { + "colors": "0.6.2", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "requires": { + "async": "0.1.22", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "0.9.2", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "grunt-lib-contrib": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz", + "integrity": "sha1-P1att9oG6BR5XuJBWw6+X7iQPrs=", + "requires": { + "zlib-browserify": "0.0.1" + } + }, + "grunt-lib-phantomjs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-0.5.0.tgz", + "integrity": "sha1-38a9W6Ac0CNMSSDJFUpGVDku6q4=", + "requires": { + "eventemitter2": "0.4.14", + "phantomjs": "1.9.20", + "semver": "1.0.14", + "temporary": "0.0.8" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + }, + "jquery-form": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/jquery-form/-/jquery-form-4.2.2.tgz", + "integrity": "sha512-HJTef7DRBSg8ge/RNUw8rUTTtB3l8ozO0OhD16AzDl+eIXp4skgCqRTd9fYPsOzL+pN6+1B9wvbTLGjgikz8Tg==", + "requires": { + "jquery": "3.3.1" + } + }, + "jquery-lazyload": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/jquery-lazyload/-/jquery-lazyload-1.9.3.tgz", + "integrity": "sha1-wJSkc1F4FdJz752N/UBTBMUs8cE=", + "requires": { + "grunt": "0.4.5", + "grunt-contrib-jasmine": "0.5.3", + "grunt-contrib-jshint": "0.6.5", + "grunt-contrib-uglify": "0.2.7", + "grunt-contrib-watch": "0.5.3" + } + }, + "jquery-match-height": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/jquery-match-height/-/jquery-match-height-0.7.2.tgz", + "integrity": "sha1-+NnzulMU2qsQnPB0CGdL4gS+Xw4=" + }, + "jquery-mousewheel": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz", + "integrity": "sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU=" + }, + "js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "requires": { + "argparse": "0.1.16", + "esprima": "1.0.4" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jshint": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.1.11.tgz", + "integrity": "sha1-61EI/vm6Xd67gwmD9XLSQuSeP5Y=", + "requires": { + "cli": "0.4.5", + "console-browserify": "0.1.6", + "minimatch": "0.2.14", + "shelljs": "0.1.4", + "underscore": "1.4.4" + }, + "dependencies": { + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + } + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "optional": true + } + } + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "optional": true + } + } + }, + "lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=" + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "requires": { + "minimist": "0.0.8" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1.1.1" + } + }, + "noptify": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", + "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", + "requires": { + "nopt": "2.0.0" + }, + "dependencies": { + "nopt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", + "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "phantomjs": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", + "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=", + "requires": { + "extract-zip": "1.5.0", + "fs-extra": "0.26.7", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.67.0", + "request-progress": "2.0.1", + "which": "1.2.14" + }, + "dependencies": { + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "qs": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", + "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.67.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", + "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", + "requires": { + "aws-sign2": "0.6.0", + "bl": "1.0.3", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "1.0.1", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "5.2.1", + "stringstream": "0.0.5", + "tough-cookie": "2.2.2", + "tunnel-agent": "0.4.3" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "requires": { + "throttleit": "1.0.0" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + }, + "select2": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.3.tgz", + "integrity": "sha1-IHcz/pHqy5yxoT8SRjQB9HJEng8=", + "requires": { + "almond": "0.3.3", + "jquery-mousewheel": "3.1.13" + } + }, + "semver": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/semver/-/semver-1.0.14.tgz", + "integrity": "sha1-ysXi1Vpvv5WMsiCuhEBFBxx49nY=" + }, + "shelljs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz", + "integrity": "sha1-37vnjVbDwBaNL7eeEOzR28sH7A4=" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": "1.0.1" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "temporary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", + "requires": { + "package": "1.0.1" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" + }, + "tiny-lr": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.0.4.tgz", + "integrity": "sha1-gGGFR/Y/aX0Fy0DEwsSwg1Ia77Y=", + "requires": { + "debug": "0.7.4", + "faye-websocket": "0.4.4", + "noptify": "0.0.3", + "qs": "0.5.6" + }, + "dependencies": { + "qs": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", + "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=" + } + } + }, + "toastr": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", + "integrity": "sha1-i0O+ZPudDEFIcURvLbjoyk6V8YE=", + "requires": { + "jquery": "3.3.1" + } + }, + "tough-cookie": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "0.2.10", + "source-map": "0.1.34", + "uglify-to-browserify": "1.0.2", + "yargs": "3.5.4" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=" + }, + "urijs": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "1.2.1", + "decamelize": "1.2.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "1.0.1" + } + }, + "zlib-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.1.tgz", + "integrity": "sha1-T6akXQDbwV8xikr6HZr8Aljhdsw=" + } + } +} diff --git a/mayan/apps/appearance/static/appearance/package.json b/mayan/apps/appearance/static/appearance/package.json new file mode 100644 index 0000000000..a4b3ef62a5 --- /dev/null +++ b/mayan/apps/appearance/static/appearance/package.json @@ -0,0 +1,23 @@ +{ + "name": "appearance", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "Apache-2.0", + "private": true, + "dependencies": { + "bootstrap": "^3.3.7", + "bootswatch": "^3.3.7", + "jquery": "^3.3.1", + "jquery-form": "^4.2.2", + "jquery-lazyload": "^1.9.3", + "jquery-match-height": "^0.7.2", + "select2": "^4.0.3", + "toastr": "^2.1.4", + "urijs": "^1.19.1" + } +} diff --git a/mayan/apps/appearance/static/appearance/packages/animate/animate.css b/mayan/apps/appearance/static/appearance/packages/animate/animate.css deleted file mode 100644 index 635a02b50e..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/animate/animate.css +++ /dev/null @@ -1,3272 +0,0 @@ -@charset "UTF-8"; - -/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT - -Copyright (c) 2015 Daniel Eden -*/ - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.animated.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} - -.animated.bounceIn, -.animated.bounceOut { - -webkit-animation-duration: .75s; - animation-duration: .75s; -} - -.animated.flipOutX, -.animated.flipOutY { - -webkit-animation-duration: .75s; - animation-duration: .75s; -} - -@-webkit-keyframes bounce { - 0%, 20%, 53%, 80%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - } - - 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0,-4px,0); - transform: translate3d(0,-4px,0); - } -} - -@keyframes bounce { - 0%, 20%, 53%, 80%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - } - - 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -30px, 0); - transform: translate3d(0, -30px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -15px, 0); - transform: translate3d(0, -15px, 0); - } - - 90% { - -webkit-transform: translate3d(0,-4px,0); - transform: translate3d(0,-4px,0); - } -} - -.bounce { - -webkit-animation-name: bounce; - animation-name: bounce; - -webkit-transform-origin: center bottom; - transform-origin: center bottom; -} - -@-webkit-keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -@keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -.flash { - -webkit-animation-name: flash; - animation-name: flash; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes pulse { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes pulse { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 50% { - -webkit-transform: scale3d(1.05, 1.05, 1.05); - transform: scale3d(1.05, 1.05, 1.05); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.pulse { - -webkit-animation-name: pulse; - animation-name: pulse; -} - -@-webkit-keyframes rubberBand { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(.95, 1.05, 1); - transform: scale3d(.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, .95, 1); - transform: scale3d(1.05, .95, 1); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes rubberBand { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 30% { - -webkit-transform: scale3d(1.25, 0.75, 1); - transform: scale3d(1.25, 0.75, 1); - } - - 40% { - -webkit-transform: scale3d(0.75, 1.25, 1); - transform: scale3d(0.75, 1.25, 1); - } - - 50% { - -webkit-transform: scale3d(1.15, 0.85, 1); - transform: scale3d(1.15, 0.85, 1); - } - - 65% { - -webkit-transform: scale3d(.95, 1.05, 1); - transform: scale3d(.95, 1.05, 1); - } - - 75% { - -webkit-transform: scale3d(1.05, .95, 1); - transform: scale3d(1.05, .95, 1); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.rubberBand { - -webkit-animation-name: rubberBand; - animation-name: rubberBand; -} - -@-webkit-keyframes shake { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -@keyframes shake { - 0%, 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -.shake { - -webkit-animation-name: shake; - animation-name: shake; -} - -@-webkit-keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - 100% { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - -@keyframes swing { - 20% { - -webkit-transform: rotate3d(0, 0, 1, 15deg); - transform: rotate3d(0, 0, 1, 15deg); - } - - 40% { - -webkit-transform: rotate3d(0, 0, 1, -10deg); - transform: rotate3d(0, 0, 1, -10deg); - } - - 60% { - -webkit-transform: rotate3d(0, 0, 1, 5deg); - transform: rotate3d(0, 0, 1, 5deg); - } - - 80% { - -webkit-transform: rotate3d(0, 0, 1, -5deg); - transform: rotate3d(0, 0, 1, -5deg); - } - - 100% { - -webkit-transform: rotate3d(0, 0, 1, 0deg); - transform: rotate3d(0, 0, 1, 0deg); - } -} - -.swing { - -webkit-transform-origin: top center; - transform-origin: top center; - -webkit-animation-name: swing; - animation-name: swing; -} - -@-webkit-keyframes tada { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, 20% { - -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes tada { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - - 10%, 20% { - -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); - transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); - } - - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.tada { - -webkit-animation-name: tada; - animation-name: tada; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes wobble { - 0% { - -webkit-transform: none; - transform: none; - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -@keyframes wobble { - 0% { - -webkit-transform: none; - transform: none; - } - - 15% { - -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); - } - - 30% { - -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); - } - - 45% { - -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); - } - - 60% { - -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); - } - - 75% { - -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -.wobble { - -webkit-animation-name: wobble; - animation-name: wobble; -} - -@-webkit-keyframes jello { - 11.1% { - -webkit-transform: none; - transform: none - } - - 22.2% { - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg) - } - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg) - } - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg) - } - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg) - } - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg) - } - 77.7% { - -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); - transform: skewX(0.390625deg) skewY(0.390625deg) - } - 88.8% { - -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - transform: skewX(-0.1953125deg) skewY(-0.1953125deg) - } - 100% { - -webkit-transform: none; - transform: none - } -} - -@keyframes jello { - 11.1% { - -webkit-transform: none; - transform: none - } - - 22.2% { - - -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); - transform: skewX(-12.5deg) skewY(-12.5deg) - } - 33.3% { - -webkit-transform: skewX(6.25deg) skewY(6.25deg); - transform: skewX(6.25deg) skewY(6.25deg) - } - 44.4% { - -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); - transform: skewX(-3.125deg) skewY(-3.125deg) - } - 55.5% { - -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); - transform: skewX(1.5625deg) skewY(1.5625deg) - } - 66.6% { - -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); - transform: skewX(-0.78125deg) skewY(-0.78125deg) - } - 77.7% { - -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); - transform: skewX(0.390625deg) skewY(0.390625deg) - } - 88.8% { - -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); - transform: skewX(-0.1953125deg) skewY(-0.1953125deg) - } - 100% { - -webkit-transform: none; - transform: none - } -} - - - -.jello{ - -webkit-animation-name:jello; - animation-name:jello; - -webkit-transform-origin: center; - - transform-origin: center -} - -@-webkit-keyframes bounceIn { - 0%, 20%, 40%, 60%, 80%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97); - } - - 100% { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -@keyframes bounceIn { - 0%, 20%, 40%, 60%, 80%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97); - } - - 100% { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -.bounceIn { - -webkit-animation-name: bounceIn; - animation-name: bounceIn; -} - -@-webkit-keyframes bounceInDown { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -@keyframes bounceInDown { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -3000px, 0); - transform: translate3d(0, -3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, 25px, 0); - transform: translate3d(0, 25px, 0); - } - - 75% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, 5px, 0); - transform: translate3d(0, 5px, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -.bounceInDown { - -webkit-animation-name: bounceInDown; - animation-name: bounceInDown; -} - -@-webkit-keyframes bounceInLeft { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -@keyframes bounceInLeft { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(-3000px, 0, 0); - transform: translate3d(-3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(25px, 0, 0); - transform: translate3d(25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -.bounceInLeft { - -webkit-animation-name: bounceInLeft; - animation-name: bounceInLeft; -} - -@-webkit-keyframes bounceInRight { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -@keyframes bounceInRight { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(3000px, 0, 0); - transform: translate3d(3000px, 0, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(-25px, 0, 0); - transform: translate3d(-25px, 0, 0); - } - - 75% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } - - 90% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0); - } - - 100% { - -webkit-transform: none; - transform: none; - } -} - -.bounceInRight { - -webkit-animation-name: bounceInRight; - animation-name: bounceInRight; -} - -@-webkit-keyframes bounceInUp { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes bounceInUp { - 0%, 60%, 75%, 90%, 100% { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 3000px, 0); - transform: translate3d(0, 3000px, 0); - } - - 60% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 75% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 90% { - -webkit-transform: translate3d(0, -5px, 0); - transform: translate3d(0, -5px, 0); - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.bounceInUp { - -webkit-animation-name: bounceInUp; - animation-name: bounceInUp; -} - -@-webkit-keyframes bounceOut { - 20% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - - 50%, 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } -} - -@keyframes bounceOut { - 20% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - - 50%, 55% { - opacity: 1; - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } -} - -.bounceOut { - -webkit-animation-name: bounceOut; - animation-name: bounceOut; -} - -@-webkit-keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -@keyframes bounceOutDown { - 20% { - -webkit-transform: translate3d(0, 10px, 0); - transform: translate3d(0, 10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, -20px, 0); - transform: translate3d(0, -20px, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -.bounceOutDown { - -webkit-animation-name: bounceOutDown; - animation-name: bounceOutDown; -} - -@-webkit-keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -@keyframes bounceOutLeft { - 20% { - opacity: 1; - -webkit-transform: translate3d(20px, 0, 0); - transform: translate3d(20px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -.bounceOutLeft { - -webkit-animation-name: bounceOutLeft; - animation-name: bounceOutLeft; -} - -@-webkit-keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -@keyframes bounceOutRight { - 20% { - opacity: 1; - -webkit-transform: translate3d(-20px, 0, 0); - transform: translate3d(-20px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -.bounceOutRight { - -webkit-animation-name: bounceOutRight; - animation-name: bounceOutRight; -} - -@-webkit-keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -@keyframes bounceOutUp { - 20% { - -webkit-transform: translate3d(0, -10px, 0); - transform: translate3d(0, -10px, 0); - } - - 40%, 45% { - opacity: 1; - -webkit-transform: translate3d(0, 20px, 0); - transform: translate3d(0, 20px, 0); - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -.bounceOutUp { - -webkit-animation-name: bounceOutUp; - animation-name: bounceOutUp; -} - -@-webkit-keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -@keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn; -} - -@-webkit-keyframes fadeInDown { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInDown { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - -@-webkit-keyframes fadeInDownBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInDownBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInDownBig { - -webkit-animation-name: fadeInDownBig; - animation-name: fadeInDownBig; -} - -@-webkit-keyframes fadeInLeft { - 0% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInLeft { - 0% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInLeft { - -webkit-animation-name: fadeInLeft; - animation-name: fadeInLeft; -} - -@-webkit-keyframes fadeInLeftBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInLeftBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInLeftBig { - -webkit-animation-name: fadeInLeftBig; - animation-name: fadeInLeftBig; -} - -@-webkit-keyframes fadeInRight { - 0% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInRight { - 0% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInRight { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; -} - -@-webkit-keyframes fadeInRightBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInRightBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInRightBig { - -webkit-animation-name: fadeInRightBig; - animation-name: fadeInRightBig; -} - -@-webkit-keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} - -@-webkit-keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInUpBig { - -webkit-animation-name: fadeInUpBig; - animation-name: fadeInUpBig; -} - -@-webkit-keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -@keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -.fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -@-webkit-keyframes fadeOutDown { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes fadeOutDown { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -.fadeOutDown { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -@-webkit-keyframes fadeOutDownBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -@keyframes fadeOutDownBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, 2000px, 0); - transform: translate3d(0, 2000px, 0); - } -} - -.fadeOutDownBig { - -webkit-animation-name: fadeOutDownBig; - animation-name: fadeOutDownBig; -} - -@-webkit-keyframes fadeOutLeft { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes fadeOutLeft { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.fadeOutLeft { - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; -} - -@-webkit-keyframes fadeOutLeftBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -@keyframes fadeOutLeftBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(-2000px, 0, 0); - transform: translate3d(-2000px, 0, 0); - } -} - -.fadeOutLeftBig { - -webkit-animation-name: fadeOutLeftBig; - animation-name: fadeOutLeftBig; -} - -@-webkit-keyframes fadeOutRight { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -@keyframes fadeOutRight { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.fadeOutRight { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; -} - -@-webkit-keyframes fadeOutRightBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -@keyframes fadeOutRightBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(2000px, 0, 0); - transform: translate3d(2000px, 0, 0); - } -} - -.fadeOutRightBig { - -webkit-animation-name: fadeOutRightBig; - animation-name: fadeOutRightBig; -} - -@-webkit-keyframes fadeOutUp { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes fadeOutUp { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.fadeOutUp { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - -@-webkit-keyframes fadeOutUpBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -@keyframes fadeOutUpBig { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(0, -2000px, 0); - transform: translate3d(0, -2000px, 0); - } -} - -.fadeOutUpBig { - -webkit-animation-name: fadeOutUpBig; - animation-name: fadeOutUpBig; -} - -@-webkit-keyframes flip { - 0% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(.95, .95, .95); - transform: perspective(400px) scale3d(.95, .95, .95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -@keyframes flip { - 0% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - transform: perspective(400px) rotate3d(0, 1, 0, -360deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) scale3d(.95, .95, .95); - transform: perspective(400px) scale3d(.95, .95, .95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -.animated.flip { - -webkit-backface-visibility: visible; - backface-visibility: visible; - -webkit-animation-name: flip; - animation-name: flip; -} - -@-webkit-keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - transform: perspective(400px) rotate3d(1, 0, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - transform: perspective(400px) rotate3d(1, 0, 0, -5deg); - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -.flipInX { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInX; - animation-name: flipInX; -} - -@-webkit-keyframes flipInY { - 0% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -@keyframes flipInY { - 0% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - transform: perspective(400px) rotate3d(0, 1, 0, -20deg); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 60% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - transform: perspective(400px) rotate3d(0, 1, 0, 10deg); - opacity: 1; - } - - 80% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - transform: perspective(400px) rotate3d(0, 1, 0, -5deg); - } - - 100% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } -} - -.flipInY { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInY; - animation-name: flipInY; -} - -@-webkit-keyframes flipOutX { - 0% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -@keyframes flipOutX { - 0% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - transform: perspective(400px) rotate3d(1, 0, 0, -20deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - transform: perspective(400px) rotate3d(1, 0, 0, 90deg); - opacity: 0; - } -} - -.flipOutX { - -webkit-animation-name: flipOutX; - animation-name: flipOutX; - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; -} - -@-webkit-keyframes flipOutY { - 0% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - -@keyframes flipOutY { - 0% { - -webkit-transform: perspective(400px); - transform: perspective(400px); - } - - 30% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - transform: perspective(400px) rotate3d(0, 1, 0, -15deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - transform: perspective(400px) rotate3d(0, 1, 0, 90deg); - opacity: 0; - } -} - -.flipOutY { - -webkit-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipOutY; - animation-name: flipOutY; -} - -@-webkit-keyframes lightSpeedIn { - 0% { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - opacity: 1; - } - - 100% { - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes lightSpeedIn { - 0% { - -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); - transform: translate3d(100%, 0, 0) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: skewX(20deg); - transform: skewX(20deg); - opacity: 1; - } - - 80% { - -webkit-transform: skewX(-5deg); - transform: skewX(-5deg); - opacity: 1; - } - - 100% { - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.lightSpeedIn { - -webkit-animation-name: lightSpeedIn; - animation-name: lightSpeedIn; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; -} - -@-webkit-keyframes lightSpeedOut { - 0% { - opacity: 1; - } - - 100% { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - -@keyframes lightSpeedOut { - 0% { - opacity: 1; - } - - 100% { - -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); - transform: translate3d(100%, 0, 0) skewX(30deg); - opacity: 0; - } -} - -.lightSpeedOut { - -webkit-animation-name: lightSpeedOut; - animation-name: lightSpeedOut; - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; -} - -@-webkit-keyframes rotateIn { - 0% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes rotateIn { - 0% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, -200deg); - transform: rotate3d(0, 0, 1, -200deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.rotateIn { - -webkit-animation-name: rotateIn; - animation-name: rotateIn; -} - -@-webkit-keyframes rotateInDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes rotateInDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.rotateInDownLeft { - -webkit-animation-name: rotateInDownLeft; - animation-name: rotateInDownLeft; -} - -@-webkit-keyframes rotateInDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes rotateInDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.rotateInDownRight { - -webkit-animation-name: rotateInDownRight; - animation-name: rotateInDownRight; -} - -@-webkit-keyframes rotateInUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes rotateInUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.rotateInUpLeft { - -webkit-animation-name: rotateInUpLeft; - animation-name: rotateInUpLeft; -} - -@-webkit-keyframes rotateInUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -@keyframes rotateInUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -90deg); - transform: rotate3d(0, 0, 1, -90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: none; - transform: none; - opacity: 1; - } -} - -.rotateInUpRight { - -webkit-animation-name: rotateInUpRight; - animation-name: rotateInUpRight; -} - -@-webkit-keyframes rotateOut { - 0% { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - 100% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - -@keyframes rotateOut { - 0% { - -webkit-transform-origin: center; - transform-origin: center; - opacity: 1; - } - - 100% { - -webkit-transform-origin: center; - transform-origin: center; - -webkit-transform: rotate3d(0, 0, 1, 200deg); - transform: rotate3d(0, 0, 1, 200deg); - opacity: 0; - } -} - -.rotateOut { - -webkit-animation-name: rotateOut; - animation-name: rotateOut; -} - -@-webkit-keyframes rotateOutDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - -@keyframes rotateOutDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - opacity: 0; - } -} - -.rotateOutDownLeft { - -webkit-animation-name: rotateOutDownLeft; - animation-name: rotateOutDownLeft; -} - -@-webkit-keyframes rotateOutDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -@keyframes rotateOutDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -.rotateOutDownRight { - -webkit-animation-name: rotateOutDownRight; - animation-name: rotateOutDownRight; -} - -@-webkit-keyframes rotateOutUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -@keyframes rotateOutUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - opacity: 0; - } -} - -.rotateOutUpLeft { - -webkit-animation-name: rotateOutUpLeft; - animation-name: rotateOutUpLeft; -} - -@-webkit-keyframes rotateOutUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - -@keyframes rotateOutUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate3d(0, 0, 1, 90deg); - transform: rotate3d(0, 0, 1, 90deg); - opacity: 0; - } -} - -.rotateOutUpRight { - -webkit-animation-name: rotateOutUpRight; - animation-name: rotateOutUpRight; -} - -@-webkit-keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - 100% { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - -@keyframes hinge { - 0% { - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate3d(0, 0, 1, 80deg); - transform: rotate3d(0, 0, 1, 80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40%, 80% { - -webkit-transform: rotate3d(0, 0, 1, 60deg); - transform: rotate3d(0, 0, 1, 60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - 100% { - -webkit-transform: translate3d(0, 700px, 0); - transform: translate3d(0, 700px, 0); - opacity: 0; - } -} - -.hinge { - -webkit-animation-name: hinge; - animation-name: hinge; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollIn { - 0% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes rollIn { - 0% { - opacity: 0; - -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); - } - - 100% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.rollIn { - -webkit-animation-name: rollIn; - animation-name: rollIn; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - -@keyframes rollOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); - } -} - -.rollOut { - -webkit-animation-name: rollOut; - animation-name: rollOut; -} - -@-webkit-keyframes zoomIn { - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 50% { - opacity: 1; - } -} - -@keyframes zoomIn { - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 50% { - opacity: 1; - } -} - -.zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn; -} - -@-webkit-keyframes zoomInDown { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomInDown { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomInDown { - -webkit-animation-name: zoomInDown; - animation-name: zoomInDown; -} - -@-webkit-keyframes zoomInLeft { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); - transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomInLeft { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); - transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomInLeft { - -webkit-animation-name: zoomInLeft; - animation-name: zoomInLeft; -} - -@-webkit-keyframes zoomInRight { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); - transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomInRight { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); - transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomInRight { - -webkit-animation-name: zoomInRight; - animation-name: zoomInRight; -} - -@-webkit-keyframes zoomInUp { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomInUp { - 0% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 60% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomInUp { - -webkit-animation-name: zoomInUp; - animation-name: zoomInUp; -} - -@-webkit-keyframes zoomOut { - 0% { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 100% { - opacity: 0; - } -} - -@keyframes zoomOut { - 0% { - opacity: 1; - } - - 50% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - - 100% { - opacity: 0; - } -} - -.zoomOut { - -webkit-animation-name: zoomOut; - animation-name: zoomOut; -} - -@-webkit-keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomOutDown { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomOutDown { - -webkit-animation-name: zoomOutDown; - animation-name: zoomOutDown; -} - -@-webkit-keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); - transform: scale(.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - -@keyframes zoomOutLeft { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); - transform: scale(.1) translate3d(-2000px, 0, 0); - -webkit-transform-origin: left center; - transform-origin: left center; - } -} - -.zoomOutLeft { - -webkit-animation-name: zoomOutLeft; - animation-name: zoomOutLeft; -} - -@-webkit-keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.1) translate3d(2000px, 0, 0); - transform: scale(.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - -@keyframes zoomOutRight { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); - transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.1) translate3d(2000px, 0, 0); - transform: scale(.1) translate3d(2000px, 0, 0); - -webkit-transform-origin: right center; - transform-origin: right center; - } -} - -.zoomOutRight { - -webkit-animation-name: zoomOutRight; - animation-name: zoomOutRight; -} - -@-webkit-keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -@keyframes zoomOutUp { - 40% { - opacity: 1; - -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); - -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); - } - - 100% { - opacity: 0; - -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); - transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); - -webkit-transform-origin: center bottom; - transform-origin: center bottom; - -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - } -} - -.zoomOutUp { - -webkit-animation-name: zoomOutUp; - animation-name: zoomOutUp; -} - -@-webkit-keyframes slideInDown { - 0% { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInDown { - 0% { - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInDown { - -webkit-animation-name: slideInDown; - animation-name: slideInDown; -} - -@-webkit-keyframes slideInLeft { - 0% { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInLeft { - 0% { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInLeft { - -webkit-animation-name: slideInLeft; - animation-name: slideInLeft; -} - -@-webkit-keyframes slideInRight { - 0% { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInRight { - 0% { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInRight { - -webkit-animation-name: slideInRight; - animation-name: slideInRight; -} - -@-webkit-keyframes slideInUp { - 0% { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideInUp { - 0% { - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - visibility: visible; - } - - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.slideInUp { - -webkit-animation-name: slideInUp; - animation-name: slideInUp; -} - -@-webkit-keyframes slideOutDown { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes slideOutDown { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -.slideOutDown { - -webkit-animation-name: slideOutDown; - animation-name: slideOutDown; -} - -@-webkit-keyframes slideOutLeft { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -@keyframes slideOutLeft { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } -} - -.slideOutLeft { - -webkit-animation-name: slideOutLeft; - animation-name: slideOutLeft; -} - -@-webkit-keyframes slideOutRight { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -@keyframes slideOutRight { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } -} - -.slideOutRight { - -webkit-animation-name: slideOutRight; - animation-name: slideOutRight; -} - -@-webkit-keyframes slideOutUp { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes slideOutUp { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 100% { - visibility: hidden; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.slideOutUp { - -webkit-animation-name: slideOutUp; - animation-name: slideOutUp; -} diff --git a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css b/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css deleted file mode 100644 index b0fdfcbf9b..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css +++ /dev/null @@ -1,476 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 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, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(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, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.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 { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #fff 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; - 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, -.btn-default[disabled] { - 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: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - 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, -.btn-primary[disabled] { - 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: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - 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, -.btn-success[disabled] { - 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: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - 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, -.btn-info[disabled] { - 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: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - 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, -.btn-warning[disabled] { - 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: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - 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, -.btn-danger[disabled] { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #2e6da4; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(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: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - 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); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(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: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(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: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - 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: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - 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: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - 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: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - 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: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - 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 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); - background-repeat: repeat-x; - 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, .05); - box-shadow: 0 1px 2px rgba(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: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; -} -.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: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css.map b/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css.map deleted file mode 100644 index 5a12d63173..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n 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);\n 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);\n 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);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n 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+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n 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+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n 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\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n 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\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.min.css b/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.min.css deleted file mode 100644 index cefa3d1ae3..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap-theme.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 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;border-color:#ccc}.btn-default:focus,.btn-default:hover{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,.btn-default[disabled]{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:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));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:focus,.btn-primary:hover{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,.btn-primary[disabled]{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:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));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:focus,.btn-success:hover{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,.btn-success[disabled]{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:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));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:focus,.btn-info:hover{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,.btn-info[disabled]{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:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));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:focus,.btn-warning:hover{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,.btn-warning[disabled]{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:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));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:focus,.btn-danger:hover{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,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);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)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(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:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;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:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;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:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;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:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;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:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{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:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(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:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.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:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css b/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css deleted file mode 100644 index fb15e3d69c..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css +++ /dev/null @@ -1,6584 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-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 { - margin: .67em 0; - font-size: 2em; -} -mark { - color: #000; - background: #ff0; -} -small { - font-size: 80%; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -.5em; -} -sub { - bottom: -.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} -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 { - padding: 0; - border: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - 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-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} -legend { - padding: 0; - border: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-spacing: 0; - border-collapse: collapse; -} -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; - -webkit-box-shadow: none !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; - } - select { - background: #fff !important; - } - .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: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.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: #333; - background-color: #fff; -} -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: thin dotted; - 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 { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - 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; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.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: 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: #777; -} -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 { - padding: .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 { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -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; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 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; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -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: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.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: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -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; -} -@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; -} -.row { - margin-right: -15px; - margin-left: -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-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-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: #777; - 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 #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: #fff; -} -.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; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.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 { - min-height: .01%; - overflow-x: auto; -} -@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 #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 { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - 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: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-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, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .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[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - 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"], - input[type="time"], - input[type="datetime-local"], - input[type="month"] { - 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-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: normal; - vertical-align: middle; - 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 { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 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; -} -select.form-group-sm .form-control { - height: 30px; - line-height: 30px; -} -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 5px 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; -} -select.form-group-lg .form-control { - height: 46px; - line-height: 46px; -} -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 10px 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 { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .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, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(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, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(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, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(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: 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 { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@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: 14.333333px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - } -} -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - 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, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus, -.btn-default.focus, -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.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: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary.focus, -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.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: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:hover, -.btn-success:focus, -.btn-success.focus, -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.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: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:hover, -.btn-info:focus, -.btn-info.focus, -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.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: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning.focus, -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.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: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger.focus, -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.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: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - 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: #777; - 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 .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-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - 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: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.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: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - 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: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.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: 12px; - line-height: 1.42857143; - color: #777; - 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 solid; -} -.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 { - right: auto; - left: 0; - } -} -.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-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 { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(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-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-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-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-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.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: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - 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-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 { - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 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: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - 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 #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: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.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: #fff; - } -} -.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: #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 { - margin-bottom: 5px; - text-align: center; -} -.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: #fff; - } -} -.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: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - 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-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; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.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-top: 8px; - margin-right: 15px; - 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; - -webkit-box-shadow: none; - 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 { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@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: 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-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-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 { - 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-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: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - 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: #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 { - color: #fff; - background-color: #080808; -} -@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: #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: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.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: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.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; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #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 > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - color: #23527c; - background-color: #eee; - 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: 2; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} -.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: 12px; -} -.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: 20px 0; - text-align: center; - list-style: none; -} -.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: #eee; -} -.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: #777; - cursor: not-allowed; - background-color: #fff; -} -.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: #777; -} -.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; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #777; - 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: #337ab7; - 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: 30px 15px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.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; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding: 48px 0; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - 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-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.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 { - 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; - } -} -@-o-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: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(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, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - 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, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.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-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; -} -a.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -a.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.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: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - 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 { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -a.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 { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -a.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 { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -a.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 { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -a.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 { - 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: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.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: 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 #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-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-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-right-radius: 3px; - border-bottom-left-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 { - margin-bottom: 0; - border: 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 #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: #333; - 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: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - 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: #fff; -} -.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; - 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, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(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: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.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-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.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; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.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: .5; -} -.modal-header { - min-height: 16.42857143px; - 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-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, .5); - box-shadow: 0 5px 15px rgba(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-size: 12px; - font-weight: normal; - line-height: 1.4; - filter: alpha(opacity=0); - opacity: 0; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .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-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - text-decoration: none; - 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 { - 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; -} -.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-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(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 { - padding: 8px 14px; - margin: 0; - 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 { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(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: #999; - border-right-color: rgba(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: #999; - border-bottom-color: rgba(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: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -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 .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000; - perspective: 1000; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 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, .6); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(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, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(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; - filter: alpha(opacity=90); - outline: 0; - opacity: .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; -} -.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; - margin-top: -10px; - font-family: serif; - line-height: 1; -} -.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%; - 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, .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: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - right: 20%; - left: 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-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.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-footer: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, -.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; - } - 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; - } - 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; - } - 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; - } - 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; - } - 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; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css.map b/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css.map deleted file mode 100644 index 2fd84f36eb..0000000000 --- a/mayan/apps/appearance/static/appearance/packages/bootstrap-3.3.4-dist/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACwBD;;;;;;;;;;;;;EAaE,gBAAA;EDtBD;AC8BD;;;;EAIE,uBAAA;EACA,0BAAA;ED5BD;ACoCD;EACE,eAAA;EACA,WAAA;EDlCD;AC0CD;;EAEE,eAAA;EDxCD;ACkDD;EACE,+BAAA;EDhDD;ACuDD;;EAEE,YAAA;EDrDD;AC+DD;EACE,2BAAA;ED7DD;ACoED;;EAEE,mBAAA;EDlED;ACyED;EACE,oBAAA;EDvED;AC+ED;EACE,gBAAA;EACA,kBAAA;ED7ED;ACoFD;EACE,kBAAA;EACA,aAAA;EDlFD;ACyFD;EACE,gBAAA;EDvFD;AC8FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED5FD;AC+FD;EACE,aAAA;ED7FD;ACgGD;EACE,iBAAA;ED9FD;ACwGD;EACE,WAAA;EDtGD;AC6GD;EACE,kBAAA;ED3GD;ACqHD;EACE,kBAAA;EDnHD;AC0HD;EACE,8BAAA;EACA,iCAAA;UAAA,yBAAA;EACA,WAAA;EDxHD;AC+HD;EACE,gBAAA;ED7HD;ACoID;;;;EAIE,mCAAA;EACA,gBAAA;EDlID;ACoJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDlJD;ACyJD;EACE,mBAAA;EDvJD;ACiKD;;EAEE,sBAAA;ED/JD;AC0KD;;;;EAIE,4BAAA;EACA,iBAAA;EDxKD;AC+KD;;EAEE,iBAAA;ED7KD;ACoLD;;EAEE,WAAA;EACA,YAAA;EDlLD;AC0LD;EACE,qBAAA;EDxLD;ACmMD;;EAEE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,YAAA;EDjMD;AC0MD;;EAEE,cAAA;EDxMD;ACiND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED/MD;ACwND;;EAEE,0BAAA;EDtND;AC6ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED3ND;ACmOD;EACE,WAAA;EACA,YAAA;EDjOD;ACwOD;EACE,gBAAA;EDtOD;AC8OD;EACE,mBAAA;ED5OD;ACsPD;EACE,2BAAA;EACA,mBAAA;EDpPD;ACuPD;;EAEE,YAAA;EDrPD;AACD,sFAAqF;AE1ErF;EAnGI;;;IAGI,oCAAA;IACA,wBAAA;IACA,qCAAA;YAAA,6BAAA;IACA,8BAAA;IFgLL;EE7KC;;IAEI,4BAAA;IF+KL;EE5KC;IACI,8BAAA;IF8KL;EE3KC;IACI,+BAAA;IF6KL;EExKC;;IAEI,aAAA;IF0KL;EEvKC;;IAEI,wBAAA;IACA,0BAAA;IFyKL;EEtKC;IACI,6BAAA;IFwKL;EErKC;;IAEI,0BAAA;IFuKL;EEpKC;IACI,4BAAA;IFsKL;EEnKC;;;IAGI,YAAA;IACA,WAAA;IFqKL;EElKC;;IAEI,yBAAA;IFoKL;EE7JC;IACI,6BAAA;IF+JL;EE3JC;IACI,eAAA;IF6JL;EE3JC;;IAGQ,mCAAA;IF4JT;EEzJC;IACI,wBAAA;IF2JL;EExJC;IACI,sCAAA;IF0JL;EE3JC;;IAKQ,mCAAA;IF0JT;EEvJC;;IAGQ,mCAAA;IFwJT;EACF;AGpPD;EACE,qCAAA;EACA,uDAAA;EACA,iYAAA;EHsPD;AG9OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EHgPD;AG5OmC;EAAW,gBAAA;EH+O9C;AG9OmC;EAAW,gBAAA;EHiP9C;AG/OmC;;EAAW,kBAAA;EHmP9C;AGlPmC;EAAW,kBAAA;EHqP9C;AGpPmC;EAAW,kBAAA;EHuP9C;AGtPmC;EAAW,kBAAA;EHyP9C;AGxPmC;EAAW,kBAAA;EH2P9C;AG1PmC;EAAW,kBAAA;EH6P9C;AG5PmC;EAAW,kBAAA;EH+P9C;AG9PmC;EAAW,kBAAA;EHiQ9C;AGhQmC;EAAW,kBAAA;EHmQ9C;AGlQmC;EAAW,kBAAA;EHqQ9C;AGpQmC;EAAW,kBAAA;EHuQ9C;AGtQmC;EAAW,kBAAA;EHyQ9C;AGxQmC;EAAW,kBAAA;EH2Q9C;AG1QmC;EAAW,kBAAA;EH6Q9C;AG5QmC;EAAW,kBAAA;EH+Q9C;AG9QmC;EAAW,kBAAA;EHiR9C;AGhRmC;EAAW,kBAAA;EHmR9C;AGlRmC;EAAW,kBAAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,kBAAA;EH2tB9C;AG1tBmC;EAAW,kBAAA;EH6tB9C;AG5tBmC;EAAW,kBAAA;EH+tB9C;AG9tBmC;EAAW,kBAAA;EHiuB9C;AGhuBmC;EAAW,kBAAA;EHmuB9C;AGluBmC;EAAW,kBAAA;EHquB9C;AGpuBmC;EAAW,kBAAA;EHuuB9C;AGtuBmC;EAAW,kBAAA;EHyuB9C;AGxuBmC;EAAW,kBAAA;EH2uB9C;AG1uBmC;EAAW,kBAAA;EH6uB9C;AG5uBmC;EAAW,kBAAA;EH+uB9C;AG9uBmC;EAAW,kBAAA;EHivB9C;AIvhCD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL09BT;AIzhCD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELg+BT;AIvhCD;EACE,iBAAA;EACA,+CAAA;EJyhCD;AIthCD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJwhCD;AIphCD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJshCD;AIhhCD;EACE,gBAAA;EACA,uBAAA;EJkhCD;AIhhCC;;EAEE,gBAAA;EACA,4BAAA;EJkhCH;AI/gCC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENskCD;AIzgCD;EACE,WAAA;EJ2gCD;AIrgCD;EACE,wBAAA;EJugCD;AIngCD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPilCD;AIvgCD;EACE,oBAAA;EJygCD;AIngCD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPimCD;AIngCD;EACE,oBAAA;EJqgCD;AI//BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJigCD;AIz/BD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ2/BD;AIn/BC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJq/BH;AIz+BD;EACE,iBAAA;EJ2+BD;AQnoCD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+oCD;AQppCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERqqCH;AQjqCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERsqCD;AQ1qCD;;;;;;;;;;;;EAQI,gBAAA;ERgrCH;AQ7qCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERkrCD;AQtrCD;;;;;;;;;;;;EAQI,gBAAA;ER4rCH;AQxrCD;;EAAU,iBAAA;ER4rCT;AQ3rCD;;EAAU,iBAAA;ER+rCT;AQ9rCD;;EAAU,iBAAA;ERksCT;AQjsCD;;EAAU,iBAAA;ERqsCT;AQpsCD;;EAAU,iBAAA;ERwsCT;AQvsCD;;EAAU,iBAAA;ER2sCT;AQrsCD;EACE,kBAAA;ERusCD;AQpsCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERssCD;AQjsCD;EAAA;IAFI,iBAAA;IRusCD;EACF;AQ/rCD;;EAEE,gBAAA;ERisCD;AQ9rCD;;EAEE,2BAAA;EACA,eAAA;ERgsCD;AQ5rCD;EAAuB,kBAAA;ER+rCtB;AQ9rCD;EAAuB,mBAAA;ERisCtB;AQhsCD;EAAuB,oBAAA;ERmsCtB;AQlsCD;EAAuB,qBAAA;ERqsCtB;AQpsCD;EAAuB,qBAAA;ERusCtB;AQpsCD;EAAuB,2BAAA;ERusCtB;AQtsCD;EAAuB,2BAAA;ERysCtB;AQxsCD;EAAuB,4BAAA;ER2sCtB;AQxsCD;EACE,gBAAA;ER0sCD;AQxsCD;ECrGE,gBAAA;ETgzCD;AS/yCC;EACE,gBAAA;ETizCH;AQ3sCD;ECxGE,gBAAA;ETszCD;ASrzCC;EACE,gBAAA;ETuzCH;AQ9sCD;EC3GE,gBAAA;ET4zCD;AS3zCC;EACE,gBAAA;ET6zCH;AQjtCD;EC9GE,gBAAA;ETk0CD;ASj0CC;EACE,gBAAA;ETm0CH;AQptCD;ECjHE,gBAAA;ETw0CD;ASv0CC;EACE,gBAAA;ETy0CH;AQntCD;EAGE,aAAA;EE3HA,2BAAA;EV+0CD;AU90CC;EACE,2BAAA;EVg1CH;AQptCD;EE9HE,2BAAA;EVq1CD;AUp1CC;EACE,2BAAA;EVs1CH;AQvtCD;EEjIE,2BAAA;EV21CD;AU11CC;EACE,2BAAA;EV41CH;AQ1tCD;EEpIE,2BAAA;EVi2CD;AUh2CC;EACE,2BAAA;EVk2CH;AQ7tCD;EEvIE,2BAAA;EVu2CD;AUt2CC;EACE,2BAAA;EVw2CH;AQ3tCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER6tCD;AQrtCD;;EAEE,eAAA;EACA,qBAAA;ERutCD;AQ1tCD;;;;EAMI,kBAAA;ER0tCH;AQntCD;EACE,iBAAA;EACA,kBAAA;ERqtCD;AQjtCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERotCD;AQttCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERotCH;AQ/sCD;EACE,eAAA;EACA,qBAAA;ERitCD;AQ/sCD;;EAEE,yBAAA;ERitCD;AQ/sCD;EACE,mBAAA;ERitCD;AQ/sCD;EACE,gBAAA;ERitCD;AQxrCD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IX65CC;EQlsCH;IAHM,oBAAA;IRwsCH;EACF;AQ/rCD;;EAGE,cAAA;EACA,mCAAA;ERgsCD;AQ9rCD;EACE,gBAAA;EA9IqB,2BAAA;ER+0CtB;AQ5rCD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER8rCD;AQzrCG;;;EACE,kBAAA;ER6rCL;AQvsCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERyrCH;AQvrCG;;;EACE,wBAAA;ER2rCL;AQnrCD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERqrCD;AQ/qCG;;;;;;EAAW,aAAA;ERurCd;AQtrCG;;;;;;EACE,wBAAA;ER6rCL;AQvrCD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERyrCD;AY/9CD;;;;EAIE,gEAAA;EZi+CD;AY79CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZ+9CD;AY39CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZ69CD;AYn+CD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZ69CH;AYx9CD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ09CD;AYr+CD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZy9CH;AYp9CD;EACE,mBAAA;EACA,oBAAA;EZs9CD;AahhDD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EdshDD;AahhDC;EAAA;IAFE,cAAA;IbshDD;EACF;AalhDC;EAAA;IAFE,cAAA;IbwhDD;EACF;AaphDD;EAAA;IAFI,eAAA;Ib0hDD;EACF;AajhDD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed2iDD;Aa9gDD;ECvBE,oBAAA;EACA,qBAAA;EdwiDD;AexiDG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;EfwiDL;AexhDG;EACE,aAAA;Ef0hDL;AenhDC;EACE,aAAA;EfqhDH;AethDC;EACE,qBAAA;EfwhDH;AezhDC;EACE,qBAAA;Ef2hDH;Ae5hDC;EACE,YAAA;Ef8hDH;Ae/hDC;EACE,qBAAA;EfiiDH;AeliDC;EACE,qBAAA;EfoiDH;AeriDC;EACE,YAAA;EfuiDH;AexiDC;EACE,qBAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,YAAA;EfgjDH;AejjDC;EACE,qBAAA;EfmjDH;AepjDC;EACE,oBAAA;EfsjDH;AexiDC;EACE,aAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,qBAAA;EfgjDH;AejjDC;EACE,YAAA;EfmjDH;AepjDC;EACE,qBAAA;EfsjDH;AevjDC;EACE,qBAAA;EfyjDH;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qED;EACE,kBAAA;EhBirED;AgB3qED;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhB6qED;AgBhrED;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhB6qEP;AgB3rED;EAoBI,wBAAA;EACA,kCAAA;EhB0qEH;AgB/rED;;;;;;EA8BQ,eAAA;EhByqEP;AgBvsED;EAoCI,+BAAA;EhBsqEH;AgB1sED;EAyCI,2BAAA;EhBoqEH;AgB7pED;;;;;;EAOQ,cAAA;EhB8pEP;AgBnpED;EACE,2BAAA;EhBqpED;AgBtpED;;;;;;EAQQ,2BAAA;EhBspEP;AgB9pED;;EAeM,0BAAA;EhBmpEL;AgBzoED;EAEI,2BAAA;EhB0oEH;AgBjoED;EAEI,2BAAA;EhBkoEH;AgBznED;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB2nED;AgBtnEG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhBynEL;AiBrwEC;;;;;;;;;;;;EAOI,2BAAA;EjB4wEL;AiBtwEC;;;;;EAMI,2BAAA;EjBuwEL;AiB1xEC;;;;;;;;;;;;EAOI,2BAAA;EjBiyEL;AiB3xEC;;;;;EAMI,2BAAA;EjB4xEL;AiB/yEC;;;;;;;;;;;;EAOI,2BAAA;EjBszEL;AiBhzEC;;;;;EAMI,2BAAA;EjBizEL;AiBp0EC;;;;;;;;;;;;EAOI,2BAAA;EjB20EL;AiBr0EC;;;;;EAMI,2BAAA;EjBs0EL;AiBz1EC;;;;;;;;;;;;EAOI,2BAAA;EjBg2EL;AiB11EC;;;;;EAMI,2BAAA;EjB21EL;AgBzsED;EACE,kBAAA;EACA,mBAAA;EhB2sED;AgB9oED;EAAA;IA1DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,8CAAA;IACA,2BAAA;IhB4sED;EgBtpEH;IAlDM,kBAAA;IhB2sEH;EgBzpEH;;;;;;IAzCY,qBAAA;IhB0sET;EgBjqEH;IAjCM,WAAA;IhBqsEH;EgBpqEH;;;;;;IAxBY,gBAAA;IhBosET;EgB5qEH;;;;;;IApBY,iBAAA;IhBwsET;EgBprEH;;;;IAPY,kBAAA;IhBisET;EACF;AkB35ED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB05ED;AkBv5ED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBy5ED;AkBt5ED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBw5ED;AkB74ED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELo3ET;AkB74ED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+4ED;AkB34ED;EACE,gBAAA;ElB64ED;AkBz4ED;EACE,gBAAA;EACA,aAAA;ElB24ED;AkBv4ED;;EAEE,cAAA;ElBy4ED;AkBr4ED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENi9ED;AkBr4ED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBu4ED;AkB72ED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAyHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELizET;AmBz7EC;EACE,uBAAA;EACA,YAAA;EdUF,wFAAA;EACQ,gFAAA;ELk7ET;AKj5EC;EACE,gBAAA;EACA,YAAA;ELm5EH;AKj5EC;EAA0B,gBAAA;ELo5E3B;AKn5EC;EAAgC,gBAAA;ELs5EjC;AkBr3EC;;;EAGE,2BAAA;EACA,YAAA;ElBu3EH;AkBp3EC;;EAEE,qBAAA;ElBs3EH;AkBl3EC;EACE,cAAA;ElBo3EH;AkBx2ED;EACE,0BAAA;ElB02ED;AkBt0ED;EAxBE;;;;IAIE,mBAAA;IlBi2ED;EkB/1EC;;;;;;;;IAEE,mBAAA;IlBu2EH;EkBp2EC;;;;;;;;IAEE,mBAAA;IlB42EH;EACF;AkBl2ED;EACE,qBAAA;ElBo2ED;AkB51ED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;ElB81ED;AkBn2ED;;EAQI,kBAAA;EACA,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElB+1EH;AkB51ED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElB81ED;AkB31ED;;EAEE,kBAAA;ElB61ED;AkBz1ED;;EAEE,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElB21ED;AkBz1ED;;EAEE,eAAA;EACA,mBAAA;ElB21ED;AkBl1EC;;;;;;EAGE,qBAAA;ElBu1EH;AkBj1EC;;;;EAEE,qBAAA;ElBq1EH;AkB/0EC;;;;EAGI,qBAAA;ElBk1EL;AkBv0ED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;EACA,kBAAA;ElBu0ED;AkBr0EC;;EAEE,iBAAA;EACA,kBAAA;ElBu0EH;AkB1zED;EC1PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBujFD;AmBrjFC;EACE,cAAA;EACA,mBAAA;EnBujFH;AmBpjFC;;EAEE,cAAA;EnBsjFH;AkBt0ED;EC7PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBskFD;AmBpkFC;EACE,cAAA;EACA,mBAAA;EnBskFH;AmBnkFC;;EAEE,cAAA;EnBqkFH;AkBr1ED;EAKI,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ElBm1EH;AkB/0ED;EC1QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB4lFD;AmB1lFC;EACE,cAAA;EACA,mBAAA;EnB4lFH;AmBzlFC;;EAEE,cAAA;EnB2lFH;AkB31ED;EC7QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB2mFD;AmBzmFC;EACE,cAAA;EACA,mBAAA;EnB2mFH;AmBxmFC;;EAEE,cAAA;EnB0mFH;AkB12ED;EAKI,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;ElBw2EH;AkB/1ED;EAEE,oBAAA;ElBg2ED;AkBl2ED;EAMI,uBAAA;ElB+1EH;AkB31ED;EACE,oBAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,sBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkBz1ED;;;;;;;;;;ECrXI,gBAAA;EnB0tFH;AkBr2ED;ECjXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL2qFT;AmBztFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;ELgrFT;AkB/2ED;ECvWI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBytFH;AkBp3ED;ECjWI,gBAAA;EnBwtFH;AkBp3ED;;;;;;;;;;ECxXI,gBAAA;EnBwvFH;AkBh4ED;ECpXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELysFT;AmBvvFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL8sFT;AkB14ED;EC1WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBuvFH;AkB/4ED;ECpWI,gBAAA;EnBsvFH;AkB/4ED;;;;;;;;;;EC3XI,gBAAA;EnBsxFH;AkB35ED;ECvXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELuuFT;AmBrxFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL4uFT;AkBr6ED;EC7WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBqxFH;AkB16ED;ECvWI,gBAAA;EnBoxFH;AkBt6EC;EACG,WAAA;ElBw6EJ;AkBt6EC;EACG,QAAA;ElBw6EJ;AkB95ED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBg6ED;AkB70ED;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+4EH;EkBn1EH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB64EH;EkBx1EH;IAhDM,uBAAA;IlB24EH;EkB31EH;IA5CM,uBAAA;IACA,wBAAA;IlB04EH;EkB/1EH;;;IAtCQ,aAAA;IlB04EL;EkBp2EH;IAhCM,aAAA;IlBu4EH;EkBv2EH;IA5BM,kBAAA;IACA,wBAAA;IlBs4EH;EkB32EH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBm4EH;EkBl3EH;;IAdQ,iBAAA;IlBo4EL;EkBt3EH;;IATM,oBAAA;IACA,gBAAA;IlBm4EH;EkB33EH;IAHM,QAAA;IlBi4EH;EACF;AkBv3ED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBo3EH;AkB/3ED;;EAiBI,kBAAA;ElBk3EH;AkBn4ED;EJjfE,oBAAA;EACA,qBAAA;Edu3FD;AkBh2EC;EAAA;IAVI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB82EH;EACF;AkB94ED;EAwCI,aAAA;ElBy2EH;AkB51EC;EAAA;IAHM,0BAAA;IlBm2EL;EACF;AkB11EC;EAAA;IAHM,kBAAA;IlBi2EL;EACF;AoBn5FD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,gCAAA;MAAA,4BAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC6BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB4KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;EL8sFT;AoBt5FG;;;;;;EdrBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENk7FD;AoB15FC;;;EAGE,gBAAA;EACA,uBAAA;EpB45FH;AoBz5FC;;EAEE,YAAA;EACA,wBAAA;Ef2BF,0DAAA;EACQ,kDAAA;ELi4FT;AoBz5FC;;;EAGE,qBAAA;EACA,sBAAA;EE9CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL24FT;AoBr5FD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB68FD;AqB38FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB68FP;AqB38FC;;;EAGE,wBAAA;ErB68FH;AqBx8FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBs9FT;AoB97FD;ECnBI,gBAAA;EACA,2BAAA;ErBo9FH;AoB/7FD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB0/FD;AqBx/FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB0/FP;AqBx/FC;;;EAGE,wBAAA;ErB0/FH;AqBr/FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBmgGT;AoBx+FD;ECtBI,gBAAA;EACA,2BAAA;ErBigGH;AoBx+FD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuiGD;AqBriGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuiGP;AqBriGC;;;EAGE,wBAAA;ErBuiGH;AqBliGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBgjGT;AoBjhGD;EC1BI,gBAAA;EACA,2BAAA;ErB8iGH;AoBjhGD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBolGD;AqBllGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBolGP;AqBllGC;;;EAGE,wBAAA;ErBolGH;AqB/kGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB6lGT;AoB1jGD;EC9BI,gBAAA;EACA,2BAAA;ErB2lGH;AoB1jGD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBioGD;AqB/nGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBioGP;AqB/nGC;;;EAGE,wBAAA;ErBioGH;AqB5nGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB0oGT;AoBnmGD;EClCI,gBAAA;EACA,2BAAA;ErBwoGH;AoBnmGD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8qGD;AqB5qGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8qGP;AqB5qGC;;;EAGE,wBAAA;ErB8qGH;AqBzqGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBurGT;AoB5oGD;ECtCI,gBAAA;EACA,2BAAA;ErBqrGH;AoBvoGD;EACE,gBAAA;EACA,qBAAA;EACA,kBAAA;EpByoGD;AoBvoGC;;;;;EAKE,+BAAA;Ef7BF,0BAAA;EACQ,kBAAA;ELuqGT;AoBxoGC;;;;EAIE,2BAAA;EpB0oGH;AoBxoGC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpB0oGH;AoBtoGG;;;;EAEE,gBAAA;EACA,uBAAA;EpB0oGL;AoBjoGD;;EC/EE,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;ErBotGD;AoBpoGD;;ECnFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB2tGD;AoBvoGD;;ECvFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBkuGD;AoBtoGD;EACE,gBAAA;EACA,aAAA;EpBwoGD;AoBpoGD;EACE,iBAAA;EpBsoGD;AoB/nGC;;;EACE,aAAA;EpBmoGH;AuBvxGD;EACE,YAAA;ElBoLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELsmGT;AuB1xGC;EACE,YAAA;EvB4xGH;AuBxxGD;EACE,eAAA;EvB0xGD;AuBxxGC;EAAY,gBAAA;EvB2xGb;AuB1xGC;EAAY,oBAAA;EvB6xGb;AuB5xGC;EAAY,0BAAA;EvB+xGb;AuB5xGD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElBuKA,iDAAA;EACQ,4CAAA;KAAA,yCAAA;EAOR,oCAAA;EACQ,+BAAA;KAAA,4BAAA;EAGR,0CAAA;EACQ,qCAAA;KAAA,kCAAA;ELgnGT;AwB1zGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,wBAAA;EACA,qCAAA;EACA,oCAAA;ExB4zGD;AwBxzGD;;EAEE,oBAAA;ExB0zGD;AwBtzGD;EACE,YAAA;ExBwzGD;AwBpzGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBuBA,qDAAA;EACQ,6CAAA;EmBtBR,sCAAA;UAAA,8BAAA;ExBuzGD;AwBlzGC;EACE,UAAA;EACA,YAAA;ExBozGH;AwB70GD;ECxBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBw2GD;AwBn1GD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBmzGH;AwB7yGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExB+yGH;AwBzyGC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExB2yGH;AwBlyGC;;;EAGE,gBAAA;ExBoyGH;AwBhyGC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBkyGH;AwB7xGD;EAGI,gBAAA;ExB6xGH;AwBhyGD;EAQI,YAAA;ExB2xGH;AwBnxGD;EACE,YAAA;EACA,UAAA;ExBqxGD;AwB7wGD;EACE,SAAA;EACA,aAAA;ExB+wGD;AwB3wGD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExB6wGD;AwBzwGD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExB2wGD;AwBvwGD;EACE,UAAA;EACA,YAAA;ExBywGD;AwBjwGD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBiwGH;AwBvwGD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBiwGH;AwB5uGD;EAXE;IAnEA,YAAA;IACA,UAAA;IxB8zGC;EwB5vGD;IAzDA,SAAA;IACA,aAAA;IxBwzGC;EACF;A2Bv8GD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3By8GD;A2B78GD;;EAMI,oBAAA;EACA,aAAA;E3B28GH;A2Bz8GG;;;;;;;;EAIE,YAAA;E3B+8GL;A2Bz8GD;;;;EAKI,mBAAA;E3B08GH;A2Br8GD;EACE,mBAAA;E3Bu8GD;A2Bx8GD;;EAMI,aAAA;E3Bs8GH;A2B58GD;;;EAWI,kBAAA;E3Bs8GH;A2Bl8GD;EACE,kBAAA;E3Bo8GD;A2Bh8GD;EACE,gBAAA;E3Bk8GD;A2Bj8GC;ECjDA,+BAAA;EACG,4BAAA;E5Bq/GJ;A2Bh8GD;;EC9CE,8BAAA;EACG,2BAAA;E5Bk/GJ;A2B/7GD;EACE,aAAA;E3Bi8GD;A2B/7GD;EACE,kBAAA;E3Bi8GD;A2B/7GD;;EClEE,+BAAA;EACG,4BAAA;E5BqgHJ;A2B97GD;EChEE,8BAAA;EACG,2BAAA;E5BigHJ;A2B77GD;;EAEE,YAAA;E3B+7GD;A2B96GD;EACE,mBAAA;EACA,oBAAA;E3Bg7GD;A2B96GD;EACE,oBAAA;EACA,qBAAA;E3Bg7GD;A2B36GD;EtB9CE,0DAAA;EACQ,kDAAA;EL49GT;A2B36GC;EtBlDA,0BAAA;EACQ,kBAAA;ELg+GT;A2Bx6GD;EACE,gBAAA;E3B06GD;A2Bv6GD;EACE,yBAAA;EACA,wBAAA;E3By6GD;A2Bt6GD;EACE,yBAAA;E3Bw6GD;A2Bj6GD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3Bk6GH;A2Bz6GD;EAcM,aAAA;E3B85GL;A2B56GD;;;;EAsBI,kBAAA;EACA,gBAAA;E3B45GH;A2Bv5GC;EACE,kBAAA;E3By5GH;A2Bv5GC;EACE,8BAAA;ECnKF,+BAAA;EACC,8BAAA;E5B6jHF;A2Bx5GC;EACE,gCAAA;EC/KF,4BAAA;EACC,2BAAA;E5B0kHF;A2Bx5GD;EACE,kBAAA;E3B05GD;A2Bx5GD;;EC9KE,+BAAA;EACC,8BAAA;E5B0kHF;A2Bv5GD;EC5LE,4BAAA;EACC,2BAAA;E5BslHF;A2Bn5GD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3Bq5GD;A2Bz5GD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3Bs5GH;A2B/5GD;EAYI,aAAA;E3Bs5GH;A2Bl6GD;EAgBI,YAAA;E3Bq5GH;A2Bp4GD;;;;EAKM,oBAAA;EACA,wBAAA;EACA,sBAAA;E3Bq4GL;A6B9mHD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7BgnHD;A6B7mHC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7B+mHH;A6BxnHD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7BumHH;A6B9lHD;;;EV8BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnBqkHD;AmBnkHC;;;EACE,cAAA;EACA,mBAAA;EnBukHH;AmBpkHC;;;;;;EAEE,cAAA;EnB0kHH;A6BhnHD;;;EVyBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB4lHD;AmB1lHC;;;EACE,cAAA;EACA,mBAAA;EnB8lHH;AmB3lHC;;;;;;EAEE,cAAA;EnBimHH;A6B9nHD;;;EAGE,qBAAA;E7BgoHD;A6B9nHC;;;EACE,kBAAA;E7BkoHH;A6B9nHD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7BgoHD;A6B3nHD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7B6nHD;A6B1nHC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6B1nHC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6BhpHD;;EA0BI,eAAA;E7B0nHH;A6BrnHD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5B8tHJ;A6BtnHD;EACE,iBAAA;E7BwnHD;A6BtnHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5BmuHJ;A6BvnHD;EACE,gBAAA;E7BynHD;A6BpnHD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7BonHD;A6BznHD;EAUI,oBAAA;E7BknHH;A6B5nHD;EAYM,mBAAA;E7BmnHL;A6BhnHG;;;EAGE,YAAA;E7BknHL;A6B7mHC;;EAGI,oBAAA;E7B8mHL;A6B3mHC;;EAGI,mBAAA;E7B4mHL;A8BtwHD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9BwwHD;A8B3wHD;EAOI,oBAAA;EACA,gBAAA;E9BuwHH;A8B/wHD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9BuwHL;A8BtwHK;;EAEE,uBAAA;EACA,2BAAA;E9BwwHP;A8BnwHG;EACE,gBAAA;E9BqwHL;A8BnwHK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9BqwHP;A8B9vHG;;;EAGE,2BAAA;EACA,uBAAA;E9BgwHL;A8BzyHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB+yHD;A8B/yHD;EA0DI,iBAAA;E9BwvHH;A8B/uHD;EACE,kCAAA;E9BivHD;A8BlvHD;EAGI,aAAA;EAEA,qBAAA;E9BivHH;A8BtvHD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9BgvHL;A8B/uHK;EACE,uCAAA;E9BivHP;A8B3uHK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9B6uHP;A8BxuHC;EAqDA,aAAA;EA8BA,kBAAA;E9BypHD;A8B5uHC;EAwDE,aAAA;E9BurHH;A8B/uHC;EA0DI,oBAAA;EACA,oBAAA;E9BwrHL;A8BnvHC;EAgEE,WAAA;EACA,YAAA;E9BsrHH;A8B1qHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BqrHH;E8B/qHH;IAJQ,kBAAA;I9BsrHL;EACF;A8BhwHC;EAuFE,iBAAA;EACA,oBAAA;E9B4qHH;A8BpwHC;;;EA8FE,2BAAA;E9B2qHH;A8B7pHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B0qHH;E8BlqHH;;;IAHM,8BAAA;I9B0qHH;EACF;A8B3wHD;EAEI,aAAA;E9B4wHH;A8B9wHD;EAMM,oBAAA;E9B2wHL;A8BjxHD;EASM,kBAAA;E9B2wHL;A8BtwHK;;;EAGE,gBAAA;EACA,2BAAA;E9BwwHP;A8BhwHD;EAEI,aAAA;E9BiwHH;A8BnwHD;EAIM,iBAAA;EACA,gBAAA;E9BkwHL;A8BtvHD;EACE,aAAA;E9BwvHD;A8BzvHD;EAII,aAAA;E9BwvHH;A8B5vHD;EAMM,oBAAA;EACA,oBAAA;E9ByvHL;A8BhwHD;EAYI,WAAA;EACA,YAAA;E9BuvHH;A8B3uHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BsvHH;E8BhvHH;IAJQ,kBAAA;I9BuvHL;EACF;A8B/uHD;EACE,kBAAA;E9BivHD;A8BlvHD;EAKI,iBAAA;EACA,oBAAA;E9BgvHH;A8BtvHD;;;EAYI,2BAAA;E9B+uHH;A8BjuHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B8uHH;E8BtuHH;;;IAHM,8BAAA;I9B8uHH;EACF;A8BruHD;EAEI,eAAA;E9BsuHH;A8BxuHD;EAKI,gBAAA;E9BsuHH;A8B7tHD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5B08HF;A+Bp8HD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/Bs8HD;A+B97HD;EAAA;IAFI,oBAAA;I/Bo8HD;EACF;A+Br7HD;EAAA;IAFI,aAAA;I/B27HD;EACF;A+B76HD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;UAAA,oDAAA;EAEA,mCAAA;E/B86HD;A+B56HC;EACE,kBAAA;E/B86HH;A+Bl5HD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;YAAA,kBAAA;I/B86HD;E+B56HC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/B86HH;E+B36HC;IACE,qBAAA;I/B66HH;E+Bx6HC;;;IAGE,iBAAA;IACA,kBAAA;I/B06HH;EACF;A+Bt6HD;;EAGI,mBAAA;E/Bu6HH;A+Bl6HC;EAAA;;IAFI,mBAAA;I/By6HH;EACF;A+Bh6HD;;;;EAII,qBAAA;EACA,oBAAA;E/Bk6HH;A+B55HC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/Bs6HH;EACF;A+B15HD;EACE,eAAA;EACA,uBAAA;E/B45HD;A+Bv5HD;EAAA;IAFI,kBAAA;I/B65HD;EACF;A+Bz5HD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E/B25HD;A+Br5HD;EAAA;;IAFI,kBAAA;I/B45HD;EACF;A+B15HD;EACE,QAAA;EACA,uBAAA;E/B45HD;A+B15HD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/B45HD;A+Bt5HD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/Bw5HD;A+Bt5HC;;EAEE,uBAAA;E/Bw5HH;A+Bj6HD;EAaI,gBAAA;E/Bu5HH;A+B94HD;EALI;;IAEE,oBAAA;I/Bs5HH;EACF;A+B54HD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC9LA,iBAAA;EACA,oBAAA;ED+LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/B+4HD;A+B34HC;EACE,YAAA;E/B64HH;A+B35HD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/B24HH;A+Bj6HD;EAyBI,iBAAA;E/B24HH;A+Br4HD;EAAA;IAFI,eAAA;I/B24HD;EACF;A+Bl4HD;EACE,qBAAA;E/Bo4HD;A+Br4HD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/Bo4HH;A+Bx2HC;EAAA;IAtBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;YAAA,kBAAA;I/Bk4HH;E+Bl3HD;;IAbM,4BAAA;I/Bm4HL;E+Bt3HD;IAVM,mBAAA;I/Bm4HL;E+Bl4HK;;IAEE,wBAAA;I/Bo4HP;EACF;A+Bl3HD;EAAA;IAXI,aAAA;IACA,WAAA;I/Bi4HD;E+Bv3HH;IAPM,aAAA;I/Bi4HH;E+B13HH;IALQ,mBAAA;IACA,sBAAA;I/Bk4HL;EACF;A+Bv3HD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B9NA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhCwpID;AkBvqHD;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlByuHH;EkB7qHH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBuuHH;EkBlrHH;IAhDM,uBAAA;IlBquHH;EkBrrHH;IA5CM,uBAAA;IACA,wBAAA;IlBouHH;EkBzrHH;;;IAtCQ,aAAA;IlBouHL;EkB9rHH;IAhCM,aAAA;IlBiuHH;EkBjsHH;IA5BM,kBAAA;IACA,wBAAA;IlBguHH;EkBrsHH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlB6tHH;EkB5sHH;;IAdQ,iBAAA;IlB8tHL;EkBhtHH;;IATM,oBAAA;IACA,gBAAA;IlB6tHH;EkBrtHH;IAHM,QAAA;IlB2tHH;EACF;A+Bh6HC;EAAA;IANI,oBAAA;I/B06HH;E+Bx6HG;IACE,kBAAA;I/B06HL;EACF;A+Bz5HD;EAAA;IARI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BzPF,0BAAA;IACQ,kBAAA;IL+pIP;EACF;A+B/5HD;EACE,eAAA;EHpUA,4BAAA;EACC,2BAAA;E5BsuIF;A+B/5HD;EACE,kBAAA;EHzUA,8BAAA;EACC,6BAAA;EAOD,+BAAA;EACC,8BAAA;E5BquIF;A+B35HD;EChVE,iBAAA;EACA,oBAAA;EhC8uID;A+B55HC;ECnVA,kBAAA;EACA,qBAAA;EhCkvID;A+B75HC;ECtVA,kBAAA;EACA,qBAAA;EhCsvID;A+Bv5HD;EChWE,kBAAA;EACA,qBAAA;EhC0vID;A+Bn5HD;EAAA;IAJI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B25HD;EACF;A+B93HD;EAhBE;IExWA,wBAAA;IjC0vIC;E+Bj5HD;IE5WA,yBAAA;IF8WE,qBAAA;I/Bm5HD;E+Br5HD;IAKI,iBAAA;I/Bm5HH;EACF;A+B14HD;EACE,2BAAA;EACA,uBAAA;E/B44HD;A+B94HD;EAKI,gBAAA;E/B44HH;A+B34HG;;EAEE,gBAAA;EACA,+BAAA;E/B64HL;A+Bt5HD;EAcI,gBAAA;E/B24HH;A+Bz5HD;EAmBM,gBAAA;E/By4HL;A+Bv4HK;;EAEE,gBAAA;EACA,+BAAA;E/By4HP;A+Br4HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bu4HP;A+Bn4HK;;;EAGE,gBAAA;EACA,+BAAA;E/Bq4HP;A+B76HD;EA8CI,uBAAA;E/Bk4HH;A+Bj4HG;;EAEE,2BAAA;E/Bm4HL;A+Bp7HD;EAoDM,2BAAA;E/Bm4HL;A+Bv7HD;;EA0DI,uBAAA;E/Bi4HH;A+B13HK;;;EAGE,2BAAA;EACA,gBAAA;E/B43HP;A+B31HC;EAAA;IAzBQ,gBAAA;I/Bw3HP;E+Bv3HO;;IAEE,gBAAA;IACA,+BAAA;I/By3HT;E+Br3HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bu3HT;E+Bn3HO;;;IAGE,gBAAA;IACA,+BAAA;I/Bq3HT;EACF;A+Bv9HD;EA8GI,gBAAA;E/B42HH;A+B32HG;EACE,gBAAA;E/B62HL;A+B79HD;EAqHI,gBAAA;E/B22HH;A+B12HG;;EAEE,gBAAA;E/B42HL;A+Bx2HK;;;;EAEE,gBAAA;E/B42HP;A+Bp2HD;EACE,2BAAA;EACA,uBAAA;E/Bs2HD;A+Bx2HD;EAKI,gBAAA;E/Bs2HH;A+Br2HG;;EAEE,gBAAA;EACA,+BAAA;E/Bu2HL;A+Bh3HD;EAcI,gBAAA;E/Bq2HH;A+Bn3HD;EAmBM,gBAAA;E/Bm2HL;A+Bj2HK;;EAEE,gBAAA;EACA,+BAAA;E/Bm2HP;A+B/1HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bi2HP;A+B71HK;;;EAGE,gBAAA;EACA,+BAAA;E/B+1HP;A+Bv4HD;EA+CI,uBAAA;E/B21HH;A+B11HG;;EAEE,2BAAA;E/B41HL;A+B94HD;EAqDM,2BAAA;E/B41HL;A+Bj5HD;;EA2DI,uBAAA;E/B01HH;A+Bp1HK;;;EAGE,2BAAA;EACA,gBAAA;E/Bs1HP;A+B/yHC;EAAA;IA/BQ,uBAAA;I/Bk1HP;E+BnzHD;IA5BQ,2BAAA;I/Bk1HP;E+BtzHD;IAzBQ,gBAAA;I/Bk1HP;E+Bj1HO;;IAEE,gBAAA;IACA,+BAAA;I/Bm1HT;E+B/0HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bi1HT;E+B70HO;;;IAGE,gBAAA;IACA,+BAAA;I/B+0HT;EACF;A+Bv7HD;EA+GI,gBAAA;E/B20HH;A+B10HG;EACE,gBAAA;E/B40HL;A+B77HD;EAsHI,gBAAA;E/B00HH;A+Bz0HG;;EAEE,gBAAA;E/B20HL;A+Bv0HK;;;;EAEE,gBAAA;E/B20HP;AkCr9ID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElCu9ID;AkC59ID;EAQI,uBAAA;ElCu9IH;AkC/9ID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElCu9IL;AkCp+ID;EAkBI,gBAAA;ElCq9IH;AmCz+ID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC2+ID;AmC/+ID;EAOI,iBAAA;EnC2+IH;AmCl/ID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC4+IL;AmC1+IG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5Bu/IJ;AmCz+IG;;EPvBF,iCAAA;EACG,8BAAA;E5BogJJ;AmCp+IG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnCw+IL;AmCl+IG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnCu+IL;AmC7hJD;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCo+IL;AmC39ID;;EC1EM,oBAAA;EACA,iBAAA;EpCyiJL;AoCviJG;;ERMF,gCAAA;EACG,6BAAA;E5BqiJJ;AoCtiJG;;ERRF,iCAAA;EACG,8BAAA;E5BkjJJ;AmCr+ID;;EC/EM,mBAAA;EACA,iBAAA;EpCwjJL;AoCtjJG;;ERMF,gCAAA;EACG,6BAAA;E5BojJJ;AoCrjJG;;ERRF,iCAAA;EACG,8BAAA;E5BikJJ;AqCpkJD;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCskJD;AqC1kJD;EAOI,iBAAA;ErCskJH;AqC7kJD;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErCukJL;AqCrlJD;;EAmBM,uBAAA;EACA,2BAAA;ErCskJL;AqC1lJD;;EA2BM,cAAA;ErCmkJL;AqC9lJD;;EAkCM,aAAA;ErCgkJL;AqClmJD;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErC6jJL;AsC3mJD;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtC6mJD;AsCzmJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC2mJL;AsCtmJC;EACE,eAAA;EtCwmJH;AsCpmJC;EACE,oBAAA;EACA,WAAA;EtCsmJH;AsC/lJD;ECtCE,2BAAA;EvCwoJD;AuCroJG;;EAEE,2BAAA;EvCuoJL;AsClmJD;EC1CE,2BAAA;EvC+oJD;AuC5oJG;;EAEE,2BAAA;EvC8oJL;AsCrmJD;EC9CE,2BAAA;EvCspJD;AuCnpJG;;EAEE,2BAAA;EvCqpJL;AsCxmJD;EClDE,2BAAA;EvC6pJD;AuC1pJG;;EAEE,2BAAA;EvC4pJL;AsC3mJD;ECtDE,2BAAA;EvCoqJD;AuCjqJG;;EAEE,2BAAA;EvCmqJL;AsC9mJD;EC1DE,2BAAA;EvC2qJD;AuCxqJG;;EAEE,2BAAA;EvC0qJL;AwC5qJD;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExC8qJD;AwC3qJC;EACE,eAAA;ExC6qJH;AwCzqJC;EACE,oBAAA;EACA,WAAA;ExC2qJH;AwCxqJC;;EAEE,QAAA;EACA,kBAAA;ExC0qJH;AwCrqJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExCuqJL;AwClqJC;;EAEE,gBAAA;EACA,2BAAA;ExCoqJH;AwCjqJC;EACE,cAAA;ExCmqJH;AwChqJC;EACE,mBAAA;ExCkqJH;AwC/pJC;EACE,kBAAA;ExCiqJH;AyC3tJD;EACE,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzC6tJD;AyCjuJD;;EAQI,gBAAA;EzC6tJH;AyCruJD;EAYI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzC4tJH;AyC1uJD;EAkBI,2BAAA;EzC2tJH;AyCxtJC;;EAEE,oBAAA;EzC0tJH;AyCjvJD;EA2BI,iBAAA;EzCytJH;AyCxsJD;EAAA;IAbI,iBAAA;IzCytJD;EyCvtJC;;IAEE,oBAAA;IACA,qBAAA;IzCytJH;EyCjtJH;;IAHM,iBAAA;IzCwtJH;EACF;A0CjwJD;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErCiLA,6CAAA;EACK,wCAAA;EACG,qCAAA;ELmlJT;A0C7wJD;;EAaI,mBAAA;EACA,oBAAA;E1CowJH;A0ChwJC;;;EAGE,uBAAA;E1CkwJH;A0CvxJD;EA0BI,cAAA;EACA,gBAAA;E1CgwJH;A2CzxJD;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3C2xJD;A2C/xJD;EAQI,eAAA;EAEA,gBAAA;E3CyxJH;A2CnyJD;EAeI,mBAAA;E3CuxJH;A2CtyJD;;EAqBI,kBAAA;E3CqxJH;A2C1yJD;EAyBI,iBAAA;E3CoxJH;A2C5wJD;;EAEE,qBAAA;E3C8wJD;A2ChxJD;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C8wJH;A2CtwJD;ECvDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cg0JD;A2C3wJD;EClDI,2BAAA;E5Cg0JH;A2C9wJD;EC/CI,gBAAA;E5Cg0JH;A2C7wJD;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C20JD;A2ClxJD;ECtDI,2BAAA;E5C20JH;A2CrxJD;ECnDI,gBAAA;E5C20JH;A2CpxJD;EC/DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cs1JD;A2CzxJD;EC1DI,2BAAA;E5Cs1JH;A2C5xJD;ECvDI,gBAAA;E5Cs1JH;A2C3xJD;ECnEE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Ci2JD;A2ChyJD;EC9DI,2BAAA;E5Ci2JH;A2CnyJD;EC3DI,gBAAA;E5Ci2JH;A6Cn2JD;EACE;IAAQ,6BAAA;I7Cs2JP;E6Cr2JD;IAAQ,0BAAA;I7Cw2JP;EACF;A6Cr2JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6C72JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6Cn2JD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCsCA,wDAAA;EACQ,gDAAA;ELg0JT;A6Cl2JD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCyBA,wDAAA;EACQ,gDAAA;EAyHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELotJT;A6C/1JD;;ECCI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDAF,oCAAA;UAAA,4BAAA;E7Cm2JD;A6C51JD;;ExC5CE,4DAAA;EACK,uDAAA;EACG,oDAAA;EL44JT;A6Cz1JD;EErEE,2BAAA;E/Ci6JD;A+C95JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci3JH;A6C71JD;EEzEE,2BAAA;E/Cy6JD;A+Ct6JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy3JH;A6Cj2JD;EE7EE,2BAAA;E/Ci7JD;A+C96JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci4JH;A6Cr2JD;EEjFE,2BAAA;E/Cy7JD;A+Ct7JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy4JH;AgDj8JD;EAEE,kBAAA;EhDk8JD;AgDh8JC;EACE,eAAA;EhDk8JH;AgD97JD;;EAEE,SAAA;EACA,kBAAA;EhDg8JD;AgD77JD;EACE,gBAAA;EhD+7JD;AgD57JD;EACE,gBAAA;EhD87JD;AgD37JD;;EAEE,oBAAA;EhD67JD;AgD17JD;;EAEE,qBAAA;EhD47JD;AgDz7JD;;;EAGE,qBAAA;EACA,qBAAA;EhD27JD;AgDx7JD;EACE,wBAAA;EhD07JD;AgDv7JD;EACE,wBAAA;EhDy7JD;AgDr7JD;EACE,eAAA;EACA,oBAAA;EhDu7JD;AgDj7JD;EACE,iBAAA;EACA,kBAAA;EhDm7JD;AiDr+JD;EAEE,qBAAA;EACA,iBAAA;EjDs+JD;AiD99JD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjD+9JD;AiD59JC;ErB3BA,8BAAA;EACC,6BAAA;E5B0/JF;AiD79JC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5Bu/JF;AiDt9JD;EACE,gBAAA;EjDw9JD;AiDz9JD;EAII,gBAAA;EjDw9JH;AiDp9JC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDs9JH;AiDh9JC;;;EAGE,2BAAA;EACA,gBAAA;EACA,qBAAA;EjDk9JH;AiDv9JC;;;EASI,gBAAA;EjDm9JL;AiD59JC;;;EAYI,gBAAA;EjDq9JL;AiDh9JC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDk9JH;AiDx9JC;;;;;;;;;EAYI,gBAAA;EjDu9JL;AiDn+JC;;;EAeI,gBAAA;EjDy9JL;AkDrjKC;EACE,gBAAA;EACA,2BAAA;ElDujKH;AkDrjKG;EACE,gBAAA;ElDujKL;AkDxjKG;EAII,gBAAA;ElDujKP;AkDpjKK;;EAEE,gBAAA;EACA,2BAAA;ElDsjKP;AkDpjKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsjKP;AkD3kKC;EACE,gBAAA;EACA,2BAAA;ElD6kKH;AkD3kKG;EACE,gBAAA;ElD6kKL;AkD9kKG;EAII,gBAAA;ElD6kKP;AkD1kKK;;EAEE,gBAAA;EACA,2BAAA;ElD4kKP;AkD1kKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4kKP;AkDjmKC;EACE,gBAAA;EACA,2BAAA;ElDmmKH;AkDjmKG;EACE,gBAAA;ElDmmKL;AkDpmKG;EAII,gBAAA;ElDmmKP;AkDhmKK;;EAEE,gBAAA;EACA,2BAAA;ElDkmKP;AkDhmKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDkmKP;AkDvnKC;EACE,gBAAA;EACA,2BAAA;ElDynKH;AkDvnKG;EACE,gBAAA;ElDynKL;AkD1nKG;EAII,gBAAA;ElDynKP;AkDtnKK;;EAEE,gBAAA;EACA,2BAAA;ElDwnKP;AkDtnKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDwnKP;AiD5hKD;EACE,eAAA;EACA,oBAAA;EjD8hKD;AiD5hKD;EACE,kBAAA;EACA,kBAAA;EjD8hKD;AmDlpKD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;EL2lKT;AmDjpKD;EACE,eAAA;EnDmpKD;AmD9oKD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5BqqKF;AmDppKD;EAMI,gBAAA;EnDipKH;AmD5oKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnD8oKD;AmDlpKD;;;;;EAWI,gBAAA;EnD8oKH;AmDzoKD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBxCA,iCAAA;EACC,gCAAA;E5BorKF;AmDnoKD;;EAGI,kBAAA;EnDooKH;AmDvoKD;;EAMM,qBAAA;EACA,kBAAA;EnDqoKL;AmDjoKG;;EAEI,eAAA;EvBvEN,8BAAA;EACC,6BAAA;E5B2sKF;AmDhoKG;;EAEI,kBAAA;EvBtEN,iCAAA;EACC,gCAAA;E5BysKF;AmD7nKD;EAEI,qBAAA;EnD8nKH;AmD3nKD;EACE,qBAAA;EnD6nKD;AmDrnKD;;;EAII,kBAAA;EnDsnKH;AmD1nKD;;;EAOM,oBAAA;EACA,qBAAA;EnDwnKL;AmDhoKD;;EvBnGE,8BAAA;EACC,6BAAA;E5BuuKF;AmDroKD;;;;EAmBQ,6BAAA;EACA,8BAAA;EnDwnKP;AmD5oKD;;;;;;;;EAwBU,6BAAA;EnD8nKT;AmDtpKD;;;;;;;;EA4BU,8BAAA;EnDooKT;AmDhqKD;;EvB3FE,iCAAA;EACC,gCAAA;E5B+vKF;AmDrqKD;;;;EAyCQ,gCAAA;EACA,iCAAA;EnDkoKP;AmD5qKD;;;;;;;;EA8CU,gCAAA;EnDwoKT;AmDtrKD;;;;;;;;EAkDU,iCAAA;EnD8oKT;AmDhsKD;;;;EA2DI,+BAAA;EnD2oKH;AmDtsKD;;EA+DI,eAAA;EnD2oKH;AmD1sKD;;EAmEI,WAAA;EnD2oKH;AmD9sKD;;;;;;;;;;;;EA0EU,gBAAA;EnDkpKT;AmD5tKD;;;;;;;;;;;;EA8EU,iBAAA;EnD4pKT;AmD1uKD;;;;;;;;EAuFU,kBAAA;EnD6pKT;AmDpvKD;;;;;;;;EAgGU,kBAAA;EnD8pKT;AmD9vKD;EAsGI,WAAA;EACA,kBAAA;EnD2pKH;AmDjpKD;EACE,qBAAA;EnDmpKD;AmDppKD;EAKI,kBAAA;EACA,oBAAA;EnDkpKH;AmDxpKD;EASM,iBAAA;EnDkpKL;AmD3pKD;EAcI,kBAAA;EnDgpKH;AmD9pKD;;EAkBM,+BAAA;EnDgpKL;AmDlqKD;EAuBI,eAAA;EnD8oKH;AmDrqKD;EAyBM,kCAAA;EnD+oKL;AmDxoKD;ECpPE,uBAAA;EpD+3KD;AoD73KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD+3KH;AoDl4KC;EAMI,2BAAA;EpD+3KL;AoDr4KC;EASI,gBAAA;EACA,2BAAA;EpD+3KL;AoD53KC;EAEI,8BAAA;EpD63KL;AmDvpKD;ECvPE,uBAAA;EpDi5KD;AoD/4KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDi5KH;AoDp5KC;EAMI,2BAAA;EpDi5KL;AoDv5KC;EASI,gBAAA;EACA,2BAAA;EpDi5KL;AoD94KC;EAEI,8BAAA;EpD+4KL;AmDtqKD;EC1PE,uBAAA;EpDm6KD;AoDj6KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDm6KH;AoDt6KC;EAMI,2BAAA;EpDm6KL;AoDz6KC;EASI,gBAAA;EACA,2BAAA;EpDm6KL;AoDh6KC;EAEI,8BAAA;EpDi6KL;AmDrrKD;EC7PE,uBAAA;EpDq7KD;AoDn7KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDq7KH;AoDx7KC;EAMI,2BAAA;EpDq7KL;AoD37KC;EASI,gBAAA;EACA,2BAAA;EpDq7KL;AoDl7KC;EAEI,8BAAA;EpDm7KL;AmDpsKD;EChQE,uBAAA;EpDu8KD;AoDr8KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDu8KH;AoD18KC;EAMI,2BAAA;EpDu8KL;AoD78KC;EASI,gBAAA;EACA,2BAAA;EpDu8KL;AoDp8KC;EAEI,8BAAA;EpDq8KL;AmDntKD;ECnQE,uBAAA;EpDy9KD;AoDv9KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDy9KH;AoD59KC;EAMI,2BAAA;EpDy9KL;AoD/9KC;EASI,gBAAA;EACA,2BAAA;EpDy9KL;AoDt9KC;EAEI,8BAAA;EpDu9KL;AqDv+KD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDy+KD;AqD9+KD;;;;;EAYI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDy+KH;AqDp+KD;EACE,wBAAA;ErDs+KD;AqDl+KD;EACE,qBAAA;ErDo+KD;AsD//KD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;EL08KT;AsDzgLD;EASI,oBAAA;EACA,mCAAA;EtDmgLH;AsD9/KD;EACE,eAAA;EACA,oBAAA;EtDggLD;AsD9/KD;EACE,cAAA;EACA,oBAAA;EtDggLD;AuDthLD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtB+hLD;AuDvhLC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBuiLD;AuDnhLC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDqhLH;AwD1iLD;EACE,kBAAA;ExD4iLD;AwDxiLD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDuiLD;AwDpiLC;EnD+GA,uCAAA;EACI,mCAAA;EACC,kCAAA;EACG,+BAAA;EAkER,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELu3KT;AwD1iLC;EnD2GA,oCAAA;EACI,gCAAA;EACC,+BAAA;EACG,4BAAA;ELk8KT;AwD9iLD;EACE,oBAAA;EACA,kBAAA;ExDgjLD;AwD5iLD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExD8iLD;AwD1iLD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;UAAA,8BAAA;EAEA,YAAA;ExD4iLD;AwDxiLD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExD0iLD;AwDxiLC;ElCrEA,YAAA;EAGA,0BAAA;EtB8mLD;AwD3iLC;ElCtEA,cAAA;EAGA,2BAAA;EtBknLD;AwD1iLD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExD4iLD;AwDziLD;EACE,kBAAA;ExD2iLD;AwDviLD;EACE,WAAA;EACA,yBAAA;ExDyiLD;AwDpiLD;EACE,oBAAA;EACA,eAAA;ExDsiLD;AwDliLD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExDoiLD;AwDviLD;EAQI,kBAAA;EACA,kBAAA;ExDkiLH;AwD3iLD;EAaI,mBAAA;ExDiiLH;AwD9iLD;EAiBI,gBAAA;ExDgiLH;AwD3hLD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExD6hLD;AwD3gLD;EAZE;IACE,cAAA;IACA,mBAAA;IxD0hLD;EwDxhLD;InDvEA,mDAAA;IACQ,2CAAA;ILkmLP;EwDvhLD;IAAY,cAAA;IxD0hLX;EACF;AwDrhLD;EAFE;IAAY,cAAA;IxD2hLX;EACF;AyD1qLD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EnCXA,YAAA;EAGA,0BAAA;EtBqrLD;AyD1qLC;EnCdA,cAAA;EAGA,2BAAA;EtByrLD;AyD7qLC;EAAW,kBAAA;EAAmB,gBAAA;EzDirL/B;AyDhrLC;EAAW,kBAAA;EAAmB,gBAAA;EzDorL/B;AyDnrLC;EAAW,iBAAA;EAAmB,gBAAA;EzDurL/B;AyDtrLC;EAAW,mBAAA;EAAmB,gBAAA;EzD0rL/B;AyDtrLD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzDwrLD;AyDprLD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzDsrLD;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,YAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,YAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;A0DlxLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;UAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErD6CA,mDAAA;EACQ,2CAAA;EqD1CR,qBAAA;E1DkxLD;A0D/wLC;EAAY,mBAAA;E1DkxLb;A0DjxLC;EAAY,mBAAA;E1DoxLb;A0DnxLC;EAAY,kBAAA;E1DsxLb;A0DrxLC;EAAY,oBAAA;E1DwxLb;A0DrxLD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1DuxLD;A0DpxLD;EACE,mBAAA;E1DsxLD;A0D9wLC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1DgxLH;A0D7wLD;EACE,oBAAA;E1D+wLD;A0D7wLD;EACE,oBAAA;EACA,aAAA;E1D+wLD;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1D8wLL;A0D3wLC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1D8wLL;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1D8wLL;A0D1wLC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D4wLH;A0D3wLG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D6wLL;A2D14LD;EACE,oBAAA;E3D44LD;A2Dz4LD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D24LD;A2D94LD;EAMI,eAAA;EACA,oBAAA;EtD6KF,2CAAA;EACK,sCAAA;EACG,mCAAA;EL+tLT;A2Dr5LD;;EAcM,gBAAA;E3D24LL;A2Dj3LC;EAAA;ItDiKA,wDAAA;IAEK,8CAAA;IACG,wCAAA;IA7JR,qCAAA;IAEQ,6BAAA;IA+GR,2BAAA;IAEQ,mBAAA;ILowLP;E2D/4LG;;ItDmHJ,4CAAA;IACQ,oCAAA;IsDjHF,SAAA;I3Dk5LL;E2Dh5LG;;ItD8GJ,6CAAA;IACQ,qCAAA;IsD5GF,SAAA;I3Dm5LL;E2Dj5LG;;;ItDyGJ,yCAAA;IACQ,iCAAA;IsDtGF,SAAA;I3Do5LL;EACF;A2D17LD;;;EA6CI,gBAAA;E3Dk5LH;A2D/7LD;EAiDI,SAAA;E3Di5LH;A2Dl8LD;;EAsDI,oBAAA;EACA,QAAA;EACA,aAAA;E3Dg5LH;A2Dx8LD;EA4DI,YAAA;E3D+4LH;A2D38LD;EA+DI,aAAA;E3D+4LH;A2D98LD;;EAmEI,SAAA;E3D+4LH;A2Dl9LD;EAuEI,aAAA;E3D84LH;A2Dr9LD;EA0EI,YAAA;E3D84LH;A2Dt4LD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErC9FA,cAAA;EAGA,2BAAA;EqC6FA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3Dy4LD;A2Dp4LC;EblGE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Cy+LH;A2Dx4LC;EACE,YAAA;EACA,UAAA;EbvGA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Ck/LH;A2D14LC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErCtHF,cAAA;EAGA,2BAAA;EtBigMD;A2D36LD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3D24LH;A2Dp7LD;;EA6CI,WAAA;EACA,oBAAA;E3D24LH;A2Dz7LD;;EAkDI,YAAA;EACA,qBAAA;E3D24LH;A2D97LD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;E3D24LH;A2Dt4LG;EACE,kBAAA;E3Dw4LL;A2Dp4LG;EACE,kBAAA;E3Ds4LL;A2D53LD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3D83LD;A2Dv4LD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAWA,2BAAA;EACA,oCAAA;E3Do3LH;A2Dn5LD;EAkCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3Do3LH;A2D72LD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+2LD;A2D92LC;EACE,mBAAA;E3Dg3LH;A2Dv0LD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3Dy2LH;E2Dj3LD;;IAYI,oBAAA;I3Dy2LH;E2Dr3LD;;IAgBI,qBAAA;I3Dy2LH;E2Dp2LD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3Ds2LD;E2Dl2LD;IACE,cAAA;I3Do2LD;EACF;A4DlmMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5DgoMH;A4D9nMC;;;;;;;;;;;;;;;EACE,aAAA;E5D8oMH;AiCtpMD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7DiqMD;AiCxpMD;EACE,yBAAA;EjC0pMD;AiCxpMD;EACE,wBAAA;EjC0pMD;AiClpMD;EACE,0BAAA;EjCopMD;AiClpMD;EACE,2BAAA;EjCopMD;AiClpMD;EACE,oBAAA;EjCopMD;AiClpMD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D8qMD;AiChpMD;EACE,0BAAA;EjCkpMD;AiC3oMD;EACE,iBAAA;EjC6oMD;A+D9qMD;EACE,qBAAA;E/DgrMD;A+D1qMD;;;;ECdE,0BAAA;EhE8rMD;A+DzqMD;;;;;;;;;;;;EAYE,0BAAA;E/D2qMD;A+DpqMD;EAAA;IChDE,2BAAA;IhEwtMC;EgEvtMD;IAAU,gBAAA;IhE0tMT;EgEztMD;IAAU,+BAAA;IhE4tMT;EgE3tMD;;IACU,gCAAA;IhE8tMT;EACF;A+D9qMD;EAAA;IAFI,2BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,4BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,kCAAA;I/DorMD;EACF;A+D7qMD;EAAA;ICrEE,2BAAA;IhEsvMC;EgErvMD;IAAU,gBAAA;IhEwvMT;EgEvvMD;IAAU,+BAAA;IhE0vMT;EgEzvMD;;IACU,gCAAA;IhE4vMT;EACF;A+DvrMD;EAAA;IAFI,2BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,4BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,kCAAA;I/D6rMD;EACF;A+DtrMD;EAAA;IC1FE,2BAAA;IhEoxMC;EgEnxMD;IAAU,gBAAA;IhEsxMT;EgErxMD;IAAU,+BAAA;IhEwxMT;EgEvxMD;;IACU,gCAAA;IhE0xMT;EACF;A+DhsMD;EAAA;IAFI,2BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,4BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,kCAAA;I/DssMD;EACF;A+D/rMD;EAAA;IC/GE,2BAAA;IhEkzMC;EgEjzMD;IAAU,gBAAA;IhEozMT;EgEnzMD;IAAU,+BAAA;IhEszMT;EgErzMD;;IACU,gCAAA;IhEwzMT;EACF;A+DzsMD;EAAA;IAFI,2BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,4BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,kCAAA;I/D+sMD;EACF;A+DxsMD;EAAA;IC5HE,0BAAA;IhEw0MC;EACF;A+DxsMD;EAAA;ICjIE,0BAAA;IhE60MC;EACF;A+DxsMD;EAAA;ICtIE,0BAAA;IhEk1MC;EACF;A+DxsMD;EAAA;IC3IE,0BAAA;IhEu1MC;EACF;A+DrsMD;ECnJE,0BAAA;EhE21MD;A+DlsMD;EAAA;ICjKE,2BAAA;IhEu2MC;EgEt2MD;IAAU,gBAAA;IhEy2MT;EgEx2MD;IAAU,+BAAA;IhE22MT;EgE12MD;;IACU,gCAAA;IhE62MT;EACF;A+DhtMD;EACE,0BAAA;E/DktMD;A+D7sMD;EAAA;IAFI,2BAAA;I/DmtMD;EACF;A+DjtMD;EACE,0BAAA;E/DmtMD;A+D9sMD;EAAA;IAFI,4BAAA;I/DotMD;EACF;A+DltMD;EACE,0BAAA;E/DotMD;A+D/sMD;EAAA;IAFI,kCAAA;I/DqtMD;EACF;A+D9sMD;EAAA;ICpLE,0BAAA;IhEs4MC;EACF","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n 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');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.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 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.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 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .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 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .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 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .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 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n 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);\n 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);\n 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);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n 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);\n 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);\n 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);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n 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);\n 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);\n 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);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n 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);\n 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);\n 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);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n 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);\n 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);\n 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);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because