diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..bb2f1b4 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,52 @@ +# Python CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-python/ for more details +# +# circle 빌드테스트 구성해야함 +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.7.7-stretch-browsers + environment: + FLASK_CONFIG: testing + TEST_DATABASE_URL: $SQLALCHEMY_DATABASE_URI + - image: circleci/mysql:5.7 + environment: + MYSQL_USER: root + MYSQL_DATABASE: test-db + working_directory: ~/repo + steps: + - checkout + # Download and cache dependencies + - restore_cache: + keys: + - v1-dependencies-{{ checksum "requirements.txt" }} + # fallback to using the latest cache if no exact match is found + - v1-dependencies- + + - run: + name: install dependencies + command: | + python3 -m venv venv + . venv/bin/activate + pip install -r requirements.txt + + - save_cache: + paths: + - ./venv + key: v1-dependencies-{{ checksum "requirements.txt" }} + + # run tests! + - run: + name: run tests + command: | + python app/main.py db init + python app/main.py db migrate + python app/main.py db upgrade + python initdb.py + nose2 + + - store_artifacts: + path: test-reports + destination: test-reports diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7066768 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# APP env +APP_SETTINGS=config.DevelopmentConfig +SECRET_KEY=your-secret-key +MAIL_USERNAME= +MAIL_PASSWORD= +MAIL_DEFAULT_SENDER= +MAIL_SERVER= +MAIL_PORT= +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= + +# OAUTH +OAUTH_GOOGLE_CLIENTID= +OAUTH_GOOGLE_SECRETKEY= + +#DB +SQLALCHEMY_DATABASE_URI=sqlite \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f746f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,86 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +backend/app/migrations +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + + + +# MacOSX +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +.env +#redis rdb +dump.rdb +testcode.db +test.db diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..135388a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/Users/jenny/.pyenv/versions/3.7.7/bin/python" +} \ No newline at end of file diff --git a/README.md b/README.md index 1823647..d1cd7a2 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,46 @@ [![Work in Repl.it](https://classroom.github.com/assets/work-in-replit-14baed9a392b3a25080506f3b7b6d57f295ec2978f6f33ec97e36a161684cbe9.svg)](https://classroom.github.com/online_ide?assignment_repo_id=350588&assignment_repo_type=GroupAssignmentRepo) -# Welcome to GitHub +# SomeCloud +image -캡스톤 팀 생성을 축하합니다. +### 프로잭트 소개 -## 팀소개 및 페이지를 꾸며주세요. +- AWS EC2 를 리셀링 하는 클라우드 컴퓨팅 프로젝트 입니다. SomeCloud 대시보드 상에서 클라우드 인스턴스를 추가할 수 있고, 키페어를 관리하고, 방화벽을 관리하고, 요금을 지불하는 시스템입니다. +- 키페어, 방화벽, 클라우드 인스턴스는 AWS EC2 자원을 활용합니다. SomeCloud 와 AWS 통신은 boto3 를 이용합니다. +- Flask 어플리케이션을 클라우드 서버에 배포하고, blue-green 배포를 지원합니다. (Rollback, Update 지원) -- 프로젝트 소개 - - 프로젝트 설치방법 및 데모, 사용방법, 프리뷰등을 readme.md에 작성. - - Api나 사용방법등 내용이 많을경우 wiki에 꾸미고 링크 추가. +## DB schema, Backend blueprint +- https://docs.google.com/spreadsheets/d/1_fLHyhQrNPJ-qX4y3P5JEYWzwkZ2lrZBPZAP0lruyPg/edit?usp=sharing -- 팀페이지 꾸미기 - - 프로젝트 소개 및 팀원 소개 - - index.md 예시보고 수정. +### SomeCloud members -- GitHub Pages 리파지토리 Settings > Options > GitHub Pages - - Source를 marster branch - - Theme Chooser에서 태마선택 - - 수정후 팀페이지 확인하여 점검. - -**팀페이지 주소** -> https://kookmin-sw.github.io/ '{{자신의 리파지토리 아이디}}' - -**예시)** 2020년 0조 https://kookmin-sw.github.io/capstone-2020-0/ - - -## 내용에 아래와 같은 내용들을 추가하세요. - -### 1. 프로잭트 소개 - -프로젝트 - -### 2. 소개 영상 - -프로젝트 소개하는 영상을 추가하세요 - -### 3. 팀 소개 - -팀을 소개하세요. - -팀원정보 및 담당이나 사진 및 SNS를 이용하여 소개하세요. - -### 4. 사용법 - -소스코드제출시 설치법이나 사용법을 작성하세요. - -### 5. 기타 - -추가적인 내용은 자유롭게 작성하세요. - - -## Markdown을 사용하여 내용꾸미기 - -Markdown은 작문을 스타일링하기위한 가볍고 사용하기 쉬운 구문입니다. 여기에는 다음을위한 규칙이 포함됩니다. +``` +kimjenny, parkhuijoo +``` -```markdown -Syntax highlighted code block +### Frontend +- static html 로 구현하였고, 반복적인 부분은 분리하고, 화면 전환이 쉽게 html 로 분리하였습니다. +- load.js 에서 상단, 좌측 메뉴 부분을 가져오도록 구현하였습니다. -# Header 1 -## Header 2 -### Header 3 -- Bulleted -- List +### Backend +- Flask 로 html 을 Server side rendering 을 하고 있고, flask-app-blueprint 탬플릿을 기반으로 어플리케이션 서버를 작성하였습니다. +- 현재는 frontend 폴더에 있는 내용이 backend/app/project/templates, backend/app/project/static 에 반영된 상태입니다. -1. Numbered -2. List +### branch + +``` +master +backend - Dockerfile, Python Flask 코드 +frontend - (legacy) 홈페이지 대시보드 페이지, 관리자 페이지 +``` -**Bold** and _Italic_ and `Code` text +## Preview -[Link](url) and ![Image](src) -``` -자세한 내용은 [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/). +image -### Support or Contact +image -readme 파일 생성에 추가적인 도움이 필요하면 [도움말](https://help.github.com/articles/about-readmes/) 이나 [contact support](https://github.com/contact) 을 이용하세요. +## SomeCloud Blue-green update / rollback +[![Alt text](https://img.youtube.com/vi/Oy1Rli7alD0/0.jpg)](https://www.youtube.com/embed/Oy1Rli7alD0) +- Youtube link diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..56d11c1 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,10 @@ +FROM tiangolo/uwsgi-nginx-flask:python3.7 +COPY requirements.txt /tmp +RUN pip install --upgrade pip +RUN pip install -r /tmp/requirements.txt && \ + rm /tmp/requirements.txt + +# custom static folder +ENV STATIC_PATH /app/project/static + +COPY ./app /app \ No newline at end of file diff --git a/backend/LICENSE b/backend/LICENSE new file mode 100644 index 0000000..d0b5a73 --- /dev/null +++ b/backend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Jelmer de Jong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..6575cc8 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,215 @@ +# Somecloud-backend +- 썸클라우드 백엔드 입니다. 탬플릿 안에 있는 html은 임시로 사용할 프론트엔드 파일이며, 프론트엔드 화면 개발에도 참고할 수 있습니다. + +# Deploy on Local + +## 1. clone +``` +git clone +``` + +## 2. PIP +``` +pip3 install -r requirements.txt --user +``` + +## 3. environment set +``` +cp -rf .env.example .env +``` + +## 4. .env 작성 +``` +APP_SETTINGS=config.DevelopmentConfig +SECRET_KEY= +MAIL_USERNAME= +MAIL_PASSWORD= +MAIL_DEFAULT_SENDER= +MAIL_SERVER=smtp.gmail.com +MAIL_PORT=465 +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= < AWS Secret Access Key> + +#DB +SQLALCHEMY_DATABASE_URI=sqlite:///testcode.db +HOSTED_ZONE_ID= +PUBLIC_IP_ADDR= +``` + + +## 5. DB Init / Migration +``` +python3 main.py db init +python3 main.py db migrate +python3 main.py db upgrade +``` + +## 6. DB 촉 데이터 추가 +``` +>> python3 +Python 3.7.9 (default, Feb 18 2021, 03:10:35) +[GCC 7.3.1 20180712 (Red Hat 7.3.1-12)] on linux +Type "help", "copyright", "credits" or "license" for more information. +>>> import initdb +``` +``` +>>> initdb.plan_add() +>>> initdb.admin_add("your_email@domain.com", "your_password") +>>> initdb.os_add() +>>> initdb.plan_add() +>>> initdb.app_add() +>>> initdb.add_app_script() +``` + +## 7. Redis 서버 시작 +``` +sh redis-server.sh +``` +## 8. worker 시작 +``` +cd app +rq worker +``` +## 9 Run (Local) +``` +python3 main.py runserver +``` +## 10. Run +``` +http://localhost:8080 +``` + +# Deploy on Production Server +- Environment : AWS EC2 (Amazon Linux) +- CPU Core : 2Core +- RAM : 8GB +- OS : Amazon Linux +- 인터넷 연결이 필요함 +- Python Ver: 3.7.9 +- ELB (for http/https) +- Route53 Domain + +## 1. Install supervisord +``` +# sudo amazon-linux-extras install epel +# sudo yum install supervisor +``` + +## 2. Clone this repository +``` +cd /home/ec2-user/ +``` + +``` +git clone https://github.com/kookmin-sw/capstone-2021-4/ -b backend +``` + + +## 3. Install INI file to /etc/supervisord.d/flask.ini +``` +[program:app] +directory=/home/ec2-user/capstone-2021-4/backend/app +command=/usr/local/bin/gunicorn main:app -b 0.0.0.0:8080 +autostart=true +autorestart=true +stderr_logfile=/somecloud.err.log +stdout_logfile=/somecloud.out.log +``` +## 4. Install Python +``` +sudo yum install build-essential +sudo yum install gcc +sudo yum install python3-devel +``` + +## 5. Redis Install +``` +sudo wget http://download.redis.io/redis-stable.tar.gz +sudo tar xvzf redis-stable.tar.gz +cd redis-stable/ +``` +``` +sudo make +``` +``` +sudo mkdir /etc/redis +sudo mkdir /var/lib/redis +sudo cp src/redis-server src/redis-cli /usr/local/bin/ +sudo cp redis.conf /etc/redis +sudo wget https://raw.githubusercontent.com/saxenap/install-redis-amazon-linux-centos/master/redis-server +sudo mv redis-server /etc/init.d +sudo chmod 755 /etc/init.d/redis-server + +``` +## 6. Reids server Start +``` +sudo service redis-server start +``` + +## 7. Redis ping-pong test (check redis server) +``` +redis-cli +127.0.0.1:6379>ping +PONG +127.0.0.1:6379>exit +``` +## 8. Install Requirements +``` +cd /home/ec2-user/capstone-2021-4/backend/ +sudo pip3 install -r requirements.txt # Must sudo, supervisord user = root +``` +## 9. run worker +``` +nohup rq worker & +``` +## 10. Run Server +``` +sudo service supervisord start +``` + +## 11. check supervisord service +``` +sudo service supervisord status +``` + +## 12. check supervisord Log +``` +tail -f /somecloud.out.log +``` + +## 13. create Load balancer + +image +- Select Application Loadbalancer + +image + +- Add Listener (HTTP, HTTPS) + +image + +- Select VPC, Subnet ( 두 Subnet 은 Auto Public IP Assign 이 체크되어 있어야 함, 각 Subnet은 다른 Availability Zone에 속해야함 ) +- Example) ap-northeast-2a ,ap-northeast-2b + +image + +- Add Certificate + +image +- Loadbalancer Security Group, 여기서는 80, 443포트만 추가되면 된다. +- Instance의 Security group 에서는 8080 포트가 Inbound rule 에 추가되어야 한다. + + +image + +- Target group설정(중요) - 8080 포트로 설정 + +image + +- SomeCloud 시스템이 설치된 EC2 인스턴스를 Target group에 추가한다 . (Register Target) + + + + + + diff --git a/_config.yml b/backend/_config.yml similarity index 100% rename from _config.yml rename to backend/_config.yml diff --git a/backend/app/config.py b/backend/app/config.py new file mode 100644 index 0000000..00e1849 --- /dev/null +++ b/backend/app/config.py @@ -0,0 +1,53 @@ +import os +BASEDIR = os.path.abspath(os.path.dirname(__file__)) +TOP_LEVEL_DIR = os.path.abspath(os.curdir) +from botocore.config import Config as AWSConfig + +class Config(object): + TZ="Asia/Seoul" + DEBUG = True + TESTING = False + CSRF_ENABLED = True + SECRET_KEY = os.environ.get("SECRET_KEY") + BCRYPT_LOG_ROUNDS = 15 + MAIL_SERVER = os.environ.get('MAIL_SERVER') + MAIL_PORT = 465 + MAIL_USE_TLS = False + MAIL_USE_SSL = True + MAIL_USERNAME = os.environ.get('MAIL_USERNAME') or 'your-mandrill-username' + MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or 'your mandrill-password' + MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER') or 'your@default-mail.com' + OAUTH_GOOGLE_CLIENTID= os.environ.get("OAUTH_GOOGLE_CLIENTID") + OAUTH_GOOGLE_SECRETKEY=os.environ.get("OAUTH_GOOGLE_SECRETKEY") + AWS_CONFIG = AWSConfig( + region_name = 'ap-northeast-2', + signature_version = 'v4', + retries = { + 'max_attempts': 10, + 'mode': 'standard' + }, + ) + HOSTED_ZONE_ID = os.getenv("HOSTED_ZONE_ID") + SQLALCHEMY_DATABASE_URI = os.getenv("SQLALCHEMY_DATABASE_URI") + SQLALCHEMY_TRACK_MODIFICATIONS = False + PUBLIC_IP_ADDR= os.getenv("PUBLIC_IP_ADDR") + + def __init__(self): + pass + +class ProductionConfig(Config): + DEBUG = False + + +class StagingConfig(Config): + DEVELOPMENT = True + DEBUG = True + + +class DevelopmentConfig(Config): + DEVELOPMENT = True + DEBUG = True + + +class TestingConfig(Config): + TESTING = True diff --git a/backend/app/initdb.py b/backend/app/initdb.py new file mode 100644 index 0000000..a10d10d --- /dev/null +++ b/backend/app/initdb.py @@ -0,0 +1,74 @@ +from project import app,db +from project.models import Oslist, Plan, User, CloudAppCommand +#plan +# id: int +# plan_name: str +# aws_plan: str +# core: int +# ram: int +# traffic:int +# ssd: int +# iops: int +def plan_add(): + sample_plan = Plan('m2.small', 't3.small', 1, 2048, 2000, 40, 4000) + sample_plan2 = Plan('m3.medium', 't3.medium', 4096, 4000, 2048, 60, 4500) + sample_plan3 = Plan('m3.big', 't3.xlarge', 4, 16384, 6000, 100, 5000) + sample_plan4 = Plan('m4.large', 't3.2xlarge', 8, 32768, 8000, 100, 5500) + db.session.add(sample_plan) + db.session.add(sample_plan2) + db.session.add(sample_plan3) + db.session.add(sample_plan4) + db.session.commit() + + +def admin_add(email, adminpw): +# Admin User ad + new_user = User(email, adminpw) + new_user.role ='admin' + + db.session.add(new_user) + db.session.commit() + +def os_add(): + sample_os = Oslist('ubuntu20.04', 'ami-067abcae434ee508b') + sample_os2 = Oslist('amazonLinux', 'ami-09282971cf2faa4c9') + + + db.session.add(sample_os) + db.session.add(sample_os2) + + db.session.commit() + +def app_add(): + flask = Oslist('Amazon-Linux-flask', 'ami-0ee56963557a8a3e1') + db.session.add(flask) + db.session.commit() + +#flask script +def add_app_script(): + # 밑에 (1,1) , (1,2), (1,3) => 각 첫번쨰 1 => os id, 두번째 1 => 명령어 실행될 순서 + flask_app_id = db.session.query(Oslist.id).filter(Oslist.os_name == "flask").scalar() + flask_update_script = """ + cd /home/ec2-user/public_flask + """ + appcommand1 = CloudAppCommand("update", flask_update_script, 3, 1, "script" ) + flask_update_script2 = """ + docker+build+-t+flaskapp%3A%24%28docker+images+%7C+awk+%27%28%241+%3D%3D+%22flaskapp%22%29+%7Bprint+%242+%2B%3D+.01%3B+exit%7D%27%29+%2Fhome%2Fec2-user%2Fpublic_flask%2F + """ + appcommand2 = CloudAppCommand("update", flask_update_script2, 3, 2, "script" ) + + flask_update_script3 = """ + docker rm -f {app_register} + """ + appcommand3 = CloudAppCommand("update", flask_update_script3, 3, 3, "script" ) + + flask_update_script4 = """docker+run+-itd+-p+{app_port}%3A80+--name+{app_register}+flaskapp%3A%24%28docker+images+%7C+awk+%27%28%241+%3D%3D+%22flaskapp%22%29+%7Bprint+%242+%2B%3D+.0%3B+exit%7D%27%29""" + appcommand4 = CloudAppCommand("update", flask_update_script4, 3, 4, "script" ) + + + db.session.add(appcommand1) + db.session.add(appcommand2) + db.session.add(appcommand3) + db.session.add(appcommand4) + db.session.commit() + diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..0cff800 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,30 @@ +from flask_script import Manager, Server +from flask_migrate import Migrate, MigrateCommand +import os +TOP_LEVEL_DIR = os.path.abspath(os.curdir) +from project import app, db +from flask import abort, request + + +app.config.from_object(os.getenv('APP_SETTINGS')) +app.config['TEMPLATES_AUTO_RELOAD'] = True + +migrate = Migrate(app, db) +manager = Manager(app) + + +manager.add_command('db', MigrateCommand) + + +# @app.before_request +# def limit_remote_addr(): +# if request.remote_addr != 'whitelist_IP_ADDR': +# abort(403) # Forbidden + +if __name__ == '__main__': + manager.add_command('runserver', Server(host='0.0.0.0', port=8000 , threaded=True)) + manager.run() + +# @app.teardown_appcontext +# def shutdown_session(exception=None): +# db.remove() \ No newline at end of file diff --git a/backend/app/project/__init__.py b/backend/app/project/__init__.py new file mode 100644 index 0000000..1fb0956 --- /dev/null +++ b/backend/app/project/__init__.py @@ -0,0 +1,95 @@ +# IMPORTS +from flask import Flask, render_template, make_response +from flask_sqlalchemy import SQLAlchemy +from flask_login import LoginManager +from flask_bcrypt import Bcrypt +from flask_login import current_user, login_required +from flask_mail import Mail +import os +from dotenv import load_dotenv +load_dotenv(verbose=True) +from flask.json import JSONEncoder + +# CONFIG +app = Flask(__name__, instance_relative_config=True) +app.config.from_object(os.getenv('APP_SETTINGS')) + + + +import redis +from rq import Queue +import time + +r = redis.Redis() +q = Queue(connection=r) + + +db = SQLAlchemy(app) +with app.app_context(): + db.init_app(app) + +bcrypt = Bcrypt(app) +mail = Mail(app) + + +login_manager = LoginManager() +login_manager.init_app(app) +login_manager.login_view = "users.login" + +from project.models import User, Items + + +@login_manager.user_loader +def load_user(user_id): + return User.query.filter(User.id == int(user_id)).first() + + +# BLUEPRINTS +from project.users.views import users_blueprint +from project.items.views import items_blueprint +from project.cloud.views import cloud_blueprint +from project.keypair.views import keypair_blueprint +from project.secgroup.views import secgroup_blueprint +from project.support.views import support_blueprint +from project.billing.views import billing_blueprint + +# template blueprints +app.register_blueprint(users_blueprint) +app.register_blueprint(items_blueprint) + +# Cloud blueprints +app.register_blueprint(cloud_blueprint,url_prefix='/cloud') +app.register_blueprint(keypair_blueprint, url_prefix='/keypair') +app.register_blueprint(secgroup_blueprint, url_prefix='/secgroup') + +# billing, support Blueprint +app.register_blueprint(support_blueprint, url_prefix='/support') +app.register_blueprint(billing_blueprint, url_prefix='/billing') + + +@app.route('/', methods=["GET"]) +def landing(): + return render_template('new/landing_ori.html') + +# ROUTES +@app.route('/dashboard', methods=['GET', 'POST']) +@login_required +def home(): + """Render homepage""" + all_user_items = Items.query.filter_by(user_id=current_user.id) + return render_template('home.html', items=all_user_items) + +# ERROR PAGES +@app.errorhandler(404) +def page_not_found(e): + return render_template('404.html'), 404 + + +@app.errorhandler(403) +def page_forbidden(e): + return render_template('403.html'), 403 + + +@app.errorhandler(410) +def page_gone(e): + return render_template('410.html'), 410 diff --git a/backend/app/project/billing/__init__.py b/backend/app/project/billing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/billing/exceptions.py b/backend/app/project/billing/exceptions.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/billing/forms.py b/backend/app/project/billing/forms.py new file mode 100644 index 0000000..009c7ed --- /dev/null +++ b/backend/app/project/billing/forms.py @@ -0,0 +1,12 @@ +from flask_wtf import FlaskForm +from wtforms import TextField +from wtforms.validators import DataRequired, Length + + +class AddCredictForm(FlaskForm): + deposit_name = TextField('deposit_name', validators=[DataRequired(), + Length(min=1, max=254)]) + bank = TextField('bank') + amount = TextField('amount') + + diff --git a/backend/app/project/billing/utils.py b/backend/app/project/billing/utils.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/billing/views.py b/backend/app/project/billing/views.py new file mode 100644 index 0000000..9689041 --- /dev/null +++ b/backend/app/project/billing/views.py @@ -0,0 +1,166 @@ +# project/items/views.py + +# IMPORTS +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup +from flask_login import current_user, login_required +from project import db +from project.models import Items, User, Invoice, Credit, Balance +from .forms import AddCredictForm + +from sqlalchemy.sql import func + + + +# CONFIG +billing_blueprint = Blueprint('billing', __name__, template_folder='templates') + + +# ROUTES +@billing_blueprint.route('/me', methods=['GET', 'POST']) +@login_required +def all_items(): + """Render homepage""" + form = AddCredictForm(request.form) + all_user_items = Credit.query.filter_by(user_id=current_user.id) + credit_sum = db.session.query(Balance.balance).filter_by(user_id=current_user.id).scalar() + return render_template('billing/me.html', items=all_user_items, form=form, credit_sum = credit_sum) + + +@billing_blueprint.route('/admin', methods=['GET', 'POST']) +@login_required +def admin(): + if current_user.role == 'admin': + all_user_items = Credit.query.all() + print(all_user_items) + return render_template('billing/admin.html', items=all_user_items) + else: + return render_template('404.html'), 404 + # return render_template('billing/me.html') + + +@billing_blueprint.route('/add_transaction', methods=['GET', 'POST']) +@login_required +def add_transaction(): + form = AddCredictForm(request.form) + + if request.method == 'POST': + if form.validate_on_submit(): + try: + new_item = Credit(form.data["deposit_name"], form.data["bank"], + form.data["amount"], current_user.id) + + print(new_item) + print(form.data["deposit_name"]) + print(form.data["amount"]) + print(form.data["bank"]) + + db.session.add(new_item) + db.session.commit() + message = Markup( + "Well done! Item added successfully!") + flash(message, 'success') + return redirect(url_for('billing.all_items')) + except Exception as e: + print(e) + db.session.rollback() + message = Markup( + "Oh snap!! Unable to add item.") + flash(message, 'danger') + else: + return 403 + return redirect(url_for('billing.all_items')) + + +# @billing_blueprint.route('/edit_item/', methods=['GET', 'POST']) +# @login_required +# def edit_item(items_id): +# form = AddCredictForm(request.form) +# item_with_user = db.session.query(Items, User).join(User).filter(Items.id == items_id).first() +# if item_with_user is not None: +# if current_user.is_authenticated and item_with_user.Items.user_id == current_user.id: +# if request.method == 'POST': +# if form.validate_on_submit(): +# try: +# item = Items.query.get(items_id) +# item.name = form.name.data +# item.notes = form.notes.data +# db.session.commit() +# message = Markup("Item edited successfully!") +# flash(message, 'success') +# return redirect(url_for('home')) +# except: +# db.session.rollback() +# message = Markup( +# "Error! Unable to edit item.") +# flash(message, 'danger') +# return render_template('edit_item.html', item=item_with_user, form=form) +# else: +# message = Markup( +# "Error! Incorrect permissions to access this item.") +# flash(message, 'danger') +# else: +# message = Markup("Error! Item does not exist.") +# flash(message, 'danger') +# return redirect(url_for('home')) + + + +# @billing_blueprint.route('/delete_item/') +# @login_required +# def delete_item(items_id): +# item = Items.query.filter_by(id=items_id).first_or_404() + +# if not item.user_id == current_user.id: +# message = Markup( +# "Error! Incorrect permissions to delete this item.") +# flash(message, 'danger') +# return redirect(url_for('home')) + +# db.session.delete(item) +# db.session.commit() +# flash('{} was deleted.'.format(item.name), 'success') +# return redirect(url_for('items.all_items')) + + +@billing_blueprint.route('/transaction//') +@login_required +def start_transaction(transaction_id, status): + + if current_user.role == "admin": #관리자만 + try: + item = Credit.query.filter_by(id = transaction_id).first() + print("param") + print(status) + print("current") + item_user_id = item.user_id + + if status == "accept": + item.status = True + elif status == "reject": + print("Rejected") + item.status = False + + + credit_sum = db.session.query(func.sum(Credit.charge_amount).label("amount") ).filter_by(user_id=item_user_id, status=True).scalar() + + if credit_sum == None: + credit_sum = 0 + + update_balance = db.session.query(Balance).filter_by(user_id = item_user_id).first() + update_balance.balance = credit_sum + + db.session.commit() + + + message = Markup( + "Good! Transaction Success") + flash(message, 'success') + except Exception as e: + print(e) + db.session.rollback() + + return redirect(url_for('billing.admin')) + + else: + abort(404) + pass diff --git a/backend/app/project/cloud/__init__.py b/backend/app/project/cloud/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/cloud/exceptions.py b/backend/app/project/cloud/exceptions.py new file mode 100644 index 0000000..70fad43 --- /dev/null +++ b/backend/app/project/cloud/exceptions.py @@ -0,0 +1,80 @@ +class EC2Exeption(Exception): + pass + +class VPCException(Exception): + + def rollback(scope): + pass + + pass + +# Create +class FailToCreateVPCExeption(VPCException): + pass + +class FailToCreateSubnetException(VPCException): + + pass + +class FailToCreateIntGatewayException(VPCException): + pass + +class FailToAttachIntGatewayVPC(VPCException): + pass + +class FailToFindRouteTable(VPCException): + pass + +class FailToInitRouteTable(VPCException): + pass + + +class FailToCreateSecurityGroup(EC2Exeption): + pass + +class FailToCreateSecurityRule(EC2Exeption): + pass + +class FailToCreateNetInterface(EC2Exeption): + pass + + + +# Delete + +class FailToDeleteNetInterface(EC2Exeption): + pass + +class FailToDeleteSubnet(EC2Exeption): + pass + +class FailToDeleteIntGateway(EC2Exeption): + pass + +class FailToDeleteVPC(EC2Exeption): + pass + +class FailToDeleteSecurityGroup(EC2Exeption): + pass + +class FailToDeleteRouteTable(EC2Exeption): + pass + +# Detach + +class FailToDetachIntGatewayFromVPC(EC2Exeption): + pass + + +# Others + +class FailToCheckEnvironment(Exception): + pass + +class FailToGetScreenShot(Exception): + pass + + +class FailToGetRouteTableID(Exception): + pass + diff --git a/backend/app/project/cloud/forms.py b/backend/app/project/cloud/forms.py new file mode 100644 index 0000000..517bdd0 --- /dev/null +++ b/backend/app/project/cloud/forms.py @@ -0,0 +1,23 @@ +from flask_wtf import FlaskForm +from wtforms import TextField, SelectField +from wtforms.validators import DataRequired, Length +from project.models import Plan + +class CloudForm(FlaskForm): + Hostname = TextField('Hostname', validators=[DataRequired(), + Length(min=1, max=254)]) + os = TextField('OS') + plan = TextField('plan') + subnet = TextField('subnet') + keypair = TextField('keypair') + secgroup = TextField('secgroup') + appname = TextField('appname') + + + +class EditCloudForm(FlaskForm): + Hostname = TextField('Hostname', validators=[DataRequired(), + Length(min=1, max=254)]) + +class PlanForm(FlaskForm): + pass \ No newline at end of file diff --git a/backend/app/project/cloud/utils.py b/backend/app/project/cloud/utils.py new file mode 100644 index 0000000..c447c12 --- /dev/null +++ b/backend/app/project/cloud/utils.py @@ -0,0 +1,1126 @@ +import os +from project import app +import boto3 +from project import db +from project import q +from project import r +from project.models import User, Cloud, Plan, Oslist, VPC, Subnet, Keypair, SecurityGroup, NetInterface, SecurityRule,CloudAppCommand +from project.cloud.exceptions import * + +ec2 = boto3.client('ec2', config=app.config.get('AWS_CONFIG'), aws_access_key_id = os.environ.get("AWS_ACCESS_KEY_ID"), aws_secret_access_key= os.environ.get("AWS_SECRET_ACCESS_KEY")) + +import time +import datetime +import secrets +import requests + + +default_sec_rule = { + 'FromPort': 22, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': '0.0.0.0/0', + 'Description': 'SomeCloud Default Security rule', + }, + ], + 'ToPort': 22, +} + + +somecloud_app_rule = { + 'FromPort': 61331, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': "{}/32".format(app.config.get("PUBLIC_IP_ADDR")), + 'Description': 'SomeCloud App Security rule', + }, + ], + 'ToPort': 61331, +} + +web_sec_rule_blue = { + 'FromPort': 8080, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': '0.0.0.0/0', + 'Description': 'SomeCloud Default Security rule 8080 ', + }, + ], + 'ToPort': 8080, +} +web_sec_rule_green = { + 'FromPort': 8081, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': '0.0.0.0/0', + 'Description': 'SomeCloud Default Security rule 8081', + }, + ], + 'ToPort': 8081, +} + + + +# for lb + +web_sec_rule = { + 'FromPort': 80, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': '0.0.0.0/0', + 'Description': 'SomeCloud Default Security rule 80port', + }, + ], + 'ToPort': 80, +} +web_sec_rule_https = { + 'FromPort': 443, + 'IpProtocol': 'tcp', + 'IpRanges': [ + { + 'CidrIp': '0.0.0.0/0', + 'Description': 'SomeCloud Default Security rule 443 ', + }, + ], + 'ToPort': 443, +} + + + + +def insert_app(app_name, soruce, port, rollback ): + capp = CloudApp(app_name, source, port, rollback) + db.session.add(capp) + db.session.commit() + +def insert_app_command(action, script, app_id, sequence_num): + db.session.add(CloudAppCommand(action, script,app_id, sequence_num)) + db.session.commit() + +def create_lb_target_group(): + + pass + + +def create_loadbalancer_env(param): + + return response + + +def change_target_group_port(): + pass + + + +def app_commander(param): + # app command 에 있는거 순서대로 입력해야함 + set_port = { + "blue": 8080, + "green": 8081 + } + cloud = Cloud.query.filter_by(id=param["cloudid"]).first() + command = CloudAppCommand.query.filter_by(app_id = param["appid"], action=param["action"]).order_by(CloudAppCommand.sequence_num.asc()) + ip_addr = cloud.ip_addr + aws_instance = cloud.aws_instance_id + vpc_id = cloud.vpc_id + secret = cloud.app_secret_access + + register_target = param["register_target"] + deregister_target = param["deregister_target"] + + client = boto3.client('elbv2') + if param["action"] == "rollback": + try: + + reg_target = client.register_targets( + TargetGroupArn= cloud.targetgroup_arn, # 위에서 만든 target group arn + Targets=[ + { + 'Id': aws_instance, #AWS Instance ID + 'Port': set_port[register_target], + }, + ] + ) + print(reg_target) + + dreg_target = client.deregister_targets( + TargetGroupArn=cloud.targetgroup_arn, + Targets=[ + { + 'Id': aws_instance, + 'Port': set_port[deregister_target] + }, + ] + ) + + print(dreg_target) + # 바로 로드벨런서 register -> deregister 순으로 처리 + return { + "success" : True, + "message" : "Rollback process completed" + } + pass + + except Exception as e: + return e + elif param["action"] == "update": + try: + + # 스크립트 수행 후 register -> deregister 순으로 처리 + # 스크립트 -> docker build ... docker rm -f register_target_port -> docker run -itd register_target:80 register_target_name + for item in command: + + if item.command_type == "script": + + script_formatted = item.script.format(app_register=register_target, app_port = set_port[register_target] ) + print(script_formatted) + req_url = "http://{}:61331/run?secret={}&shell={}".format(ip_addr,secret,script_formatted) + response = requests.get(req_url) + print("formatURL: {} ".format(req_url)) + + if response.status_code == 200: + print(response.content.decode("utf-8")) + else: + print("Error") + print(response.content) + elif item.command_type == "api": + eval(item.script) + print("End commend process") + reg_target = client.register_targets( + TargetGroupArn= cloud.targetgroup_arn, # 위에서 만든 target group arn + Targets=[ + { + 'Id': aws_instance, #AWS Instance ID + 'Port': set_port[register_target], + }, + ] + ) + print(reg_target) + + dreg_target = client.deregister_targets( + TargetGroupArn=cloud.targetgroup_arn, + Targets=[ + { + 'Id': aws_instance, + 'Port': set_port[deregister_target] + }, + ] + ) + + + return True + except Exception as e: + print(e) + + + +def reboot_instances(instance_id): + response = ec2.reboot_instances(InstanceIds=[instance_id], DryRun=False) + return response + +def get_console_screenshot(instance_id): + try: + response = ec2.get_console_screenshot( + InstanceId=instance_id, + WakeUp=True + ) + return response + except: + raise FailToGetScreenShot + + +def get_console_output(instance_id): + response = ec2.get_console_output( + InstanceId=instance_id + ) + return response + + + +def back_ec2_create_vpc(email=''): + try: + response = ec2.create_vpc( + CidrBlock='172.0.0.0/16', # CIDR : 172.0.0.0 ~ 172.0.255.255 65536 Hosts + TagSpecifications=[ + { + 'ResourceType': 'vpc', + 'Tags': [ + { + 'Key': 'Name', + 'Value': email + }, + ] + }, + ] + ) + return response + except: + raise FailToCreateVPCExeption + +def back_ec2_create_net_interface(subnetid): + try: + response = ec2.create_network_interface( + Description='string', + SubnetId=subnetid, + TagSpecifications=[ + { + 'ResourceType': 'network-interface' , + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + }, + ] + ) + return response + except: + raise FailToCreateNetInterface + + + +def back_ec2_delete_net_interface(interfaceid): + try: + response = ec2.delete_network_interface( + # NetworkInterfaceId='eni-e5aa89a3', + NetworkInterfaceId=interfaceid + ) + return response + + except: + raise FailToDeleteNetInterface + + + +def back_ec2_create_subnet(vpcid,zone,cidrblock): + try: + response = ec2.create_subnet( + TagSpecifications=[ + { + 'ResourceType': 'subnet', + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + }, + ], + AvailabilityZone=zone, + CidrBlock=cidrblock, + VpcId=vpcid + ) + return response + except: + raise FailToCreateSubnetException + +# def back_ec2_create_appsubnet(vpcid): +# back_ec2_create_subnet(vpcid, '172.0.0.128/26', 'PublicSubnet1ID','ap-northeast-2a') +# back_ec2_create_subnet(vpcid, '172.0.0.192/26', 'PublicSubnet2ID', 'ap-northeast-2b') + + + +def back_ec2_delete_subnet(subnetid): + try: + response = ec2.delete_subnet( + SubnetId=subnetid, + ) + print(response) + return response + except Exception as e: + print(e) + raise FailToDeleteSubnet + + +def back_ec2_create_int_gateway(): + try: + response = ec2.create_internet_gateway( + TagSpecifications=[ + { + 'ResourceType': 'internet-gateway', + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + }, + ] + ) + return response + except: + raise FailToCreateIntGatewayException + +def back_ec2_delete_int_gateway(intgatewayid): + try: + response = ec2.delete_internet_gateway( + InternetGatewayId=intgatewayid + ) + return response + except Exception as e: + print ("INTGW") + print(intgatewayid) + print(e) + return response + raise FailToDeleteIntGateway + +def back_ec2_int_gateway_attach_vpc(intgatewayid, vpc_id): + try: + response = ec2.attach_internet_gateway( + InternetGatewayId=intgatewayid, + VpcId=vpc_id + ) + return response + except: + raise FailToAttachIntGatewayVPC + + + +def back_ec2_int_gateway_detach_vpc(intgatewayid, vpc_id): + try: + response = ec2.detach_internet_gateway( + InternetGatewayId=intgatewayid, + VpcId=vpc_id + ) + return response + except: + raise FailToDetachIntGatewayFromVPC + + +def back_ec2_delete_security_group(sec_group_id): + try: + response = ec2.delete_security_group( + GroupId=sec_group_id + ) + return response + except: + raise FailToDeleteSecurityGroup + + +def back_ec2_create_security_group(vpc_id, group_name='DefaultRule'): + try: + response = ec2.create_security_group( + Description='string', + GroupName=group_name, + VpcId=vpc_id, + TagSpecifications=[ + { + 'ResourceType': 'security-group', + 'Tags': [ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + }, + ], + ) + print(response) + return response + except Exception as e: + print(e) + raise FailToCreateSecurityGroup + + +def back_delete_route_table(route_table_id): + try: + response = ec2.delete_route_table( + RouteTableId=route_table_id + ) + print(response) + return response + except Exception as e: + print(e) + raise FailToDeleteRouteTable + + +def find_route_table(vpc_id,Index=0): + try: + response = ec2.describe_route_tables( + Filters=[ + { + 'Name': 'vpc-id', + 'Values': [ + vpc_id, + ] + }, + ], + MaxResults=100 + ) + route_table_id = response["RouteTables"][Index]["RouteTableId"] + return route_table_id + except (AttributeError, KeyError): + raise FailToGetRouteTableID + except: + raise FailToFindRouteTable + + + + +def route_table_init( inter_gw_id, route_table_id): + try: + response = ec2.create_route( + DestinationCidrBlock='0.0.0.0/0', + GatewayId=inter_gw_id, + RouteTableId=route_table_id, + ) + return response + + except: + raise FailToInitRouteTable + + + +def check_environment(userid): + try: + result = db.session.query(VPC.vpc_id).filter(VPC.user_id == userid).scalar() # VPC check + if result == None: + return False # 환경구축이 필요함 + else: + return True + except: + raise FailToCheckEnvironment + +def add_lb_secruity_rule(sec_group_id): + try: + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[web_sec_rule], + ) + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[web_sec_rule_https], + ) + + except Exception as e: + print(e) + raise FailToCreateSecurityRule + pass + +def add_default_security_rule(sec_group_id): + try: + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[default_sec_rule], #ssh + ) + + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[somecloud_app_rule], + ) + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[web_sec_rule_blue], + ) + ec2.authorize_security_group_ingress( + GroupId=sec_group_id, + IpPermissions=[web_sec_rule_green], + ) + + + return True + except: + raise FailToCreateSecurityRule + +def create_environment(userid, email): # 사용자마다 한번씩만 해주는.. + try: + + print("[Console] Create_env Started email: {}".format(email)) + vpc_result = back_ec2_create_vpc(email) + vpc_id = vpc_result["Vpc"]["VpcId"] + print("[Console] VPC Created {}".format(vpc_id)) + print("[Console] Subnet Create") + subnet_res = back_ec2_create_subnet(vpc_id, 'ap-northeast-2a','172.0.0.0/26' ) + subnet_id = subnet_res["Subnet"]["SubnetId"] + subnet_cidr = subnet_res["Subnet"]["CidrBlock"] + + #other zone create zone subnet + sub_subnet_res = back_ec2_create_subnet(vpc_id, 'ap-northeast-2b', '172.0.0.64/26') + sub_subnet_id = sub_subnet_res["Subnet"]["SubnetId"] + + print("[Console] Internet Gateway Create") + int_gateway = back_ec2_create_int_gateway() + int_gw_id = int_gateway["InternetGateway"]["InternetGatewayId"] + print("[Console] VPC-Internet GW Attach") + back_ec2_int_gateway_attach_vpc(int_gw_id, vpc_id) + route_table_id = find_route_table(vpc_id) + print("[Console] RouteTable Init - {}".format(route_table_id)) + router_init = route_table_init(int_gw_id, route_table_id) + print("[Console] SecurityGroup Create") + security_group = back_ec2_create_security_group(vpc_id) + print("[Console] SecurityGroup Create(LB)") + security_group_for_lb = back_ec2_create_security_group(vpc_id, "DefaultRuleLb") + security_group_id = security_group["GroupId"] + print("[Console] SecurityGroup {} created".format(security_group_id)) + print("[Console] SecurityGroup LB {} created".format(security_group_for_lb["GroupId"])) + add_default_security_rule(security_group_id) # add port 22 + add_lb_secruity_rule(security_group_for_lb["GroupId"]) + print("[Console] SecurityGroup Default Port 22 added") + print("[Console] DB Record create") + # Create record structure + print("[Console] VPC record create") + new_vpc = VPC(userid, vpc_id, int_gw_id, subnet_id ,security_group_id, sub_subnet_id ) + db.session.add(new_vpc) + db.session.flush() + db.session.refresh(new_vpc) + vpc_id = new_vpc.id + print("[Console] Subnet record create(Only primary)") + new_subnet = Subnet(subnet_id, subnet_cidr,vpc_id) + db.session.add(new_subnet) + print("[Console] Security record create") + new_security_group = SecurityGroup("DefaultRule" , security_group_id, userid, None, vpc_id ) + new_security_group.lb_sec_group_id = security_group_for_lb["GroupId"] + db.session.add(new_security_group) + db.session.flush() + db.session.refresh(new_security_group) + sec_group_id = new_security_group.id + print("[Console] Sec rule Create") + db.session.add(SecurityRule("tcp", "22","22", "0.0.0.0/0", "ssh", sec_group_id)) + db.session.add(SecurityRule("tcp", "8080","8080", "0.0.0.0/0", "for ", sec_group_id)) + db.session.add(SecurityRule("tcp", "8081","8081", "0.0.0.0/0", "for lb", sec_group_id)) + + except FailToCreateSubnetException: + print("[Console] Fail to create Subnet -> Deleting VPC") + back_delete_vpc(vpc_id) + except FailToCreateIntGatewayException: + print("[Console] Fail to create intgateway -> Deleting Int GW, VPC") + print(back_ec2_delete_subnet(subnet_id)) + back_delete_vpc(vpc_id) + except FailToAttachIntGatewayVPC: + print("[Console] Fail to attach gateway -> Deleting Int GW, VPC") + back_ec2_delete_subnet(subnet_id) + print(back_ec2_delete_int_gateway(int_gw_id)) + back_delete_vpc(vpc_id) + except (FailToFindRouteTable, FailToGetRouteTableID): + print("[Console] Fail to create route table -> Deleting Int GW, VPC, Detach Int GW") + print(back_ec2_delete_subnet(subnet_id)) + print(back_ec2_int_gateway_detach_vpc(int_gw_id, vpc_id)) + print(back_ec2_delete_int_gateway(int_gw_id)) + print(back_delete_vpc(vpc_id)) + except FailToInitRouteTable: + print(back_ec2_int_gateway_detach_vpc(int_gw_id, vpc_id)) + print(back_ec2_delete_subnet(subnet_id)) + print(back_ec2_delete_int_gateway(int_gw_id)) + print(back_delete_vpc(vpc_id)) + except FailToCreateSecurityGroup: + print("[Console] Fail to create sec group -> Deleting Int GW, VPC, RouteTable, Detach Int GW") + back_ec2_delete_subnet(subnet_id) + back_ec2_int_gateway_detach_vpc(int_gw_id, vpc_id) + back_ec2_delete_int_gateway(int_gw_id) + back_delete_vpc(vpc_id) + except FailToCreateSecurityRule: + print("[Console] Fail to create sec group rule -> Deleting Int GW, VPC, RouteTable, SecGroup, Detach Int GW") + back_ec2_delete_subnet(subnet_id) + back_ec2_delete_security_group(sec_group_id) + back_ec2_delete_security_group(security_group_for_lb["GroupId"]) + back_ec2_int_gateway_detach_vpc(int_gw_id, vpc_id) + detach_internet_gateway(int_gw_id, vpc_id) + back_ec2_delete_int_gateway(int_gw_id) + back_delete_vpc(vpc_id) + except Exception as e: + print("[Console] 다른 예외 발생 error message start ") + print(e) + print("[Console] Error msg end") + + db.session.rollback() + back_ec2_delete_subnet(subnet_id) + back_ec2_delete_security_group(sec_group_id) + back_ec2_int_gateway_detach_vpc(int_gw_id, vpc_id) + detach_internet_gateway(int_gw_id, vpc_id) + back_ec2_delete_int_gateway(int_gw_id) + back_delete_vpc(vpc_id) + else: + print("[Console] Transaction 처리 성공") + db.session.commit() + print("[Console] DB Commit") + + print("[Console] created user environment") + + + +def back_delete_vpc(vpc_id): + # delete vpc table on vpc id + try: + response =ec2.delete_vpc( + VpcId=vpc_id + ) + print("Delete status") + print(response) + return response + except: + raise FailToDeleteVPC + +def back_update_ec2_info(instance_id): + time.sleep(5) + # try: + response = back_ec2_instance_detail(instance_id) + + # status = response["Reservation"][0]["Instances"][0]["StateReason"][0]["Code"] + # print("Status:".format(status)) + + print(response) + ip_addr = response["Reservations"][0]["Instances"][0]["PublicIpAddress"] + print(ip_addr) + cloud = Cloud.query.filter_by(aws_instance_id=instance_id).first() + cloud.ip_addr = ip_addr + cloud_vpc = VPC.query.filter_by(id=cloud.vpc_id).first() + net_interface_id = response["Reservations"][0]["Instances"][0]["NetworkInterfaces"][0]["NetworkInterfaceId"] + # print(net_interface_id) + + subnet_id = response["Reservations"][0]["Instances"][0]["NetworkInterfaces"][0]["SubnetId"] + subnet = Subnet.query.filter_by(subnet_id=subnet_id).first() + subnet_id = subnet.id + cloud_id = cloud.id + db.session.commit() + selected_os = Oslist.query.filter_by(id = cloud.os).first() + print("OS : {}".format(selected_os.os_name)) + print("HostedZoneID {}".format(os.getenv("HOSTED_ZONE_ID"))) + hosted_zone_id = os.getenv("HOSTED_ZONE_ID") + if selected_os.os_name == "Amazon-Linux-flask": + print("LB Deployment started") + client = boto3.client('elbv2') + tg = client.create_target_group( + Name="tg-{}".format(secrets.token_hex(nbytes=5)), + Port=8080, + Protocol='HTTP', + VpcId=cloud_vpc.vpc_id, + ) + cloud.is_lb_env_created = True + cloud.targetgroup_arn = tg["TargetGroups"][0]["TargetGroupArn"] + print("wait for 10 sec for instance state running") + time.sleep(10) + rp = client.register_targets( + TargetGroupArn= tg["TargetGroups"][0]["TargetGroupArn"], # 위에서 만든 target group arn + Targets=[ + { + 'Id': instance_id, #AWS Instance ID + 'Port': 8080, + }, + ] + ) + sel_secgroup = db.session.query(SecurityGroup).filter(SecurityGroup.id == cloud.sec_group_id).first() + lb1 = client.create_load_balancer( + Name="lb1-{}".format(secrets.token_hex(nbytes=5)), + Subnets=[ + cloud_vpc.default_subnet_id, + cloud_vpc.sub_subnet_id + ], + SecurityGroups=[ + sel_secgroup.lb_sec_group_id, + ], + Scheme='internet-facing', + Tags=[ + { + 'Key': 'string', + 'Value': 'string' + }, + ], + Type='application' , + IpAddressType='ipv4', + ) + cloud.loadbalancer_arn = lb1["LoadBalancers"][0]["LoadBalancerArn"] + db.session.commit() + lb_hostname = lb1["LoadBalancers"][0]["DNSName"] + client = boto3.client('route53') + print(cloud.hostname + ".some-cloud.net DNS Record create process") + response = client.change_resource_record_sets( + HostedZoneId=hosted_zone_id, # 이건 Static 한 값이 되겠다.. 고객별로 도메인을 등록하는것까지 할 수 있겠지만 ,, cost 가 늘어난다... ㅜ ㅜ + ChangeBatch={ + 'Comment': '12d12d12d12', + 'Changes': [ + { + 'Action': 'UPSERT', + 'ResourceRecordSet': { + 'Name': cloud.hostname + ".some-cloud.net" , + 'Type': 'CNAME', + 'TTL': 300, + 'ResourceRecords': [ + { + 'Value': lb_hostname + }, + ], + } + }, + ] + } + ) + client = boto3.client('acm') + response = client.describe_certificate( + CertificateArn=cloud.certificate_arn + ) + certvalidation_domain = response["Certificate"]["DomainValidationOptions"][0]["ResourceRecord"]["Name"] + certvalidation_value = response["Certificate"]["DomainValidationOptions"][0]["ResourceRecord"]["Value"] + client = boto3.client('route53') + response = client.change_resource_record_sets( + HostedZoneId=hosted_zone_id, # 이건 Static 한 값이 되겠다.. 고객별로 도메인을 등록하는것까지 할 수 있겠지만 ,, cost 가 늘어난다... ㅜ ㅜ + ChangeBatch={ + 'Comment': '12d12d12d12', + 'Changes': [ + { + 'Action': 'UPSERT', + 'ResourceRecordSet': { + 'Name': certvalidation_domain, + 'Type': 'CNAME', + 'TTL' : 300, + 'ResourceRecords': [ + { + 'Value': certvalidation_value + }, + ], + } + }, + ] + } + ) + time.sleep(30) + client = boto3.client('elbv2') + response = client.create_listener( + LoadBalancerArn=lb1["LoadBalancers"][0]["LoadBalancerArn"], + Protocol='HTTP', + Port=80, + DefaultActions=[ + { + 'Type': 'forward', + 'TargetGroupArn': tg["TargetGroups"][0]["TargetGroupArn"], + }, + ], + Tags=[ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + ) + response = client.create_listener( + LoadBalancerArn=lb1["LoadBalancers"][0]["LoadBalancerArn"], + Protocol='HTTPS', + Port=443, + Certificates=[ + { + 'CertificateArn': cloud.certificate_arn, + }, + ], + DefaultActions=[ + { + 'Type': 'forward', + 'TargetGroupArn': tg["TargetGroups"][0]["TargetGroupArn"], + }, + ], + Tags=[ + { + 'Key': 'string', + 'Value': 'string' + }, + ] + ) + + + + check = db.session.query(NetInterface).filter(NetInterface.cloud_id == cloud_id).first() + + if check is None: + attached_at = datetime.datetime.now() + network = NetInterface(net_interface_id, subnet_id, cloud_id, attached_at) + db.session.add(network) + db.session.commit() + + + + # except KeyError: + # print("[Console] Ec2 Instance Public IP is not assigned, check EC2 Console. Retry after 5 seconds") + # # q.enqueue(back_update_ec2_info, instance_id) + # if response["Reservation"][0]["Instances"][0]["StateReason"][0]["Code"] == "Client.UserInitiatedShutdown": + # print("Terminated. change status to terminated") + # now = datetime.datetime.now() + # cloud = Cloud.query.filter_by(aws_instance_id=instance_id).first() + # cloud.status = "Terminated" + # cloud.deleted_at = now.strftime("%Y-%m-%d %H:%M:%S") + # db.session.add(cloud) + # db.session.commit() + # return + # except Exception as e: + # print("Other Error 다시 시도 ".format(e)) + # # q.enqueue(back_update_ec2_info, instance_id) + + # q.enqueue(back_update_ec2_info, instance_id) + # db.session.rollback() + + + + +def delete_ec2(param): + client = boto3.client('acm') + # -> flask app 이면 로드벨런서 삭제 후 cert 삭제..! + # 그게 아니면 cert삭제 + cloud = db.session.query(Cloud).filter(Cloud.aws_instance_id == param["instance_id"]).first() + os = db.session.query(Oslist).filter(Oslist.id == cloud.os).first() + + if os.os_name == "Amazon-Linux-flask": + + client = boto3.client('acm') + + response = client.describe_certificate( + CertificateArn=cloud.certificate_arn + ) + + hosted_zone_id = app.config.get('HOSTED_ZONE_ID') + print("zone: {}".format(hosted_zone_id)) + domainname = response["Certificate"]["DomainValidationOptions"][0]["DomainName"] + record = response["Certificate"]["DomainValidationOptions"][0]["ResourceRecord"]["Name"] + recordvalue = response["Certificate"]["DomainValidationOptions"][0]["ResourceRecord"]["Value"] + client = boto3.client('route53') + + response = client.change_resource_record_sets( + HostedZoneId=hosted_zone_id, + ChangeBatch={ + 'Changes': [ + { + 'Action': 'DELETE', + 'ResourceRecordSet': { + 'Name': record, + 'Type': 'CNAME', + 'TTL': 300, + 'ResourceRecords': [ + { + 'Value': recordvalue + }, + ], + } + }, + ] + } + ) + + client = boto3.client("elbv2") + #GET LB DNS.. + response = client.describe_load_balancers( + LoadBalancerArns=[ + cloud.loadbalancer_arn, + ], + ) + recordvalue = response["LoadBalancers"][0]["DNSName"] # LB Name + client = boto3.client("route53") + response = client.change_resource_record_sets( + HostedZoneId=hosted_zone_id, + ChangeBatch={ + 'Changes': [ + { + 'Action': 'DELETE', + 'ResourceRecordSet': { + 'Name': domainname, + 'Type': 'CNAME', + 'TTL': 300, + 'ResourceRecords': [ + { + 'Value': recordvalue + }, + ], + } + }, + ] + } + ) + + + client = boto3.client('elbv2') + print("cloud.loadbalancer_arn {} 5".format(cloud.loadbalancer_arn)) + + response = client.delete_load_balancer( + LoadBalancerArn=cloud.loadbalancer_arn, + ) + print(response) + time.sleep(10) + response = client.deregister_targets( + TargetGroupArn=cloud.targetgroup_arn, + Targets=[ + { + 'Id': cloud.aws_instance_id, + }, + ], + ) + print(response) + time.sleep(10) + response = client.delete_target_group( + TargetGroupArn=cloud.targetgroup_arn + ) + print(response) + + + + + # 로드벨런서를 먼저 삭제해주고, 그다음에 인증서를 삭제한다. 안그럼 인증서 삭제가 안됨 + client = boto3.client('acm') + response = client.delete_certificate( + CertificateArn=cloud.certificate_arn + ) + else: + # if not app just remove certificate.. + client = boto3.client('acm') + response = client.delete_certificate( + CertificateArn=cloud.certificate_arn + ) + # dns record delete + # + + response = ec2.terminate_instances( + InstanceIds=[ + param["instance_id"], + ] + ) + + import datetime + cloud = Cloud.query.filter_by(aws_instance_id=param["instance_id"],).first() + cloud_id = cloud.id + now = datetime.datetime.now() + netInterface = NetInterface.query.filter_by(cloud_id=cloud_id).first() + if netInterface is not None: + netInterface.detached_at = now + netInterface.deleted_at = now + + cloud.status = "Terminated" + cloud.deleted_at = now + db.session.commit() + return response + + + +def back_ec2_create_ec2( param): + client = boto3.client('acm') + + response = client.request_certificate( + DomainName=param["hostname"] + ".some-cloud.net", # arn:aws:acm:ap-northeast-2:453409655393:certificate/bc65ddcb-9963-4d29-bd9f-f98f9569fcdd + ValidationMethod='DNS', + Options={ + 'CertificateTransparencyLoggingPreference': 'DISABLED' + }, + ) + cert_arn = response["CertificateArn"] + + secret_key=secrets.token_hex() + print("secKey: {}".format(secret_key)) + amz_docker_install = """ + + #!/bin/bash + mkdir -p /home/ec2-user/.manager + mkdir -p /home/ec2-user/public_html + chown -R ec2-user:ec2-user /home/ec2-user/.manager + sudo yum install docker git python3.7 -y + git clone https://github.com/kookmin-sw/capstone-2021-4 -b backend /home/ec2-user/.manager + cd capstone-2021-4/backend/receiver/ + chmod +x run.sh + cd ~/ + sudo usermod -a -G docker ec2-user + sudo systemctl start docker && sudo systemctl enable docker + #set secret key + echo 'export secret={}' >> /home/ec2-user/.bashrc + # permission + chown -R ec2-user:ec2-user /home/ec2-user/.manager + + + #start up like rc.local + """.format(secret_key) + ubuntu_docker_install = """ + #!/bin/bash \n + wget https://get.docker.com\n + chmod 777 index.html + ./index.html\n + sudo usermod -a -G docker ubuntu \n + sudo systemctl enable docker \n + """ + flask_install = """ + #!/bin/bash + sudo service supervisord stop + cd /home/ec2-user/.manager/capstone-2021-4/backend + git reset --hard + git clean -d -f -f + git pull + cp -rf /home/ec2-user/.manager/capstone-2021-4/backend/receiver/flask.ini /etc/supervisord.d/ + echo 'environment=secret={}' >> /etc/supervisord.d/flask.ini + sudo service supervisord start + """.format(secret_key) + + use_userdata = "" + if param["os_name"] == "ubuntu20.04": + use_userdata = ubuntu_docker_install + elif param["os_name"] == "amazonLinux": + use_userdata = amz_docker_install + # load balancer create + elif param["os_name"] == "Amazon-Linux-flask": + print("secret install : {} ".format(flask_install) ) + use_userdata = flask_install + + + + + instance = ec2.run_instances( + BlockDeviceMappings=[ # 이게 기본 부트 볼륨으로 지정이 안됨.. /dev/sda1 같은거로 바꾸고, VolumeType, IOPS 세팅 피룡함 + { + "DeviceName": "/dev/sda1", + "Ebs": { + "DeleteOnTermination": True, + "VolumeSize": param["ssd"], + "VolumeType": "gp3", + "Iops" : param["iops"], + "Throughput" : 125, + "DeleteOnTermination": True, + } + } + ], + ImageId=param["os"], + InstanceType=param["plan"], + KeyName=param["keypair"], + MaxCount=1, + MinCount=1, + Monitoring={ + 'Enabled': True + }, + UserData=use_userdata, + + NetworkInterfaces=[ + { + "AssociatePublicIpAddress": True, # no need to change subnet attribute 'ipv4 auto assign' + "DeviceIndex": 0, + 'SubnetId': param["subnetid"], + 'Groups' : param["security-group-id"], + "DeleteOnTermination": True, + }, + ] + # UserData='string', # StackScript if exists + ) + cloud_id = param["cloudid"] + instance_id = instance["Instances"][0]["InstanceId"] + cloud = Cloud.query.filter_by(id=cloud_id).first() + cloud.aws_instance_id = instance_id + cloud.status = "Running" + cloud.app_secret_access = secret_key + cloud.certificate_arn = cert_arn + secgroup = SecurityGroup.query.filter_by(sec_group_id=param["security-group-id"][0]).first() + secgroup.associated_to = cloud_id + + + + db.session.commit() + + q.enqueue(back_update_ec2_info, instance_id) + return instance + +def back_ec2_instance_detail(instance_id): + response = ec2.describe_instances( + Filters=[ + { + 'Name': 'instance-id', + 'Values': [ + instance_id, + ] + }, + ], + ) + return response + + diff --git a/backend/app/project/cloud/views.py b/backend/app/project/cloud/views.py new file mode 100644 index 0000000..99ab8da --- /dev/null +++ b/backend/app/project/cloud/views.py @@ -0,0 +1,366 @@ +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup, jsonify, abort +from flask_login import current_user, login_required +from project import db +from project import app +from project import q +from project import r +from project.models import User, Cloud, Plan, Oslist, VPC, Subnet, Keypair, SecurityGroup, NetInterface, Balance +import boto3 +import os +from .forms import CloudForm, EditCloudForm +from .utils import * + +from sqlalchemy import or_, and_ +from sqlalchemy.ext.declarative import DeclarativeMeta +import datetime + +import time +from dataclasses import dataclass + +from flask import send_file +import io + + +# # CONFIG +cloud_blueprint = Blueprint('cloud', __name__, template_folder='templates') +ec2 = boto3.client('ec2', config=app.config.get('AWS_CONFIG'), aws_access_key_id = os.environ.get("AWS_ACCESS_KEY_ID"), aws_secret_access_key= os.environ.get("AWS_SECRET_ACCESS_KEY")) + +import json + +def humansize(nbytes): + suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] + i = 0 + while nbytes >= 1024 and i < len(suffixes)-1: + nbytes /= 1024. + i += 1 + f = ('%.2f' % nbytes).rstrip('0').rstrip('.') + return '%s %s' % (f, suffixes[i]) + +# def get_file_list(cloud_id): +# pass + +# def delete_file(path): +# pass + +# def update_file(path, to_filename): +# pass + + + + + +@cloud_blueprint.route('/list', methods=['GET']) +@login_required +def all_clouds(): + # job = q.enqueue(background_task, request.args.get("n")) + # Check Status, IPAddr, Status + + cloud_lists = db.session.query(Plan, Cloud,Oslist).join(Cloud).filter(Cloud.user_id == current_user.id,Cloud.os == Oslist.id).all() + rest = request.args.get("rest") + if rest == "true": + # json_object = json.dumps(cloud_lists, cls=AlchemyEncoder) + return cloud_lists + else: + return render_template('cloud/list.html', cloud=cloud_lists) + + + +@cloud_blueprint.route('/reboot/', methods=['GET']) +@login_required +def reboot_instance(instance_id): + cloud_with_user = db.session.query(Cloud, User).join(User).filter(and_( + Cloud.user_id == current_user.id, + Cloud.id == instance_id + )).first() + if cloud_with_user is not None: + # try: + response = reboot_instances(cloud_with_user.Cloud.aws_instance_id) + flash('Rebooted.' , 'success') + # except Exception as e: + # message = Markup("Error! Eroror{} ".format(e)) + # flash(e, 'danger') + + return redirect(url_for('cloud.all_clouds')) + +@cloud_blueprint.route('/delete/') +@login_required +def delete_cloud(instance_id): + cloud_with_user = db.session.query(Cloud, User).join(User).filter(and_( + Cloud.user_id == current_user.id, + Cloud.id == instance_id + )).first() + if cloud_with_user is not None: + try: + aws_instance_id = cloud_with_user.Cloud.aws_instance_id + print("[Debug] - {}".format(aws_instance_id)) + parameter = { + "instance_id" : cloud_with_user.Cloud.aws_instance_id, + } + job = q.enqueue(delete_ec2, parameter) + + + flash('{} was Terminated.'.format(cloud_with_user.Cloud.hostname), 'success') + except Exception as e: + db.session.rollback() + message = Markup("Error! Eroror{} ".format(e)) + flash(message, 'danger') + + return redirect(url_for('cloud.all_clouds')) + + + + + + +@cloud_blueprint.route("/detail///", methods=["GET"]) +@login_required # image provider metrics +def get_metrics(cloud_id, metrictype, hour): + cwclient = boto3.client(service_name='cloudwatch') + cloud_with_user = db.session.query(Cloud, User).join(User).filter(Cloud.id == cloud_id).first() + if cloud_with_user is not None: + # x = '{{"view":"timeSeries","stacked":false,"metrics":[["AWS/EC2","{metricName}"]],"width":1041,"height":250,"start":"-PT3H","end":"P0D"}}'.format(metricName="CPUUtilization") + x = '{{"view":"timeSeries","stacked":false,"metrics":[["AWS/EC2","{metricName}", "InstanceId", "{InstanceId}"]],"width":1041,"height":250,"start":"-PT{hour}H","end":"P0D"}}'.format(metricName=metrictype, hour=hour, InstanceId=cloud_with_user.Cloud.aws_instance_id) + output = cwclient.get_metric_widget_image( + MetricWidget=x + ) + + return send_file(io.BytesIO(output["MetricWidgetImage"]),mimetype='image/jpeg') + else: + message = Markup("잘못된 접근입니다. ") + flash(message, 'danger') + + return redirect(url_for('home')) + + +@cloud_blueprint.route('/action//') +@login_required +def action(cloud_id, action): + cwclient = boto3.client(service_name='cloudwatch') + cloud_with_user = db.session.query(Cloud, User).join(User).filter(Cloud.id == cloud_id).first() + + if cloud_with_user is not None: + if current_user.is_authenticated and cloud_with_user.Cloud.user_id == current_user.id: + cloud_secret = cloud_with_user.Cloud.app_secret_access + myvpc = db.session.query(VPC).filter(VPC.user_id == current_user.id) + if action == "update": + deregister_target = "" + if cloud_with_user.Cloud.app_status == "blue": + deregister_target = "blue" + cloud_with_user.Cloud.app_status = "green" + db.session.commit() + + elif cloud_with_user.Cloud.app_status == "green": + deregister_target = "green" + cloud_with_user.Cloud.app_status = "blue" + db.session.commit() + + param = { + "cloudid": cloud_with_user.Cloud.id, + "secret" : cloud_secret, + "action" : "update", + "deregister_target" : deregister_target, + "register_target" : cloud_with_user.Cloud.app_status, + "appid" : cloud_with_user.Cloud.os + } + + elif action == "rollback": + deregister_target = "" + if cloud_with_user.Cloud.app_status == "blue": + deregister_target = "blue" + cloud_with_user.Cloud.app_status = "green" + db.session.commit() + elif cloud_with_user.Cloud.app_status == "green": + deregister_target = "green" + cloud_with_user.Cloud.app_status = "blue" + db.session.commit() + + param = { + "cloudid": cloud_with_user.Cloud.id, + "secret" : cloud_secret, + "action" : "rollback", + "deregister_target" : deregister_target, + "register_target" : cloud_with_user.Cloud.app_status, + "appid" : cloud_with_user.Cloud.os + } + result = app_commander(param) + print(result) + return { + "success" : True, + "message" : "request success" + } + + else: + message = Markup("인증 문제 입니다. ") + flash(message, 'danger') + else: + message = Markup("잘못된 접근입니다. ") + flash(message, 'danger') + + return redirect(url_for('home')) + + +@cloud_blueprint.route("//detail", methods=['GET']) +@login_required +def detail(cloud_id): + cwclient = boto3.client(service_name='cloudwatch') + cloud_with_user = db.session.query(Cloud, User).join(User).filter(Cloud.id == cloud_id).first() + if cloud_with_user is not None: + if current_user.is_authenticated and cloud_with_user.Cloud.user_id == current_user.id: + # show cloud detail + # print(cloud_with_user.Cloud.aws_instance_id ) + aws_instance = cloud_with_user.Cloud.aws_instance_id + cloudid = cloud_with_user.Cloud.id + response = back_ec2_instance_detail(aws_instance) + screenshot = get_console_screenshot(aws_instance) + output = get_console_output(aws_instance) + + + app_status = cloud_with_user.Cloud.app_status + hostname = cloud_with_user.Cloud.hostname + + from datetime import datetime, timedelta + today = datetime.today() + datem = datetime(today.year, today.month, 1) #1일마다 초기화 + cw_response = cwclient.get_metric_statistics( + Namespace='AWS/EC2', + MetricName='NetworkOut', + Dimensions=[ + { + 'Name': 'InstanceId', + 'Value': aws_instance + }, + ], + StartTime=datem, + EndTime=datetime.now(), + Period=86400, + Statistics=[ + 'Sum' + ], + ) + print(datem) + + print(cw_response) + + if len(cw_response["Datapoints"]) > 0: + plan_data = db.session.query(Plan).filter(Plan.id == cloud_with_user.Cloud.plan_id).first() + total_plan_traffic = plan_data.traffic + + from hurry.filesize import size + outbound_traffic = "{} / {} MB".format( humansize(cw_response["Datapoints"][0]["Sum"]) , total_plan_traffic) + + else: + outbound_traffic = "none" + + return render_template('cloud/detail.html', cloud=response, screenshot=screenshot, output=output, traffic=outbound_traffic,cloudid=cloud_id, app_status=app_status , hostname = hostname,cloudinfo=cloud_with_user.Cloud) + else: + message = Markup("잘못된 접근입니다. ") + flash(message, 'danger') + else: + message = Markup("잘못된 접근입니다. ") + flash(message, 'danger') + + return redirect(url_for('home')) + +@cloud_blueprint.route("/file", methods=["GET", "POST"]) +@login_required +def file(): + # upload / create / delete / view + # public_html + + + pass + +@cloud_blueprint.route('/add', methods=['GET', 'POST']) +@login_required +def add_cloud(): + form = CloudForm(request.form) + plans = Plan.query.all() + os_list = Oslist.query.all() + keypair_list = db.session.query(Keypair.id, Keypair.name).filter(Keypair.user_id == current_user.id ) + sec_list = db.session.query(SecurityGroup).filter(SecurityGroup.user_id == current_user.id) + + credit_sum = db.session.query(Balance.balance).filter_by(user_id=current_user.id).scalar() + app_name = form["appname"] + + if credit_sum < 1: # 관리자 승인된 크레딧을 1원이라도 충전하지 않았을 경우 + print("크레딧이 없습니다 같은 메세지") + abort(403) + + if request.method == 'POST': + if form.validate_on_submit(): + try: + plan_id = form.data["plan"] + sec_id = form.data["secgroup"] + get_sec_id = db.session.query(SecurityGroup.sec_group_id).filter(SecurityGroup.id == sec_id).scalar() + + get_aws_plan = db.session.query(Plan.aws_plan,Plan.ssd, Plan.iops).filter(Plan.id == plan_id)[0] + param_plan = get_aws_plan[0] + param_ssd = get_aws_plan[1] + param_iops = get_aws_plan[2] + vpc_info = db.session.query(VPC.vpc_id, VPC.inter_gw_id, VPC.default_subnet_id, VPC.default_sec_id, VPC.id).filter(VPC.user_id == current_user.id)[0] + aws_image = db.session.query(Oslist.aws_image_id, Oslist.os_name).filter(Oslist.id == form.data["os"])[0] + + vpc_id = vpc_info[4] + vpc_default_subnetid = vpc_info[2] + vpc_default_secid = vpc_info[3] + keypair_id = form.data["keypair"] + + if check_environment(current_user.id) == True: + # 기존 키 페어 찾아서 클라우드에 반영 + get_keypair = db.session.query(Keypair.name, Keypair.keytoken).filter(Keypair.id == keypair_id).first() + keypairname_formatted = "{}_{}".format( get_keypair.keytoken , get_keypair.name) + + # DB에 기록 + new_cloud = Cloud(form.data["Hostname"], form.data["plan"], current_user.id, form.data["os"], "Queued", "Requesting", "Seoul" , keypair_id , vpc_id, "Requesting", "creating", "", sec_id) + db.session.add(new_cloud) + db.session.flush() + db.session.refresh(new_cloud) + + assigned_id = new_cloud.id + print("AssignedId : {}".format(assigned_id)) + db.session.commit() + + parameter = { + "plan" : param_plan, + "iops" : param_iops, + "ssd" : param_ssd, + "os" : aws_image.aws_image_id, + "subnetid" : vpc_default_subnetid, + "keypair" : keypairname_formatted, + "security-group-id" : [get_sec_id], + "cloudid" : assigned_id, + "os_name" : aws_image.os_name, + "hostname" : new_cloud.hostname, + "vpc_id" : vpc_id + } + + job = q.enqueue(back_ec2_create_ec2, parameter) + + print("Task ({}) added to queue at {}".format(job.id, job.enqueued_at)) + + else: + raise Exception("관리자에게 문의해 주세요.") + + + # 2. DB 에 기록.. + # new_cloud = Cloud(form.name.data, form. + message = Markup( + "Well done! Cloud Deploy Request successfully!") + flash(message, 'success') + return redirect(url_for('cloud.all_clouds')) + except Exception as mesg: + db.session.rollback() + # 조금있다가 생각 + # if vpc_id: + # print("vpcId : {} ".format(vpc_id)) + # vpc_select = db.session.query(VPC.vpc_id).filter(VPC.id == vpc_id) + # back_ec2_delete_vpc(vpc_select) + # SDK rollback implement need + message = Markup( + "내부 API 에러{}".format(mesg)) + flash(message, 'danger') + else: + print("GET") + + return render_template('cloud/add.html', form=form, planlist = plans, oslist = os_list, keypair = keypair_list, secgroup=sec_list) + diff --git a/backend/app/project/common/utils.py b/backend/app/project/common/utils.py new file mode 100644 index 0000000..eb3579f --- /dev/null +++ b/backend/app/project/common/utils.py @@ -0,0 +1,18 @@ +import datetime +import os +import secrets + +import pendulum +from project import app + + +def now() -> pendulum.DateTime: + + return pendulum.now(tz=app.config["TZ"]) + + +def datetime_to_pendulum(dt: datetime.datetime) -> pendulum.DateTime: + + return pendulum.instance(dt).in_tz(app.config["TZ"]) + + \ No newline at end of file diff --git a/backend/app/project/items/__init__.py b/backend/app/project/items/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/items/forms.py b/backend/app/project/items/forms.py new file mode 100644 index 0000000..e4b34e4 --- /dev/null +++ b/backend/app/project/items/forms.py @@ -0,0 +1,15 @@ +from flask_wtf import FlaskForm +from wtforms import TextField +from wtforms.validators import DataRequired, Length + + +class ItemsForm(FlaskForm): + name = TextField('Name', validators=[DataRequired(), + Length(min=1, max=254)]) + notes = TextField('Notes') + + +class EditItemsForm(FlaskForm): + name = TextField('Name', validators=[DataRequired(), + Length(min=1, max=254)]) + notes = TextField('Notes') diff --git a/backend/app/project/items/views.py b/backend/app/project/items/views.py new file mode 100644 index 0000000..dbe89ba --- /dev/null +++ b/backend/app/project/items/views.py @@ -0,0 +1,94 @@ +# project/items/views.py + +# IMPORTS +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup +from flask_login import current_user, login_required +from project import db +from project.models import Items, User +from .forms import ItemsForm, EditItemsForm + + +# CONFIG +items_blueprint = Blueprint('items', __name__, template_folder='templates') + + +# ROUTES +@items_blueprint.route('/all_items', methods=['GET', 'POST']) +@login_required +def all_items(): + """Render homepage""" + all_user_items = Items.query.filter_by(user_id=current_user.id) + return render_template('all_items.html', items=all_user_items) + + +@items_blueprint.route('/add_item', methods=['GET', 'POST']) +@login_required +def add_item(): + form = ItemsForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + try: + new_item = Items(form.name.data, form.notes.data, + current_user.id) + db.session.add(new_item) + db.session.commit() + message = Markup( + "Well done! Item added successfully!") + flash(message, 'success') + return redirect(url_for('home')) + except: + db.session.rollback() + message = Markup( + "Oh snap!! Unable to add item.") + flash(message, 'danger') + return render_template('add_item.html', form=form) + + +@items_blueprint.route('/edit_item/', methods=['GET', 'POST']) +@login_required +def edit_item(items_id): + form = EditItemsForm(request.form) + item_with_user = db.session.query(Items, User).join(User).filter(Items.id == items_id).first() + if item_with_user is not None: + if current_user.is_authenticated and item_with_user.Items.user_id == current_user.id: + if request.method == 'POST': + if form.validate_on_submit(): + try: + item = Items.query.get(items_id) + item.name = form.name.data + item.notes = form.notes.data + db.session.commit() + message = Markup("Item edited successfully!") + flash(message, 'success') + return redirect(url_for('home')) + except: + db.session.rollback() + message = Markup( + "Error! Unable to edit item.") + flash(message, 'danger') + return render_template('edit_item.html', item=item_with_user, form=form) + else: + message = Markup( + "Error! Incorrect permissions to access this item.") + flash(message, 'danger') + else: + message = Markup("Error! Item does not exist.") + flash(message, 'danger') + return redirect(url_for('home')) + + +@items_blueprint.route('/delete_item/') +@login_required +def delete_item(items_id): + item = Items.query.filter_by(id=items_id).first_or_404() + + if not item.user_id == current_user.id: + message = Markup( + "Error! Incorrect permissions to delete this item.") + flash(message, 'danger') + return redirect(url_for('home')) + + db.session.delete(item) + db.session.commit() + flash('{} was deleted.'.format(item.name), 'success') + return redirect(url_for('items.all_items')) diff --git a/backend/app/project/keypair/__init__.py b/backend/app/project/keypair/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/keypair/forms.py b/backend/app/project/keypair/forms.py new file mode 100644 index 0000000..cf441d4 --- /dev/null +++ b/backend/app/project/keypair/forms.py @@ -0,0 +1,13 @@ +from flask_wtf import FlaskForm +from wtforms import TextField, SelectField +from wtforms.validators import DataRequired, Length + +class KeypairForm(FlaskForm): + name = TextField('name', validators=[DataRequired(), + Length(min=1, max=254)]) + + +class EditKeypairForm(FlaskForm): + keypairname = TextField('keypairname', validators=[DataRequired(), + Length(min=1, max=254)]) + \ No newline at end of file diff --git a/backend/app/project/keypair/views.py b/backend/app/project/keypair/views.py new file mode 100644 index 0000000..5305dd5 --- /dev/null +++ b/backend/app/project/keypair/views.py @@ -0,0 +1,116 @@ +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup +from flask_login import current_user, login_required +from project import db +from project import app +from project.models import User, Cloud, Plan, Oslist, VPC, Subnet, Keypair +import boto3 +import os +from .forms import KeypairForm, EditKeypairForm +import base64 +import secrets + +keypair_blueprint = Blueprint('keypair', __name__, template_folder='templates') +ec2 = boto3.client('ec2', config=app.config.get('AWS_CONFIG'), aws_access_key_id = os.environ.get("AWS_ACCESS_KEY_ID"), aws_secret_access_key= os.environ.get("AWS_SECRET_ACCESS_KEY")) + +def back_ec2_keypair_create(keytoken, keyname): # 키페어 사용자한테 다운로드 처리 필요!!!! + + response = ec2.create_key_pair(KeyName="{}_{}".format(keytoken, keyname)) + # response["keyMaterial"] -> private key + # response["KeyPairId"] KeyPairId + # response["KeyFingerprint"] KeyFingerPrint + # ResponseMetadata': {'RequestId': '6dfe219f-e9d5-4c60-924e-5ad74a938967', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '6dfe219f-e9d5-4c60-924e-5ad74a938967', 'cache-control': 'no-cache, no-store', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'content-type': 'text/xml;charset=UTF-8', 'content-length': '2090', 'vary': 'accept-encoding', 'date': 'Sat, 30 Jan 2021 06:37:15 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}} + return response + +def back_ec2_keypair_remove(key_id): + response = ec2.delete_key_pair(KeyPairId=key_id) + # 'ResponseMetadata': {'RequestId': '940e2759-8c0a-465a-ba75-1a287263c917', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '940e2759-8c0a-465a-ba75-1a287263c917', 'cache-control': 'no-cache, no-store', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'content-type': 'text/xml;charset=UTF-8', 'content-length': '227', 'date': 'Sat, 30 Jan 2021 06:40:17 GMT', 'server': 'AmazonEC2'}, 'RetryAttempts': 0}} + return response + +@keypair_blueprint.route('/list', methods=['GET']) +@login_required +def all_keypairs(): + keypair_list = Keypair.query.filter_by(user_id = current_user.id) + return render_template('keypair/list.html', keypairs=keypair_list) + +@keypair_blueprint.route('/add', methods=['GET', 'POST']) +@login_required +def add(): + form = KeypairForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + try: + token = secrets.token_hex(nbytes=16) + urlsafe = secrets.token_urlsafe(16) + keytoken = token+urlsafe + result = back_ec2_keypair_create(keytoken, form.name.data) + new_keypair = Keypair(form.name.data, result["KeyFingerprint"], result["KeyPairId"], current_user.id, keytoken) + db.session.add(new_keypair) + db.session.commit() + # 입출력 처리 / 파일다운로드 / 키파일 삭제 처리 + formatted = base64.b64encode(result["KeyMaterial"].encode()).decode() + message = Markup( + "키 파일을 다운로드 해주세요. 한번만 가능합니다. 서버엔 저장되지 않습니다. 다운로드".format( formatted )) + flash(message, 'success') + return redirect(url_for('keypair.all_keypairs')) + except Exception as e: + db.session.rollback() + message = Markup( + "Oh snap!! Unable to add item.{} ".format(e)) + flash(message, 'danger') + return render_template('keypair/add.html', form=form) + + +@keypair_blueprint.route('/edit', methods=['GET', 'POSST']) +@login_required +def edit(): + # form = EditItemsForm(request.form) + # item_with_user = db.session.query(Items, User).join(User).filter(Items.id == items_id).first() + # if item_with_user is not None: + # if current_user.is_authenticated and item_with_user.Items.user_id == current_user.id: + # if request.method == 'POST': + # if form.validate_on_submit(): + # try: + # item = Items.query.get(items_id) + # item.name = form.name.data + # item.notes = form.notes.data + # db.session.commit() + # message = Markup("Item edited successfully!") + # flash(message, 'success') + # return redirect(url_for('home')) + # except: + # db.session.rollback() + # message = Markup( + # "Error! Unable to edit item.") + # flash(message, 'danger') + # return render_template('edit_item.html', item=item_with_user, form=form) + # else: + # message = Markup( + # "Error! Incorrect permissions to access this item.") + # flash(message, 'danger') + # else: + # message = Markup("Error! Item does not exist.") + # flash(message, 'danger') + # return redirect(url_for('home')) + pass + +@keypair_blueprint.route('/delete/', methods=['GET']) +@login_required +def delete(keypair_id): + item = Keypair.query.filter_by(id=keypair_id ).first_or_404() + + if not item.user_id == current_user.id: + message = Markup( + "Error! Incorrect permissions to delete this item.") + flash(message, 'danger') + return redirect(url_for('home')) + + keypair_keyid = item.keyid + + print(keypair_keyid) + back_ec2_keypair_remove(keypair_keyid) + db.session.delete(item) + db.session.commit() + + flash('Keypair {} was deleted.'.format(item.name), 'success') + return redirect(url_for('keypair.all_keypairs')) + diff --git a/backend/app/project/models.py b/backend/app/project/models.py new file mode 100644 index 0000000..da691c7 --- /dev/null +++ b/backend/app/project/models.py @@ -0,0 +1,592 @@ +from project import app, db, bcrypt +from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method +import datetime +from dataclasses import dataclass +import jwt + + +class User(db.Model): + __tablename__ = 'users' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + email = db.Column(db.String(60), unique=True, nullable=False) + _password = db.Column(db.Binary(60), nullable=False) + authenticated = db.Column(db.Boolean, default=False) + email_confirmation_sent_on = db.Column(db.DateTime, nullable=True) + email_confirmed = db.Column(db.Boolean, nullable=True, default=False) + email_confirmed_on = db.Column(db.DateTime, nullable=True) + registered_on = db.Column(db.DateTime, nullable=True) + last_logged_in = db.Column(db.DateTime, nullable=True) + current_logged_in = db.Column(db.DateTime, nullable=True) + role = db.Column(db.String(60), default='user') + + items = db.relationship('Items', cascade = "all,delete", backref='user', lazy='dynamic') + clouds = db.relationship('Cloud', cascade = "all,delete" ,backref='user') + vpc = db.relationship('VPC', cascade = "all, delete", backref="user") + keypairs = db.relationship('Keypair', cascade = "all, delete", backref="user") + + + def __json__(self): + return ['id', 'email', '_password', 'authenticated', 'email_confirmation_sent_on', + 'email_confirmed', 'email_confirmed_on', 'registered_on', 'last_logged_in', 'current_logged_in', + 'role', 'items'] + + def __init__(self, email, password, email_confirmation_sent_on=None, role='user'): + self.email = email + self.password = password + self.authenticated = False + self.email_confirmation_sent_on = email_confirmation_sent_on + self.email_confirmed = False + self.email_confirmed_on = None + self.registered_on = datetime.datetime.now() + self.last_logged_in = None + self.current_logged_in = datetime.datetime.now() + self.role = role + + @hybrid_property + def password(self): + return self._password + + @password.setter + def password(self, password): + self._password = bcrypt.generate_password_hash(password) + + @hybrid_method + def is_correct_password(self, password): + return bcrypt.check_password_hash(self.password, password) + + @property + def is_authenticated(self): + """Return True if the user is authenticated.""" + return self.authenticated + + @property + def is_active(self): + """Always True, as all users are active.""" + return True + + @property + def is_email_confirmed(self): + """Return True if the user confirmed their email address.""" + return self.email_confirmed + + @property + def is_anonymous(self): + """Always False, as anonymous users aren't supported.""" + return False + + def get_id(self): + """Return the email address to satisfy Flask-Login's requirements.""" + """Requires use of Python 3""" + return str(self.id) + + def __repr__(self): + return ''.format(self.email) + + def encode_auth_token(self, user_id): + """ + Generates the Auth Token + :return: string + """ + + try: + payload = { + 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=0, seconds=5), + 'iat': datetime.datetime.utcnow(), + 'sub': user_id + } + + # print("SECRET KEY{}".format(app.config.get("SECRET_KEY"))) + return jwt.encode( + payload, + app.config.get("SECRET_KEY"), + algorithm='HS256' + ) + except Exception as e: + print("Error") + return e + + + + +class Items(db.Model): + __tablename__ = 'items' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(25), nullable=False) + notes = db.Column(db.String(25), nullable=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + def __init__(self, name, notes, user_id): + self.name = name + self.notes = notes + self.user_id = user_id + + def __repr__(self): + return ''.format(self.id) +@dataclass +class Oslist(db.Model): # 제공 os + __tablename__ = 'oslist' + id: int + os_name: str + aws_image_id: str + + id = db.Column(db.Integer, primary_key=True) + os_name = db.Column(db.String(30), nullable=False) + aws_image_id = db.Column(db.String(30), nullable=False) + + def __json__(self): + return ['id', 'os_name', 'aws_image_id'] + + + def __init__(self, os_name,aws_image_id ): + self.os_name = os_name + self.aws_image_id = aws_image_id + @property + def serialize(self): + return { + 'id': self.id, + 'os_name': self.os_name, + 'aws_image_id': self.aws_image_id, + } + +def dump_datetime(value): + """Deserialize datetime object into string form for JSON processing.""" + if value is None: + return None + return [value.strftime("%Y-%m-%d"), value.strftime("%H:%M:%S")] + +@dataclass +class Plan(db.Model): + __tablename__ = 'plan' + id: int + plan_name: str + aws_plan: str + core: int + ram: int + traffic:int + ssd: int + iops: int + + id = db.Column(db.Integer, primary_key=True) + plan_name = db.Column(db.String(30), nullable=False) + aws_plan = db.Column(db.String(30), nullable=False) + core = db.Column(db.Integer, nullable=False) + ram = db.Column(db.Integer, nullable=False) + traffic = db.Column(db.Integer, nullable=False) + ssd = db.Column(db.Integer, nullable=False) + iops = db.Column(db.Integer, nullable=False) + def __json__(self): + return ['id', 'plan_name', 'aws_plan', 'core', 'ram', + 'traffic', 'ssd', 'iops'] + + def __init__(self, plan_name, aws_plan, core, ram, traffic, ssd, iops): + self.plan_name = plan_name + self.aws_plan = aws_plan + self.core = core + self.ram = ram + self.traffic = traffic + self.ssd = ssd + self.iops = iops + + + @property + def serialize(self): + """Return object data in easily serializable format""" + return { + 'id': self.id, + 'plan_name': self.plan_name, + 'aws_plan': self.aws_plan, + 'core': self.core, + 'ram': self.ram, + 'traffic': self.traffic, + 'ssd': self.ssd, + 'iops': self.iops, + } + + + +class VPC(db.Model): + __tablename__ = 'user_vpc' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + vpc_id = db.Column(db.String(40), nullable=False) + inter_gw_id = db.Column(db.String(40), nullable=False) + default_subnet_id = db.Column(db.String(40), nullable=False) + default_sec_id = db.Column(db.String(40), nullable=False) + sub_subnet_id = db.Column(db.String(40), nullable=True) # other zone subnet for load banlanacer(app) + + secgroups = db.relationship('SecurityGroup', cascade = "all, delete", backref="VPC") + subnets = db.relationship('Subnet', cascade = "all, delete", backref="VPC") + + def __init__(self, user_id, vpc_id, inter_gw_id, default_subnet_id, default_sec_id, sub_subnet_id): + self.user_id = user_id + self.vpc_id = vpc_id + self.inter_gw_id = inter_gw_id + self.default_subnet_id = default_subnet_id + self.default_sec_id = default_sec_id + self.sub_subnet_id = sub_subnet_id + + @property + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} + +class NetInterface(db.Model): + __tablename__ = 'netinterface' + id = db.Column(db.Integer, primary_key=True) + interface_id = db.Column(db.String(30), nullable=False) + subnet_id = db.Column(db.Integer, db.ForeignKey("subnets.id")) + cloud_id = db.Column(db.Integer, nullable=True) # cloud id + attached_at = db.Column(db.DateTime, nullable=True) + detached_at = db.Column(db.DateTime, nullable=True) + deleted_at = db.Column(db.DateTime, nullable=True) + + def __init__(self, interface_id, subnet_id, cloud_id, attached_at=None): + self.cloud_id = cloud_id + self.interface_id = interface_id + self.subnet_id = subnet_id + self.attached_at = attached_at + + @property + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} + + +class SecurityGroupAssociated(db.Model): + __tablename__ = 'securitygroup_clouds' + id = db.Column(db.Integer, primary_key=True) + cloud_id = db.Column(db.Integer, nullable=False) + sec_group_id = db.Column(db.Integer, nullable=False) + +class SecurityGroup(db.Model): + __tablename__ = 'securitygroup' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(30), nullable=False) + sec_group_id = db.Column(db.String(30), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey("users.id")) + associated_to = db.Column(db.Integer, nullable=True) # cloud.id + vpc_id = db.Column(db.Integer, db.ForeignKey("user_vpc.id")) + lb_sec_group_id = db.Column(db.String(30), nullable=True) + + secgroups = db.relationship('SecurityRule', cascade = "all, delete", backref="SecurityRule") + + def __init__(self, name, sec_group_id, user_id, associated_to, vpc_id): + self.name = name + self.sec_group_id = sec_group_id + self.user_id = user_id + self.associated_to = associated_to + self.vpc_id = vpc_id + + @property + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} + +class SecurityRule(db.Model): + __tablename__ = 'securityrule' + id = db.Column(db.Integer, primary_key=True) + protocol= db.Column(db.String(10), nullable=False) + fromport = db.Column(db.Integer, nullable=False) + toport = db.Column(db.Integer, nullable=False) + cidr = db.Column(db.String(20), nullable=False) + desc = db.Column(db.String(30), nullable=True) + group_id = db.Column(db.Integer, db.ForeignKey("securitygroup.id")) + + def __init__(self, protocol, fromport, toport, cidr, desc, group_id): + self.protocol = protocol + self.fromport = fromport + self.toport = toport + self.cidr = cidr + self.desc = desc + self.group_id = group_id + + +@dataclass +class Subnet(db.Model): + __tablename__ = 'subnets' + id: int + subnet_id: str + cidr_block_ipv4: str + + id = db.Column(db.Integer, primary_key=True) + subnet_id = db.Column(db.String(30), nullable=False) + cidr_block_ipv4 = db.Column(db.String(24)) + vpc_id = db.Column(db.Integer, db.ForeignKey('user_vpc.id')) + + + def __init__(self, subnet_id, cidr_block_ipv4, vpc_id): + self.subnet_id = subnet_id + self.cidr_block_ipv4 = cidr_block_ipv4 + self.vpc_id = vpc_id + + @property + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} +@dataclass +class Keypair(db.Model): #for connector + __tablename__ = 'keypair' + id: int + name: str + fingerprint: str + keyid: str + user_id: str + keytoken: str + + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(30), nullable=False) + fingerprint = db.Column(db.String(59), nullable=True) + keyid = db.Column(db.String(30), nullable=False) + user_id = db.Column(db.Integer ,db.ForeignKey('users.id'), nullable=False) + keytoken = db.Column(db.String(60), nullable=False) + + def __init__(self, name, fingerprint, keyid, user_id, keytoken): + self.name = name + self.fingerprint = fingerprint + self.keyid = keyid + self.user_id = user_id + self.keytoken = keytoken + + @property + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} + +@dataclass +class Cloud(db.Model): + __tablename__ = 'cloud' + id: int + hostname: str + plan_id: int + user_id: int + os: str + status: str + ip_addr: str + region: str + created_at: str + deleted_at: str + keypair_id: str + vpc_id: str + aws_instance_id: str + app_secret_access: str + is_lb_env_created: bool + certificate_arn : str + sec_group_id : int + + id = db.Column(db.Integer, primary_key=True) + hostname = db.Column(db.String(30), nullable=False) + plan_id = db.Column(db.Integer, db.ForeignKey('plan.id')) + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + os = db.Column(db.String(10), nullable=False) + status = db.Column(db.String(15), nullable=False) + ip_addr = db.Column(db.String(16), nullable=True) # IP할당이 늦어질 수 있기 때문에 + region = db.Column(db.String(10), nullable=False) + created_at = db.Column(db.DateTime, nullable=True) + deleted_at = db.Column(db.DateTime, nullable=True) + keypair_id = db.Column(db.Integer, db.ForeignKey('keypair.id')) + vpc_id = db.Column(db.Integer, db.ForeignKey('user_vpc.id')) + aws_instance_id = db.Column(db.String(30), nullable=False) + app_secret_access = db.Column(db.String(80), nullable=True) # access code .. + is_lb_env_created = db.Column(db.Boolean, nullable=True) + certificate_arn = db.Column(db.String(100), nullable=True) + sec_group_id = db.Column(db.Integer, db.ForeignKey('securitygroup.id')) + targetgroup_arn = db.Column(db.String(100), nullable=True) + loadbalancer_arn = db.Column(db.String(70), nullable=True) + app_status = db.Column(db.String(6), nullable=True) + def __json__(self): + return ['id', 'hostname', 'plan_id', 'user_id', 'os', + 'status', 'ip_addr', 'region', 'created_at', 'keypair_id', + 'vpc_id', 'aws_instance_id'] + + def __init__(self, hostname, plan_id, user_id, os, status, ip_addr, region, keypair_id, vpc_id, aws_instance_id, app_secret_access,certificate_arn, sec_group_id): + self.hostname = hostname + self.plan_id = plan_id + self.user_id = user_id + self.os = os + self.status = status + self.ip_addr = ip_addr + self.region = region + self.created_at = datetime.datetime.now() + self.keypair_id = keypair_id + self.vpc_id = vpc_id + self.aws_instance_id = aws_instance_id + self.app_secret_access = app_secret_access + self.is_lb_env_created = False + self.certificate_arn = "" + self.sec_group_id = sec_group_id + self.loadbalancer_arn="" + self.targetgroup_arn= "" + self.app_status = "blue" + + + + def as_dict(self): + return {c.name: unicode(getattr(self, c.name)) for c in self.__table__.columns} + + +class Credit(db.Model): + __tablename__ = 'credit' + id = db.Column(db.Integer, primary_key=True) + deposit_name = db.Column(db.Integer) + bank = db.Column(db.String(12), nullable=False) + charge_amount = db.Column(db.Integer, nullable=False) + status = db.Column(db.Boolean, nullable=False, default=False) + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + created_at = db.Column(db.DateTime, nullable=True) + deleted_at = db.Column(db.DateTime, nullable=True) + + def __init__(self,deposit_name, bank, charge_amount, myid): + self.deposit_name = deposit_name + self.bank = bank + self.charge_amount = charge_amount + self.status = False + self.user_id = myid + +class Balance(db.Model): + __tablename__ = 'balance' + id = db.Column(db.Integer, primary_key=True) + balance = db.Column(db.Integer, nullable=False, default=0) + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + def __init__(self, user_id): + self.user_id = user_id + + +class Invoice(db.Model): + __tablename__ = 'invoice' + id = db.Column(db.Integer, primary_key=True) + payment_amount = db.Column(db.Integer, nullable=False) + status = db.Column(db.Boolean,nullable=False) + + user_id = db.Column(db.Integer, db.ForeignKey('users.id')) + +class Support(db.Model): + __tablename__ = 'support' + id = db.Column(db.Integer, primary_key=True) + support_type = db.Column(db.String(50), nullable=False) + title = db.Column(db.String(100), primary_key=True) + content = db.Column(db.Text, nullable=False) + author_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + def __init__(self, support_type, title, content, author_id): + self.support_type = support_type + self.title = title + self.content = content + self.author_id = author_id + + +class ReplyTicket(db.Model): + id = db.Column(db.Integer, primary_key=True) + reply_to = db.Column(db.Integer, db.ForeignKey('support.id')) + content = db.Column(db.Text, nullable=False) + author_id = db.Column(db.Integer, db.ForeignKey('users.id')) + + def __init__(self, reply_to, content , author_id): + self.reply_to = reply_to + self.content = content + self.author_id = author_id + +class BlacklistToken(db.Model): + """ + Token Model for storing JWT tokens + """ + __tablename__ = 'blacklist_tokens' + + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + token = db.Column(db.String(500), unique=True, nullable=False) + blacklisted_on = db.Column(db.DateTime, nullable=False) + + def __init__(self, token): + self.token = token + self.blacklisted_on = datetime.datetime.now() + + def __repr__(self): + return ' somecloud internal API + + + def __init__(self, action, script, app_id, sequence_num, command_type): + self.action = action + self.script = script + self.app_id = app_id + self.sequence_num = sequence_num + self.command_type = command_type + +# class AppVersions(db.Model): +# __tablename__ = "appversions" +# id = db.Column(db.Integer, primary_key=True, autoincrement=True) +# appid = db.Column(db.Integer, db.ForeignKey("apps.id")) +# version = db.Column(db.String(10), nullable=True) +# def __init__(self, appid, version): +# self.appid = appid +# self.version = version + + +# class ChargeRequest(db.Model): +# __tablename__= 'chargerequest' + +# class Traffic(db.Model): +# __tablename__ = 'traffic' + + + +# class Invoice(db.Model): +# __tablename__ = 'invoice' diff --git a/backend/app/project/oauth.py b/backend/app/project/oauth.py new file mode 100644 index 0000000..7a745fd --- /dev/null +++ b/backend/app/project/oauth.py @@ -0,0 +1,17 @@ +from project import app +from flask_oauthlib.client import OAuth + +oauth = OAuth(app) +google = oauth.remote_app( + 'google', + consumer_key=app.config.get('OAUTH_GOOGLE_CLIENTID'), + consumer_secret=app.config.get('OAUTH_GOOGLE_SECRETKEY'), + request_token_params={ + 'scope': 'https://www.googleapis.com/auth/userinfo.email' + }, + base_url='https://www.googleapis.com/oauth2/v1/', + request_token_url=None, + access_token_method='POST', + access_token_url='https://accounts.google.com/o/oauth2/token', + authorize_url='https://accounts.google.com/o/oauth2/auth', +) \ No newline at end of file diff --git a/backend/app/project/secgroup/__init__.py b/backend/app/project/secgroup/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/secgroup/forms.py b/backend/app/project/secgroup/forms.py new file mode 100644 index 0000000..a1f844f --- /dev/null +++ b/backend/app/project/secgroup/forms.py @@ -0,0 +1,26 @@ +from flask_wtf import FlaskForm +from wtforms import TextField, IntegerField +from wtforms.validators import DataRequired, Length + + +class SecGroupForm(FlaskForm): + name = TextField('Name', validators=[DataRequired(), + Length(min=1, max=254)]) + + +class SecurityEditForm(FlaskForm): + name = TextField('Name', validators=[DataRequired(), + Length(min=1, max=254)]) + + +class SecurityRuleEditForm(FlaskForm): + fromport = IntegerField('fromport') + toport = IntegerField('toport') + protocol = TextField('protocol') + cidr = TextField('cidr') + +class SecurityRuleAddForm(FlaskForm): + fromport = IntegerField('fromport') + toport = IntegerField('toport') + protocol = TextField('protocol') + cidr = TextField('cidr') \ No newline at end of file diff --git a/backend/app/project/secgroup/views.py b/backend/app/project/secgroup/views.py new file mode 100644 index 0000000..a528336 --- /dev/null +++ b/backend/app/project/secgroup/views.py @@ -0,0 +1,192 @@ +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup +from flask_login import current_user, login_required +from project import db +from project import app + +from project.models import User, Cloud, Plan, Oslist, VPC, Subnet, Keypair, SecurityGroup, SecurityRule +import boto3 +import os +from .forms import SecurityEditForm, SecurityRuleEditForm, SecurityRuleAddForm,SecGroupForm +import base64 + +from project.cloud.utils import * +secgroup_blueprint = Blueprint('secgroup', __name__, template_folder='templates') +ec2 = boto3.client('ec2', config=app.config.get('AWS_CONFIG'), aws_access_key_id = os.environ.get("AWS_ACCESS_KEY_ID"), aws_secret_access_key= os.environ.get("AWS_SECRET_ACCESS_KEY")) + + +@secgroup_blueprint.route('/list', methods=['GET']) +@login_required +def all_secgroup(): + secgroup_list = SecurityGroup.query.filter_by(user_id = current_user.id) + return render_template('secgroup/list.html', secgroups=secgroup_list) + +@secgroup_blueprint.route('/add', methods=['GET', 'POST']) # 보안 그룹을 생성하는것 +@login_required +def add(): + form = SecGroupForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + try: + # 사용자의 VPC ID Get + user_vpc_id = db.session.query(VPC.vpc_id, VPC.id).filter(VPC.user_id == current_user.id).first() + # sec group 생성 + print(user_vpc_id) + result = back_ec2_create_security_group(user_vpc_id.vpc_id, form.name.data) + sec_group_id = result["GroupId"] + new_secgroup = SecurityGroup(form.name.data, sec_group_id ,current_user.id, None , user_vpc_id.id) + db.session.add(new_secgroup) + # 입출력 처리 / 파일다운로드 / 키파일 삭제 처리 + message = Markup( + "보안 그룹 {} 이 생성되었습니다.".format(result["GroupId"])) + flash(message, 'success') + + except Exception as e: + back_ec2_delete_security_group(sec_group_id) + db.session.rollback() + message = Markup( + "Oh snap!! Unable to add item.{} ".format(e)) + flash(message, 'danger') + db.session.commit() + return redirect(url_for('secgroup.all_secgroup')) + return render_template('secgroup/groupadd.html', form=form) + +@secgroup_blueprint.route('/delete/', methods=['POST']) # 보안 그룹을 삭제 ( cloud에 할당이 되어있으면 삭제할 수 없음) +@login_required +def delete(): + # item = Items.query.filter_by(id=items_id).first_or_404() + + # if not item.user_id == current_user.id: + # message = Markup( + # "Error! Incorrect permissions to delete this item.") + # flash(message, 'danger') + # return redirect(url_for('home')) + + # db.session.delete(item) + # db.session.commit() + # flash('{} was deleted.'.format(item.name), 'success') + # return redirect(url_for('items.all_items')) + pass + +@secgroup_blueprint.route('//detail', methods=["GET"]) # all security group of rules +@login_required +def detail(secgroup_id): + check = db.session.query(User, SecurityGroup).join(User).filter(SecurityGroup.id == secgroup_id).first() + if check is not None: + if current_user.is_authenticated and check.SecurityGroup.user_id == current_user.id: + # response = ec2.describe_security_groups( + # GroupIds=[ + # check.SecurityGroup.sec_group_id, + # ] + # ) + rulelist = db.session.query(SecurityRule).filter(SecurityRule.group_id == secgroup_id) + + # print(response["SecurityGroups"][0]) + # return response["SecurityGroups"][0] + return render_template('secgroup/detail.html', detail=rulelist, groupid =secgroup_id) + else: + message = Markup("Access Denied 1") + flash(message, 'danger') + else: + message = Markup("Access Denied 2 ") + flash(message, 'danger') + + return redirect(url_for('home')) + +@secgroup_blueprint.route('/attach/', methods=["POST"]) # 인스턴스에 보안 그룹 할당 +@login_required +def attach(): + pass + +@secgroup_blueprint.route('/detach/', methods=["POST"]) # 인스턴스에 보안그룹 빼기 +@login_required +def detach(): + pass + + +@secgroup_blueprint.route('//delete', methods=["GET", "POST"]) +@login_required +def sec_delete(): + # get security rules() + # delete_security_group() + #revoke + pass + +@secgroup_blueprint.route('//edit/', methods=["GET", "POST"]) +@login_required +def edit(secgroup_id, ruleid): + # 기존에 어떤 Rule을 수정하려 헀는지 Cidr, FromPort, Protocol, ToPort 를 가져와야함. + # 룰 하나만 삭제 + check = db.session.query(User, SecurityGroup).join(User).filter(SecurityGroup.id == secgroup_id).first() + form = SecurityRuleEditForm(request.form) + if check is not None: + rule = db.session.query(SecurityRule).filter(SecurityRule.id == ruleid).first() + # print(rule.cidr.) + if request.method == "POST": + fromport = form.fromport.data + toport = form.toport.data + protocol = form.protocol.data + cidr = form.cidr.data + ec2 = boto3.resource('ec2') + print(protocol) + security_group = ec2.SecurityGroup(check.SecurityGroup.sec_group_id) + + security_group.revoke_ingress( + IpProtocol=rule.protocol, CidrIp=rule.cidr, FromPort=rule.fromport, ToPort=rule.toport + ) + security_group.authorize_ingress( + IpProtocol=protocol,CidrIp=cidr,FromPort=fromport,ToPort=toport + ) + rule.fromport = fromport + rule.toport = toport + rule.protocol = protocol + rule.cidr = cidr + db.session.add(rule) + db.session.commit() + + return redirect(url_for('secgroup.detail', secgroup_id=secgroup_id)) + + return render_template('secgroup/ruleedit.html',detail=rule, form=form, ruleid=ruleid, groupid=secgroup_id) + + + +@secgroup_blueprint.route('//sec_add', methods=["GET", "POST"]) +@login_required +def sec_add(secgroup_id): + form = SecurityRuleAddForm(request.form) + check = db.session.query(User, SecurityGroup).join(User).filter(SecurityGroup.id == secgroup_id).first() + if check is not None: + if request.method == "POST": + fromport = form.fromport.data + toport = form.toport.data + protocol = form.protocol.data + cidr = form.cidr.data + response = ec2.authorize_security_group_ingress( + GroupId=check.SecurityGroup.sec_group_id, + IpPermissions=[ + { + 'FromPort': fromport, + 'IpProtocol': protocol, + 'IpRanges': [ + { + 'CidrIp': cidr, + 'Description': 'add from testapi' + }, + ], + 'ToPort': toport, + }, + ], + ) + new_rule = SecurityRule(protocol, fromport, toport, cidr, "", secgroup_id) + db.session.add(new_rule) + db.session.commit() + message = Markup( + "Well done! Rule add success") + flash(message, 'success') + return redirect(url_for('secgroup.detail', secgroup_id=secgroup_id)) + # return response + else: + return "denied" + + return render_template('secgroup/ruleadd.html', form=form, groupid=secgroup_id) + + diff --git a/backend/app/project/static/app/css/app.css b/backend/app/project/static/app/css/app.css new file mode 100644 index 0000000..6fac9ca --- /dev/null +++ b/backend/app/project/static/app/css/app.css @@ -0,0 +1,5200 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans:400italic,400,600,700); +/** + * + * Wintermin - Bootstrap Admin Theme - Main Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + +[Table of contents] + +1. Bootstrap reset + 1.1 bootstrap-reset + +2. Typography + 2.1 typo + +3. Layout + 3.1 layout / .wrapper .main-content + 3.2 top-navbar / .top-navbar + 3.3 sidebar / .sidebar + 3.4 offsidebar / .offsidebar + +4. Components + 4.1 button-extra + 4.2 placeholder / .box-placeholder + 4.3 panels + 4.4 progress-size + 4.5 radial-bar / .radial-bar + 4.6 user-block / .user-block + 4.7 points / .point + 4.8 timeline / .timeline + 4.9 dropdown-extra + 4.10 row-extra / .row-table .row-flush + 4.11 half-float / .half-float + 4.12 animations + 4.13 masonry-grid / .row-masonry + 4.14 widget / .widget + +5. Charts + 5.1 chart-flot / .flot-chart + +6. Form elements + 6.1 form-elements + 6.2 form-file + 6.3 form-validation + 6.4 form-wizard + 6.5 form-tags + 6.6 form-dragdrop + 6.7 markdownarea + 6.8 codemirror-md + +7. Tables + 7.1 datatable + 7.2 table-extras + +8. Plugins + 8.1 plugins + 8.2 slim-scroll / .slimScrollBar + 8.3 datepicker / .bootstrap-datetimepicker-widget + 8.4 notify / .uk-notify + 8.5 calendar / .fc-* + 8.6 spinner / .csspinner + 8.7 gmap / .gmap + 8.8 Vector map + 8.9 portlets / .portlet + +9. Utilities + 9.1 utils + +10. Print CSS + 10.1 print + + ========================================================================== */ +/* ======================================================================== + Component: bootstrap-reset.less + ========================================================================== */ +a { + outline: none !important; +} +hr { + border-top: 1px solid #e1e1e1; +} +.row::-webkit-scrollbar { + display: none; +} +.page-header { + border-bottom-color: #e1e1e1; +} +.panel { + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.panel .panel-heading { + border-bottom: 0; + font-size: 14px; +} +.panel .panel-heading a { + text-decoration: none !important; +} +.panel.panel-default .panel-heading { + position: relative; +} +.panel.panel-default .panel-heading:after { + content: ""; + position: absolute; + bottom: 0; + left: 12px; + right: 15px; + height: 1px; + background-color: #f1f2f3; +} +.well { + border: 1px solid #d1d2d3; +} +.jumbotron { + border: 1px solid #d1d2d3; +} +.nav-tabs > li > a { + font-weight: bold; + color: #515253; + background-color: #fafafa; + margin: 0; + border: 1px solid #d1d2d3; + border-radius: 0; + padding: 10px 20px; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: inherit; + border-bottom-color: #fff; +} +.tab-content { + padding: 10px 20px 0px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color: #d1d2d3; +} +.nav-pills + .tab-content { + border: 0; + padding: 0; +} +.btn, +.fc-button { + border-radius: 3px; + font-size: 13px; + border-color: transparent; + -webkit-appearance: none; + outline: none !important; + -webkit-transition: all 0.1s; + -o-transition: all 0.1s; + transition: all 0.1s; +} +.btn.btn-link { + box-shadow: none; + border: 0; +} +.btn.btn-default { + border-color: #ccc; +} +.form-control, +.input-group-addon { + border-color: #dbd9d9; +} +.form-control { + box-shadow: 0 0 0 #000 !important; +} +.input-group-addon { + background-color: #f8f9fb; +} +.input-sm, +select.input-sm { + height: 31px; +} +fieldset { + padding-bottom: 20px; + border-bottom: 1px dashed #eee; + margin-bottom: 20px; +} +fieldset.last-child, +fieldset:last-child { + border-bottom: 0; +} +fieldset .form-group { + margin-bottom: 0; +} +.table > thead > tr > th { + border-bottom-width: 1px; +} +.table > tbody + tbody { + border-bottom-width: 1px; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.progress { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; + border-radius: 3px; + border: 1px solid #f1f1f1; + background-color: #fff; +} +.progress .progress-bar { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; +} +.popover { + box-shadow: 0 0 0 #000; + border-color: #eee; + border-bottom: 2px solid #e1e1e1; + border-radius: 3px; +} +.popover .popover-title { + border: 0; +} +.nav.nav-pills > li > a { + font-weight: 600; + color: #89949b; + margin: 5px 0; + -webkit-transition: background-color 0.3s ease; + -o-transition: background-color 0.3s ease; + transition: background-color 0.3s ease; +} +.nav.nav-pills > li > a:hover, +.nav.nav-pills > li > a:focus { + background-color: #e9eeef; +} +.nav.nav-pills > li.active > a { + color: #fff; + background-color: #393C3C !important; +} +.dropdown-menu { + border-radius: 3px; +} +.dropdown-header { + color: #a1a2a3; +} +.navbar-top .navbar-nav > .active > a { + color: #999; +} +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .active > a:focus { + color: #d1d2d3; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #666; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, +.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #222; +} +.carousel .carousel-indicators { + bottom: 0; +} +.carousel .carousel-control.left, +.carousel .carousel-control.right { + background-image: none; +} +.carousel .carousel-control em { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} +/* ======================================================================== + Component: typo.less + ========================================================================== */ +body { + font-family: "Open Sans", sans-serif; + color: #656565; +} +h1, +h2, +h3, +h4 { + font-weight: bold; +} +/* ======================================================================== + Component: layout.less + ========================================================================== */ +html { + height: 100%; +} +html, +body { + overflow-x: hidden; +} +.wrapper { + position: relative; + width: 100%; + height: 100%; + -webkit-transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -o-transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.wrapper > .aside { + position: absolute; + margin-top: 120px; + top: 0; + left: 0; + bottom: 0; + width: 250px; + z-index: 10; +} +.wrapper > section { + position: relative; + background-color: #ffffff; + min-height: 100%; + z-index: 11; + margin-left: 0; +} +.wrapper > section > footer { + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 60px; + border-top: 1px solid #e1e1e1; + padding: 20px 15px; +} +.wrapper > section > footer > p { + margin: 0; +} +.boxed-layout .wrapper { + max-width: 1140px; + margin: 0 auto; + overflow: hidden; +} +.boxed-layout .wrapper .aside, +.boxed-layout .wrapper .offsidebar, +.boxed-layout .wrapper .navbar-top { + position: absolute; +} +.boxed-layout .wrapper .offsidebar { + z-index: 10; +} +.main-content { + padding: 20px 15px; + padding-bottom: 80px !important; + overflow: auto; +} +.main-content > h3 { + margin: 0 0 30px 0; + font-weight: normal; + border-bottom: 1px solid #f1f2f3; + padding-bottom: 12px; +} +.main-content > h3:focus { + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); +} +@media only screen and (min-width: 768px) { + body { + min-height: 100%; + } + .wrapper > .aside { + position: fixed; + z-index: 501; + margin-top: 60px; + } + .wrapper > section { + margin-left: 250px; + padding-top: 60px; + } + .wrapper > section.has-sidebar-right { + margin-right: 250px; + } + .wrapper > section.has-sidebar-right + .offsidebar { + z-index: 1; + } + .wrapper > section > footer { + padding: 20px 40px; + } + .main-content { + padding: 20px 40px; + } +} +.aside-toggled { + overflow-y: hidden; + height: 100%; +} +.aside-toggled .wrapper > section { + margin-left: 250px; +} +.csstransforms3d .wrapper > section { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +.csstransforms3d .aside-toggled .wrapper > section { + margin-left: 0; + -webkit-transform: translate3d(250px, 0, 0); + transform: translate3d(250px, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +@media only screen and (min-width: 768px) { + .aside-collapsed { + overflow-y: auto; + } + .aside-collapsed .wrapper > .aside { + width: 70px; + } + .aside-collapsed .wrapper > section { + margin-left: 70px; + } + .csstransforms3d .aside-collapsed .wrapper > section { + -webkit-transform: none; + -moz-transform: none; + -opera-transform: none; + -ms-transform: none; + transform: none; + margin-left: 70px; + } +} +/* ======================================================================== + Component: top-navbar.less + ========================================================================== */ +.navbar-top { + -webkit-backface-visibility: hidden; + /* fixes chrome jump */ + margin-bottom: 0; + border-radius: 0; +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-header { + width: 250px; + text-align: center; + } + .navbar-top .navbar-header .navbar-brand { + width: 100%; + } +} +.navbar-top { + position: relative; +} +.navbar-top .navbar-header { + position: relative; + background-color: #393C3C; + z-index: 11; +} +.navbar-top .navbar-header .navbar-brand { + padding: 0; +} +.navbar-top .navbar-header .brand-logo > img, +.navbar-top .navbar-header .brand-logo-collapsed > img { + margin: 10px auto; +} +.navbar-top .navbar-header .brand-logo { + display: block; + /* padding: 14px 15px; */ +} +.navbar-top .navbar-header .brand-logo-collapsed { + display: none; + padding: 10px 15px; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #393C3C; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #979cb5; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + position: absolute; + top: 0; + right: 0; + z-index: 20; + font-size: 16px; + line-height: 60px; + color: #ffffff; + padding-top: 0; + padding-bottom: 0; +} +.nav-wrapper { + padding: 0 15px; + background-color: #393C3C; +} +.nav-wrapper .nav.navbar-nav { + float: left; +} +.nav-wrapper .nav.navbar-nav.navbar-right { + float: right; +} +.nav-wrapper .nav > li { + position: static; + float: left; +} +.nav-wrapper .navbar-nav .open .dropdown-menu { + position: absolute; + background-color: #ffffff; + left: 0px; + right: 0px; + border-top: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} +.navbar-top .navbar-form { + position: absolute; + top: 0; + left: 0; + right: 0; + margin: 0; + padding: 0; + height: 60px; + z-index: 1; + -webkit-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + border-bottom: 1px solid #e1e2e3; +} +.navbar-top .navbar-form .form-group { + height: 100%; + width: 100%; +} +.navbar-top .navbar-form .form-control { + height: 100%; + border: 0; + border-radius: 0; + width: 100%; +} +.navbar-top .navbar-form.open { + top: 50%; +} +.navbar-top .navbar-form .has-feedback .form-control-feedback { + height: 30px; + cursor: pointer; + top: 50%; + margin-top: -15px; + line-height: 30px; + margin-right: 10px; + color: #c1c2c3; + font-size: 1.5em; + pointer-events: auto; +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-form { + left: 250px; + } + .navbar-top .navbar-form.open { + top: 100%; + } +} +@media only screen and (min-width: 768px) { + .navbar-top { + position: fixed; + top: 0; + left: 0; + right: 0; + border: 0; + background-color: #35394b; + } + .navbar-top .navbar-nav > a { + box-shadow: 0 0 0 #000 inset; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 #0094cb inset; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #ffffff; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #b3b3b3; + } + .navbar-top .navbar-nav > li > [data-toggle="navbar-search"] { + position: static; + } + .nav-wrapper { + position: relative; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); + z-index: 10; + } + .nav-wrapper:before, + .nav-wrapper:after { + content: " "; + display: table; + } + .nav-wrapper:after { + clear: both; + } + .nav-wrapper .navbar-nav .open .dropdown-menu { + left: auto; + right: auto; + } + .nav-wrapper .navbar-nav.navbar-right .open .dropdown-menu { + left: auto; + right: 0; + } +} +@media only screen and (min-width: 768px) { + .aside-collapsed .navbar-top .navbar-header .brand-logo { + display: none; + } + .aside-collapsed .navbar-top .navbar-header .brand-logo-collapsed { + display: block; + } + .aside-collapsed .navbar-top .navbar-header { + width: 70px; + } + .aside-collapsed .navbar-top .navbar-form { + left: 70px; + } +} +/* ======================================================================== + Component: sidebar.less + ========================================================================== */ +.sidebar { + background-color: #f5f8fa; + height: 100%; + overflow-y: auto; + border-right: 1px solid #c4c4c4; +} +.sidebar > .nav { + position: relative; +} +.sidebar > .nav > .nav-heading:first-child { + padding-top: 20px; +} +.sidebar .nav-heading { + padding: 12px 30px; + text-transform: uppercase; + color: #727399; + font-size: 11px; + letter-spacing: .035em; + pointer-events: none; +} +.sidebar .nav-labels { + list-style-type: none; + padding: 0; + margin: 0; +} +.sidebar .nav-labels > .nav-labels-item { + padding: 5px 25px; + font-size: 12px; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #727399; +} +.sidebar .nav-labels > .nav-labels-item .point { + margin-right: 10px; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + padding: 16px 30px; + color: #727399; + letter-spacing: .025em; + font-weight: 700; + -webkit-transition: background-color 0.2s ease; + -o-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + text-decoration: underline !important; + color: #232224; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + width: 2em; + color: inherit; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #eef3f7; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #393C3C; +} +.sidebar .nav .nav { + padding-left: 55px; + background-color: #f5f8fa; +} +.sidebar .nav .nav > li > a, +.sidebar .nav .nav > li > .nav-item { + display: block; + position: relative; + padding: 10px 30px; + font-size: 13px; + background-color: transparent !important; + font-weight: normal; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #232224; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + content: ""; + display: block; + position: absolute; + left: 2px; + top: 50%; + margin-top: -4px; + width: 8px; + height: 8px; + border-radius: 500px; + background-color: transparent; + border: 1px solid rgba(0, 0, 0, 0.25); +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #232224; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #0094cb; + background-color: #0094cb; +} +@media only screen and (min-width: 768px) { + .aside-collapsed .sidebar { + overflow: visible !important; + } + .aside-collapsed .sidebar > .nav > .nav-heading { + padding-left: 20px; + padding-right: 0; + } + .aside-collapsed .sidebar > .nav > li > a > em { + font-size: 1.6em; + width: auto; + } + .aside-collapsed .sidebar > .nav > li > a, + .aside-collapsed .sidebar > .nav > li > .nav-item { + padding: 20px 0; + text-align: center; + } + .aside-collapsed .sidebar > .nav > li > a .item-text, + .aside-collapsed .sidebar > .nav > li > .nav-item .item-text { + display: none; + position: absolute; + left: 100%; + top: 0; + margin-left: 1px; + margin-top: 1px; + padding-left: 20px; + font-weight: bold; + line-height: 40px; + white-space: nowrap; + z-index: 2002; + } + .aside-collapsed .sidebar > .nav > li > a.no-submenu .item-text, + .aside-collapsed .sidebar > .nav > li > .nav-item.no-submenu .item-text { + display: none !important; + } + .aside-collapsed .sidebar > .nav > li > a:focus { + background-color: transparent; + } + .aside-collapsed .sidebar > .nav > li > a:focus > em { + color: inherit; + } + .aside-collapsed .sidebar .nav-labels { + display: none; + } + .aside-collapsed .sidebar .nav .nav { + display: none; + position: absolute; + top: 0; + left: 100%; + padding-left: 20px; + padding-top: 40px; + min-width: 220px; + z-index: 2001; + height: auto !important; + box-shadow: 0 0 0 #000; + border: 1px solid rgba(0, 0, 0, 0.15); + } + .aside-collapsed .sidebar .nav > li:hover .nav, + .aside-collapsed .sidebar .nav > li.open .nav { + display: block; + } + .aside-collapsed .sidebar .nav > li:hover .item-text, + .aside-collapsed .sidebar .nav > li.open .item-text { + display: block; + } + .aside-collapsed .sidebar .nav .label { + position: absolute; + top: 10px; + right: 5px; + } +} +/* ======================================================================== + Component: offsidebar.less + ========================================================================== */ +.offsidebar { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 250px; + margin-top: 120px; + border-left: 1px solid #c4c4c4; + z-index: -1; + background-color: #f5f8fa; + color: #515253; +} +.offsidebar-open { + overflow-y: hidden; + height: 100%; +} +.offsidebar-open .offsidebar { + overflow-y: auto; + z-index: 10; +} +@media only screen and (min-width: 768px) { + .offsidebar { + position: fixed; + margin-top: 60px; + } +} +.no-csstransforms3d .offsidebar-open .wrapper > section { + left: -250px; +} +.csstransforms3d .offsidebar-open .wrapper > section { + -webkit-transform: translate3d(-250px, 0, 0); + transform: translate3d(-250px, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +/* ======================================================================== + Component: button-extra.less + ========================================================================== */ +.btn-inverse { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse.focus, +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + color: #ffffff; + background-color: #303333; + border-color: #2b2e2e; +} +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled, +.btn-inverse[disabled], +fieldset[disabled] .btn-inverse, +.btn-inverse.disabled:hover, +.btn-inverse[disabled]:hover, +fieldset[disabled] .btn-inverse:hover, +.btn-inverse.disabled:focus, +.btn-inverse[disabled]:focus, +fieldset[disabled] .btn-inverse:focus, +.btn-inverse.disabled.focus, +.btn-inverse[disabled].focus, +fieldset[disabled] .btn-inverse.focus, +.btn-inverse.disabled:active, +.btn-inverse[disabled]:active, +fieldset[disabled] .btn-inverse:active, +.btn-inverse.disabled.active, +.btn-inverse[disabled].active, +fieldset[disabled] .btn-inverse.active { + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse .badge { + color: #494d4d; + background-color: #ffffff; +} +.btn-green { + color: #ffffff; + background-color: #01b6ad; + border-color: transparent; +} +.btn-green:hover, +.btn-green:focus, +.btn-green.focus, +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + color: #ffffff; + background-color: #01837d; + border-color: rgba(0, 0, 0, 0); +} +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + background-image: none; +} +.btn-green.disabled, +.btn-green[disabled], +fieldset[disabled] .btn-green, +.btn-green.disabled:hover, +.btn-green[disabled]:hover, +fieldset[disabled] .btn-green:hover, +.btn-green.disabled:focus, +.btn-green[disabled]:focus, +fieldset[disabled] .btn-green:focus, +.btn-green.disabled.focus, +.btn-green[disabled].focus, +fieldset[disabled] .btn-green.focus, +.btn-green.disabled:active, +.btn-green[disabled]:active, +fieldset[disabled] .btn-green:active, +.btn-green.disabled.active, +.btn-green[disabled].active, +fieldset[disabled] .btn-green.active { + background-color: #01b6ad; + border-color: transparent; +} +.btn-green .badge { + color: #01b6ad; + background-color: #ffffff; +} +.btn-purple { + color: #ffffff; + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple:hover, +.btn-purple:focus, +.btn-purple.focus, +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + color: #ffffff; + background-color: #9269c2; + border-color: rgba(0, 0, 0, 0); +} +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + background-image: none; +} +.btn-purple.disabled, +.btn-purple[disabled], +fieldset[disabled] .btn-purple, +.btn-purple.disabled:hover, +.btn-purple[disabled]:hover, +fieldset[disabled] .btn-purple:hover, +.btn-purple.disabled:focus, +.btn-purple[disabled]:focus, +fieldset[disabled] .btn-purple:focus, +.btn-purple.disabled.focus, +.btn-purple[disabled].focus, +fieldset[disabled] .btn-purple.focus, +.btn-purple.disabled:active, +.btn-purple[disabled]:active, +fieldset[disabled] .btn-purple:active, +.btn-purple.disabled.active, +.btn-purple[disabled].active, +fieldset[disabled] .btn-purple.active { + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.btn-pink { + color: #ffffff; + background-color: #ff3366; + border-color: transparent; +} +.btn-pink:hover, +.btn-pink:focus, +.btn-pink.focus, +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + color: #ffffff; + background-color: #ff0040; + border-color: rgba(0, 0, 0, 0); +} +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + background-image: none; +} +.btn-pink.disabled, +.btn-pink[disabled], +fieldset[disabled] .btn-pink, +.btn-pink.disabled:hover, +.btn-pink[disabled]:hover, +fieldset[disabled] .btn-pink:hover, +.btn-pink.disabled:focus, +.btn-pink[disabled]:focus, +fieldset[disabled] .btn-pink:focus, +.btn-pink.disabled.focus, +.btn-pink[disabled].focus, +fieldset[disabled] .btn-pink.focus, +.btn-pink.disabled:active, +.btn-pink[disabled]:active, +fieldset[disabled] .btn-pink:active, +.btn-pink.disabled.active, +.btn-pink[disabled].active, +fieldset[disabled] .btn-pink.active { + background-color: #ff3366; + border-color: transparent; +} +.btn-pink .badge { + color: #ff3366; + background-color: #ffffff; +} +.btn-outline { + background-color: transparent; + border-color: #fff; +} +.btn-outline:hover, +.btn-outline:focus { + background-color: #fff; + color: #0094cb; +} +.btn-flat { + border-bottom-width: 1px; + border-radius: 0; + box-shadow: 0 0 0 #000; +} +.btn-xl { + padding: 20px 16px; + font-size: 18px; +} +.btn-square { + border-radius: 0; +} +.btn-pill-left, +.btn-oval { + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + padding-left: 18px; +} +.btn-pill-right, +.btn-oval { + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + padding-right: 18px; +} +.btn-labeled { + padding-top: 0; + padding-bottom: 0; +} +.btn-label { + position: relative; + background: transparent; + background: rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 7px 18px; + left: -18px; + border-radius: 3px 0 0 3px; +} +.btn-label.btn-label-right { + left: auto; + right: -18px; + border-radius: 0 3px 3px 0; +} +.btn-lg .btn-label { + padding: 10px 16px; + left: -16px; + border-radius: 5px 0 0 5px; +} +.btn-lg .btn-label.btn-label-right { + left: auto; + right: -16px; + border-radius: 0 5px 5px 0; +} +.btn-sm .btn-label { + padding: 5px 10px; + left: -10px; + border-radius: 2px 0 0 2px; +} +.btn-sm .btn-label.btn-label-right { + left: auto; + right: -10px; + border-radius: 0 2px 2px 0; +} +.btn-xs .btn-label { + padding: 1px 5px; + left: -5px; + border-radius: 2px 0 0 2px; +} +.btn-xs .btn-label.btn-label-right { + left: auto; + right: -5px; + border-radius: 0 2px 2px 0; +} +.btn-fw { + min-width: 80px; +} +.btn-fw.btn-sm { + min-width: 40px; +} +.btn-fw.btn-md { + min-width: 60px; +} +.btn-fw.btn-lg { + min-width: 140px; +} +/* ======================================================================== + Component: placeholder.less + ========================================================================== */ +.box-placeholder { + margin-bottom: 15px; + padding: 20px; + border: 1px dashed #dddddd; + background: #fafafa; + color: #444444; +} +.box-placeholder > :last-child { + margin-bottom: 0; +} +.box-placeholder-lg { + padding-top: 80px; + padding-bottom: 80px; +} +/* ======================================================================== + Component: panels.less + ========================================================================== */ +.panel .table { + margin-bottom: 0; + border: 0; +} +.panel-flat { + margin: 0 !important; + border: 0; +} +.panel-group .panel-flat { + box-shadow: 0 0 0 #000; +} +.panel-group .panel-flat:first-child { + border-radius: 4px 4px 0 0; +} +.panel-group .panel-flat:last-child { + border-radius: 0 0 4px 4px; +} +.panel-heading > a[data-perform] { + display: inline-block; + color: #fff; + width: 2em; + text-align: center; +} +.panel-default .panel-heading > a[data-perform] { + color: #c1c2c3; +} +.panel-heading > .label.pull-right { + margin-top: 3px; +} +.panel-footer .pagination { + margin: 0; +} +.panel-footer .radial-bar { + margin-bottom: 0; +} +.panel-footer p { + margin-bottom: 0; +} +.panel-heading-active { + background-color: #7bbf62 !important; + font-weight: bold; + font-size: 16px; +} +.panel-heading-active > a { + padding: 15px 0; + color: #fff !important; + -webkit-transition: padding 0.5s ease; + -o-transition: padding 0.5s ease; + transition: padding 0.5s ease; +} +.panel-heading-active + .panel-collapse:after { + content: ""; + display: block; + width: 60%; + margin: 0 auto; + height: 0; + border-bottom: 1px solid #e1e2e3; +} +.panel-inverse { + border-color: #d1d2d3; +} +.panel-inverse > .panel-heading { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.panel-inverse > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-inverse > .panel-heading .badge { + color: #494d4d; + background-color: #ffffff; +} +.panel-inverse > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-green { + border-color: #d1d2d3; +} +.panel-green > .panel-heading { + color: #ffffff; + background-color: #01b6ad; + border-color: #01b6ad; +} +.panel-green > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-green > .panel-heading .badge { + color: #01b6ad; + background-color: #ffffff; +} +.panel-green > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-pink { + border-color: #d1d2d3; +} +.panel-pink > .panel-heading { + color: #ffffff; + background-color: #ff3366; + border-color: #ff3366; +} +.panel-pink > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-pink > .panel-heading .badge { + color: #ff3366; + background-color: #ffffff; +} +.panel-pink > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-purple { + border-color: #d1d2d3; +} +.panel-purple > .panel-heading { + color: #ffffff; + background-color: #ac8dd1; + border-color: #ac8dd1; +} +.panel-purple > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-purple > .panel-heading .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.panel-purple > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-dark { + border-color: #d1d2d3; +} +.panel-dark > .panel-heading { + color: #ffffff; + background-color: #393C3C; + border-color: #35394b; +} +.panel-dark > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-dark > .panel-heading .badge { + color: #35394b; + background-color: #ffffff; +} +.panel-dark > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +/* ======================================================================== + Component: progress-size.less + ========================================================================== */ +.progress-sm { + height: 15px; +} +.progress-xs { + height: 8px; +} +.progress-0 { + width: 0%; +} +.progress-10 { + width: 10%; +} +.progress-20 { + width: 20%; +} +.progress-30 { + width: 30%; +} +.progress-40 { + width: 40%; +} +.progress-50 { + width: 50%; +} +.progress-60 { + width: 60%; +} +.progress-70 { + width: 70%; +} +.progress-80 { + width: 80%; +} +.progress-90 { + width: 90%; +} +.progress-100 { + width: 100%; +} +/* ======================================================================== + Component: radial-bar.less + ========================================================================== */ +/* ------------------------------------- + * Bar container + * ------------------------------------- */ +.radial-bar { + position: relative; + display: inline-block; + font-size: 16px; + border-radius: 50%; + border: 2px solid #fafafa; + background-color: transparent; + margin-bottom: 20px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + width: 80px; + height: 80px; + font-size: 18px; +} +.radial-bar:after, +.radial-bar > img { + display: inline-block; + position: absolute; + top: 0; + left: 0; + border-radius: 50%; + text-align: center; + font-weight: bold; + color: #a1a2a3; +} +.radial-bar:after { + content: attr(data-label); + background-color: #ffffff; + z-index: 101; +} +.radial-bar > img { + z-index: 102; +} +.radial-bar:after, +.radial-bar > img { + width: 56px; + height: 56px; + margin-left: 12px; + margin-top: 12px; + line-height: 56px; +} +.radial-bar.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-50 { + background-image: linear-gradient(270deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-55 { + background-image: linear-gradient(288deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-60 { + background-image: linear-gradient(306deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-65 { + background-image: linear-gradient(324deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-70 { + background-image: linear-gradient(342deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-75 { + background-image: linear-gradient(360deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-80 { + background-image: linear-gradient(378deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-85 { + background-image: linear-gradient(396deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-90 { + background-image: linear-gradient(414deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-95 { + background-image: linear-gradient(432deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-100 { + background-image: linear-gradient(450deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-50 { + background-image: linear-gradient(270deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-55 { + background-image: linear-gradient(288deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-60 { + background-image: linear-gradient(306deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-65 { + background-image: linear-gradient(324deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-70 { + background-image: linear-gradient(342deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-75 { + background-image: linear-gradient(360deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-80 { + background-image: linear-gradient(378deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-85 { + background-image: linear-gradient(396deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-90 { + background-image: linear-gradient(414deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-95 { + background-image: linear-gradient(432deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-100 { + background-image: linear-gradient(450deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-50 { + background-image: linear-gradient(270deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-55 { + background-image: linear-gradient(288deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-60 { + background-image: linear-gradient(306deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-65 { + background-image: linear-gradient(324deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-70 { + background-image: linear-gradient(342deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-75 { + background-image: linear-gradient(360deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-80 { + background-image: linear-gradient(378deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-85 { + background-image: linear-gradient(396deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-90 { + background-image: linear-gradient(414deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-95 { + background-image: linear-gradient(432deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-100 { + background-image: linear-gradient(450deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-50 { + background-image: linear-gradient(270deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-55 { + background-image: linear-gradient(288deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-60 { + background-image: linear-gradient(306deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-65 { + background-image: linear-gradient(324deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-70 { + background-image: linear-gradient(342deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-75 { + background-image: linear-gradient(360deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-80 { + background-image: linear-gradient(378deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-85 { + background-image: linear-gradient(396deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-90 { + background-image: linear-gradient(414deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-95 { + background-image: linear-gradient(432deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-100 { + background-image: linear-gradient(450deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-50 { + background-image: linear-gradient(270deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-55 { + background-image: linear-gradient(288deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-60 { + background-image: linear-gradient(306deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-65 { + background-image: linear-gradient(324deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-70 { + background-image: linear-gradient(342deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-75 { + background-image: linear-gradient(360deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-80 { + background-image: linear-gradient(378deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-85 { + background-image: linear-gradient(396deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-90 { + background-image: linear-gradient(414deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-95 { + background-image: linear-gradient(432deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-100 { + background-image: linear-gradient(450deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-50 { + background-image: linear-gradient(270deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-55 { + background-image: linear-gradient(288deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-60 { + background-image: linear-gradient(306deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-65 { + background-image: linear-gradient(324deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-70 { + background-image: linear-gradient(342deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-75 { + background-image: linear-gradient(360deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-80 { + background-image: linear-gradient(378deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-85 { + background-image: linear-gradient(396deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-90 { + background-image: linear-gradient(414deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-95 { + background-image: linear-gradient(432deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-100 { + background-image: linear-gradient(450deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-lg { + width: 100px; + height: 100px; + font-size: 22px; +} +.radial-bar-lg:after, +.radial-bar-lg > img { + width: 70px; + height: 70px; + margin-left: 15px; + margin-top: 15px; + line-height: 70px; +} +.radial-bar-sm { + width: 50px; + height: 50px; + font-size: 12px; +} +.radial-bar-sm:after, +.radial-bar-sm > img { + width: 35px; + height: 35px; + margin-left: 7.5px; + margin-top: 7.5px; + line-height: 35px; +} +.radial-bar-xs { + width: 30px; + height: 30px; + font-size: 8px; +} +.radial-bar-xs:after, +.radial-bar-xs > img { + width: 21px; + height: 21px; + margin-left: 4.5px; + margin-top: 4.5px; + line-height: 21px; +} +x:-o-prefocus, +.radial-bar { + background-clip: content-box; +} +/* ======================================================================== + Component: user-block.less + ========================================================================== */ +.user-block { + display: block; + position: relative; + padding: 25px 30px 0; + cursor: pointer; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block > .user-block-picture { + position: relative; + float: left; + width: 60px; + margin-right: 15px; +} +.user-block > .user-block-picture > img { + max-width: 100%; + height: auto; +} +.user-block .user-block-info { + float: left; + padding-top: 15px; +} +.user-block .user-block-info .user-block-name, +.user-block .user-block-info .user-block-role { + display: block; +} +.user-block .user-block-info .user-block-name { + color: #7D848F; +} +.user-block .user-block-info .user-block-role { + font-size: 12px; + color: #aaa; +} +.user-block-status { + position: relative; +} +.user-block-status > .point { + position: absolute; + bottom: 0; + right: 0; + border: 2px solid #fff; +} +@media only screen and (min-width: 768px) { + .aside-collapsed .user-block { + padding: 30px 0 0; + margin: 0; + text-align: center; + } + .aside-collapsed .user-block > .user-block-picture { + float: none; + margin: 0 auto; + width: 50px; + } + .aside-collapsed .user-block > .user-block-picture > .user-block-status { + display: block; + } + .aside-collapsed .user-block .user-block-role, + .aside-collapsed .user-block .user-block-status, + .aside-collapsed .user-block .user-block-name { + display: none; + } +} +/* ======================================================================== + Component: points.less + ========================================================================== */ +.point { + display: inline-block; + width: 7px; + height: 7px; + border-radius: 500px; + margin: 0 .5em; + background-color: #ddd; + vertical-align: baseline; + border: 2px solid transparent; +} +.point.text-left { + margin-left: 0; +} +.point.text-right { + margin-right: 0; +} +.point-primary { + background-color: #0094cb; +} +.point-success { + background-color: #7bbf62; +} +.point-info { + background-color: #3babc8; +} +.point-warning { + background-color: #ff902b; +} +.point-danger { + background-color: #f35839; +} +.point-green { + background-color: #01b6ad; +} +.point-pink { + background-color: #ff3366; +} +.point-inverse { + background-color: #494d4d; +} +.point-purple { + background-color: #ac8dd1; +} +.point-sm { + width: 5px; + height: 5px; +} +.point-lg { + width: 11px; + height: 11px; +} +.point-xl { + width: 18px; + height: 18px; +} +.point-outline { + background-color: transparent; +} +.point-outline.point-primary { + border: 1px solid #0094cb; +} +.point-outline.point-success { + border: 1px solid #7bbc62; +} +.point-outline.point-info { + border: 1px solid #3babc8; +} +.point-outline.point-warning { + border: 1px solid #ff902b; +} +.point-outline.point-danger { + border: 1px solid #f35839; +} +/* ======================================================================== + Component: timeline.less + ========================================================================== */ +.timeline { + list-style: none; + padding: 0 0 20px; + position: relative; +} +.timeline:before { + top: 0; + bottom: 0; + position: absolute; + content: " "; + width: 1px; + background-color: #d1d2d3; + left: 60px; +} +.timeline > li { + margin-bottom: 20px; + position: relative; + margin-top: 30px; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li.timeline-separator:before { + content: attr(data-datetime); + display: inline-block; + width: 120px; + text-align: center; + padding: 0 20px; + line-height: 30px; + border: 1px solid #e1e1e1; + background-color: #f1f2f3; + color: #a1a2a3; +} +.timeline > li > .timeline-panel { + position: relative; + margin-left: 130px; +} +.timeline > li > .timeline-panel .popover { + position: relative; + display: block; + margin: 0; + width: 100%; + max-width: none; +} +.timeline > li > .timeline-panel .popover .arrow { + display: none; +} +.timeline > li > .timeline-panel .popover .popover-content .popover-title { + background-color: transparent; + border: 0; + padding-left: 0; + padding-top: 0; +} +.timeline > li > .timeline-date { + float: right; + margin: -20px 0 0; + display: block; + height: 20px; + line-height: 20px; + font-size: 13px; +} +.timeline > li > .timeline-date > time:after { + content: attr(datetime); +} +.timeline > li > .timeline-badge { + position: absolute; + top: 0; + left: 60px; + width: 50px; + height: 50px; + border-radius: 500px; + margin-left: -25px; + line-height: 50px; + font-size: 1.4em; + text-align: center; + color: #fff; + background-color: #999999; + z-index: 100; +} +.timeline > li > .timeline-badge.primary { + background-color: #0094cb; +} +.timeline > li > .timeline-badge.success { + background-color: #7bbf62; +} +.timeline > li > .timeline-badge.warning { + background-color: #ff902b; +} +.timeline > li > .timeline-badge.danger { + background-color: #f35839; +} +.timeline > li > .timeline-badge.info { + background-color: #3babc8; +} +.timeline-title { + margin-top: 0; + color: inherit; +} +.timeline-body > p, +.timeline-body > ul { + margin-bottom: 0; +} +.timeline-body > p + p { + margin-top: 5px; +} +@media only screen and (min-width: 992px) { + .timeline:before { + left: 50%; + margin-left: 25px; + } + .timeline > li.timeline-separator { + margin-left: 25px; + text-align: center; + } + .timeline > li.timeline-separator:before { + margin-left: 25px; + } + .timeline > li > .timeline-badge { + left: 50%; + margin-left: 0; + } + .timeline > li > .timeline-date { + float: none; + position: absolute; + width: 40%; + left: 50%; + top: 25px; + margin-left: 75px; + margin-top: -10px; + } + .timeline > li > .timeline-panel { + float: left; + margin: 0; + width: 48%; + } + .timeline > li > .timeline-panel:before { + border-left-width: 15px; + border-right-width: 0; + top: 26px; + right: -15px; + left: auto; + } + .timeline > li > .timeline-panel:after { + border-left-width: 14px; + border-right-width: 0; + top: 27px; + right: -14px; + left: auto; + } + .timeline > li > .timeline-panel .popover .arrow { + top: 25px; + display: block; + } + .timeline > li.timeline-inverted > .timeline-panel { + float: right; + padding-left: 50px; + } + .timeline > li.timeline-inverted .timeline-date { + left: auto; + right: 50%; + width: auto; + margin-left: 0; + margin-right: 50px; + } +} +/* ======================================================================== + Component: dropdown-extras.less + ========================================================================== */ +.dropdown-lg > .dropdown-menu { + min-width: 200px; +} +.dropdown-list > .dropdown-menu { + padding: 0; + min-width: 220px; +} +.dropdown-list .list-group { + margin: 0; +} +.dropdown-list .list-group-item { + border-radius: 0; + border-left: 0; + border-right: 0; +} +.dropdown-list .list-group-item:first-child { + border-top: 0; +} +.dropdown-list .list-group-item:last-child { + border-bottom: 0; +} +.dropdown > a { + position: relative; +} +.dropdown > a > .label { + position: absolute; + top: 0; + right: 0; + padding: 2px 5px; +} +@media only screen and (min-width: 768px) { + .dropdown > a > .label { + top: 10px; + } +} +.dropdown-menu-header { + padding: 10px 15px; + background-color: #f7f8f9; + border-bottom: 1px solid #e1e1e1; +} +/* ======================================================================== + Component: row-extra.less + ========================================================================== */ +.row-table { + display: table; + table-layout: fixed; + height: 100%; + width: 100%; + margin: 0; +} +.row-table > [class*="col-"] { + display: table-cell; + float: none; + table-layout: fixed; + vertical-align: middle; +} +.row-flush > [class*="col-"] { + padding-left: 0; + padding-right: 0; +} +/* ======================================================================== + Component: half-float.less + ========================================================================== */ +.half-float { + position: relative; + margin-bottom: 65px; +} +.half-float .half-float-bottom, +.half-float .half-float-top { + position: absolute; + left: 50%; + bottom: -60px; + width: 120px; + height: 120px; + margin-left: -60px; + z-index: 2; +} +.half-float .half-float-top { + bottom: auto; + top: -60px; +} +.half-float + * { + margin-top: -55px; + padding-top: 65px; +} +/* ======================================================================== + Component: animations.less + ========================================================================== */ +[data-toggle="play-animation"][data-offset] { + visibility: hidden; +} +[data-toggle="play-animation"][data-offset].anim-done { + visibility: visible; +} +/* ======================================================================== + Component: masonry-grid.less + ========================================================================== */ +.row-masonry { + position: relative; + margin: 0; + padding: 0; + width: 100%; +} +.row-masonry > .col-masonry { + display: inline-block; + width: 100%; + min-height: 1em; + margin-bottom: 15px; +} +/* Columns definition by devices */ +@media only screen and (min-width: 480px) { + .row-masonry-sm-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-sm-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-sm-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-sm-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-sm-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-sm-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-sm-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-sm-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-sm-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-sm-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-sm-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-sm-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-sm-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-sm-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-sm-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-sm-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-sm-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-sm-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-sm-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-sm-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-sm-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-sm-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-sm-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-sm-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 768px) { + .row-masonry-md-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-md-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-md-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-md-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-md-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-md-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-md-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-md-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-md-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-md-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-md-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-md-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-md-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-md-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-md-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-md-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-md-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-md-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-md-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-md-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-md-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-md-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-md-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-md-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 992px) { + .row-masonry-lg-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-lg-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-lg-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-lg-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-lg-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-lg-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-lg-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-lg-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-lg-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-lg-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-lg-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-lg-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-lg-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-lg-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-lg-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-lg-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-lg-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-lg-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-lg-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-lg-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-lg-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-lg-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-lg-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-lg-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 1200px) { + .row-masonry-xl-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-xl-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-xl-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-xl-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-xl-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-xl-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-xl-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-xl-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-xl-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-xl-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-xl-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-xl-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-xl-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-xl-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-xl-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-xl-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-xl-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-xl-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-xl-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-xl-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-xl-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-xl-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-xl-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-xl-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +/* ======================================================================== + Component: widget.less + ========================================================================== */ +.widget { + margin-bottom: 20px; +} +.widget.panel, +.widget .panel { + overflow: hidden; +} +/* ======================================================================== + Component: chart-flot.less + ========================================================================== */ +.flot-chart { + display: block; + height: 250px; +} +.flot-chart .legend > table tr td { + padding: 3px; +} +.flot-chart .legend > table tr td:first-child { + padding-left: 3px; +} +.flot-chart .legend > table tr td:last-child { + padding-right: 3px; +} +.flot-chart .legend > table tr + tr td { + padding-top: 0; +} +.flot-chart .legend > div:first-child { + border-color: rgba(0, 0, 0, 0.1) !important; +} +.flot-chart .legend .legendColorBox > div, +.flot-chart .legend .legendColorBox > div > div { + border-radius: 400px; +} +.flot-chart-content { + width: 100%; + height: 100%; +} +.flot-pie-label { + padding: 3px 5px; + font-size: 10px; + text-align: center; + color: #fff; +} +#flotTip { + position: relative; + padding: 5px; + font-size: 12px !important; + border-radius: 2px !important; + border-color: transparent !important; + background-color: rgba(0, 0, 0, 0.75) !important; + color: #f1f1f1; + z-index: 5; +} +/* ======================================================================== + Component: form-elements.less + ========================================================================== */ +/** + * Custom form elements + * - Checkbox + * - Radios + * - Switch + * - Rounded inputs + */ +.c-checkbox, +.c-radio { + margin-right: 4px; +} +.c-checkbox *, +.c-radio * { + cursor: pointer; +} +.c-checkbox input, +.c-radio input { + opacity: 0; + position: absolute; + margin-left: 0 !important; +} +.c-checkbox span, +.c-radio span { + position: relative; + display: inline-block; + vertical-align: top; + margin-left: -20px; + width: 20px; + height: 20px; + border-radius: 2px; + border: 1px solid #ccc; + margin-right: 5px; +} +.c-checkbox:hover span, +.c-radio:hover span { + border-color: #0094cb; +} +.form-inline .c-checkbox span, +.form-inline .c-radio span { + margin-left: 0; +} +.c-checkbox.c-checkbox-rounded span, +.c-radio.c-checkbox-rounded span, +.c-checkbox.c-radio-rounded span, +.c-radio.c-radio-rounded span { + border-radius: 500px; +} +/* override for radio */ +.c-radio span { + border-radius: 500px; +} +/* the icon */ +.c-checkbox span:before, +.c-radio span:before { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0; + text-align: center !important; + font-size: 12px; + line-height: 18px; + vertical-align: middle; +} +/* Checked state */ +input[type=checkbox]:checked + span:before, +input[type=radio]:checked + span:before { + color: #fff; + opacity: 1; + transition: color 0.3s ease-out; +} +input[type=checkbox]:checked + span, +input[type=radio]:checked + span { + border-color: #0094cb; + background-color: #0094cb; +} +/* override for radio */ +input[type=radio]:checked + span { + background-color: #fff; +} +input[type=radio]:checked + span:before { + color: #0094cb; +} +/* Disable state */ +input[type=checkbox]:disabled + span, +input[type=radio]:disabled + span { + border-color: #dddddd !important; + background-color: #dddddd !important; +} +/* override for radio */ +input[type=radio]:disabled + span { + background-color: #fff !important; +} +input[type=radio]:disabled + span:before { + color: #dddddd; +} +.form-control-rounded { + border-radius: 100px; +} +.switch * { + cursor: pointer; +} +.switch input { + opacity: 0; + position: absolute; + z-index: -1; +} +.switch span { + position: relative; + display: inline-block; + width: 60px; + height: 30px; + background-color: #fff; + border: 1px solid #dddddd; + border-radius: 100px; + transition: all .5s; + box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.1) inset; +} +.switch span:after { + content: ""; + position: absolute; + background-color: #fff; + top: 0; + left: 0; + height: 28px; + width: 28px; + border: 1px solid #ddd; + border-radius: 400px; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); + -webkit-transition: all .2s; +} +.switch input:checked + span { + background-color: #0094cb; + border-color: #0094cb; + transition: all .5s; +} +.switch input:checked + span:after { + left: 50%; + transition: all .2s; +} +.has-feedback .form-control-feedback { + top: 10px; +} +label + .form-control + .form-control-feedback { + top: 32px; +} +.input-md { + width: 260px; +} +/* ======================================================================== + Component: form-file.less + ========================================================================== */ +.form-file { + position: relative; + display: inline-block; + vertical-align: bottom; + overflow: hidden; +} +.form-file input[type="file"] { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + width: 100%; + opacity: 0; + cursor: pointer; + /* 1 */ + left: 0; + /* 2 */ + font-size: 500px; +} +/* ======================================================================== + Component: form-validation.less + ========================================================================== */ +.parsley-error { + border-color: #f35839 !important; +} +.parsley-errors-list { + display: none; + margin: 0; + padding: 0; +} +.parsley-errors-list.filled { + display: block; +} +.parsley-errors-list > li { + font-size: 12px; + list-style: none; + color: #f35839; +} +/* ======================================================================== + Component: form-tags.less + ========================================================================== */ +.bootstrap-tagsinput { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.bootstrap-tagsinput:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.bootstrap-tagsinput::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.bootstrap-tagsinput:-ms-input-placeholder { + color: #b7bac9; +} +.bootstrap-tagsinput::-webkit-input-placeholder { + color: #b7bac9; +} +.bootstrap-tagsinput[disabled], +.bootstrap-tagsinput[readonly], +fieldset[disabled] .bootstrap-tagsinput { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.bootstrap-tagsinput { + height: auto; +} +.bootstrap-tagsinput .tag { + color: inherit; +} +/* ======================================================================== + Component: form-wizard.less + ========================================================================== */ +.form-wizard > ol { + list-style-type: none; + padding: 0 15px; +} +.form-wizard > ol > li { + min-height: 50px; + padding-top: 15px; + padding-bottom: 15px; + background-color: #fcfcfc; + cursor: pointer; + -webkit-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} +.form-wizard > ol > li > a { + text-decoration: none; +} +.form-wizard > ol > li .label { + color: #0094cb; + border: 1px solid #0094cb; + vertical-align: super; + margin-right: 6px; +} +.form-wizard > ol > li .label[href]:hover, +.form-wizard > ol > li .label[href]:focus { + color: #006f98; + border-color: #006f98; +} +.form-wizard > ol > li h4 { + display: inline-block; + color: #515253; +} +.form-wizard > ol > li small { + display: block; + color: #b1b2b2; +} +.form-wizard > ol > li.active { + background-color: #0094cb; +} +.form-wizard > ol > li.active h4, +.form-wizard > ol > li.active small { + color: #fff; +} +.form-wizard > ol > li.active .label { + background-color: #0094cb; + border-color: #fff; + color: #fff; +} +.form-wizard .well { + border: 0; + margin: 0; + padding: 10px 0; + box-shadow: 0 0 0 #000; +} +.form-wizard .well fieldset { + margin: 0; +} +.form-wizard.wizard-horizontal > ol > li { + display: inline-block; +} +.form-wizard.wizard-vertical:before, +.form-wizard.wizard-vertical:after { + content: " "; + display: table; +} +.form-wizard.wizard-vertical:after { + clear: both; +} +.form-wizard.wizard-vertical > ol { + float: left; + width: 39%; + padding: 0; +} +.form-wizard.wizard-vertical > ol > li { + display: block; + padding: 10px; +} +.form-wizard.wizard-vertical > ol > li h4 { + font-size: 14px; +} +.form-wizard.wizard-vertical > div { + float: right; + width: 59%; +} +.form-wizard.wizard-vertical .pager { + clear: both; + padding-top: 10px; +} +.form-wizard.wizard-vertical .well { + padding: 0; +} +/* ======================================================================== + Component: form-dragdrop.less + ========================================================================== */ +/** + * Provides a dragover state for uploads + */ +.dragover { + box-shadow: 0 0 20px rgba(100, 100, 100, 0.3); +} +/* ======================================================================== + Component: markdownarea.less + ========================================================================== */ +.uk-markdownarea-navbar { + background: #eeeeee; +} +.uk-markdownarea-navbar:before, +.uk-markdownarea-navbar:after { + content: " "; + display: table; +} +.uk-markdownarea-navbar:after { + clear: both; +} +.uk-markdownarea-navbar-nav { + margin: 0; + padding: 0; + list-style: none; + float: left; +} +.uk-markdownarea-navbar-nav > li { + float: left; +} +.uk-markdownarea-navbar-nav > li > a { + display: block; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-decoration: none; + /* 1 */ + height: 40px; + padding: 0 15px; + line-height: 40px; + /* 2 */ + color: #444444; + font-size: 11px; + cursor: pointer; +} +.uk-markdownarea-navbar-nav > li:hover > a, +.uk-markdownarea-navbar-nav > li > a:focus { + background-color: #f5f5f5; + color: #444444; + outline: none; + /* 2 */ +} +.uk-markdownarea-navbar-nav > li > a:active { + background-color: #dddddd; + color: #444444; +} +.uk-markdownarea-navbar-nav > li.uk-active > a { + background-color: #f5f5f5; + color: #444444; +} +.uk-markdownarea-navbar-flip { + float: right; +} +[data-mode='split'] .uk-markdown-button-markdown, +[data-mode='split'] .uk-markdown-button-preview { + display: none; +} +.uk-markdownarea-content { + border-left: 1px solid #dddddd; + border-right: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + background: #ffffff; +} +.uk-markdownarea-content:before, +.uk-markdownarea-content:after { + content: " "; + display: table; +} +.uk-markdownarea-content:after { + clear: both; +} +.uk-markdownarea-fullscreen { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 990; +} +.uk-markdownarea-fullscreen .uk-markdownarea-content { + position: absolute; + top: 40px; + left: 0; + right: 0; + bottom: 0; +} +.uk-markdownarea-fullscreen .uk-icon-expand:before { + content: "\f066"; +} +.uk-markdownarea-code, +.uk-markdownarea-preview { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.uk-markdownarea-preview { + padding: 20px; + overflow-y: scroll; +} +.uk-markdownarea-preview h1:first-child, +.uk-markdownarea-preview h2:first-child, +.uk-markdownarea-preview h3:first-child, +.uk-markdownarea-preview h4:first-child { + margin-top: 0; +} +[data-mode='tab'][data-active-tab='code'] .uk-markdownarea-preview, +[data-mode='tab'][data-active-tab='preview'] .uk-markdownarea-code { + display: none; +} +[data-mode='split'] .uk-markdownarea-code, +[data-mode='split'] .uk-markdownarea-preview { + float: left; + width: 50%; +} +[data-mode='split'] .uk-markdownarea-code { + border-right: 1px solid #eeeeee; +} +.uk-markdownarea .CodeMirror { + padding: 10px; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* Fullscreen MArkdown area editor */ +html.markdownarea-fullscreen, +.markdownarea-fullscreen body { + height: 100%; + -webkit-transition: height 0s linear 0.2s; + -o-transition: height 0s linear 0.2s; + transition: height 0s linear 0.2s; +} +.markdownarea-fullscreen .navbar-top, +.markdownarea-fullscreen .sidebar, +.markdownarea-fullscreen .offsidebar { + visibility: hidden; + opacity: 0; + -webkit-transition: opacity .2s ease, visibility 0s ease 0.2s; + -o-transition: opacity .2s ease, visibility 0s ease 0.2s; + transition: opacity .2s ease, visibility 0s ease 0.2s; +} +.markdownarea-fullscreen .wrapper > section { + margin-left: 0; +} +/* ======================================================================== + Component: codemirror-md.less + ========================================================================== */ +/** + * Style for the markdown area on new and edit article pages + * Most of the style overwrite codemirror and + * markdownarea uikit addon styles + */ +/* CODEMIRROR MD THEME */ +.cm-s-default pre { + font-family: "Helvetica Neue", "Trebuchet MS", "Arial", sans-serif; + line-height: 1.6; +} +.cm-s-default pre * { + color: #222222 !important; +} +.cm-s-default .cm-header { + line-height: 1.1; + margin-bottom: 0.7em; +} +.cm-s-default .cm-quote, +.cm-s-default .cm-variable-2 { + padding-left: 10px; +} +.cm-s-default .cm-header-1 { + font-size: 2.6em; +} +.cm-s-default .cm-header-2 { + font-size: 2.15em; +} +.cm-s-default .cm-header-3 { + font-size: 1.7em; +} +.cm-s-default .cm-header-4 { + font-size: 1.25em; +} +.cm-s-default .cm-header:after, +.cm-s-default .cm-header:before { + content: ""; + display: inline-block; + font-size: inherit; + width: 100%; +} +.CodeMirror-lines pre:first-child .cm-header:before { + display: none; +} +.uk-markdownarea-navbar { + background-color: transparent; +} +.uk-markdownarea-content { + font-family: "Helvetica Neue", "Trebuchet MS", "Arial", sans-serif; + border: 1px solid #DDDDDD; +} +.uk-markdownarea-fullscreen { + background-color: #fff; + z-index: 1011; +} +.uk-markdownarea-fullscreen .uk-markdownarea-navbar, +.uk-markdownarea-fullscreen .uk-markdownarea-content { + max-width: 960px; + margin: 0 auto; + border: 0; +} +/* ======================================================================== + Component: datatable.less + ========================================================================== */ +.dataTables_filter input { + margin-left: 10px; +} +.dataTables_length select { + margin-right: 10px; +} +table.dataTable tfoot > tr > th { + color: #a1a2a3; + background: #f1f2f3; +} +.ColVis .ColVis_Button { + background-image: none; + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.ColVis .ColVis_Button > span { + color: #656565; +} +.ColVis_collectionBackground { + display: none; +} +ul.ColVis_collection { + background-color: #fff; +} +ul.ColVis_collection > li { + border: 0 !important; + background-image: none !important; + box-shadow: 0 0 0 #000 !important; + margin: 0; +} +ul.ColVis_collection > li > label { + margin: 0; +} +ul.ColVis_collection > li > label > span { + color: #888; + vertical-align: top; + font-weight: normal; +} +ul.ColVis_collection > li > label > span:hover { + color: #555; +} +ul.ColVis_collection > li > label input[type=checkbox]:checked + span, +ul.ColVis_collection > li > label input[type=radio]:checked + span { + background-color: transparent; +} +/* ======================================================================== + Component: table-extras.less + ========================================================================== */ +.table > thead > tr > th { + padding: 14px 8px; + color: #888; +} +.table > tbody > tr > td { + vertical-align: middle; +} +.table > tbody > tr > td > .media img { + width: 36px; + height: 36px; + margin: 0 auto; +} +.table .checkbox { + margin: 0 auto; + width: 20px; +} +.table .progress { + margin-bottom: 0; +} +.table .radial-bar { + margin-bottom: 0; + margin: 0 auto; +} +.jqstooltip { + box-sizing: content-box; +} +#table-ext-1 th:nth-child(1) { + width: 3%; +} +#table-ext-1 th:nth-child(2) { + width: 5%; +} +#table-ext-1 th:nth-child(7) { + width: 5%; +} +#table-ext-1 th:nth-child(9) { + width: 5%; +} +#table-ext-2 th:nth-child(1) { + width: 5%; +} +#table-ext-2 th:nth-child(3) { + width: 10%; +} +/* ======================================================================== + Component: plugins.less + ========================================================================== */ +/** + * Bootstrap Slider + */ +.slider-handle, +.slider-track, +.slider-selection { + background-image: none; + box-shadow: 0 0 0 #000; +} +.slider-handle { + background-color: #fff; + border: 1px solid #0094cb; + opacity: 1; +} +.slider-track { + background-color: #fff; + border: 1px solid #0094cb; +} +.slider-selection { + background-color: #0094cb; +} +.slider .tooltip.top .tooltip-arrow { + border-top-color: #2c3037; +} +.slider .tooltip.right .tooltip-arrow { + border-right-color: #2c3037; +} +.slider .tooltip-inner { + background-color: #2c3037; +} +.slider-lg { + width: 380px; +} +/** + * Chosen + */ +.chosen-container-multi .chosen-choices { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.chosen-container-multi .chosen-choices:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.chosen-container-multi .chosen-choices::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.chosen-container-multi .chosen-choices:-ms-input-placeholder { + color: #b7bac9; +} +.chosen-container-multi .chosen-choices::-webkit-input-placeholder { + color: #b7bac9; +} +.chosen-container-multi .chosen-choices[disabled], +.chosen-container-multi .chosen-choices[readonly], +fieldset[disabled] .chosen-container-multi .chosen-choices { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.chosen-container-multi .chosen-choices { + height: auto; +} +.chosen-container-multi .chosen-choices li.search-field input[type=text] { + height: auto; + padding: 0; +} +.chosen-container-multi .chosen-choices li.search-choice { + margin: 0 5px 3px 0; + background-color: #f5f6f7; + border: 1px solid #e7e9ec; + background-image: none; +} +.chosen-container .chosen-results li.highlighted { + background-color: #a1a2a3; + background-image: none; +} +.chosen-container .chosen-drop { + border-color: #ddd; +} +.chosen-container .chosen-results li.group-result { + color: #747576; + letter-spacing: 0.02em; +} +.chosen-container-single .chosen-single, +.chosen-container-active.chosen-with-drop .chosen-single { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.chosen-container-single .chosen-single:focus, +.chosen-container-active.chosen-with-drop .chosen-single:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.chosen-container-single .chosen-single::-moz-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.chosen-container-single .chosen-single:-ms-input-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single:-ms-input-placeholder { + color: #b7bac9; +} +.chosen-container-single .chosen-single::-webkit-input-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single::-webkit-input-placeholder { + color: #b7bac9; +} +.chosen-container-single .chosen-single[disabled], +.chosen-container-active.chosen-with-drop .chosen-single[disabled], +.chosen-container-single .chosen-single[readonly], +.chosen-container-active.chosen-with-drop .chosen-single[readonly], +fieldset[disabled] .chosen-container-single .chosen-single, +fieldset[disabled] .chosen-container-active.chosen-with-drop .chosen-single { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.chosen-container-single .chosen-single, +textarea.chosen-container-active.chosen-with-drop .chosen-single { + height: auto; +} +.chosen-container-single .chosen-drop { + margin-top: -3px; +} +.chosen-container-single .chosen-single div { + top: 6px; + right: 5px; +} +.chosen-container-multi .chosen-choices li.search-field input[type=text] { + color: #b7bac9; +} +/** + * Filestyle + */ +.bootstrap-filestyle { + outline: none; +} +.bootstrap-filestyle > input { + max-width: 200px; + display: inline-block; + vertical-align: middle; +} +/* ======================================================================== + Component: slim-scroll.less + ========================================================================== */ +.slimScrollBar { + opacity: 1 !important; + background-color: rgba(0, 0, 0, 0.35) !important; + border: 0 !important; + border-radius: 1px !important; +} +.slimScrollRail { + opacity: 1 !important; + background-color: rgba(0, 0, 0, 0.15) !important; + border: 0 !important; + border-radius: 0 !important; +} +/* ======================================================================== + Component: datepicker.less + ========================================================================== */ +.bootstrap-datetimepicker-widget .btn { + padding: 6px; + box-shadow: 0 0 0 #000; + border: 0; +} +.bootstrap-datetimepicker-widget td.day:hover, +.bootstrap-datetimepicker-widget td.hour:hover, +.bootstrap-datetimepicker-widget td.minute:hover, +.bootstrap-datetimepicker-widget td.second:hover { + background: #fafafa; +} +.bootstrap-datetimepicker-widget td.old, +.bootstrap-datetimepicker-widget td.new { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td.active, +.bootstrap-datetimepicker-widget td.active:hover { + background-color: #0094cb; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget td.disabled, +.bootstrap-datetimepicker-widget td.disabled:hover { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td span:hover { + background: #fafafa; +} +.bootstrap-datetimepicker-widget td span.active { + background-color: #0094cb; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget td span.old { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td span.disabled, +.bootstrap-datetimepicker-widget td span.disabled:hover { + background: none; + color: #e1e1e1; + cursor: not-allowed; +} +.bootstrap-datetimepicker-widget th.disabled, +.bootstrap-datetimepicker-widget th.disabled:hover { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget thead tr:first-child th:hover { + background: #fafafa; +} +/* ======================================================================== + Component: notify.less + ========================================================================== */ +.uk-notify { + position: fixed; + top: 50px; + left: 50px; + z-index: 1040; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 350px; +} +.uk-notify-top-right, +.uk-notify-bottom-right { + left: auto; + right: 50px; +} +.uk-notify-top-center, +.uk-notify-bottom-center { + left: 50%; + margin-left: -175px; +} +.uk-notify-bottom-left, +.uk-notify-bottom-right, +.uk-notify-bottom-center { + top: auto; + bottom: 50px; +} +@media (max-width: 480px) { + .uk-notify { + left: 10px; + right: 10px; + width: auto; + margin: 0; + } +} +.uk-notify-message { + position: relative; + margin-bottom: 10px; + padding: 8px; + font-size: 13px; + line-height: 22px; + border-radius: 3px; + padding-right: 35px; + cursor: pointer; +} +.uk-notify-message.alert.alert-normal { + background: #444444; + color: #ffffff; +} +.uk-notify-message > .close { + visibility: hidden; +} +.uk-notify-message:hover > .close { + visibility: visible; +} +/* ======================================================================== + Component: calendar.less + ========================================================================== */ +.fc-button { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; + background-image: none; +} +.fc-button:hover, +.fc-button:focus, +.fc-button.focus, +.fc-button:active, +.fc-button.active, +.open > .dropdown-toggle.fc-button { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.fc-button:active, +.fc-button.active, +.open > .dropdown-toggle.fc-button { + background-image: none; +} +.fc-button.disabled, +.fc-button[disabled], +fieldset[disabled] .fc-button, +.fc-button.disabled:hover, +.fc-button[disabled]:hover, +fieldset[disabled] .fc-button:hover, +.fc-button.disabled:focus, +.fc-button[disabled]:focus, +fieldset[disabled] .fc-button:focus, +.fc-button.disabled.focus, +.fc-button[disabled].focus, +fieldset[disabled] .fc-button.focus, +.fc-button.disabled:active, +.fc-button[disabled]:active, +fieldset[disabled] .fc-button:active, +.fc-button.disabled.active, +.fc-button[disabled].active, +fieldset[disabled] .fc-button.active { + background-color: #ffffff; + border-color: #cccccc; +} +.fc-button .badge { + color: #ffffff; + background-color: #333333; +} +.fc-button:active, +.fc-button.active, +.fc-button.fc-state-active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.fc-button .fc-icon { + margin: 0 .1em; + font-size: inherit; + font-family: FontAwesome !important; + vertical-align: baseline; + color: #555; +} +.fc-button .fc-icon:after { + display: none; +} +.fc-state-highlight, +.fc-day:hover { + background-color: #f7f8f9; +} +.fc-day-number { + font-size: 18px; + font-weight: bold; + color: #a1a2a3; +} +.fc-view { + overflow: visible; +} +.external-events { + margin: 0; +} +.external-events > div { + display: inline-block; + margin-right: 5px; + margin-bottom: 5px; + padding: 6px 10px; + color: #fff; + font-size: 11px; + cursor: pointer; +} +.external-events:empty { + content: "EMRTPUY"; +} +.external-events-trash { + position: relative; + min-height: 120px; +} +.external-events-trash:after { + content: "\f00d"; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #494d4d; + opacity: 0; + font-family: FontAwesome; + color: #fff; + text-align: center; + font-size: 50px; + padding: 8%; + max-height: 100%; + -webkit-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + z-index: -1; +} +.external-events-trash.active:after { + opacity: 1; + z-index: 1; +} +.external-events-trash.hovered:after { + background-color: #fb797e; +} +.external-event-color-selector .point.selected { + border: 3px solid rgba(255, 255, 255, 0.5); +} +/* ======================================================================== + Component: datatable.less + ========================================================================== */ +/* (cs)spinner.css - http://jh3y.github.io/-cs-spinner + Licensed under the MIT license | Jhey Tompkins (c) 2014. */ +/* (cs)spinner base styling */ +.csspinner { + position: relative; +} +.csspinner:before { + content: attr(data-spinner-text); + display: block; + background-color: #f0f0f0; + opacity: 0.7; +} +.csspinner.solid { + opacity: 1; +} +.ie9 .csspinner:before, +.lt-ie9 .csspinner:before { + opacity: .9; +} +.ie9 .csspinner:after, +.lt-ie9 .csspinner:after { + content: "Loading..."; + width: 40px; + height: 40px; + margin: -20px 0 0 -20px; + line-height: 40px; + color: #000; + opacity: 1; + border: 0; + box-shadow: 0 0 0 #000; + background-color: transparent; + text-align: center; +} +/* ======================================================================== + Component: gmap.less + ========================================================================== */ +.gmap { + height: 300px; +} +.gmap.gmap-sm { + height: 150px; +} +/* ======================================================================== + Component: vector-map.less + ========================================================================== */ +.jvectormap-label { + position: absolute; + display: none; + border: solid 1px #313232; + border-radius: 2px; + background: #313232; + color: white; + padding: 3px 6px; + opacity: 0.9; + z-index: 11; +} +.jvectormap-zoomin, +.jvectormap-zoomout { + position: absolute; + left: 10px; + width: 22px; + height: 22px; + border-radius: 2px; + background: #515253; + padding: 5px; + color: white; + cursor: pointer; + line-height: 10px; + text-align: center; +} +.jvectormap-zoomin { + top: 10px; +} +.jvectormap-zoomout { + top: 30px; +} +/* ======================================================================== + Component: portlets.less + ========================================================================== */ +.porlet-wrapper { + overflow: auto; +} +[data-toggle="portlet"] { + min-height: 30px; +} +[data-toggle="portlet"].portlet-handler, +[data-toggle="portlet"] .portlet-handler { + cursor: move; +} +.portlet.box-placeholder { + padding: 0; +} +/* ======================================================================== + Component: mailbox.less + ========================================================================== */ +.mb-boxes { + height: 0; + overflow: hidden; +} +@media only screen and (min-width: 1200px) { + .mb-boxes { + height: auto !important; + display: block; + } +} +.mb-mails > tbody > tr > td { + border-top-color: transparent; +} +.mb-mails .mb-mail-active { + background-color: #f7f8f9 !important; +} +.mb-mails .mb-mail-avatar { + float: left; + margin-right: 10px; + width: 40px; + height: 40px; + border-radius: 3px; +} +.mb-mails .mb-mail-date { + display: block; + float: right; + color: #b1b2b2; + font-size: 12px; + font-weight: bold; +} +.mb-mails .mb-mail-from { + display: block; + color: #37475d; + font-size: 14px; + font-weight: 600; + line-height: 1; +} +.mb-mails .mb-mail-subject { + color: #37475d; + font-size: 18px; + font-weight: 600; + line-height: 1.8; +} +.mb-mails .mb-mail-preview { + clear: both; + margin-top: 10px; + color: #b1b2b2; +} +.mb-panel > h3 { + font-weight: 600; + margin-top: 0; + font-size: 48px; +} +.mb-panel .mb-panel-form .mb-panel-form-reply { + min-height: 120px; + border-color: transparent; + -webkit-transition: border-color 0.3s ease; + -o-transition: border-color 0.3s ease; + transition: border-color 0.3s ease; +} +.mb-panel .mb-panel-form .mb-panel-form-reply:focus { + border-color: #d1d2d3; +} +/* ======================================================================== + Component: utils.less + ========================================================================== */ +.m { + margin: 10px !important; +} +.ml { + margin-left: 10px !important; +} +.mr { + margin-right: 10px !important; +} +.mt { + margin-top: 10px !important; +} +.mb { + margin-bottom: 10px !important; +} +.m-sm { + margin: 5px !important; +} +.ml-sm { + margin-left: 5px !important; +} +.mr-sm { + margin-right: 5px !important; +} +.mt-sm { + margin-top: 5px !important; +} +.mb-sm { + margin-bottom: 5px !important; +} +.m-lg { + margin: 15px !important; +} +.ml-lg { + margin-left: 15px !important; +} +.mr-lg { + margin-right: 15px !important; +} +.mt-lg { + margin-top: 15px !important; +} +.mb-lg { + margin-bottom: 15px !important; +} +.m-xl { + margin: 30px !important; +} +.ml-xl { + margin-left: 30px !important; +} +.mr-xl { + margin-right: 30px !important; +} +.mt-xl { + margin-top: 30px !important; +} +.mb-xl { + margin-bottom: 30px !important; +} +.mv { + margin-top: 10px !important; + margin-bottom: 10px !important; +} +.mh { + margin-left: 10px !important; + margin-right: 10px !important; +} +.mv-lg { + margin-top: 15px !important; + margin-bottom: 15px !important; +} +.mh-lg { + margin-left: 15px !important; + margin-right: 15px !important; +} +.mv-sm { + margin-top: 5px !important; + margin-bottom: 5px !important; +} +.mh-sm { + margin-left: 5px !important; + margin-right: 5px !important; +} +.m0 { + margin: 0 !important; +} +.ml0 { + margin-left: 0 !important; +} +.mr0 { + margin-right: 0 !important; +} +.mt0 { + margin-top: 0 !important; +} +.mb0 { + margin-bottom: 0 !important; +} +.p { + padding: 10px !important; +} +.pl { + padding-left: 10px !important; +} +.pr { + padding-right: 10px !important; +} +.pt { + padding-top: 10px !important; +} +.pb { + padding-bottom: 10px !important; +} +.p-sm { + padding: 5px !important; +} +.pl-sm { + padding-left: 5px !important; +} +.pr-sm { + padding-right: 5px !important; +} +.pt-sm { + padding-top: 5px !important; +} +.pb-sm { + padding-bottom: 5px !important; +} +.p-lg { + padding: 15px !important; +} +.pl-lg { + padding-left: 15px !important; +} +.pr-lg { + padding-right: 15px !important; +} +.pt-lg { + padding-top: 15px !important; +} +.pb-lg { + padding-bottom: 15px !important; +} +.pv { + padding-top: 10px !important; + padding-bottom: 10px !important; +} +.ph { + padding-left: 10px !important; + padding-right: 10px !important; +} +.pv-lg { + padding-top: 15px !important; + padding-bottom: 15px !important; +} +.ph-lg { + padding-left: 15px !important; + padding-right: 15px !important; +} +.pv-sm { + padding-top: 5px !important; + padding-bottom: 5px !important; +} +.ph-sm { + padding-left: 5px !important; + padding-right: 5px !important; +} +.p0 { + padding: 0 !important; +} +.pl0 { + padding-left: 0 !important; +} +.pr0 { + padding-right: 0 !important; +} +.pt0 { + padding-top: 0 !important; +} +.pb0 { + padding-bottom: 0 !important; +} +.b0 { + border-width: 0 !important; +} +.bl0 { + border-left-width: 0 !important; +} +.br0 { + border-right-width: 0 !important; +} +.bt0 { + border-top-width: 0 !important; +} +.bb0 { + border-bottom-width: 0 !important; +} +.br { + border-right: 1px solid #e1e1e1; +} +.bl { + border-left: 1px solid #e1e1e1; +} +.bt { + border-top: 1px solid #e1e1e1; +} +.bb { + border-bottom: 1px solid #e1e1e1; +} +.b { + border-right: 1px solid #e1e1e1; + border-left: 1px solid #e1e1e1; + border-top: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} +.radius-clear { + border-radius: 0 !important; +} +.shadow-clear { + box-shadow: 0 0 0 #000 !important; +} +.text-white { + color: #fff; +} +.text-inverse { + color: #494d4d; +} +.text-alpha { + color: rgba(255, 255, 255, 0.5); +} +.text-pink { + color: #ff3366; +} +.text-purple { + color: #ac8dd1; +} +.text-dark { + color: #35394b; +} +.text-alpha-inverse { + color: rgba(0, 0, 0, 0.5); +} +.text-green { + color: #01b6ad; +} +.text-gray-darker { + color: #37475d; +} +.text-gray-dark { + color: #89949b; +} +.text-gray { + color: #d1d2d3; +} +.text-gray-light { + color: #e1e1e1; +} +.text-gray-lighter { + color: #fafafa; +} +.text-ellipsis { + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 .2em; + overflow: hidden; +} +.text-sm { + font-size: 11.05px; +} +.text-md { + font-size: 16.9px; +} +.text-lg { + font-size: 39px; +} +.inline { + display: inline-block !important; +} +.block-center { + margin: 0 auto; +} +.bg-primary { + background-color: #0094cb; + color: #ffffff; +} +.bg-success { + background-color: #7bbf62; + color: #ffffff; +} +.bg-info { + background-color: #3babc8; + color: #ffffff; +} +.bg-warning { + background-color: #ff902b; + color: #ffffff; +} +.bg-danger { + background-color: #f35839; + color: #ffffff; +} +.bg-inverse { + background-color: #494d4d; + color: #ffffff; +} +.bg-white { + background-color: #ffffff; + color: inherit; +} +.bg-green { + background-color: #01b6ad; + color: #ffffff; +} +.bg-pink { + background-color: #ff3366; + color: #ffffff; +} +.bg-purple { + background-color: #ac8dd1; + color: #ffffff; +} +.bg-gray-darker { + background-color: #37475d; + color: #ffffff; +} +.bg-gray-dark { + background-color: #89949b; + color: #ffffff; +} +.bg-gray { + background-color: #d1d2d3; + color: #ffffff; +} +.bg-gray-light { + background-color: #e1e1e1; + color: #ffffff; +} +.bg-gray-lighter { + background-color: #fafafa; + color: #ffffff; +} +.thumb8 { + width: 8px; + height: 8px; +} +.thumb16 { + width: 16px; + height: 16px; +} +.thumb32 { + width: 32px; + height: 32px; +} +.thumb48 { + width: 48px; + height: 48px; +} +.thumb64 { + width: 64px; + height: 64px; +} +.thumb96 { + width: 96px; + height: 96px; +} +.thumb128 { + width: 128px; + height: 128px; +} +.align-middle { + vertical-align: middle; +} +.align-top { + vertical-align: top; +} +.align-bottom { + vertical-align: bottom; +} +.bg-center { + background-position: center center; + background-size: cover; +} +.list-icon em { + font-size: 14px; + width: 40px; + vertical-align: middle; + margin: 0; + display: inline-block; + text-align: center; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + line-height: 30px; +} +.list-icon div:hover em { + -webkit-transform: scale(3, 3); + -ms-transform: scale(3, 3); + -o-transform: scale(3, 3); + transform: scale(3, 3); +} +.label-inverse { + color: #494d4d; + border: 1px solid #494d4d; +} +.label-inverse[href]:hover, +.label-inverse[href]:focus { + color: #303333; + border-color: #303333; +} +.label-green { + color: #01b6ad; + border: 1px solid #01b6ad; +} +.label-green[href]:hover, +.label-green[href]:focus { + color: #01837d; + border-color: #01837d; +} +.label-pink { + color: #ff3366; + border: 1px solid #ff3366; +} +.label-pink[href]:hover, +.label-pink[href]:focus { + color: #ff0040; + border-color: #ff0040; +} +.label-purple { + color: #ac8dd1; + border: 1px solid #ac8dd1; +} +.label-purple[href]:hover, +.label-purple[href]:focus { + color: #9269c2; + border-color: #9269c2; +} +@media only screen and (min-width: 992px) { + .discoverer .discover { + opacity: 0; + visibility: hidden; + -webkit-transition: opacity .4s ease 0s, visibility 0s linear 0s; + -o-transition: opacity .4s ease 0s, visibility 0s linear 0s; + transition: opacity .4s ease 0s, visibility 0s linear 0s; + } + .discoverer:hover .discover { + opacity: 1; + visibility: visible; + } +} +/* ======================================================================== + Component: print.less + ========================================================================== */ +@media print { + .sidebar, + .navbar-top, + .offsidebar, + .btn, + .fc-button { + display: none !important; + width: 0 !important; + height: 0 !important; + } + .wrapper, + .wrapper > section, + .main-content { + margin: 0 !important; + /* remove margin used for sidebar and expand the content */ + padding: 0 !important; + width: 100% !important; + } + .main-content { + overflow: hidden !important; + } +} + + diff --git a/backend/app/project/static/app/css/bootstrap.css b/backend/app/project/static/app/css/bootstrap.css new file mode 100644 index 0000000..e480f59 --- /dev/null +++ b/backend/app/project/static/app/css/bootstrap.css @@ -0,0 +1,5621 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +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: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]: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; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +* { + -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: 13px; + line-height: 1.52857143; + color: #515253; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #d7d7d7; + text-decoration: none; +} +a:hover, +a:focus { + color: #393C3C; + 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 { + padding: 2px; + line-height: 1.52857143; + background-color: #e1e2e3; + border: 1px solid #e1e2e3; + border-radius: 3px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 19px; + margin-bottom: 19px; + border: 0; + border-top: 1px solid #fafafa; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +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: #89949b; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 19px; + margin-bottom: 9.5px; +} +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: 9.5px; + margin-bottom: 9.5px; +} +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: 33px; +} +h2, +.h2 { + font-size: 27px; +} +h3, +.h3 { + font-size: 23px; +} +h4, +.h4 { + font-size: 17px; +} +h5, +.h5 { + font-size: 13px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 9.5px; +} +.lead { + margin-bottom: 19px; + font-size: 14px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 19.5px; + } +} +small, +.small { + font-size: 92%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #b1b2b2; +} +.text-primary { + color: #0094cb; +} +a.text-primary:hover { + color: #006f98; +} +.text-success { + color: #60a945; +} +a.text-success:hover { + color: #4b8536; +} +.text-info { + color: #3babc8; +} +a.text-info:hover { + color: #2e8aa2; +} +.text-warning { + color: #ffab5e; +} +a.text-warning:hover { + color: #ff902b; +} +.text-danger { + color: #f68169; +} +a.text-danger:hover { + color: #f35839; +} +.bg-primary { + color: #fff; + background-color: #0094cb; +} +a.bg-primary:hover { + background-color: #006f98; +} +.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: 8.5px; + margin: 38px 0 19px; + border-bottom: 1px solid #fafafa; +} +ul, +ol { + margin-top: 0; + margin-bottom: 9.5px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 19px; +} +dt, +dd { + line-height: 1.52857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #89949b; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 9.5px 19px; + margin: 0 0 19px; + font-size: 16.25px; + border-left: 5px solid #fafafa; +} +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.52857143; + color: #89949b; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #fafafa; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 19px; + font-style: normal; + line-height: 1.52857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; +} +pre { + display: block; + padding: 9px; + margin: 0 0 9.5px; + font-size: 12px; + line-height: 1.52857143; + word-break: break-all; + word-wrap: break-word; + color: #89949b; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #b1b2b2; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 19px; +} +.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.52857143; + vertical-align: top; + border-top: 1px solid #eeeeee; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #eeeeee; +} +.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 #eeeeee; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #eeeeee; +} +.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 #eeeeee; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #fafbfc; +} +.table-hover > tbody > tr:hover { + background-color: #fafbfc; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #fafbfc; +} +.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: #eaeef2; +} +.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; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 14.25px; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #eeeeee; + -webkit-overflow-scrolling: touch; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 19px; + font-size: 19.5px; + line-height: inherit; + color: #89949b; + 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: 8px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; +} +.form-control { + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #b7bac9; +} +.form-control::-webkit-input-placeholder { + color: #b7bac9; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 35px; + line-height: 1.52857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 30px; + line-height: 1.5 \0; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 45px; + line-height: 1.33 \0; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 19px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 8px; + padding-bottom: 8px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 45px; + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 45px; + line-height: 45px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 43.75px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 35px; + height: 35px; + line-height: 35px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 45px; + height: 45px; + line-height: 45px; +} +.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: #60a945; +} +.has-success .form-control { + border-color: #60a945; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #4b8536; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #99ce86; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #99ce86; +} +.has-success .input-group-addon { + color: #60a945; + border-color: #60a945; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #60a945; +} +.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: #ffab5e; +} +.has-warning .form-control { + border-color: #ffab5e; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #ff902b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffe0c4; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffe0c4; +} +.has-warning .input-group-addon { + color: #ffab5e; + border-color: #ffab5e; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #ffab5e; +} +.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: #f68169; +} +.has-error .form-control { + border-color: #f68169; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #f35839; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fcd2c9; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fcd2c9; +} +.has-error .input-group-addon { + color: #f68169; + border-color: #f68169; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #f68169; +} +.has-feedback label ~ .form-control-feedback { + top: 24px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #909293; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 8px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 8px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + 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: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #0094cb; + border-color: #0081b2; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #006f98; + border-color: #005574; +} +.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: #0094cb; + border-color: #0081b2; +} +.btn-primary .badge { + color: #0094cb; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #31ba85; + border-color: #31ba85; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + /* #237052 */ + background-color: #40ad83; + border-color: #31ba8549; +} +.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: #31ba85; + border-color: #31ba85; +} +.btn-success .badge { + color: #31ba85; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #3babc8; + border-color: #339bb6; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #2e8aa2; + border-color: #267387; +} +.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: #3babc8; + border-color: #339bb6; +} +.btn-info .badge { + color: #3babc8; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #ff902b; + border-color: #ff8312; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #f77600; + border-color: #d36500; +} +.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: #ff902b; + border-color: #ff8312; +} +.btn-warning .badge { + color: #ff902b; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #f35839; + border-color: #f24421; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #eb330e; + border-color: #c92c0c; +} +.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: #f35839; + border-color: #f24421; +} +.btn-danger .badge { + color: #f35839; + background-color: #ffffff; +} +.btn-link { + color: #0094cb; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.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: #005c7e; + 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: #e1e1e1; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 13px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid #e1e1e1; + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 8.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.52857143; + color: #5f5f5f; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #7b878f; + background-color: #fafbfc; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0094cb; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #e1e1e1; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.52857143; + color: #e1e1e1; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.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-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + 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: 45px; + line-height: 45px; +} +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: 7px 18px; + font-size: 13px; + font-weight: normal; + line-height: 1; + color: #89949b; + text-align: center; + background-color: #fafafa; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 17px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: transparent; +} +.nav > li.disabled > a { + color: #e1e1e1; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #e1e1e1; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: transparent; + border-color: #0094cb; +} +.nav .nav-divider { + height: 1px; + margin: 8.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.52857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #dddddd #dddddd #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #d1d2d3; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #0094cb; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 60px; + margin-bottom: 19px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 20.5px 15px; + font-size: 17px; + line-height: 19px; + height: 60px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 13px; + margin-bottom: 13px; + 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: 10.25px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 19px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 19px; + } + .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: 20.5px; + padding-bottom: 20.5px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 12.5px; + margin-bottom: 12.5px; +} +@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; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 12.5px; + margin-bottom: 12.5px; +} +.navbar-btn.btn-sm { + margin-top: 15px; + margin-bottom: 15px; +} +.navbar-btn.btn-xs { + margin-top: 19px; + margin-bottom: 19px; +} +.navbar-text { + margin-top: 20.5px; + margin-bottom: 20.5px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #ffffff; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #e6e6e6; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #ffffff; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #dddddd; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #dddddd; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #dddddd; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #ffffff; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #dddddd; + 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: #dddddd; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #ffffff; +} +.navbar-default .navbar-link:hover { + color: #dddddd; +} +.navbar-default .btn-link { + color: #ffffff; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #dddddd; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #e1e1e1; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #e1e1e1; +} +.navbar-inverse .navbar-nav > li > a { + color: #e1e1e1; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #e1e1e1; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #e1e1e1; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #e1e1e1; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 12px 15px; + margin-bottom: 19px; + list-style: none; + background-color: #fafafa; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: ">\00a0"; + padding: 0 5px; + color: #c1c2c3; +} +.breadcrumb > .active { + color: #515253; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 19px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 7px 18px; + line-height: 1.52857143; + text-decoration: none; + color: #515253; + background-color: #ffffff; + border: 1px solid #eeeeee; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #005c7e; + background-color: #fafafa; + border-color: #eeeeee; +} +.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: #ffffff; + background-color: #0094cb; + border-color: #0094cb; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #e1e1e1; + background-color: #ffffff; + border-color: #eeeeee; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 17px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 19px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #eeeeee; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #fafafa; +} +.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: #e1e1e1; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + background-color: #fff; +} +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + color: #e1e1e1; + border: 1px solid #e1e1e1; +} +.label-default[href]:hover, +.label-default[href]:focus { + color: #c8c8c8; + border-color: #c8c8c8; +} +.label-primary { + color: #0094cb; + border: 1px solid #0094cb; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + color: #006f98; + border-color: #006f98; +} +.label-success { + color: #7bbf62; + border: 1px solid #7bbf62; +} +.label-success[href]:hover, +.label-success[href]:focus { + color: #60a945; + border-color: #60a945; +} +.label-info { + color: #3babc8; + border: 1px solid #3babc8; +} +.label-info[href]:hover, +.label-info[href]:focus { + color: #2e8aa2; + border-color: #2e8aa2; +} +.label-warning { + color: #ff902b; + border: 1px solid #ff902b; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + color: #f77600; + border-color: #f77600; +} +.label-danger { + color: #f35839; + border: 1px solid #f35839; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + color: #eb330e; + border-color: #eb330e; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #e1e1e1; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #0094cb; + background-color: #ffffff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #fcfcfc; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 20px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #e3e3e3; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 58.5px; + } +} +.thumbnail { + display: block; + padding: 2px; + margin-bottom: 19px; + line-height: 1.52857143; + background-color: #e1e2e3; + border: 1px solid #e1e2e3; + border-radius: 3px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #0094cb; +} +.thumbnail .caption { + padding: 9px; + color: #515253; +} +.alert { + padding: 8px; + margin-bottom: 19px; + border: 1px solid transparent; + border-radius: 3px; +} +.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: 28px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #7bbf62; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-success hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-success .alert-link { + color: #e6e6e6; +} +.alert-info { + background-color: #3babc8; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-info hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-info .alert-link { + color: #e6e6e6; +} +.alert-warning { + background-color: #ff902b; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-warning hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-warning .alert-link { + color: #e6e6e6; +} +.alert-danger { + background-color: #f35839; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-danger hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-danger .alert-link { + color: #e6e6e6; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 19px; + margin-bottom: 19px; + background-color: #f1f1f1; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 19px; + color: #ffffff; + text-align: center; + background-color: #0094cb; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="0"] { + color: #e1e1e1; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #7bbf62; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #3babc8; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #ff902b; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #f35839; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-object { + display: block; +} +.media-heading { + margin: 0 0 5px; +} +.media > .pull-left { + margin-right: 10px; +} +.media > .pull-right { + margin-left: 10px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #f1f2f3; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #fafbfc; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #fafafa; + color: #e1e1e1; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #e1e1e1; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #0094cb; + border-color: #0094cb; +} +.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: #98e3ff; +} +.list-group-item-success { + color: #60a945; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #60a945; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #60a945; + 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: #60a945; + border-color: #60a945; +} +.list-group-item-info { + color: #3babc8; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #3babc8; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #3babc8; + 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: #3babc8; + border-color: #3babc8; +} +.list-group-item-warning { + color: #ffab5e; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #ffab5e; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #ffab5e; + 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: #ffab5e; + border-color: #ffab5e; +} +.list-group-item-danger { + color: #f68169; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #f68169; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #f68169; + 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: #f68169; + border-color: #f68169; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 19px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 15px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #fafafa; + border-top: 1px solid #eeeeee; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + 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-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child 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 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 { + border-top: 1px solid #eeeeee; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 19px; +} +.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 { + border-top: 1px solid #eeeeee; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #eeeeee; +} +.panel-default { + border-color: #d1d2d3; +} +.panel-default > .panel-heading { + color: #444444; + background-color: #ffffff; + border-color: #d1d2d3; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-default > .panel-heading .badge { + color: #ffffff; + background-color: #444444; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-primary { + border-color: #d1d2d3; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #0094cb; + border-color: #d1d2d3; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-primary > .panel-heading .badge { + color: #0094cb; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-success { + border-color: #d1d2d3; +} +.panel-success > .panel-heading { + color: #ffffff; + background-color: #7bbf62; + border-color: #d1d2d3; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-success > .panel-heading .badge { + color: #7bbf62; + background-color: #ffffff; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-info { + border-color: #d1d2d3; +} +.panel-info > .panel-heading { + color: #ffffff; + background-color: #3babc8; + border-color: #d1d2d3; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-info > .panel-heading .badge { + color: #3babc8; + background-color: #ffffff; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-warning { + border-color: #d1d2d3; +} +.panel-warning > .panel-heading { + color: #ffffff; + background-color: #ff902b; + border-color: #d1d2d3; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-warning > .panel-heading .badge { + color: #ff902b; + background-color: #ffffff; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-danger { + border-color: #d1d2d3; +} +.panel-danger > .panel-heading { + color: #ffffff; + background-color: #f35839; + border-color: #d1d2d3; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-danger > .panel-heading .badge { + color: #f35839; + background-color: #ffffff; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.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 { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #ededed; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 19.5px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.52857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.52857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #222222; + 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: #222222; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #222222; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #222222; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #222222; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #222222; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #ffffff; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid #e1e1e1; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 13px; + font-weight: normal; + line-height: 18px; + background-color: #ffffff; + border-bottom: 1px solid #f2f2f2; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: #e1e1e1; + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: #e1e1e1; +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: #e1e1e1; + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: #e1e1e1; +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + 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; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -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 { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !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; + } +} diff --git a/backend/app/project/static/app/css/common.css b/backend/app/project/static/app/css/common.css new file mode 100644 index 0000000..2171acf --- /dev/null +++ b/backend/app/project/static/app/css/common.css @@ -0,0 +1,500 @@ +/** + * + * Wintermin - Bootstrap Admin Theme - Page Common Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + Component: bootstrap-reset.less + ========================================================================== */ +a { + outline: none !important; +} +hr { + border-top: 1px solid #e1e1e1; +} +.row::-webkit-scrollbar { + display: none; +} +.page-header { + border-bottom-color: #e1e1e1; +} +.panel { + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.panel .panel-heading { + border-bottom: 0; + font-size: 14px; +} +.panel .panel-heading a { + text-decoration: none !important; +} +.panel.panel-default .panel-heading { + position: relative; +} +.panel.panel-default .panel-heading:after { + content: ""; + position: absolute; + bottom: 0; + left: 12px; + right: 15px; + height: 1px; + background-color: #f1f2f3; +} +.well { + border: 1px solid #d1d2d3; +} +.jumbotron { + border: 1px solid #d1d2d3; +} +.nav-tabs > li > a { + font-weight: bold; + color: #515253; + background-color: #fafafa; + margin: 0; + border: 1px solid #d1d2d3; + border-radius: 0; + padding: 10px 20px; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: inherit; + border-bottom-color: #fff; +} +.tab-content { + padding: 10px 20px 0px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color: #d1d2d3; +} +.nav-pills + .tab-content { + border: 0; + padding: 0; +} + +.btn { + border-radius: 3px; + font-size: 13px; + border-color: transparent; + -webkit-appearance: none; + outline: none !important; + -webkit-transition: all 0.1s; + -o-transition: all 0.1s; + transition: all 0.1s; +} +.btn.btn-link { + box-shadow: none; + border: 0; +} +.btn.btn-default { + border-color: #ccc; +} +.form-control, +.input-group-addon { + border-color: #dbd9d9; +} +.form-control { + box-shadow: 0 0 0 #000 !important; +} +.input-group-addon { + background-color: #f8f9fb; +} +.input-sm, +select.input-sm { + height: 31px; +} +fieldset { + padding-bottom: 20px; + border-bottom: 1px dashed #eee; + margin-bottom: 20px; +} +fieldset.last-child, +fieldset:last-child { + border-bottom: 0; +} +fieldset .form-group { + margin-bottom: 0; +} +.table > thead > tr > th { + border-bottom-width: 1px; +} +.table > tbody + tbody { + border-bottom-width: 1px; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.progress { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; + border-radius: 3px; + border: 1px solid #f1f1f1; + background-color: #fff; +} +.progress .progress-bar { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; +} +.popover { + box-shadow: 0 0 0 #000; + border-color: #eee; + border-bottom: 2px solid #e1e1e1; + border-radius: 3px; +} +.popover .popover-title { + border: 0; +} +.nav.nav-pills > li > a { + font-weight: 600; + color: #89949b; + margin: 5px 0; + -webkit-transition: background-color 0.3s ease; + -o-transition: background-color 0.3s ease; + transition: background-color 0.3s ease; +} +.nav.nav-pills > li > a:hover, +.nav.nav-pills > li > a:focus { + background-color: #e9eeef; +} +.nav.nav-pills > li.active > a { + color: #fff; + background-color: #0094cb !important; +} +.dropdown-menu { + border-radius: 3px; +} +.dropdown-header { + color: #a1a2a3; +} +.navbar-top .navbar-nav > .active > a { + color: #999; +} +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .active > a:focus { + color: #d1d2d3; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #666; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, +.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #222; +} +.carousel .carousel-indicators { + bottom: 0; +} +.carousel .carousel-control.left, +.carousel .carousel-control.right { + background-image: none; +} +.carousel .carousel-control em { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} +/* ======================================================================== + Component: button-extra.less + ========================================================================== */ +.btn-inverse { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse.focus, +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + color: #ffffff; + background-color: #303333; + border-color: #2b2e2e; +} +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled, +.btn-inverse[disabled], +fieldset[disabled] .btn-inverse, +.btn-inverse.disabled:hover, +.btn-inverse[disabled]:hover, +fieldset[disabled] .btn-inverse:hover, +.btn-inverse.disabled:focus, +.btn-inverse[disabled]:focus, +fieldset[disabled] .btn-inverse:focus, +.btn-inverse.disabled.focus, +.btn-inverse[disabled].focus, +fieldset[disabled] .btn-inverse.focus, +.btn-inverse.disabled:active, +.btn-inverse[disabled]:active, +fieldset[disabled] .btn-inverse:active, +.btn-inverse.disabled.active, +.btn-inverse[disabled].active, +fieldset[disabled] .btn-inverse.active { + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse .badge { + color: #494d4d; + background-color: #ffffff; +} +.btn-green { + color: #ffffff; + background-color: #01b6ad; + border-color: transparent; +} +.btn-green:hover, +.btn-green:focus, +.btn-green.focus, +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + color: #ffffff; + background-color: #01837d; + border-color: rgba(0, 0, 0, 0); +} +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + background-image: none; +} +.btn-green.disabled, +.btn-green[disabled], +fieldset[disabled] .btn-green, +.btn-green.disabled:hover, +.btn-green[disabled]:hover, +fieldset[disabled] .btn-green:hover, +.btn-green.disabled:focus, +.btn-green[disabled]:focus, +fieldset[disabled] .btn-green:focus, +.btn-green.disabled.focus, +.btn-green[disabled].focus, +fieldset[disabled] .btn-green.focus, +.btn-green.disabled:active, +.btn-green[disabled]:active, +fieldset[disabled] .btn-green:active, +.btn-green.disabled.active, +.btn-green[disabled].active, +fieldset[disabled] .btn-green.active { + background-color: #01b6ad; + border-color: transparent; +} +.btn-green .badge { + color: #01b6ad; + background-color: #ffffff; +} +.btn-purple { + color: #ffffff; + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple:hover, +.btn-purple:focus, +.btn-purple.focus, +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + color: #ffffff; + background-color: #9269c2; + border-color: rgba(0, 0, 0, 0); +} +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + background-image: none; +} +.btn-purple.disabled, +.btn-purple[disabled], +fieldset[disabled] .btn-purple, +.btn-purple.disabled:hover, +.btn-purple[disabled]:hover, +fieldset[disabled] .btn-purple:hover, +.btn-purple.disabled:focus, +.btn-purple[disabled]:focus, +fieldset[disabled] .btn-purple:focus, +.btn-purple.disabled.focus, +.btn-purple[disabled].focus, +fieldset[disabled] .btn-purple.focus, +.btn-purple.disabled:active, +.btn-purple[disabled]:active, +fieldset[disabled] .btn-purple:active, +.btn-purple.disabled.active, +.btn-purple[disabled].active, +fieldset[disabled] .btn-purple.active { + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.btn-pink { + color: #ffffff; + background-color: #ff3366; + border-color: transparent; +} +.btn-pink:hover, +.btn-pink:focus, +.btn-pink.focus, +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + color: #ffffff; + background-color: #ff0040; + border-color: rgba(0, 0, 0, 0); +} +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + background-image: none; +} +.btn-pink.disabled, +.btn-pink[disabled], +fieldset[disabled] .btn-pink, +.btn-pink.disabled:hover, +.btn-pink[disabled]:hover, +fieldset[disabled] .btn-pink:hover, +.btn-pink.disabled:focus, +.btn-pink[disabled]:focus, +fieldset[disabled] .btn-pink:focus, +.btn-pink.disabled.focus, +.btn-pink[disabled].focus, +fieldset[disabled] .btn-pink.focus, +.btn-pink.disabled:active, +.btn-pink[disabled]:active, +fieldset[disabled] .btn-pink:active, +.btn-pink.disabled.active, +.btn-pink[disabled].active, +fieldset[disabled] .btn-pink.active { + background-color: #ff3366; + border-color: transparent; +} +.btn-pink .badge { + color: #ff3366; + background-color: #ffffff; +} +.btn-outline { + background-color: transparent; + border-color: #fff; +} +.btn-outline:hover, +.btn-outline:focus { + background-color: #fff; + color: #0094cb; +} +.btn-flat { + border-bottom-width: 1px; + border-radius: 0; + box-shadow: 0 0 0 #000; +} +.btn-xl { + padding: 20px 16px; + font-size: 18px; +} +.btn-square { + border-radius: 0; +} +.btn-pill-left, +.btn-oval { + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + padding-left: 18px; +} +.btn-pill-right, +.btn-oval { + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + padding-right: 18px; +} +.btn-labeled { + padding-top: 0; + padding-bottom: 0; +} +.btn-label { + position: relative; + background: transparent; + background: rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 7px 18px; + left: -18px; + border-radius: 3px 0 0 3px; +} +.btn-label.btn-label-right { + left: auto; + right: -18px; + border-radius: 0 3px 3px 0; +} +.btn-lg .btn-label { + padding: 10px 16px; + left: -16px; + border-radius: 5px 0 0 5px; +} +.btn-lg .btn-label.btn-label-right { + left: auto; + right: -16px; + border-radius: 0 5px 5px 0; +} +.btn-sm .btn-label { + padding: 5px 10px; + left: -10px; + border-radius: 2px 0 0 2px; +} +.btn-sm .btn-label.btn-label-right { + left: auto; + right: -10px; + border-radius: 0 2px 2px 0; +} +.btn-xs .btn-label { + padding: 1px 5px; + left: -5px; + border-radius: 2px 0 0 2px; +} +.btn-xs .btn-label.btn-label-right { + left: auto; + right: -5px; + border-radius: 0 2px 2px 0; +} +.btn-fw { + min-width: 80px; +} +.btn-fw.btn-sm { + min-width: 40px; +} +.btn-fw.btn-md { + min-width: 60px; +} +.btn-fw.btn-lg { + min-width: 140px; +} +body { + min-height: 400px; +} +@media only screen and (min-width: 768px) { + html, + body { + height: 100%; + } +} +.page-wrapper { + height: 100%; + padding: 50px 0; + background-color: #e8ebec; +} + +.login_btn_submit { + width: 100%; +} \ No newline at end of file diff --git a/backend/app/project/static/app/css/global.css b/backend/app/project/static/app/css/global.css new file mode 100644 index 0000000..763a212 --- /dev/null +++ b/backend/app/project/static/app/css/global.css @@ -0,0 +1,28 @@ +.mainbtn { + background-color: rgba(0, 0, 0, 0); + color: #31ba85; + border-radius: 5px; + border: #31ba85 1px solid; + outline: none !important; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + display: inline-block; + } + .mainbtn:hover{ + background-color: #31ba85; + color: white ; + text-decoration: none; + } + .opbtn{ + background-color: #31ba85; + border: #31ba85 1px solid; + color: white; + border-radius: 2px; +} + .container{ + text-align: center; + width: 100%; + height: max-content; +} + diff --git a/backend/app/project/static/app/css/landing_ori.css b/backend/app/project/static/app/css/landing_ori.css new file mode 100644 index 0000000..f815bfd --- /dev/null +++ b/backend/app/project/static/app/css/landing_ori.css @@ -0,0 +1,212 @@ +/** + * + * Wintermin - Bootstrap Admin Theme - Landing Page Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + +[Table of contents] + +1. Body +2. Header + 2.1 Logo / .logo-wrapper + 2.2 Header content / .header-content +3 Clients / #clients +4 Testimonials / #testimonials +5 Call to action / #callout +6 List of Features / .feature-list +7 Footers + 7.1 Top footer / .footer-1 + 7.2 Bottom footer / .footer-2 + + ========================================================================== */ +body { + background-color: #f1f2f3; + font-size: 16px; + line-height: 1.6; +} +body > section, +body > footer { + font-size: 14px; + padding: 80px 0; +} +header { + min-height: 100%; + padding-bottom: 60px; + text-align: center; + background-image: url('../img/landing/background.jpg'); + background-repeat: no-repeat; + background-color: #fff; + background-attachment: fixed; +} +header > .container { + min-height: 100%; +} +header nav { + padding: 40px 0 20px; +} +header .app-logo, +header .menuapp-buttons { + font-size: 14px; + margin-bottom: 30px; +} +header .app-logo a, +header .menuapp-buttons a { + text-decoration: none !important; +} +@media only screen and (min-width: 992px) { + header { + background-size: 100% 100%; + padding-bottom: 0; + } + header .app-logo { + text-align: left; + margin-bottom: 0; + } + header .menuapp-buttons { + text-align: right; + } +} +.header-content { + height: 80%; + color: #fff; +} +.header-content .row-table, +.header-content .row-table > [class*="col-"] { + display: block; +} +.header-content .header-title { + font-size: 35px; + line-height: 1.2; +} +.header-content .header-subtitle { + font-size: 18px; +} +.header-content .header-button { + margin: 60px 0; +} +@media only screen and (min-width: 992px) { + .header-content { + color: #888; + } + .header-content .header-title { + font-size: 55px; + } + .header-content .row-table { + display: table; + } + .header-content .row-table > [class*="col-"] { + display: table-cell; + } + .header-content .app-presentation { + margin-right: -12%; + } + .header-content .side-presentation { + text-align: left; + padding-left: 15%; + } +} +.logo-wrapper { + display: inline-block; + height: auto; + margin-top: -15px; +} +.store-list { + margin: 20px 0; +} +.store-list > li { + max-width: 140px; + padding-left: 0; +} +.section-header { + text-align: center; + margin-bottom: 80px; +} +#clients img { + display: block; + margin: 0 auto; + margin-bottom: 20px; +} +#testimonial .carousel { + min-height: 200px; +} +#testimonial .carousel .item { + text-align: center; + margin: 0 auto; +} +#testimonial .carousel .item > .row { + margin-bottom: 50px; +} +#testimonial .carousel .item h4 { + font-weight: normal; + font-style: italic; + line-height: 1.4; +} +#callout { + background-image: url('../img/landing/callout.jpg'); + background-repeat: no-repeat; + background-color: #fff; + background-attachment: fixed; +} +@media only screen and (min-width: 992px) { + #callout { + background-size: 100% auto; + } +} +.feature-list { + list-style-type: none; + margin: 0; + padding: 0; +} +.feature-list > li { + margin-bottom: 30px; +} +.feature-list > li:last-child { + margin-bottom: 0; +} +@media only screen and (min-width: 992px) { + .feature-list > li { + margin-bottom: 70px; + } +} +.feature-list .point { + margin-bottom: 1px; +} +.footer-1 form > h5, +.footer-1 nav > h5 { + color: #fff; + font-size: 14px; + font-weight: bold; +} +.footer-1 nav > ul > li > a { + color: #989898; +} +.footer-1 nav > ul > li > a:hover, +.footer-1 nav > ul > li > a:focus { + color: #fff; + text-decoration: none; +} +.footer-2 { + padding-top: 0 !important; + padding-bottom: 30px; + background-color: #333; + text-align: center; +} +.footer-2 a { + color: #989898; +} +.footer-2 p { + margin: 0; +} +.footer-2 [class*="col-"] { + padding-top: 30px; +} +@media only screen and (min-width: 992px) { + .footer-2 { + text-align: left; + } +} diff --git a/backend/app/project/static/app/css/views/billing/me.css b/backend/app/project/static/app/css/views/billing/me.css new file mode 100644 index 0000000..69ded55 --- /dev/null +++ b/backend/app/project/static/app/css/views/billing/me.css @@ -0,0 +1,176 @@ +.select-box { + display: flex; + width: 400px; + flex-direction: column; + } + + .select-box .options-container { + background: #2f3640; + color: #f5f6fa; + max-height: 0; + width: 100%; + opacity: 0; + transition: all 0.4s; + border-radius: 8px; + overflow: hidden; + + order: 1; + } + + .selected { + background: #2f3640; + border-radius: 8px; + margin-bottom: 8px; + color: #f5f6fa; + position: relative; + + order: 0; + } + + .selected::after { + content: ""; + background: url("img/arrow-down.svg"); + background-size: contain; + background-repeat: no-repeat; + + position: absolute; + height: 100%; + width: 32px; + right: 10px; + top: 5px; + + transition: all 0.4s; + } + + .select-box .options-container.active { + max-height: 240px; + opacity: 1; + overflow-y: scroll; + } + + .select-box .options-container.active + .selected::after { + transform: rotateX(180deg); + top: -6px; + } + + .select-box .options-container::-webkit-scrollbar { + width: 8px; + background: #0d141f; + border-radius: 0 8px 8px 0; + } + + .select-box .options-container::-webkit-scrollbar-thumb { + background: #525861; + border-radius: 0 8px 8px 0; + } + + .select-box .option, + .selected { + padding: 12px 24px; + cursor: pointer; + } + + .select-box .option:hover { + background: #414b57; + } + + .select-box label { + cursor: pointer; + } + + .select-box .option .radio { + display: none; + } + + + + /* 아래부터는 html에 있던 css 갖고온거임 */ + + +/* .btn_group button{ + border: 1px solid #31ba85; + background-color: rgba(0,0,0,0); + color: #31ba85; + padding: 5px 10px; + outline: none; + } */ + /* .btn_group button:hover{ + color: white; + background-color: #31ba85; + } */ + #groupbtn1{ + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + margin-right:-4px; + } + #groupbtn2{ + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + margin-left:-1px; + } + .tabContainer{ + width: 100%; + height: 100%; + } + .tabContainer .btn_group { + height: 15%; + font-size: 12px; + } + .tabContainer .btn_group button { + width: 100px; + float: left; + border: 1px solid #31ba85; + outline: none; + cursor:pointer; + padding: 5px 15px; + + background-color: white; + color: #31ba85; + /* font-size: larger; */ + } + .tabContainer .btn_group button:hover { + background-color: #31ba85; + color: white; + } + .tabContainer .tabPanel{ + height: 85%; + background-color: white; + text-align: start; + padding-top: 105px; + box-sizing: border-box; + display: none; + padding-inline-start: 5px; + } + .cbox-dropdown { + width: 400px; + } + .cbox-dropdown:hover .cbox-dropdown-list { + opacity: 1; + visibility: visible; + } + .cbox-dropdown-select { + padding: 10px; + border-radius: 4px; + width: 100%; + display: inline-flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list { + top: 110%; + left: 0%; + right: 0%; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s linear, visibility 0.2s linear; + border-radius: 4px; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list-item { + padding: 1px; + + } \ No newline at end of file diff --git a/backend/app/project/static/app/css/views/cloud/add.css b/backend/app/project/static/app/css/views/cloud/add.css new file mode 100644 index 0000000..53c5fb7 --- /dev/null +++ b/backend/app/project/static/app/css/views/cloud/add.css @@ -0,0 +1,69 @@ + + #option{ + color: black; + font-size: 30px; + font-weight: 600; + font-style: italic; + } + #option_detail{ + color: #8f8f8f; + } + label { + display: inline; + font-weight: lighter; + } + + input,label { + margin: 5px; + } + + .textbox { + position: relative; + width: 100%; + } + .textbox label { + position: absolute; + top: 1px; /* input 요소의 border-top 설정값 만큼 */ + left: 1px; /* input 요소의 border-left 설정값 만큼 */ + padding: .8em .5em; /* input 요소의 padding 값 만큼 */ + color: #999; + cursor: text; + } + .textbox input[type="text"]{ + width: 100%; + height: auto; + line-height : normal; + padding: .8em .5em; + border: 1px solid #999; + border-radius: 0; + border-radius: 5px; + } + + + + .box-placeholder { + background-color: white; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); + transition: 0.3s; + border-radius: 10px; + border: none; + } + .box-placeholder:hover{ + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); + background-color: rgba(214, 214, 214, 0.342); + color: white; + } + .box-placeholder.selected{ + background-color: rgba(214, 214, 214, 0.342); + } + + #nonebox { + box-shadow: none; + } + #nonebox:hover { + background-color:white; + box-shadow: none; + } + + + diff --git a/backend/app/project/static/app/css/views/cloud/detail.css b/backend/app/project/static/app/css/views/cloud/detail.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/cloud/list.css b/backend/app/project/static/app/css/views/cloud/list.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/dashboard.css b/backend/app/project/static/app/css/views/dashboard.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/default.css b/backend/app/project/static/app/css/views/default.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/landing.css b/backend/app/project/static/app/css/views/landing.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/priceview.css b/backend/app/project/static/app/css/views/priceview.css new file mode 100644 index 0000000..e3e6188 --- /dev/null +++ b/backend/app/project/static/app/css/views/priceview.css @@ -0,0 +1,175 @@ +.select-box { + display: flex; + width: 400px; + flex-direction: column; + } + + .select-box .options-container { + background: #2f3640; + color: #f5f6fa; + max-height: 0; + width: 100%; + opacity: 0; + transition: all 0.4s; + border-radius: 8px; + overflow: hidden; + + order: 1; + } + + .selected { + background: #2f3640; + border-radius: 8px; + margin-bottom: 8px; + color: #f5f6fa; + position: relative; + + order: 0; + } + + .selected::after { + content: ""; + background: url("img/arrow-down.svg"); + background-size: contain; + background-repeat: no-repeat; + + position: absolute; + height: 100%; + width: 32px; + right: 10px; + top: 5px; + + transition: all 0.4s; + } + + .select-box .options-container.active { + max-height: 240px; + opacity: 1; + overflow-y: scroll; + } + + .select-box .options-container.active + .selected::after { + transform: rotateX(180deg); + top: -6px; + } + + .select-box .options-container::-webkit-scrollbar { + width: 8px; + background: #0d141f; + border-radius: 0 8px 8px 0; + } + + .select-box .options-container::-webkit-scrollbar-thumb { + background: #525861; + border-radius: 0 8px 8px 0; + } + + .select-box .option, + .selected { + padding: 12px 24px; + cursor: pointer; + } + + .select-box .option:hover { + background: #414b57; + } + + .select-box label { + cursor: pointer; + } + + .select-box .option .radio { + display: none; + } + + + + /* 아래부터는 html에 있던 css 갖고온거임 */ + + +/* .btn_group button{ + border: 1px solid #31ba85; + background-color: rgba(0,0,0,0); + color: #31ba85; + padding: 5px 10px; + outline: none; + } */ + /* .btn_group button:hover{ + color: white; + background-color: #31ba85; + } */ + #groupbtn1{ + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + margin-right:-4px; + } + #groupbtn2{ + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + margin-left:-1px; + } + .tabContainer{ + width: 100%; + height: 100%; + } + .tabContainer .btn_group { + height: 15%; + } + .tabContainer .btn_group button { + width: 100px; + float: left; + border: 1px solid #31ba85; + outline: none; + cursor:pointer; + padding: 5px 15px; + + background-color: white; + color: #31ba85; + /* font-size: larger; */ + } + .tabContainer .btn_group button:hover { + background-color: #31ba85; + color: white; + } + .tabContainer .tabPanel{ + height: 85%; + background-color: white; + text-align: start; + padding-top: 105px; + box-sizing: border-box; + display: none; + padding-inline-start: 5px; + } + .cbox-dropdown { + width: 400px; + } + .cbox-dropdown:hover .cbox-dropdown-list { + opacity: 1; + visibility: visible; + } + .cbox-dropdown-select { + padding: 10px; + border-radius: 4px; + width: 100%; + display: inline-flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list { + top: 110%; + left: 0%; + right: 0%; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s linear, visibility 0.2s linear; + border-radius: 4px; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list-item { + padding: 1px; + + } \ No newline at end of file diff --git a/backend/app/project/static/app/css/views/security/add.css b/backend/app/project/static/app/css/views/security/add.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/security/detail.css b/backend/app/project/static/app/css/views/security/detail.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/security/edit.css b/backend/app/project/static/app/css/views/security/edit.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/views/security/list.css b/backend/app/project/static/app/css/views/security/list.css new file mode 100644 index 0000000..83c89a3 --- /dev/null +++ b/backend/app/project/static/app/css/views/security/list.css @@ -0,0 +1 @@ +[data-href] { cursor: pointer; } diff --git a/backend/app/project/static/app/css/views/setting.css b/backend/app/project/static/app/css/views/setting.css new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/css/wintermin-theme-a.css b/backend/app/project/static/app/css/wintermin-theme-a.css new file mode 100644 index 0000000..0efc5f4 --- /dev/null +++ b/backend/app/project/static/app/css/wintermin-theme-a.css @@ -0,0 +1,150 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #f5f7fa; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top { + background-color: #fff; +} +.navbar-top .navbar-header { + background-color: transparent; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-header { + background-image: none; + } +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #43c1c2; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #277778; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #ffffff; +} +.navbar-top .nav-wrapper { + background-color: #43c1c2; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #43c1c2; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #ffffff; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #277778; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #ffffff; + border-right-color: #cccccc; +} +.sidebar .nav-heading { + color: #919293; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #919293; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #919293; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #666666; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: inherits; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #fcfcfc; + color: #666666; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #43c1c2; +} +.sidebar .nav .nav { + background-color: #ffffff; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #666666; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: rgba(0, 0, 0, 0.25); +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #666666; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #43c1c2; + background-color: #43c1c2; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #cccccc; + background-color: #ffffff; + color: #515253; +} diff --git a/backend/app/project/static/app/css/wintermin-theme-b.css b/backend/app/project/static/app/css/wintermin-theme-b.css new file mode 100644 index 0000000..0be6db9 --- /dev/null +++ b/backend/app/project/static/app/css/wintermin-theme-b.css @@ -0,0 +1,140 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #3db1d7; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #e1e2e3; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #ffffff; + } + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:focus, + .navbar-top .navbar-nav > li > a:focus { + box-shadow: 0 -3px 0 #3db1d7 inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #888888; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #666666; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #888888; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover { + color: #7b7b7b; + } + .nav-wrapper { + background-color: #ffffff; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #2e3b42; + border-right-color: #050505; +} +.sidebar .nav-heading { + color: #b1b2b3; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #b1b2b3; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #b1b2b3; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #ffffff; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #b1b2b3; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #2c383f; + color: #ffffff; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #ffffff; +} +.sidebar .nav .nav { + background-color: #2e3b42; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #ffffff; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #b1b2b3; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #ffffff; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #ffffff; + background-color: #ffffff; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #050505; + background-color: #2e3b42; + color: #eeeeee; +} +.offsidebar .text-muted { + color: #ddd; +} diff --git a/backend/app/project/static/app/css/wintermin-theme-c.css b/backend/app/project/static/app/css/wintermin-theme-c.css new file mode 100644 index 0000000..d410324 --- /dev/null +++ b/backend/app/project/static/app/css/wintermin-theme-c.css @@ -0,0 +1,141 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #e25e45; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #fff; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #373c38; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #aaaaaa; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #ffffff; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #aaaaaa; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #ffffff; + } + .nav-wrapper { + background-color: #373c38; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #373c38; + border-right-color: #060606; +} +.sidebar .nav-heading { + color: #b1b2b3; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #b1b2b3; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #b1b2b3; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #ffffff; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #b1b2b3; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #353936; + color: #ffffff; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #e25e45; +} +.sidebar .nav .nav { + background-color: #373c38; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #ffffff; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #b1b2b3; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #ffffff; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #e25e45; + background-color: #e25e45; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #060606; + background-color: #373c38; + color: #f1f2f3; +} +.offsidebar .text-muted { + color: #ccc; +} diff --git a/backend/app/project/static/app/css/wintermin-theme-d.css b/backend/app/project/static/app/css/wintermin-theme-d.css new file mode 100644 index 0000000..32b92c1 --- /dev/null +++ b/backend/app/project/static/app/css/wintermin-theme-d.css @@ -0,0 +1,144 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #4d4645; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #fff; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #4d4645; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #cccccc; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #ffffff; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #cccccc; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #ffffff; + } + .nav-wrapper { + background-color: #4d4645; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #ffffff; + border-right-color: #cccccc; +} +.sidebar .nav-heading { + color: #909090; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #909090; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #909090; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #808080; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #909090; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #fafafa; + color: #808080; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #6dce9b; +} +.sidebar .nav .nav { + background-color: #ffffff; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #808080; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #909090; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #808080; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #6dce9b; + background-color: #6dce9b; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #2e2e2e; + background-color: #665d5c; + color: #f1f2f3; +} +.offsidebar a { + color: #f1f2f3; +} +.offsidebar .text-muted { + color: #d1d2d3; +} diff --git a/backend/app/project/static/app/img/background.jpg b/backend/app/project/static/app/img/background.jpg new file mode 100644 index 0000000..86fdafb Binary files /dev/null and b/backend/app/project/static/app/img/background.jpg differ diff --git a/backend/app/project/static/app/img/bg1.jpg b/backend/app/project/static/app/img/bg1.jpg new file mode 100644 index 0000000..6a54e69 Binary files /dev/null and b/backend/app/project/static/app/img/bg1.jpg differ diff --git a/backend/app/project/static/app/img/bg10.jpg b/backend/app/project/static/app/img/bg10.jpg new file mode 100644 index 0000000..0fccc05 Binary files /dev/null and b/backend/app/project/static/app/img/bg10.jpg differ diff --git a/backend/app/project/static/app/img/bg2.jpg b/backend/app/project/static/app/img/bg2.jpg new file mode 100644 index 0000000..38e9845 Binary files /dev/null and b/backend/app/project/static/app/img/bg2.jpg differ diff --git a/backend/app/project/static/app/img/bg3.jpg b/backend/app/project/static/app/img/bg3.jpg new file mode 100644 index 0000000..849e105 Binary files /dev/null and b/backend/app/project/static/app/img/bg3.jpg differ diff --git a/backend/app/project/static/app/img/bg4.jpg b/backend/app/project/static/app/img/bg4.jpg new file mode 100644 index 0000000..9d22605 Binary files /dev/null and b/backend/app/project/static/app/img/bg4.jpg differ diff --git a/backend/app/project/static/app/img/bg5.jpg b/backend/app/project/static/app/img/bg5.jpg new file mode 100644 index 0000000..88b6a4a Binary files /dev/null and b/backend/app/project/static/app/img/bg5.jpg differ diff --git a/backend/app/project/static/app/img/bg6.jpg b/backend/app/project/static/app/img/bg6.jpg new file mode 100644 index 0000000..0aa0cb2 Binary files /dev/null and b/backend/app/project/static/app/img/bg6.jpg differ diff --git a/backend/app/project/static/app/img/bg7.jpg b/backend/app/project/static/app/img/bg7.jpg new file mode 100644 index 0000000..3e793eb Binary files /dev/null and b/backend/app/project/static/app/img/bg7.jpg differ diff --git a/backend/app/project/static/app/img/bg8.jpg b/backend/app/project/static/app/img/bg8.jpg new file mode 100644 index 0000000..76cb84d Binary files /dev/null and b/backend/app/project/static/app/img/bg8.jpg differ diff --git a/backend/app/project/static/app/img/bg9.jpg b/backend/app/project/static/app/img/bg9.jpg new file mode 100644 index 0000000..18702a1 Binary files /dev/null and b/backend/app/project/static/app/img/bg9.jpg differ diff --git a/backend/app/project/static/app/img/billing.png b/backend/app/project/static/app/img/billing.png new file mode 100644 index 0000000..5541141 Binary files /dev/null and b/backend/app/project/static/app/img/billing.png differ diff --git a/backend/app/project/static/app/img/blackcloudlogo.png b/backend/app/project/static/app/img/blackcloudlogo.png new file mode 100644 index 0000000..0634f41 Binary files /dev/null and b/backend/app/project/static/app/img/blackcloudlogo.png differ diff --git a/backend/app/project/static/app/img/cloudlogo.png b/backend/app/project/static/app/img/cloudlogo.png new file mode 100644 index 0000000..2c5d450 Binary files /dev/null and b/backend/app/project/static/app/img/cloudlogo.png differ diff --git a/backend/app/project/static/app/img/dashboard.png b/backend/app/project/static/app/img/dashboard.png new file mode 100644 index 0000000..4a703f3 Binary files /dev/null and b/backend/app/project/static/app/img/dashboard.png differ diff --git a/backend/app/project/static/app/img/dummy.png b/backend/app/project/static/app/img/dummy.png new file mode 100644 index 0000000..a22f407 Binary files /dev/null and b/backend/app/project/static/app/img/dummy.png differ diff --git a/backend/app/project/static/app/img/landing/app-chart.png b/backend/app/project/static/app/img/landing/app-chart.png new file mode 100644 index 0000000..444f8f5 Binary files /dev/null and b/backend/app/project/static/app/img/landing/app-chart.png differ diff --git a/backend/app/project/static/app/img/landing/app-mobile.png b/backend/app/project/static/app/img/landing/app-mobile.png new file mode 100644 index 0000000..9b84d43 Binary files /dev/null and b/backend/app/project/static/app/img/landing/app-mobile.png differ diff --git a/backend/app/project/static/app/img/landing/app-multi.png b/backend/app/project/static/app/img/landing/app-multi.png new file mode 100644 index 0000000..69c95d9 Binary files /dev/null and b/backend/app/project/static/app/img/landing/app-multi.png differ diff --git a/backend/app/project/static/app/img/landing/app-widget.png b/backend/app/project/static/app/img/landing/app-widget.png new file mode 100644 index 0000000..e20b79e Binary files /dev/null and b/backend/app/project/static/app/img/landing/app-widget.png differ diff --git a/backend/app/project/static/app/img/landing/background.jpg b/backend/app/project/static/app/img/landing/background.jpg new file mode 100644 index 0000000..4f5ebcf Binary files /dev/null and b/backend/app/project/static/app/img/landing/background.jpg differ diff --git a/backend/app/project/static/app/img/landing/callout.jpg b/backend/app/project/static/app/img/landing/callout.jpg new file mode 100644 index 0000000..919177c Binary files /dev/null and b/backend/app/project/static/app/img/landing/callout.jpg differ diff --git a/backend/app/project/static/app/img/landing/clients/bootstrap.png b/backend/app/project/static/app/img/landing/clients/bootstrap.png new file mode 100644 index 0000000..a6a53ee Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/bootstrap.png differ diff --git a/backend/app/project/static/app/img/landing/clients/client-logos.psd b/backend/app/project/static/app/img/landing/clients/client-logos.psd new file mode 100644 index 0000000..d2a709f Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/client-logos.psd differ diff --git a/backend/app/project/static/app/img/landing/clients/gulp.png b/backend/app/project/static/app/img/landing/clients/gulp.png new file mode 100644 index 0000000..09c273e Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/gulp.png differ diff --git a/backend/app/project/static/app/img/landing/clients/jade.png b/backend/app/project/static/app/img/landing/clients/jade.png new file mode 100644 index 0000000..39977d1 Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/jade.png differ diff --git a/backend/app/project/static/app/img/landing/clients/jquery.png b/backend/app/project/static/app/img/landing/clients/jquery.png new file mode 100644 index 0000000..88edfb1 Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/jquery.png differ diff --git a/backend/app/project/static/app/img/landing/clients/less.png b/backend/app/project/static/app/img/landing/clients/less.png new file mode 100644 index 0000000..9739c7a Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/less.png differ diff --git a/backend/app/project/static/app/img/landing/clients/node.png b/backend/app/project/static/app/img/landing/clients/node.png new file mode 100644 index 0000000..3bcfe80 Binary files /dev/null and b/backend/app/project/static/app/img/landing/clients/node.png differ diff --git a/backend/app/project/static/app/img/landing/iphone.png b/backend/app/project/static/app/img/landing/iphone.png new file mode 100644 index 0000000..56fb890 Binary files /dev/null and b/backend/app/project/static/app/img/landing/iphone.png differ diff --git a/backend/app/project/static/app/img/landing/server1.jpg b/backend/app/project/static/app/img/landing/server1.jpg new file mode 100644 index 0000000..10632c3 Binary files /dev/null and b/backend/app/project/static/app/img/landing/server1.jpg differ diff --git a/backend/app/project/static/app/img/landing/server2.jpg b/backend/app/project/static/app/img/landing/server2.jpg new file mode 100644 index 0000000..e2f8352 Binary files /dev/null and b/backend/app/project/static/app/img/landing/server2.jpg differ diff --git a/backend/app/project/static/app/img/landing/store-apple.png b/backend/app/project/static/app/img/landing/store-apple.png new file mode 100644 index 0000000..9b9f096 Binary files /dev/null and b/backend/app/project/static/app/img/landing/store-apple.png differ diff --git a/backend/app/project/static/app/img/landing/store-google.png b/backend/app/project/static/app/img/landing/store-google.png new file mode 100644 index 0000000..22e209c Binary files /dev/null and b/backend/app/project/static/app/img/landing/store-google.png differ diff --git a/backend/app/project/static/app/img/landing1.png b/backend/app/project/static/app/img/landing1.png new file mode 100644 index 0000000..276db46 Binary files /dev/null and b/backend/app/project/static/app/img/landing1.png differ diff --git a/backend/app/project/static/app/img/last2.png b/backend/app/project/static/app/img/last2.png new file mode 100644 index 0000000..4a0813f Binary files /dev/null and b/backend/app/project/static/app/img/last2.png differ diff --git a/backend/app/project/static/app/img/lock-bg.jpg b/backend/app/project/static/app/img/lock-bg.jpg new file mode 100644 index 0000000..018f9ad Binary files /dev/null and b/backend/app/project/static/app/img/lock-bg.jpg differ diff --git a/backend/app/project/static/app/img/logo-single.png b/backend/app/project/static/app/img/logo-single.png new file mode 100644 index 0000000..dddb17a Binary files /dev/null and b/backend/app/project/static/app/img/logo-single.png differ diff --git a/backend/app/project/static/app/img/logo.png b/backend/app/project/static/app/img/logo.png new file mode 100644 index 0000000..fd61333 Binary files /dev/null and b/backend/app/project/static/app/img/logo.png differ diff --git a/backend/app/project/static/app/img/mb-sample.jpg b/backend/app/project/static/app/img/mb-sample.jpg new file mode 100644 index 0000000..435c28f Binary files /dev/null and b/backend/app/project/static/app/img/mb-sample.jpg differ diff --git a/backend/app/project/static/app/img/monitoring.png b/backend/app/project/static/app/img/monitoring.png new file mode 100644 index 0000000..e13cc44 Binary files /dev/null and b/backend/app/project/static/app/img/monitoring.png differ diff --git a/backend/app/project/static/app/img/offsidebar-bg.jpg b/backend/app/project/static/app/img/offsidebar-bg.jpg new file mode 100644 index 0000000..23dd1a8 Binary files /dev/null and b/backend/app/project/static/app/img/offsidebar-bg.jpg differ diff --git a/backend/app/project/static/app/img/server.png b/backend/app/project/static/app/img/server.png new file mode 100644 index 0000000..64c83dd Binary files /dev/null and b/backend/app/project/static/app/img/server.png differ diff --git a/backend/app/project/static/app/img/user/01.jpg b/backend/app/project/static/app/img/user/01.jpg new file mode 100644 index 0000000..c6c722e Binary files /dev/null and b/backend/app/project/static/app/img/user/01.jpg differ diff --git a/backend/app/project/static/app/img/user/02.jpg b/backend/app/project/static/app/img/user/02.jpg new file mode 100644 index 0000000..e9e1e63 Binary files /dev/null and b/backend/app/project/static/app/img/user/02.jpg differ diff --git a/backend/app/project/static/app/img/user/03.jpg b/backend/app/project/static/app/img/user/03.jpg new file mode 100644 index 0000000..891240d Binary files /dev/null and b/backend/app/project/static/app/img/user/03.jpg differ diff --git a/backend/app/project/static/app/img/user/04.jpg b/backend/app/project/static/app/img/user/04.jpg new file mode 100644 index 0000000..fac7503 Binary files /dev/null and b/backend/app/project/static/app/img/user/04.jpg differ diff --git a/backend/app/project/static/app/img/user/05.jpg b/backend/app/project/static/app/img/user/05.jpg new file mode 100644 index 0000000..fdf9625 Binary files /dev/null and b/backend/app/project/static/app/img/user/05.jpg differ diff --git a/backend/app/project/static/app/img/user/06.jpg b/backend/app/project/static/app/img/user/06.jpg new file mode 100644 index 0000000..5e359ec Binary files /dev/null and b/backend/app/project/static/app/img/user/06.jpg differ diff --git a/backend/app/project/static/app/img/user/07.jpg b/backend/app/project/static/app/img/user/07.jpg new file mode 100644 index 0000000..c917721 Binary files /dev/null and b/backend/app/project/static/app/img/user/07.jpg differ diff --git a/backend/app/project/static/app/img/user/08.jpg b/backend/app/project/static/app/img/user/08.jpg new file mode 100644 index 0000000..a83789d Binary files /dev/null and b/backend/app/project/static/app/img/user/08.jpg differ diff --git a/backend/app/project/static/app/img/user/09.jpg b/backend/app/project/static/app/img/user/09.jpg new file mode 100644 index 0000000..5cbc80c Binary files /dev/null and b/backend/app/project/static/app/img/user/09.jpg differ diff --git a/backend/app/project/static/app/img/user/10.jpg b/backend/app/project/static/app/img/user/10.jpg new file mode 100644 index 0000000..d4e5c15 Binary files /dev/null and b/backend/app/project/static/app/img/user/10.jpg differ diff --git a/backend/app/project/static/app/img/user/11.jpg b/backend/app/project/static/app/img/user/11.jpg new file mode 100644 index 0000000..4d292d8 Binary files /dev/null and b/backend/app/project/static/app/img/user/11.jpg differ diff --git a/backend/app/project/static/app/img/user/12.jpg b/backend/app/project/static/app/img/user/12.jpg new file mode 100644 index 0000000..8a442f9 Binary files /dev/null and b/backend/app/project/static/app/img/user/12.jpg differ diff --git a/backend/app/project/static/app/img/user/13.jpg b/backend/app/project/static/app/img/user/13.jpg new file mode 100644 index 0000000..6ee6ca3 Binary files /dev/null and b/backend/app/project/static/app/img/user/13.jpg differ diff --git a/backend/app/project/static/app/js/app.js b/backend/app/project/static/app/js/app.js new file mode 100644 index 0000000..d1e3f05 --- /dev/null +++ b/backend/app/project/static/app/js/app.js @@ -0,0 +1,3046 @@ +/**========================================================= + * Module: calendar-ui.js + * This script handle the calendar demo with draggable + * events and events creations + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if(!$.fn.fullCalendar) return; + + // global shared var to know what we are dragging + var draggingEvent = null; + + + /** + * ExternalEvent object + * @param jQuery Object elements Set of element as jQuery objects + */ + var ExternalEvent = function (elements) { + + if (!elements) return; + + elements.each(function() { + var $this = $(this); + // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) + // it doesn't need to have a start or end + var calendarEventObject = { + title: $.trim($this.text()) // use the element's text as the event title + }; + + // store the Event Object in the DOM element so we can get to it later + $this.data('calendarEventObject', calendarEventObject); + + // make the event draggable using jQuery UI + $this.draggable({ + zIndex: 1070, + revert: true, // will cause the event to go back to its + revertDuration: 0 // original position after the drag + }); + + }); + }; + + /** + * Invoke full calendar plugin and attach behavior + * @param jQuery [calElement] The calendar dom element wrapped into jQuery + * @param EventObject [events] An object with the event list to load when the calendar displays + */ + function initCalendar(calElement, events) { + + // check to remove elements from the list + var removeAfterDrop = $('#remove-after-drop'); + + calElement.fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + buttonIcons: { // note the space at the beginning + prev: ' fa fa-caret-left', + next: ' fa fa-caret-right' + }, + buttonText: { + today: 'today', + month: 'month', + week: 'week', + day: 'day' + }, + editable: true, + droppable: true, // this allows things to be dropped onto the calendar + drop: function(date, allDay) { // this function is called when something is dropped + + var $this = $(this), + // retrieve the dropped element's stored Event Object + originalEventObject = $this.data('calendarEventObject'); + + // if something went wrong, abort + if(!originalEventObject) return; + + // clone the object to avoid multiple events with reference to the same object + var clonedEventObject = $.extend({}, originalEventObject); + + // assign the reported date + clonedEventObject.start = date; + clonedEventObject.allDay = allDay; + clonedEventObject.backgroundColor = $this.css('background-color'); + clonedEventObject.borderColor = $this.css('border-color'); + + // render the event on the calendar + // the last `true` argument determines if the event "sticks" + // (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) + calElement.fullCalendar('renderEvent', clonedEventObject, true); + + // if necessary remove the element from the list + if(removeAfterDrop.is(':checked')) { + $this.remove(); + } + }, + eventDragStart: function (event, js, ui) { + draggingEvent = event; + }, + // This array is the events sources + events: events + }); + } + + /** + * Inits the external events panel + * @param jQuery [calElement] The calendar dom element wrapped into jQuery + */ + function initExternalEvents(calElement){ + // Panel with the external events list + var externalEvents = $('.external-events'); + + // init the external events in the panel + new ExternalEvent(externalEvents.children('div')); + + // External event color is danger-red by default + var currColor = '#f6504d'; + // Color selector button + var eventAddBtn = $('.external-event-add-btn'); + // New external event name input + var eventNameInput = $('.external-event-name'); + // Color switchers + var eventColorSelector = $('.external-event-color-selector .point'); + + // Trash events Droparea + $('.external-events-trash').droppable({ + accept: '.fc-event', + activeClass: 'active', + hoverClass: 'hovered', + tolerance: 'touch', + drop: function(event, ui) { + + // You can use this function to send an ajax request + // to remove the event from the repository + + if(draggingEvent) { + var eid = draggingEvent.id || draggingEvent._id; + // Remove the event + calElement.fullCalendar('removeEvents', eid); + // Remove the dom element + ui.draggable.remove(); + // clear + draggingEvent = null; + } + } + }); + + eventColorSelector.click(function(e) { + e.preventDefault(); + var $this = $(this); + + // Save color + currColor = $this.css('background-color'); + // De-select all and select the current one + eventColorSelector.removeClass('selected'); + $this.addClass('selected'); + }); + + eventAddBtn.click(function(e) { + e.preventDefault(); + + // Get event name from input + var val = eventNameInput.val(); + // Dont allow empty values + if ($.trim(val) === '') return; + + // Create new event element + var newEvent = $('
').css({ + 'background-color': currColor, + 'border-color': currColor, + 'color': '#fff' + }) + .html(val); + + // Prepends to the external events list + externalEvents.prepend(newEvent); + // Initialize the new event element + new ExternalEvent(newEvent); + // Clear input + eventNameInput.val(''); + }); + } + + /** + * Creates an array of events to display in the first load of the calendar + * Wrap into this function a request to a source to get via ajax the stored events + * @return Array The array with the events + */ + function createDemoEvents() { + // Date for the calendar events (dummy data) + var date = new Date(); + var d = date.getDate(), + m = date.getMonth(), + y = date.getFullYear(); + + return [ + { + title: 'All Day Event', + start: new Date(y, m, 1), + backgroundColor: '#f56954', //red + borderColor: '#f56954' //red + }, + { + title: 'Long Event', + start: new Date(y, m, d - 5), + end: new Date(y, m, d - 2), + backgroundColor: '#f39c12', //yellow + borderColor: '#f39c12' //yellow + }, + { + title: 'Meeting', + start: new Date(y, m, d, 10, 30), + allDay: false, + backgroundColor: '#0073b7', //Blue + borderColor: '#0073b7' //Blue + }, + { + title: 'Lunch', + start: new Date(y, m, d, 12, 0), + end: new Date(y, m, d, 14, 0), + allDay: false, + backgroundColor: '#00c0ef', //Info (aqua) + borderColor: '#00c0ef' //Info (aqua) + }, + { + title: 'Birthday Party', + start: new Date(y, m, d + 1, 19, 0), + end: new Date(y, m, d + 1, 22, 30), + allDay: false, + backgroundColor: '#00a65a', //Success (green) + borderColor: '#00a65a' //Success (green) + }, + { + title: 'Open Google', + start: new Date(y, m, 28), + end: new Date(y, m, 29), + url: 'http://google.com/', + backgroundColor: '#3c8dbc', //Primary (light-blue) + borderColor: '#3c8dbc' //Primary (light-blue) + } + ]; + } + + // When dom ready, init calendar and events + $(function() { + + // The element that will display the calendar + var calendar = $('#calendar'); + + var demoEvents = createDemoEvents(); + + initExternalEvents(calendar); + + initCalendar(calendar, demoEvents); + + }); + + +}(jQuery, window, document)); + + + +/**========================================================= + * Module: classy-loader.js + * Enable use of classyloader directly from data attributes + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="classyloader"]', + $scroller = $(window), + inViewFlagClass = 'js-is-in-view'; // a classname to detect when a chart has been triggered after scroll + + $(Selector).each(function (e) { + + var $element = $(this), + options = $element.data(); + + // At lease we need a data-percentage attribute + if(options) { + if( options.triggerInView ) { + + $scroller.scroll(function() { + var offset = 0; + if( ! $element.hasClass(inViewFlagClass) && + $.Utils.isInView($element, {topoffset: offset}) ) { + $element.ClassyLoader(options).addClass(inViewFlagClass); + } + }); + + } + else + $element.ClassyLoader(options); + } + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: clear-storage.js + * Removes a key from the browser storage via element click + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if( !store || !store.enabled ) return; + + var Selector = '[data-toggle="reset"]'; + + $(document).on('click', Selector, function (e) { + e.preventDefault(); + var key = $(this).data('key'); + + if(key) { + store.remove(key); + } + else { + var shouldClear = confirm("This action will restore the current app state."); + if (shouldClear == true) { + store.clear(); + } + } + + // at last, reload the page + window.location.reload(); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: datepicker,js + * DateTime Picker init + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function(){ + + if ( ! $.fn.dataTable ) return; + + // + // Zero configuration + // + + $('#datatable1').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + } + }); + + + // + // Filtering by Columns + // + + var dtInstance2 = $('#datatable2').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + } + }); + var inputSearchClass = 'datatable_input_col_search'; + var columnInputs = $('tfoot .'+inputSearchClass); + + // On input keyup trigger filtering + columnInputs + .keyup(function () { + dtInstance2.fnFilter(this.value, columnInputs.index(this)); + }); + + + // + // Column Visibilty Extension + // + + $('#datatable3').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + }, + sDom: 'C<"clear">lfrtip', + colVis: { + order: 'alfa', + 'buttonText': 'Show/Hide Columns' + } + }); + + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: datepicker,js + * DateTime Picker init + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '.datetimepicker'; + + $(Selector).each(function() { + + var $this = $(this), + options = $this.data(); // allow to set options via data-* attributes + + $this.datetimepicker($.extend( + options, + { // support for FontAwesome icons + icons: { + time: 'fa fa-clock-o', + date: 'fa fa-calendar', + up: 'fa fa-arrow-up', + down: 'fa fa-arrow-down' + } + })); + + // Force a dropdown hide when click out of the input + $(document).on('click', function(){ + $this.data('DateTimePicker').hide(); + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: dropdown-animate.js + * Animated transition for dropdown open state + * Animation name placed in [data-play="animationName"] (http://daneden.github.io/animate.css/) + * Optionally add [data-duration=seconds] + * + * Requires animo.js + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + var Selector = '.dropdown-toggle[data-play]', + parent = $(Selector).parent(); /* From BS-Doc: All dropdown events are fired at the .dropdown-menu's parent element. */ + + parent.on('show.bs.dropdown', function () { + //e.preventDefault(); + + var $this = $(this), + toggle = $this.children('.dropdown-toggle'), + animation = toggle.data('play'), + duration = toggle.data('duration') || 0.5, + target = $this.children('.dropdown-menu'); + + if(!target || !target.length) + $.error('No target for play-animation'); + else + if( $.fn.animo && animation) + target.animo( { animation: animation, duration: duration} ); + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: filter-tag.js + * Basic items filter + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var selectorFilterTag = '[data-filter-tag]', // the trigger button + selectorFilterGroup = '[data-filter-group]', // items to be filtered + itemAnimation = 'fadeIn'; // supported by animo.js + + $(function() { + + $(selectorFilterGroup).first().closest('.row').eq(0).css('overflow','hidden'); + + $(document).on('click', selectorFilterTag, function() { + + var $this = $(this), + targetGroup = $this.data('filterTag'); + + + if(targetGroup) { + + var allItems = $(selectorFilterGroup), + visibleItems = allItems.filter(function() { + var group = $(this).data('filterGroup'); + return ('all' == targetGroup || group == targetGroup); + }); + + allItems.parent() // select the col- element + .hide() // Hide them + //.removeClass('elementHasBeenFiltered') + ; + visibleItems.parent() // select the col- element + .show() // display and run the animation + .animo( { animation: itemAnimation, duration: 0.5} ) + //.addClass('elementHasBeenFiltered') + ; + + // active by default de current trigger + $this.addClass('active'); + // try to active the parent when in ul.nav element + var res = $this.parents('ul').eq(0).children('li').removeClass('active'); + if(res.length) $this.parent().addClass('active'); + } + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: flot-chart.js + * Initializes the flot chart plugin and attaches the + * plugin to elements according to its type + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + /** + * Global object to load data for charts using ajax + * Request the chart data from the server via post + * Expects a response in JSON format to init the plugin + * Usage + * chart = new floatChart('#id', 'server/chart-data.php') + * ... + * chart.requestData(options); + * + * @param Chart element placeholder or selector + * @param Url to get the data via post. Response in JSON format + */ + window.FlotChart = function (element, url) { + // Properties + this.element = $(element); + this.url = url; + + // Public method + this.requestData = function (option, method, callback) { + var self = this; + + // support params (option), (option, method, callback) or (option, callback) + callback = (method && $.isFunction(method)) ? method : callback; + method = (method && typeof method == 'string') ? method : 'POST'; + + self.option = option; // save options + + $.ajax({ + url: self.url, + cache: false, + type: method, + dataType: 'json' + }).done(function (data) { + + $.plot( self.element, data, option ); + + if(callback) callback(); + + }); + + return this; // chain-ability + + }; + + // Listen to refresh events + this.listen = function() { + var self = this, + chartPanel = this.element.parents('.panel').eq(0); + + // attach custom event + chartPanel.on('panel-refresh', function(event, panel) { + // request data and remove spinner when done + self.requestData(self.option, function(){ + panel.removeSpinner(); + }); + + }); + + return this; // chain-ability + }; + + }; + + // + // Start of Demo Script + // + $(function () { + + // Bar chart + (function () { + var Selector = '.chart-bar'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Bar: No source defined.'); + var chart = new FlotChart(this, source), + //panel = $(Selector).parents('.panel'), + option = { + series: { + bars: { + align: 'center', + lineWidth: 0, + show: true, + barWidth: 0.6, + fill: 0.9 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + + })(); + // Bar Stacked chart + (function () { + var Selector = '.chart-bar-stacked'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Bar Stacked: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + stack: true, + bars: { + align: 'center', + lineWidth: 0, + show: true, + barWidth: 0.6, + fill: 0.9 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + })(); + // Area chart + (function () { + var Selector = '.chart-area'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Area: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + lines: { + show: true, + fill: 0.8 + }, + points: { + show: true, + radius: 4 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee', + tickFormatter: function (v) { + return v + ' visitors'; + } + }, + shadowSize: 0 + }; + + // Send Request and Listen for refresh events + chart.requestData(option).listen(); + + }); + })(); + // Line chart + (function () { + var Selector = '.chart-line'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Line: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + lines: { + show: true, + fill: 0.01 + }, + points: { + show: true, + radius: 4 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#eee', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + })(); + // Pïe + (function () { + var Selector = '.chart-pie'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Pie: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + pie: { + show: true, + innerRadius: 0, + label: { + show: true, + radius: 0.8, + formatter: function (label, series) { + return '
' + + //label + ' : ' + + Math.round(series.percent) + + '%
'; + }, + background: { + opacity: 0.8, + color: '#222' + } + } + } + } + }; + // Send Request + chart.requestData(option); + }); + })(); + // Donut + (function () { + var Selector = '.chart-donut'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Donut: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + pie: { + show: true, + innerRadius: 0.5 // This makes the donut shape + } + } + }; + // Send Request + chart.requestData(option); + }); + })(); + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: form-wizard.js + * Handles form wizard plugin and validation + * [data-toggle="wizard"] to activate wizard plugin + * [data-validate-step] to enable step validation via parsley + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if(!$.fn.bwizard) return; + + var Selector = '[data-toggle="wizard"]'; + + $(Selector).each(function() { + + var wizard = $(this), + validate = wizard.data('validateStep'); // allow to set options via data-* attributes + + if(validate) { + wizard.bwizard({ + clickableSteps: false, + validating: function(e, ui) { + + var $this = $(this), + form = $this.parent(), + group = form.find('.bwizard-activated'); + + if (false === form.parsley().validate( group[0].id )) { + e.preventDefault(); + return; + } + } + }); + } + else { + wizard.bwizard(); + } + + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: gmap.js + * Init Google Map plugin + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + // ------------------------- + // Map Style definition + // ------------------------- + + // Custom core styles + // Get more styles from http://snazzymaps.com/style/29/light-monochrome + // - Just replace and assign to 'MapStyles' the new style array + var MapStyles = [{featureType:'water',stylers:[{visibility:'on'},{color:'#bdd1f9'}]},{featureType:'all',elementType:'labels.text.fill',stylers:[{color:'#334165'}]},{featureType:'landscape',stylers:[{color:'#e9ebf1'}]},{featureType:'road.highway',elementType:'geometry',stylers:[{color:'#c5c6c6'}]},{featureType:'road.arterial',elementType:'geometry',stylers:[{color:'#fff'}]},{featureType:'road.local',elementType:'geometry',stylers:[{color:'#fff'}]},{featureType:'transit',elementType:'geometry',stylers:[{color:'#d8dbe0'}]},{featureType:'poi',elementType:'geometry',stylers:[{color:'#cfd5e0'}]},{featureType:'administrative',stylers:[{visibility:'on'},{lightness:33}]},{featureType:'poi.park',elementType:'labels',stylers:[{visibility:'on'},{lightness:20}]},{featureType:'road',stylers:[{color:'#d8dbe0',lightness:20}]}]; + + + // ------------------------- + // Custom Script + // ------------------------- + + var mapSelector = '[data-toggle="gmap"]'; + var gMapRefs = []; + + if($.fn.gMap) { + + // Init all gmap visibles in the page + $(mapSelector).each(function(){ + + // do not init maps in modal + if( ! $(this).parents('.modal').length ) + initGmap(this); + + }); //each + + // attach gmap initialization when modal opens + $('.modal').each(function() { + + var $this = $(this), + mapsInModal = $this.find(mapSelector); + + if ( mapsInModal.length ) { + + $this.on('shown.bs.modal', function (e) { + mapsInModal.each(function(){ + + initGmap(this); + + }); //each + }); + + } // if + + }); + } + + // Center Map marker on resolution change + $(window).resize(function() { + + if(gMapRefs && gMapRefs.length) { + for( var r in gMapRefs) { + var mapRef = gMapRefs[r]; + var currMapCenter = mapRef.getCenter(); + if(mapRef && currMapCenter) { + google.maps.event.trigger(mapRef, 'resize'); + mapRef.setCenter(currMapCenter); + } + } + } + }); + + function initGmap(element){ + + var $this = $(element), + addresses = $this.data('address') && $this.data('address').split(';'), + titles = $this.data('title') && $this.data('title').split(';'), + zoom = $this.data('zoom') || 14, + maptype = $this.data('maptype') || 'ROADMAP', // or 'TERRAIN' + markers = []; + + if(addresses) { + for(var a in addresses) { + if(typeof addresses[a] == 'string') { + markers.push({ + address: addresses[a], + html: (titles && titles[a]) || '', + popup: true /* Always popup */ + }); + } + } + + var options = { + controls: { + panControl: true, + zoomControl: true, + mapTypeControl: true, + scaleControl: true, + streetViewControl: true, + overviewMapControl: true + }, + scrollwheel: false, + maptype: maptype, + markers: markers, + zoom: zoom + // More options https://github.com/marioestrada/jQuery-gMap + }; + + var gMap = $this.gMap(options); + + var ref = gMap.data('gMap.reference'); + // save in the map references list + gMapRefs.push(ref); + + // set the styles + if($this.data('styled') !== undefined) { + + ref.setOptions({ + styles: MapStyles + }); + + } + } + +} + +}(jQuery, window, document)); + +/**========================================================= + * Module: load-css.js + * Request and load into the current page a css file + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="load-css"]', + storageKeyName = 'autoloadCSS'; + + restoreStylesheet(); + $(document) + .ready(function() { + }) + .on('click', Selector, function (e) { + e.preventDefault(); + var uri = $(this).data('uri'); + + createStylesheet(uri); + + }); + + // Creates a link element and injects the stylesheet href + function createStylesheet(uri) { + var link; + if(uri) { + link = createLink(); + if(link) { + injectStylesheet(link, uri); + } + else { + $.error('Error creating new stylsheet link element.'); + } + } + else { + $.error('No stylesheet location defined.'); + } + } + + function createLink() { + var linkId = 'autoloaded-stylesheet', + link = $('#'+linkId); + + if( ! link.length ) { + var newLink = $('').attr('id', linkId); + $('head').append(newLink); + link = $('#'+linkId); + } + return link; + } + + function injectStylesheet(element, uri) { + var v = '?id='+Math.round(Math.random()*10000); // forces to jump cache + if(element.length) { + element.attr('href', uri + v); + } + saveStylesheet(uri); + } + + // Save the loaded stylesheet link + function saveStylesheet(uri) { + store.set(storageKeyName, uri); + } + // Restores the stylesheet + function restoreStylesheet() { + var uri = store.get(storageKeyName); + if(uri) { + createStylesheet(uri); + } + } + +}(jQuery, window, document)); + +/**========================================================= + * Module: markdownarea.js + * Markdown Editor from UIKit adapted for Bootstrap Layout + * Requires uikit core - codemirror - marked + * @author: geedmo (http://geedmo.com) + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Markdownarea = function(element, options){ + + var $element = $(element); + + if($element.data("markdownarea")) return; + + this.element = $element; + this.options = $.extend({}, Markdownarea.defaults, options); + + this.marked = this.options.marked || marked; + this.CodeMirror = this.options.CodeMirror || CodeMirror; + + this.marked.setOptions({ + gfm : true, + tables : true, + breaks : true, + pedantic : true, + sanitize : false, + smartLists : true, + smartypants : false, + langPrefix : 'lang-' + }); + + this.init(); + + this.element.data("markdownarea", this); + }; + + $.extend(Markdownarea.prototype, { + + init: function(){ + + var $this = this, tpl = Markdownarea.template; + + tpl = tpl.replace(/\{\:lblPreview\}/g, this.options.lblPreview); + tpl = tpl.replace(/\{\:lblCodeview\}/g, this.options.lblCodeview); + + this.markdownarea = $(tpl); + this.content = this.markdownarea.find(".uk-markdownarea-content"); + this.toolbar = this.markdownarea.find(".uk-markdownarea-toolbar"); + this.preview = this.markdownarea.find(".uk-markdownarea-preview").children().eq(0); + this.code = this.markdownarea.find(".uk-markdownarea-code"); + + this.element.before(this.markdownarea).appendTo(this.code); + + this.editor = this.CodeMirror.fromTextArea(this.element[0], this.options.codemirror); + + this.editor.markdownarea = this; + + this.editor.on("change", (function(){ + var render = function(){ + + var value = $this.editor.getValue(); + + $this.currentvalue = String(value); + + $this.element.trigger("markdownarea-before", [$this]); + + $this.applyPlugins(); + + $this.marked($this.currentvalue, function (err, markdown) { + + if (err) throw err; + + $this.preview.html(markdown); + $this.element.val($this.editor.getValue()).trigger("markdownarea-update", [$this]); + }); + }; + render(); + return $.Utils.debounce(render, 150); + })()); + + this.code.find(".CodeMirror").css("height", this.options.height); + + this._buildtoolbar(); + this.fit(); + + $(window).on("resize", $.Utils.debounce(function(){ + $this.fit(); + }, 200)); + + + var previewContainer = $this.preview.parent(), + codeContent = this.code.find('.CodeMirror-sizer'), + codeScroll = this.code.find('.CodeMirror-scroll').on('scroll',$.Utils.debounce(function() { + + if($this.markdownarea.attr("data-mode")=="tab") return; + + // calc position + var codeHeight = codeContent.height() - codeScroll.height(), + previewHeight = previewContainer[0].scrollHeight - previewContainer.height(), + ratio = previewHeight / codeHeight, + previewPostition = codeScroll.scrollTop() * ratio; + + // apply new scroll + previewContainer.scrollTop(previewPostition); + }, 10)); + + this.markdownarea.on("click", ".uk-markdown-button-markdown, .uk-markdown-button-preview", function(e){ + + e.preventDefault(); + + if($this.markdownarea.attr("data-mode")=="tab") { + + $this.markdownarea.find(".uk-markdown-button-markdown, .uk-markdown-button-preview").removeClass("uk-active").filter(this).addClass("uk-active"); + + $this.activetab = $(this).hasClass("uk-markdown-button-markdown") ? "code":"preview"; + $this.markdownarea.attr("data-active-tab", $this.activetab); + } + }); + + this.preview.parent().css("height", this.code.height()); + }, + + applyPlugins: function(){ + + var $this = this, + plugins = Object.keys(Markdownarea.plugins), + plgs = Markdownarea.plugins; + + this.markers = {}; + + if(plugins.length) { + + var lines = this.currentvalue.split("\n"); + + plugins.forEach(function(name){ + this.markers[name] = []; + }, this); + + for(var line=0,max=lines.length;line'+Markdownarea.commands[cmd].label+''); + + if(Markdownarea.commands[cmd].shortcut) { + $this.registerShortcut(Markdownarea.commands[cmd].shortcut, Markdownarea.commands[cmd].action); + } + } + }); + + this.toolbar.html(bar.join("\n")); + + this.markdownarea.on("click", "a[data-markdownarea-cmd]", function(){ + var cmd = $(this).data("markdownareaCmd"); + + if(cmd && Markdownarea.commands[cmd] && (!$this.activetab || $this.activetab=="code" || cmd=="fullscreen")) { + Markdownarea.commands[cmd].action.apply($this, [$this.editor]); + } + + }); + }, + + fit: function() { + + var mode = this.options.mode; + + if(mode=="split" && this.markdownarea.width() < this.options.maxsplitsize) { + mode = "tab"; + } + + if(mode=="tab") { + + if(!this.activetab) { + this.activetab = "code"; + this.markdownarea.attr("data-active-tab", this.activetab); + } + + this.markdownarea.find(".uk-markdown-button-markdown, .uk-markdown-button-preview").removeClass("uk-active") + .filter(this.activetab=="code" ? '.uk-markdown-button-markdown':'.uk-markdown-button-preview').addClass("uk-active"); + + } + + this.editor.refresh(); + this.preview.parent().css("height", this.code.height()); + + this.markdownarea.attr("data-mode", mode); + }, + + registerShortcut: function(combination, callback){ + + var $this = this; + + combination = $.isArray(combination) ? combination : [combination]; + + for(var i=0,max=combination.length;i < max;i++) { + var map = {}; + + map[combination[i]] = function(){ + callback.apply($this, [$this.editor]); + }; + + $this.editor.addKeyMap(map); + } + }, + + getMode: function(){ + var pos = this.editor.getDoc().getCursor(); + + return this.editor.getTokenAt(pos).state.base.htmlState ? 'html':'markdown'; + } + }); + + //jQuery plugin + + $.fn.markdownarea = function(options){ + + return this.each(function(){ + + var ele = $(this); + + if(!ele.data("markdownarea")) { + var obj = new Markdownarea(ele, options); + } + }); + }; + + var baseReplacer = function(replace, editor){ + var text = editor.getSelection(), + markdown = replace.replace('$1', text); + + editor.replaceSelection(markdown, 'end'); + }; + + Markdownarea.commands = { + "fullscreen": { + "title" : 'Fullscreen', + "label" : '', + "action" : function(editor){ + + editor.markdownarea.markdownarea.toggleClass("uk-markdownarea-fullscreen"); + + // dont use uk- to avoid rules declaration + $('html').toggleClass("markdownarea-fullscreen"); + $('html, body').scrollTop(0); + + var wrap = editor.getWrapperElement(); + + if(editor.markdownarea.markdownarea.hasClass("uk-markdownarea-fullscreen")) { + + editor.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, width: wrap.style.width, height: wrap.style.height}; + wrap.style.width = ""; + wrap.style.height = editor.markdownarea.content.height()+"px"; + document.documentElement.style.overflow = "hidden"; + + } else { + + document.documentElement.style.overflow = ""; + var info = editor.state.fullScreenRestore; + wrap.style.width = info.width; wrap.style.height = info.height; + window.scrollTo(info.scrollLeft, info.scrollTop); + } + + editor.refresh(); + editor.markdownarea.preview.parent().css("height", editor.markdownarea.code.height()); + } + }, + + "bold" : { + "title" : "Bold", + "label" : '', + "shortcut": ['Ctrl-B', 'Cmd-B'], + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"**$1**", editor); + } + }, + "italic" : { + "title" : "Italic", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"*$1*", editor); + } + }, + "strike" : { + "title" : "Strikethrough", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"~~$1~~", editor); + } + }, + "blockquote" : { + "title" : "Blockquote", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "

$1

":"> $1", editor); + } + }, + "link" : { + "title" : "Link", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? '$1':"[$1](http://)", editor); + } + }, + "picture" : { + "title" : "Picture", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? '$1':"![$1](http://)", editor); + } + }, + "listUl" : { + "title" : "Unordered List", + "label" : '', + "action" : function(editor){ + if(this.getMode() == 'markdown') baseReplacer("* $1", editor); + } + }, + "listOl" : { + "title" : "Ordered List", + "label" : '', + "action" : function(editor){ + if(this.getMode() == 'markdown') baseReplacer("1. $1", editor); + } + } + }; + + Markdownarea.defaults = { + "mode" : "split", + "height" : 500, + "maxsplitsize" : 1000, + "codemirror" : { mode: 'gfm', tabMode: 'indent', tabindex: "2", lineWrapping: true, dragDrop: false, autoCloseTags: true, matchTags: true }, + "toolbar" : [ "bold", "italic", "strike", "link", "picture", "blockquote", "listUl", "listOl" ], + "lblPreview" : "Preview", + "lblCodeview" : "Markdown" + }; + + Markdownarea.template = '
' + + '
' + + '
    ' + + '
    ' + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + + Markdownarea.plugins = {}; + Markdownarea.addPlugin = function(name, identifier, callback) { + Markdownarea.plugins[name] = {"identifier":identifier, "cb":callback}; + }; + + $.fn["markdownarea"] = Markdownarea; + + // init code + $(function() { + + $("textarea[data-uk-markdownarea]").each(function() { + var area = $(this), obj; + + if (!area.data("markdownarea")) { + obj = new Markdownarea(area, $.Utils.options(area.attr("data-uk-markdownarea"))); + } + }); + }); + + return Markdownarea; + +}(jQuery, window, document)); + +/**========================================================= + * Module: navbar-search.js + * Navbar search toggler + * To open search add a buton with [data-toggle="navbar-search"] + * To close search add an element with [data-toggle="navbar-search-dismiss"] + * + * Auto dismiss on ESC key + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + + var openSelector = '[data-toggle="navbar-search"]', + dismissSelector = '[data-toggle="navbar-search-dismiss"]', + inputSelector = '.navbar-form input[type="text"]', + navbarForm = $('form.navbar-form'); + + var NavSearch = { + toggle: function() { + + navbarForm.toggleClass('open'); + + var isOpen = navbarForm.hasClass('open'); + + navbarForm.find('input')[isOpen ? 'focus' : 'blur'](); + + }, + + dismiss: function() { + navbarForm + .removeClass('open') // Close control + .find('input[type="text"]').blur() // remove focus + .val('') // Empty input + ; + } + + }; + + $(document) + .on('click', NavSearch.dismiss) + .on('click', openSelector +', '+ inputSelector +', '+ dismissSelector, function (e) { + e.stopPropagation(); + }) + .on('click', dismissSelector, NavSearch.dismiss) + .on('click', openSelector, NavSearch.toggle) + .keyup(function(e) { + if (e.keyCode == 27) // ESC + NavSearch.dismiss(); + }); + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: notify.js + * Create toggleable notifications that fade out automatically. + * Based on Notify addon from UIKit (http://getuikit.com/docs/addons_notify.html) + * [data-toggle="notify"] + * [data-options="options in json format" ] + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="notify"]', + autoloadSelector = '[data-onload]', + doc = $(document); + + + $(function() { + + $(Selector).each(function(){ + + var $this = $(this), + onload = $this.data('onload'); + + if(onload !== undefined) { + setTimeout(function(){ + notifyNow($this); + }, 1000); + } + + $this.on('click', function (e) { + e.preventDefault(); + notifyNow($this); + }); + + }); + + }); + + function notifyNow($element) { + var message = $element.data('message'), + options = $element.data('options'); + + if(!message) + $.error('Notify: No message specified'); + + $.notify(message, options || {}); + } + + +}(jQuery, window, document)); + + +/** + * Notify Addon definition as jQuery plugin + * Adapted version to work with Bootstrap classes + * More information http://getuikit.com/docs/addons_notify.html + */ + +(function($, window, document){ + + var containers = {}, + messages = {}, + + notify = function(options){ + + if ($.type(options) == 'string') { + options = { message: options }; + } + + if (arguments[1]) { + options = $.extend(options, $.type(arguments[1]) == 'string' ? {status:arguments[1]} : arguments[1]); + } + + return (new Message(options)).show(); + }, + closeAll = function(group, instantly){ + if(group) { + for(var id in messages) { if(group===messages[id].group) messages[id].close(instantly); } + } else { + for(var id in messages) { messages[id].close(instantly); } + } + }; + + var Message = function(options){ + + var $this = this; + + this.options = $.extend({}, Message.defaults, options); + + this.uuid = "ID"+(new Date().getTime())+"RAND"+(Math.ceil(Math.random() * 100000)); + this.element = $([ + // @geedmo: alert-dismissable enables bs close icon + '
    ', + '×', + '
    '+this.options.message+'
    ', + '
    ' + + ].join('')).data("notifyMessage", this); + + // status + if (this.options.status) { + this.element.addClass('alert alert-'+this.options.status); + this.currentstatus = this.options.status; + } + + this.group = this.options.group; + + messages[this.uuid] = this; + + if(!containers[this.options.pos]) { + containers[this.options.pos] = $('
    ').appendTo('body').on("click", ".uk-notify-message", function(){ + $(this).data("notifyMessage").close(); + }); + } + }; + + + $.extend(Message.prototype, { + + uuid: false, + element: false, + timout: false, + currentstatus: "", + group: false, + + show: function() { + + if (this.element.is(":visible")) return; + + var $this = this; + + containers[this.options.pos].show().prepend(this.element); + + var marginbottom = parseInt(this.element.css("margin-bottom"), 10); + + this.element.css({"opacity":0, "margin-top": -1*this.element.outerHeight(), "margin-bottom":0}).animate({"opacity":1, "margin-top": 0, "margin-bottom":marginbottom}, function(){ + + if ($this.options.timeout) { + + var closefn = function(){ $this.close(); }; + + $this.timeout = setTimeout(closefn, $this.options.timeout); + + $this.element.hover( + function() { clearTimeout($this.timeout); }, + function() { $this.timeout = setTimeout(closefn, $this.options.timeout); } + ); + } + + }); + + return this; + }, + + close: function(instantly) { + + var $this = this, + finalize = function(){ + $this.element.remove(); + + if(!containers[$this.options.pos].children().length) { + containers[$this.options.pos].hide(); + } + + delete messages[$this.uuid]; + }; + + if(this.timeout) clearTimeout(this.timeout); + + if(instantly) { + finalize(); + } else { + this.element.animate({"opacity":0, "margin-top": -1* this.element.outerHeight(), "margin-bottom":0}, function(){ + finalize(); + }); + } + }, + + content: function(html){ + + var container = this.element.find(">div"); + + if(!html) { + return container.html(); + } + + container.html(html); + + return this; + }, + + status: function(status) { + + if(!status) { + return this.currentstatus; + } + + this.element.removeClass('alert alert-'+this.currentstatus).addClass('alert alert-'+status); + + this.currentstatus = status; + + return this; + } + }); + + Message.defaults = { + message: "", + status: "normal", + timeout: 5000, + group: null, + pos: 'top-center' + }; + + + $["notify"] = notify; + $["notify"].message = Message; + $["notify"].closeAll = closeAll; + + return notify; + +}(jQuery, window, document)); + +/**========================================================= + * Module: panel-perform.js + * Dismiss panels + * [data-perform="panel-dismiss"] + * + * Requires animo.js + =========================================================*/ +(function($, window, document){ + 'use strict'; + + var panelSelector = '[data-perform="panel-dismiss"]', + removeEvent = 'panel-remove', + removedEvent = 'panel-removed'; + + $(document).on('click', panelSelector, function () { + + // find the first parent panel + var parent = $(this).closest('.panel'); + + if($.support.animation) { + parent.animo({animation: 'bounceOut'}, removeElement); + } + else removeElement(); + + function removeElement() { + // Trigger the event and finally remove the element + $.when(parent.trigger(removeEvent, [parent])) + .done(destroyPanel); + } + + function destroyPanel() { + var col = parent.parent(); + parent.remove(); + // remove the parent if it is a row and is empty and not a sortable (portlet) + col + .trigger(removedEvent) // An event to catch when the panel has been removed from DOM + .filter(function() { + var el = $(this); + return (el.is('[class*="col-"]:not(.sortable)') && el.children('*').length === 0); + }).remove(); + + } + + }); + +}(jQuery, window, document)); + + +/** + * Collapse panels + * [data-perform="panel-collapse"] + * + * Also uses browser storage to keep track + * of panels collapsed state + */ +(function($, window, document) { + 'use strict'; + var panelSelector = '[data-perform="panel-collapse"]', + storageKeyName = 'panelState'; + + // Prepare the panel to be collapsable and its events + $(panelSelector).each(function() { + // find the first parent panel + var $this = $(this), + parent = $this.closest('.panel'), + wrapper = parent.find('.panel-wrapper'), + collapseOpts = {toggle: false}, + iconElement = $this.children('em'), + panelId = parent.attr('id'); + + // if wrapper not added, add it + // we need a wrapper to avoid jumping due to the paddings + if( ! wrapper.length) { + wrapper = + parent.children('.panel-heading').nextAll() //find('.panel-body, .panel-footer') + .wrapAll('
    ') + .parent() + .addClass('panel-wrapper'); + collapseOpts = {}; + } + + // Init collapse and bind events to switch icons + wrapper + .collapse(collapseOpts) + .on('hide.bs.collapse', function() { + setIconHide( iconElement ); + savePanelState( panelId, 'hide' ); + }) + .on('show.bs.collapse', function() { + setIconShow( iconElement ); + savePanelState( panelId, 'show' ); + }); + + // Load the saved state if exists + var currentState = loadPanelState( panelId ); + if(currentState) { + setTimeout(function() { wrapper.collapse( currentState ); }, 0); + savePanelState( panelId, currentState ); + } + + }); + + // finally catch clicks to toggle panel collapse + $(document).on('click', panelSelector, function () { + + var parent = $(this).closest('.panel'); + var wrapper = parent.find('.panel-wrapper'); + + wrapper.collapse('toggle'); + + }); + + ///////////////////////////////////////////// + // Common use functions for panel collapse // + ///////////////////////////////////////////// + function setIconShow(iconEl) { + iconEl.removeClass('fa-plus').addClass('fa-minus'); + } + + function setIconHide(iconEl) { + iconEl.removeClass('fa-minus').addClass('fa-plus'); + } + + function savePanelState(id, state) { + if(!id || !store || !store.enabled) return false; + var data = store.get(storageKeyName); + if(!data) { data = {}; } + data[id] = state; + store.set(storageKeyName, data); + } + + function loadPanelState(id) { + if(!id || !store || !store.enabled) return false; + var data = store.get(storageKeyName); + if(data) { + return data[id] || false; + } + } + + +}(jQuery, window, document)); + + +/** + * Refresh panels + * [data-perform="panel-refresh"] + * [data-spinner="standard"] + */ +(function($, window, document){ + 'use strict'; + var panelSelector = '[data-perform="panel-refresh"]', + refreshEvent = 'panel-refresh', + csspinnerClass = 'csspinner', + defaultSpinner = 'standard'; + + // method to clear the spinner when done + function removeSpinner(){ + this.removeClass(csspinnerClass); + } + + // catch clicks to toggle panel refresh + $(document).on('click', panelSelector, function () { + var $this = $(this), + panel = $this.parents('.panel').eq(0), + spinner = $this.data('spinner') || defaultSpinner + ; + + // start showing the spinner + panel.addClass(csspinnerClass + ' ' + spinner); + + // attach as public method + panel.removeSpinner = removeSpinner; + + // Trigger the event and send the panel object + $this.trigger(refreshEvent, [panel]); + + }); + + + /** + * This function is only to show a demonstration + * of how to use the panel refresh system via + * custom event. + * IMPORTANT: see how to remove the spinner. + */ + + $('.panel.panel-demo').on('panel-refresh', function(e, panel){ + + // perform any action when a .panel triggers a the refresh event + setTimeout(function(){ + + // when the action is done, just remove the spinner class + panel.removeSpinner(); + + }, 3000); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: play-animation.js + * Provides a simple way to run animation with a trigger + * Targeted elements must have + * [data-toggle="play-animation"] + * [data-target="Target element affected by the animation"] + * [data-play="Animation name (http://daneden.github.io/animate.css/)"] + * + * Requires animo.js + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="play-animation"]'; + + $(function() { + + var $scroller = $(window).add('body, .wrapper'); + + // Parse animations params and attach trigger to scroll + $(Selector).each(function() { + var $this = $(this), + offset = $this.data('offset'), + delay = $this.data('delay') || 100, // milliseconds + animation = $this.data('play') || 'bounce'; + + if(typeof offset !== 'undefined') { + + // test if the element starts visible + testAnimation($this); + // test on scroll + $scroller.scroll(function(){ + testAnimation($this); + }); + + } + + // Test an element visibilty and trigger the given animation + function testAnimation(element) { + if ( !element.hasClass('anim-running') && + $.Utils.isInView(element, {topoffset: offset})) { + element + .addClass('anim-running'); + + setTimeout(function() { + element + .addClass('anim-done') + .animo( { animation: animation, duration: 0.7} ); + }, delay); + + } + } + + }); + + // Run click triggered animations + $(document).on('click', Selector, function() { + + var $this = $(this), + targetSel = $this.data('target'), + animation = $this.data('play') || 'bounce', + target = $(targetSel); + + if(target && target) { + target.animo( { animation: animation } ); + } + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: portlet.js + * Drag and drop any panel to change its position + * The Selector should could be applied to any object that contains + * panel, so .col-* element are ideal. + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + // Component is required + if(!$.fn.sortable) return; + + var Selector = '[data-toggle="portlet"]', + storageKeyName = 'portletState'; + + $(function(){ + + $( Selector ).sortable({ + connectWith: Selector, + items: 'div.panel', + handle: '.portlet-handler', + opacity: 0.7, + placeholder: 'portlet box-placeholder', + cancel: '.portlet-cancel', + forcePlaceholderSize: true, + iframeFix: false, + tolerance: 'pointer', + helper: 'original', + revert: 200, + forceHelperSize: true, + start: saveListSize, + update: savePortletOrder, + create: loadPortletOrder + }) + // optionally disables mouse selection + //.disableSelection() + ; + + }); + + function savePortletOrder(event, ui) { + + var data = store.get(storageKeyName); + + if(!data) { data = {}; } + + data[this.id] = $(this).sortable('toArray'); + + if(data) { + store.set(storageKeyName, data); + } + + // save portlet size to avoid jumps + saveListSize.apply(this); + } + + function loadPortletOrder() { + + var data = store.get(storageKeyName); + + if(data) { + + var porletId = this.id, + panels = data[porletId]; + + if(panels) { + var portlet = $('#'+porletId); + + $.each(panels, function(index, value) { + $('#'+value).appendTo(portlet); + }); + } + + } + + // save portlet size to avoid jumps + saveListSize.apply(this); + } + + // Keeps a consistent size in all portlet lists + function saveListSize() { + var $this = $(this); + $this.css('min-height', $this.height()); + } + + /*function resetListSize() { + $(this).css('min-height', ""); + }*/ + +}(jQuery, window, document)); + + +/**========================================================= + * Module: sidebar-menu.js + * Provides a simple way to implement bootstrap collapse plugin using a target + * next to the current element (sibling) + * Targeted elements must have [data-toggle="collapse-next"] + =========================================================*/ +(function($, window, document){ + 'use strict'; + + var collapseSelector = '[data-toggle="collapse-next"]', + colllapsibles = $('.sidebar .collapse').collapse({toggle: false}), + toggledClass = 'aside-collapsed', + $body = $('body'), + phone_mq = 768; // media querie + + $(function() { + + $(document) + .on('click', collapseSelector, function (e) { + e.preventDefault(); + + if ($(window).width() > phone_mq && + $body.hasClass(toggledClass)) return; + + // Try to close all of the collapse areas first + colllapsibles.collapse('hide'); + // ...then open just the one we want + var $target = $(this).siblings('ul'); + $target.collapse('show'); + + }) + // Submenu when aside is toggled + .on('click', '.sidebar > .nav > li', function() { + + if ($body.hasClass(toggledClass) && + $(window).width() > phone_mq) { + + $('.sidebar > .nav > li') + .not(this) + .removeClass('open') + .end() + .filter(this) + .toggleClass('open'); + } + + }); + + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: sparkline.js + * SparkLines Mini Charts + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '.inlinesparkline'; + + // Match color with css values to style charts + var colors = { + primary: '#5fb5cb', + success: '#27ae60', + info: '#22bfe8', + warning: '#ffc61d', + danger: '#f6504d' + }; + + // Inline sparklines take their values from the contents of the tag + $(Selector).each(function() { + + var $this = $(this); + var data = $this.data(); + + if(data.barColor && colors[data.barColor]) + data.barColor = colors[data.barColor]; + + var options = data; + options.type = data.type || 'bar'; // default chart is bar + + $(this).sparkline('html', options); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: table-checkall.js + * Tables check all checkbox + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = 'th.check-all'; + + $(Selector).on('change', function() { + var $this = $(this), + index= $this.index() + 1, + checkbox = $this.find('input[type="checkbox"]'), + table = $this.parents('table'); + // Make sure to affect only the correct checkbox column + table.find('tbody > tr > td:nth-child('+index+') input[type="checkbox"]') + .prop('checked', checkbox[0].checked); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: toggle-state.js + * Toggle a classname from the BODY. Useful to change a state that + * affects globally the entire layout or more than one item + * Targeted elements must have [data-toggle="CLASS-NAME-TO-TOGGLE"] + * Optionally save and restore state [data-persists="true"] + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var SelectorToggle = '[data-toggle-state]', + $body = $('body'), + storageKeyName = 'toggleState'; + + + $(document) + .ready(function() { + restoreState($body); + }) + .on('click', SelectorToggle, function (e) { + e.preventDefault(); + var classname = $(this).data('toggleState'), + persists = $(this).data('persists'); + + if(classname) { + if( $body.hasClass(classname) ) { + $body.removeClass(classname); + if(persists) removeState(classname); + } + else { + $body.addClass(classname); + if(persists) addState(classname); + } + + } + + }); + + // Add a state to the browser storage to be restored later + function addState(classname){ + var data = store.get(storageKeyName); + + if(!data) { + data = classname; + } + else { + data = WordChecker.addWord(data, classname); + } + + store.set(storageKeyName, data); + } + + // Remove a state from the browser storage + function removeState(classname){ + var data = store.get(storageKeyName); + // nothing to remove + if(!data) return; + + data = WordChecker.removeWord(data, classname); + + store.set(storageKeyName, data); + } + + // Load the state string and restore the classlist + function restoreState($elem) { + var data = store.get(storageKeyName); + + // nothing to restore + if(!data) return; + $elem.addClass(data); + } + + + ////////////////////////////////////////////////// + // Helper object to check for words in a phrase // + ////////////////////////////////////////////////// + var WordChecker = { + hasWord: function (phrase, word) { + return new RegExp('(^|\\s)' + word + '(\\s|$)').test(phrase); + }, + addWord: function (phrase, word) { + if (!this.hasWord(phrase, word)) { + return (phrase + (phrase ? ' ' : '') + word); + } + }, + removeWord: function (phrase, word) { + if (this.hasWord(phrase, word)) { + return phrase.replace(new RegExp('(^|\\s)*' + word + '(\\s|$)*', 'g'), ''); + } + } + }; + + +}(jQuery, window, document)); + +/**========================================================= + * Module: tooltips.js + * Initialize Bootstrap tooltip with auto placement + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function(){ + + $('[data-toggle="tooltip"]').tooltip({ + container: 'body', + placement: function (context, source) { + //return (predictTooltipTop(source) < 0) ? "bottom": "top"; + var pos = 'top'; + if(predictTooltipTop(source) < 0) + pos = 'bottom'; + if(predictTooltipLeft(source) < 0) + pos = 'right'; + return pos; + } + }); + + }); + + // Predicts tooltip top position + // based on the trigger element + function predictTooltipTop(el) { + var top = el.offsetTop; + var height = 40; // asumes ~40px tooltip height + + while(el.offsetParent) { + el = el.offsetParent; + top += el.offsetTop; + } + return (top - height) - (window.pageYOffset); + } + + // Predicts tooltip top position + // based on the trigger element + function predictTooltipLeft(el) { + var left = el.offsetLeft; + var width = el.offsetWidth; + + while(el.offsetParent) { + el = el.offsetParent; + left += el.offsetLeft; + } + return (left - width) - (window.pageXOffset); + } + +}(jQuery, window, document)); + +/**========================================================= + * Module: upload-demo.js + * Upload Demostration + * See file server/upload.php for more details + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + + var progressbar = $('#progressbar'), + bar = progressbar.find('.progress-bar'), + settings = { + + action: 'server/upload.php', // upload url + + allow : '*.(jpg|jpeg|gif|png)', // allow only images + + param: 'upfile', + + loadstart: function() { + bar.css('width', '0%').text('0%'); + progressbar.removeClass('hidden'); + }, + + progress: function(percent) { + percent = Math.ceil(percent); + bar.css('width', percent+'%').text(percent+'%'); + }, + + allcomplete: function(response) { + + bar.css('width', '100%').text('100%'); + + setTimeout(function(){ + progressbar.addClass('hidden'); + }, 250); + + // Upload Completed + alert(response); + } + }; + + var select = new $.upload.select($('#upload-select'), settings), + drop = new $.upload.drop($('#upload-drop'), settings); + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: upload.js + * Allow users to upload files through a file input form element or a placeholder area. + * Based on addon from UIKit (http://getuikit.com/docs/addons_upload.html) + * + * Adapted version to work with Bootstrap classes + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var UploadSelect = function(element, options) { + + var $this = this, + $element = $(element), + options = $.extend({}, xhrupload.defaults, UploadSelect.defaults, options); + + if ($element.data("uploadSelect")) return; + + this.element = $element.on("change", function() { + xhrupload($this.element[0].files, options); + }); + + $element.data("uploadSelect", this); + }; + + UploadSelect.defaults = {}; + + var UploadDrop = function(element, options) { + + var $this = this, + $element = $(element), + options = $.extend({}, xhrupload.defaults, UploadDrop.defaults, options), + hasdragCls = false; + + if ($element.data("uploadDrop")) return; + + $element.on("drop", function(e){ + + if (e.dataTransfer && e.dataTransfer.files) { + + e.stopPropagation(); + e.preventDefault(); + + $element.removeClass(options.dragoverClass); + + xhrupload(e.dataTransfer.files, options); + } + + }).on("dragenter", function(e){ + e.stopPropagation(); + e.preventDefault(); + }).on("dragover", function(e){ + e.stopPropagation(); + e.preventDefault(); + + if (!hasdragCls) { + $element.addClass(options.dragoverClass); + hasdragCls = true; + } + }).on("dragleave", function(e){ + e.stopPropagation(); + e.preventDefault(); + $element.removeClass(options.dragoverClass); + hasdragCls = false; + }); + + $element.data("uploadDrop", this); + }; + + UploadDrop.defaults = { + 'dragoverClass': 'dragover' + }; + + $.upload = { "select" : UploadSelect, "drop" : UploadDrop }; + + $.support.ajaxupload = (function() { + + function supportFileAPI() { + var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi; + } + + function supportAjaxUploadProgressEvents() { + var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); + } + + function supportFormData() { + return !! window.FormData; + } + + return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData(); + })(); + + if ($.support.ajaxupload){ + $.event.props.push("dataTransfer"); + } + + function xhrupload(files, settings) { + + if (!$.support.ajaxupload){ + return this; + } + + settings = $.extend({}, xhrupload.defaults, settings); + + if (!files.length){ + return; + } + + if (settings.allow !== '*.*') { + + for(var i=0,file;file=files[i];i++) { + + if(!matchName(settings.allow, file.name)) { + + if(typeof(settings.notallowed) == 'string') { + alert(settings.notallowed); + } else { + settings.notallowed(file, settings); + } + return; + } + } + } + + var complete = settings.complete; + + if (settings.single){ + + var count = files.length, + uploaded = 0; + + settings.complete = function(response, xhr){ + uploaded = uploaded+1; + complete(response, xhr); + if (uploaded 0) || //IE 10 + (window.navigator['pointerEnabled'] && window.navigator['maxTouchPoints'] > 0) || //IE >=11 + false + ); + $.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver || null); + + $.Utils = {}; + + $.Utils.debounce = function(func, wait, immediate) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + }; + + $.Utils.removeCssRules = function(selectorRegEx) { + var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref; + + if(!selectorRegEx) return; + + setTimeout(function(){ + try { + _ref = document.styleSheets; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + stylesheet = _ref[_i]; + idxs = []; + stylesheet.cssRules = stylesheet.cssRules; + for (idx = _j = 0, _len1 = stylesheet.cssRules.length; _j < _len1; idx = ++_j) { + if (stylesheet.cssRules[idx].type === CSSRule.STYLE_RULE && selectorRegEx.test(stylesheet.cssRules[idx].selectorText)) { + idxs.unshift(idx); + } + } + for (_k = 0, _len2 = idxs.length; _k < _len2; _k++) { + stylesheet.deleteRule(idxs[_k]); + } + } + } catch (_error) {} + }, 0); + }; + + $.Utils.isInView = function(element, options) { + + var $element = $(element); + + if (!$element.is(':visible')) { + return false; + } + + var window_left = $win.scrollLeft(), + window_top = $win.scrollTop(), + offset = $element.offset(), + left = offset.left, + top = offset.top; + + options = $.extend({topoffset:0, leftoffset:0}, options); + + if (top + $element.height() >= window_top && top - options.topoffset <= window_top + $win.height() && + left + $element.width() >= window_left && left - options.leftoffset <= window_left + $win.width()) { + return true; + } else { + return false; + } + }; + + $.Utils.options = function(string) { + + if ($.isPlainObject(string)) return string; + + var start = (string ? string.indexOf("{") : -1), options = {}; + + if (start != -1) { + try { + options = (new Function("", "var json = " + string.substr(start) + "; return JSON.parse(JSON.stringify(json));"))(); + } catch (e) {} + } + + return options; + }; + + $.Utils.events = {}; + $.Utils.events.click = $.support.touch ? 'tap' : 'click'; + + $.langdirection = $html.attr("dir") == "rtl" ? "right" : "left"; + + $(function(){ + + // Check for dom modifications + if(!$.support.mutationobserver) return; + + // Install an observer for custom needs of dom changes + var observer = new $.support.mutationobserver($.Utils.debounce(function(mutations) { + $(doc).trigger("domready"); + }, 300)); + + // pass in the target node, as well as the observer options + observer.observe(document.body, { childList: true, subtree: true }); + + }); + + // add touch identifier class + $html.addClass($.support.touch ? "touch" : "no-touch"); + +}(jQuery, window, document)); +/**========================================================= + * Module: vmaps,js + * jVector Maps support + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="vector-map"]', + defaultColors = { + markerColor: '#5194cb', // the marker points + bgColor: '#fafafa', // the background + scaleColors: ['#5a5e6a'], // the color of the region in the serie + regionFill: '#818590' // the base region color + }; + + $(Selector).each(function() { + + var $this = $(this), + options = { + markerColor: $this.data('markerColor') || defaultColors.markerColor, + bgColor: $this.data('bgColor') || defaultColors.bgColor, + scale: $this.data('scale') || 1, + scaleColors: $this.data('scaleColors') || defaultColors.scaleColors, + regionFill: $this.data('regionFill') || '#818590' + }; + + var seriesData = { + 'CA': 11100, // Canada + 'DE': 2510, // Germany + 'FR': 3710, // France + 'AU': 5710, // Australia + 'GB': 8310, // Great Britain + 'RU': 9310, // Russia + 'BR': 6610, // Brazil + 'IN': 7810, // India + 'CN': 4310, // China + 'US': 839, // USA + 'SA': 410 // Saudi Arabia + }; + + var markersData = [ + { latLng:[41.90, 12.45], name:'Vatican City' }, + { latLng:[43.73, 7.41], name:'Monaco' }, + { latLng:[-0.52, 166.93], name:'Nauru' }, + { latLng:[-8.51, 179.21], name:'Tuvalu' }, + { latLng:[7.11,171.06], name:'Marshall Islands' }, + { latLng:[17.3,-62.73], name:'Saint Kitts and Nevis' }, + { latLng:[3.2,73.22], name:'Maldives' }, + { latLng:[35.88,14.5], name:'Malta' }, + { latLng:[41.0,-71.06], name:'New England' }, + { latLng:[12.05,-61.75], name:'Grenada' }, + { latLng:[13.16,-59.55], name:'Barbados' }, + { latLng:[17.11,-61.85], name:'Antigua and Barbuda' }, + { latLng:[-4.61,55.45], name:'Seychelles' }, + { latLng:[7.35,134.46], name:'Palau' }, + { latLng:[42.5,1.51], name:'Andorra' } + ]; + + initVectorMap( $this , options, seriesData, markersData); + + }); + + function initVectorMap($element, opts, series, markers) { + $element.vectorMap({ + map: 'world_mill_en', + backgroundColor: opts.bgColor, + zoomMin: 2, + zoomMax: 8, + zoomOnScroll: false, + regionStyle: { + initial: { + 'fill': defaultColors.regionFill, + 'fill-opacity': 1, + 'stroke': 'none', + 'stroke-width': 1.5, + 'stroke-opacity': 1 + }, + hover: { + 'fill-opacity': 0.8 + }, + selected: { + fill: 'blue' + }, + selectedHover: { + } + }, + focusOn:{ x:0.4, y:0.6, scale: opts.scale}, + markerStyle: { + initial: { + fill: opts.markerColor, + stroke: opts.markerColor + } + }, + onRegionLabelShow: function(e, el, code) { + if ( series && series[code] ) + el.html(el.html() + ': ' + series[code] + ' visitors'); + }, + markers: markers, + series: { + regions: [{ + values: series, + scale: opts.scaleColors, + normalizeFunction: 'polynomial' + }] + }, + }); + } + +}(jQuery, window, document)); + +/** + * Provides a start point to run plugins and other scripts + */ +(function($, window, document){ + 'use strict'; + + if (typeof $ === 'undefined') { throw new Error('This application\'s JavaScript requires jQuery'); } + + $(window).load(function() { + + $('.scroll-content').slimScroll({ + height: '250px' + }); + + adjustLayout(); + + }).resize(adjustLayout); + + + $(function() { + + // Init Fast click for mobiles + FastClick.attach(document.body); + + // inhibits null links + $('a[href="#"]').each(function(){ + this.href = 'javascript:void(0);'; + }); + + // popover init + $('[data-toggle=popover]').popover(); + + // Bootstrap slider + $('.slider').slider(); + + // Chosen + $('.chosen-select').chosen(); + + // Filestyle + $('.filestyle').filestyle(); + + // Masked inputs initialization + $.fn.inputmask && $('[data-toggle="masked"]').inputmask(); + + }); + + // keeps the wrapper covering always the entire body + // necessary when main content doesn't fill the viewport + function adjustLayout() { + $('.wrapper > section').css('min-height', $(window).height()); + } + +}(jQuery, window, document)); diff --git a/backend/app/project/static/app/js/billing/me.js b/backend/app/project/static/app/js/billing/me.js new file mode 100644 index 0000000..0f875e0 --- /dev/null +++ b/backend/app/project/static/app/js/billing/me.js @@ -0,0 +1,49 @@ +var priceview = {} + +priceview.test_function = function() { + console.log("Test function") +} +priceview.test_function2 = function(a,b) { + console.log(`test func with parameter ${a}, ${b}`) +} +// price_view.html 에서 부분이 바로 위 함수 호출하는거임 + +priceview.move_view = function() { + route('cloudlist') // 클라우드 리스트로 화면 이동 +} + +// switchcontents + +var tabButtons=document.querySelectorAll(".tabContainer .btn_group button"); +var tabPanels=document.querySelectorAll(".tabContainer .tabPanel"); + +function showPanel(panelIndex,colorCode) { + tabButtons.forEach(function(node){ + node.style.backgroundColor=""; + node.style.color=""; + }); + tabButtons[panelIndex].style.backgroundColor=colorCode; + tabButtons[panelIndex].style.color="white"; + tabPanels.forEach(function(node){ + node.style.display="none"; + }); + tabPanels[panelIndex].style.display="block"; + tabPanels[panelIndex].style.backgroundColor="white"; +} + +const selected = document.querySelector(".selected"); +const optionsContainer = document.querySelector(".options-container"); + +const optionsList = document.querySelectorAll(".option"); + +selected.addEventListener("click", () => { + optionsContainer.classList.toggle("active"); +}); + +optionsList.forEach(o => { + o.addEventListener("click", () => { + selected.innerHTML = o.querySelector("label").innerHTML; + + optionsContainer.classList.remove("active"); + }); +}); diff --git a/backend/app/project/static/app/js/cloud/add.js b/backend/app/project/static/app/js/cloud/add.js new file mode 100644 index 0000000..275a50c --- /dev/null +++ b/backend/app/project/static/app/js/cloud/add.js @@ -0,0 +1,13 @@ +var cloud_add = {} + + +cloud_add.selectPlan = function(node) { + // node.parentNode.addClass("selected") + var planList = document.getElementsByClassName("box-placeholder") + for (var i = 0 ; i < planList.length; i++) { + // planList[i].removeClass("selected") + planList[i].classList.remove("selected") + } + + console.log(node.parentNode.classList.add("selected")); +} \ No newline at end of file diff --git a/backend/app/project/static/app/js/cloud/detail.js b/backend/app/project/static/app/js/cloud/detail.js new file mode 100644 index 0000000..1d48295 --- /dev/null +++ b/backend/app/project/static/app/js/cloud/detail.js @@ -0,0 +1,40 @@ +// function deploy(name, cloudid){ +// console.log(name, cloudid) +// call(`/cloud/deploy/${cloudid}/${name}`, function(response) { +// var response = JSON.parse(response) +// console.log(response) +// if (response.success == true) { +// alert('deploy request success ') +// } else { +// alert(' other error ') +// } +// }) +// } +function refreshIframe() { + var ifr = document.getElementsByName('preview_web')[0]; + ifr.src = ifr.src; +} + +function rollback(cloudid) { + call(`/cloud/action/${cloudid}/rollback`, function(response) { + var response = JSON.parse(response) + console.log(response) + if (response.success == true) { + alert('rollback request success ') + } else { + alert(' other error ') + } + }) +} + +function update(cloudid) { + call(`/cloud/action/${cloudid}/update`, function(response) { + var response = JSON.parse(response) + console.log(response) + if (response.success == true) { + alert('update request success ') + } else { + alert(' other error ') + } + }) +} diff --git a/backend/app/project/static/app/js/cloud/list.js b/backend/app/project/static/app/js/cloud/list.js new file mode 100644 index 0000000..39cc726 --- /dev/null +++ b/backend/app/project/static/app/js/cloud/list.js @@ -0,0 +1,6 @@ +var cloud_list = {} + +// cloud_list.add = function() { +// route("cloud_add") +// } + \ No newline at end of file diff --git a/backend/app/project/static/app/js/dashboard.js b/backend/app/project/static/app/js/dashboard.js new file mode 100644 index 0000000..af5512d --- /dev/null +++ b/backend/app/project/static/app/js/dashboard.js @@ -0,0 +1,9 @@ +var dashboard = {} + +dashboard.add_cloud = function() { + route('cloudadd') +} + +dashboard.move_view = function() { + route('landing') +} diff --git a/backend/app/project/static/app/js/default.js b/backend/app/project/static/app/js/default.js new file mode 100644 index 0000000..0f491e3 --- /dev/null +++ b/backend/app/project/static/app/js/default.js @@ -0,0 +1 @@ +console.log("[Console] Default javascript") \ No newline at end of file diff --git a/backend/app/project/static/app/js/landing.js b/backend/app/project/static/app/js/landing.js new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/static/app/js/load.js b/backend/app/project/static/app/js/load.js new file mode 100644 index 0000000..9a67f6c --- /dev/null +++ b/backend/app/project/static/app/js/load.js @@ -0,0 +1,119 @@ + +function load(url, callback, renderTo, elementId) { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + callback(xhr.response, renderTo, elementId); + } + } + xhr.onerror = function() { + alert(' web server 동작 확인해주어야함- localserver.sh') + } + xhr.open('GET', url, true); + xhr.send(''); +} + + +function call(url, callback) { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + callback(xhr.response); + } + } + xhr.onerror = function() { + callback(false) + } + xhr.open('GET', url, true); + xhr.send(''); +} + +function render(response, renderTo, elementId) { + document.getElementById(elementId).insertAdjacentHTML(renderTo, response) +} + +function defaultCssLoader(view='default') { + document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend", ``) +} + +function renderByTag(response, tag, location) { + document.getElementsByTagName(tag)[0].insertAdjacentHTML(location, response) +} + +var head = document.head; + +function addScript(jsFiles) { + // 얘는 배열을 인자로 받는 함수 녀석이다. 순서대로 js를 불러와주도록 하여 오류를 줄여준다. + return new Promise((resolve, reject) => { + var load = function(i) { + var file = jsFiles[i]; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.onload = function() { + i++; + if(i === jsFiles.length) { + resolve(); + } else { + load(i); + } + } + script.src = file; + head.appendChild(script); + }; + load(0); + }); + +} + +async function scriptLoader(view='default') { + // same as + + + + + + + + + +
    +
    + +
    +
    +
    +
    + App Name + +
    +
    + +
    +
    +
    사이트 무제한 생성
    +
    클라우드 웹호스팅
    +

    사용 여부에 따라 필요한 만큼만 사용하는 방식으로 기존 클라우드 방식 보다 70% 이상 비용 절약 가능

    +
    + +
    +
    +
      + + +
    • + +
    • + + +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + App Name +
    +
    + +

    서버 운용 지식이 없어도 쉽게 사용가능한 방식

    +

    생성, 제거를 자유자재로 가능하므로 용량 내에서는 여러 웹사이트 제작 가능

    +

    안전하고 믿을 만한 단독 서버 사용(dashboard)

    +
    +

    + + Start Demo Now + +

    +
    +
    +
    +
    +
    +
    +
    +
    + +

    상담을 통해 선정하는 불투명한 산출 방식 대신 정찰제로 운영

    +

    원하는 크기와 기간에 따른 다양한 선택폭

    +

    타사보다 80% 정도 저렴한 가격

    +
    +

    + + Watch Now(price_view) + +

    +
    +
    + App Name +
    +
    +
    +
    + + + + + + +
    +
    +

    모든 운영체제를 지원합니다 +
    + 여러 운영체제로 사용가능합니다 +

    +
    + +
    +
    + client +
    +
    + client +
    +
    + client +
    +
    + client +
    +
    + client +
    +
    + client +
    +
    +
    +
    + +
    +
    +

    원하는 호스팅을 선택해주세요 +
    + 필요한 서비스를 선택해주세요 +
    +
    +

    +
    +
    +

    1VCore

    +

    1GB RAM

    +

    30GB SSD

    +

    1TB

    + select +
    +
    +
    +
    +

    1VCore

    +

    1GB RAM

    +

    30GB SSD

    +

    1TB

    + select +
    +
    +
    +
    +

    1VCore

    +

    1GB RAM

    +

    30GB SSD

    +

    1TB

    + select +
    +
    +
    +
    +

    1VCore

    +

    1GB RAM

    +

    30GB SSD

    +

    1TB

    + select +
    +
    + +
    +
    + + +
    +
    +

    Ready to start? Try this App today

    +

    And see why people around the world choose this APP to create great cross-platform websites

    +

    +
    + + Join Now! + +

    +
    +
    + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/pages/lock.html b/backend/app/project/static/pages/lock.html new file mode 100644 index 0000000..f09f065 --- /dev/null +++ b/backend/app/project/static/pages/lock.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
    +
    + +
    + lock-bg +
    +

    Hello Sarah!

    +

    Please login to unlock your screen.

    +
    +
    + + + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/pages/login-multi.html b/backend/app/project/static/pages/login-multi.html new file mode 100644 index 0000000..889b4e3 --- /dev/null +++ b/backend/app/project/static/pages/login-multi.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + Image + +
    +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    + +
    +
    +
    +

    Fill with your mail to receive instructions on how to reset your password.

    +
    + + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/pages/login.html b/backend/app/project/static/pages/login.html new file mode 100644 index 0000000..4d7e45c --- /dev/null +++ b/backend/app/project/static/pages/login.html @@ -0,0 +1,68 @@ + + + + + + + + + + Login + + + + + + + + + + +
    +
    +
    +
    + + Image + +

    + LOGIN +

    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    + +
    +

    Don't have an account yet?

    + Sign up +
    +
    +
    +
    +
    +
    + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/pages/recover.html b/backend/app/project/static/pages/recover.html new file mode 100644 index 0000000..b8385da --- /dev/null +++ b/backend/app/project/static/pages/recover.html @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + Image + +

    + PASSWORD RESET +

    +
    +
    +
    +

    Fill with your mail to receive instructions on how to reset your password.

    +
    + + + +
    + +
    +
    +
    + +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/pages/signup.html b/backend/app/project/static/pages/signup.html new file mode 100644 index 0000000..e1dbc69 --- /dev/null +++ b/backend/app/project/static/pages/signup.html @@ -0,0 +1,69 @@ + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + +
    +
    + +
    +
    + + Image + +

    + Register +

    +
    +
    +
    + {{ form.csrf_token }} +
    + {{ form.email.label }} + {{ render_field(form.email, class="form-control", placeholder="Email address") }} +
    +
    + {{ form.password.label }} + {{ render_field(form.password, class="form-control", placeholder="Password") }} +
    +
    + {{ form.confirm.label }} + {{ render_field(form.confirm, class="form-control", placeholder="Confirm password") }} +
    + +
    + +
    +
    + +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/templates/_content-area.html b/backend/app/project/static/templates/_content-area.html new file mode 100644 index 0000000..58ac68c --- /dev/null +++ b/backend/app/project/static/templates/_content-area.html @@ -0,0 +1,3 @@ +
    + +
    diff --git a/backend/app/project/static/templates/_footer.html b/backend/app/project/static/templates/_footer.html new file mode 100644 index 0000000..34060e2 --- /dev/null +++ b/backend/app/project/static/templates/_footer.html @@ -0,0 +1 @@ +
    © Somecloud 2021
    \ No newline at end of file diff --git a/backend/app/project/static/templates/_head.html b/backend/app/project/static/templates/_head.html new file mode 100644 index 0000000..c1731ff --- /dev/null +++ b/backend/app/project/static/templates/_head.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/backend/app/project/static/templates/_left-side.html b/backend/app/project/static/templates/_left-side.html new file mode 100644 index 0000000..782dd31 --- /dev/null +++ b/backend/app/project/static/templates/_left-side.html @@ -0,0 +1,62 @@ + \ No newline at end of file diff --git a/backend/app/project/static/templates/_menu.html b/backend/app/project/static/templates/_menu.html new file mode 100644 index 0000000..e221a13 --- /dev/null +++ b/backend/app/project/static/templates/_menu.html @@ -0,0 +1,69 @@ + + \ No newline at end of file diff --git a/backend/app/project/static/templates/_right-side.html b/backend/app/project/static/templates/_right-side.html new file mode 100644 index 0000000..49baa2c --- /dev/null +++ b/backend/app/project/static/templates/_right-side.html @@ -0,0 +1,167 @@ + + \ No newline at end of file diff --git a/backend/app/project/static/vendor/animo/LICENSE b/backend/app/project/static/vendor/animo/LICENSE new file mode 100644 index 0000000..46633d7 --- /dev/null +++ b/backend/app/project/static/vendor/animo/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Daniel Raftery + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/backend/app/project/static/vendor/animo/animate+animo.css b/backend/app/project/static/vendor/animo/animate+animo.css new file mode 100644 index 0000000..64a41e7 --- /dev/null +++ b/backend/app/project/static/vendor/animo/animate+animo.css @@ -0,0 +1,4003 @@ +@charset "UTF-8"; + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2014 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; +} + +@-webkit-keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-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-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + -ms-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + -ms-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + -ms-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + -ms-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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + -ms-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + -ms-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + -ms-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + -ms-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + -ms-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + -ms-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-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); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-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); + -ms-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + -ms-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + -ms-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + -ms-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + -ms-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: 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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + -ms-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); + -ms-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); + -ms-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); + -ms-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; + -ms-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes bounceIn { + 0%, 20%, 40%, 60%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + -ms-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + -ms-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + -ms-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + -ms-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + -ms-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + -ms-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + -ms-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + -ms-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + -ms-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + -ms-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + -ms-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + -ms-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + -ms-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + -ms-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); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-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); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-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); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + -ms-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); + -ms-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + -ms-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); + -ms-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + -ms-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); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + -ms-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + -ms-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); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + -ms-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-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-transition-timing-function: ease-in; + transition-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); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-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-transition-timing-function: ease-in; + transition-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + 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); + -ms-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-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); + -ms-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-animation-duration: .75s; + animation-duration: .75s; + -webkit-backface-visibility: visible !important; + -ms-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); + -ms-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-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); + -ms-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + -ms-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + -ms-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + -ms-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); + -ms-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; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + -ms-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + -ms-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + -ms-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: rotate(0, 0, 1, 45deg); + transform: rotate(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0, 0, 1, 45deg); + -ms-transform: rotate(0, 0, 1, 45deg); + transform: rotate(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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + -ms-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; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + -ms-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + -ms-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + -ms-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); + -ms-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; + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + -ms-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); + -ms-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); + -ms-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + -ms-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); + -ms-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); + -ms-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + -ms-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); + -ms-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); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + -ms-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; +} + +.slideExpandUp { + animation-name: slideExpandUp; + -webkit-animation-name: slideExpandUp; + animation-duration: 1.6s; + -webkit-animation-duration: 1.6s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease -out;visibility:visible!important}@keyframes slideExpandUp{0%{transform:translateY(100%) scaleX(0.5)}30%{transform:translateY(-8%) scaleX(0.5) +} + +40% { + transform: translateY(2%) scaleX(0.5) +} + +50% { + transform: translateY(0%) scaleX(1.1) +} + +60% { + transform: translateY(0%) scaleX(0.9) +} + +70% { + transform: translateY(0%) scaleX(1.05) +} + +80% { + transform: translateY(0%) scaleX(0.95) +} + +90% { + transform: translateY(0%) scaleX(1.02) +} + +100% { + transform: translateY(0%) scaleX(1) +} +} + +@-webkit-keyframes slideExpandUp { + 0% { + -webkit-transform: translateY(100%) scaleX(0.5) + } + + 30% { + -webkit-transform: translateY(-8%) scaleX(0.5) + } + + 40% { + -webkit-transform: translateY(2%) scaleX(0.5) + } + + 50% { + -webkit-transform: translateY(0%) scaleX(1.1) + } + + 60% { + -webkit-transform: translateY(0%) scaleX(0.9) + } + + 70% { + -webkit-transform: translateY(0%) scaleX(1.05) + } + + 80% { + -webkit-transform: translateY(0%) scaleX(0.95) + } + + 90% { + -webkit-transform: translateY(0%) scaleX(1.02) + } + + 100% { + -webkit-transform: translateY(0%) scaleX(1) + } +} + +.expandUp { + animation-name: expandUp; + -webkit-animation-name: expandUp; + animation-duration: .7s; + -webkit-animation-duration: .7s; + animation-timing-function: ease; + -webkit-animation-timing-function: ease; + visibility: visible!important +} + +@keyframes expandUp { + 0% { + transform: translateY(100%) scale(0.6) scaleY(0.5) + } + + 60% { + transform: translateY(-7%) scaleY(1.12) + } + + 75% { + transform: translateY(3%) + } + + 100% { + transform: translateY(0%) scale(1) scaleY(1) + } +} + +@-webkit-keyframes expandUp { + 0% { + -webkit-transform: translateY(100%) scale(0.6) scaleY(0.5) + } + + 60% { + -webkit-transform: translateY(-7%) scaleY(1.12) + } + + 75% { + -webkit-transform: translateY(3%) + } + + 100% { + -webkit-transform: translateY(0%) scale(1) scaleY(1) + } +} + +.expandOpen { + animation-name: expandOpen; + -webkit-animation-name: expandOpen; + animation-duration: 1.2s; + -webkit-animation-duration: 1.2s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes expandOpen { + 0% { + transform: scale(1.8) + } + + 50% { + transform: scale(0.95) + } + + 80% { + transform: scale(1.05) + } + + 90% { + transform: scale(0.98) + } + + 100% { + transform: scale(1) + } +} + +@-webkit-keyframes expandOpen { + 0% { + -webkit-transform: scale(1.8) + } + + 50% { + -webkit-transform: scale(0.95) + } + + 80% { + -webkit-transform: scale(1.05) + } + + 90% { + -webkit-transform: scale(0.98) + } + + 100% { + -webkit-transform: scale(1) + } +} + +.bigEntrance { + animation-name: bigEntrance; + -webkit-animation-name: bigEntrance; + animation-duration: 1.6s; + -webkit-animation-duration: 1.6s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes bigEntrance { + 0% { + transform: scale(0.3) rotate(6deg) translateX(-30%) translateY(30%); + opacity: .2 + } + + 30% { + transform: scale(1.03) rotate(-2deg) translateX(2%) translateY(-2%); + opacity: 1 + } + + 45% { + transform: scale(0.98) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 60% { + transform: scale(1.01) rotate(-1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 75% { + transform: scale(0.99) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 90% { + transform: scale(1.01) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 100% { + transform: scale(1) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } +} + +@-webkit-keyframes bigEntrance { + 0% { + -webkit-transform: scale(0.3) rotate(6deg) translateX(-30%) translateY(30%); + opacity: .2 + } + + 30% { + -webkit-transform: scale(1.03) rotate(-2deg) translateX(2%) translateY(-2%); + opacity: 1 + } + + 45% { + -webkit-transform: scale(0.98) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 60% { + -webkit-transform: scale(1.01) rotate(-1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 75% { + -webkit-transform: scale(0.99) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 90% { + -webkit-transform: scale(1.01) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 100% { + -webkit-transform: scale(1) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } +} + +.hatch { + animation-name: hatch; + -webkit-animation-name: hatch; + animation-duration: 2s; + -webkit-animation-duration: 2s; + animation-timing-function: ease-in-out; + -webkit-animation-timing-function: ease-in-out; + transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -webkit-transform-origin: 50% 100%; + visibility: visible!important +} + +@keyframes hatch { + 0% { + transform: rotate(0deg) scaleY(0.6) + } + + 20% { + transform: rotate(-2deg) scaleY(1.05) + } + + 35% { + transform: rotate(2deg) scaleY(1) + } + + 50% { + transform: rotate(-2deg) + } + + 65% { + transform: rotate(1deg) + } + + 80% { + transform: rotate(-1deg) + } + + 100% { + transform: rotate(0deg) + } +} + +@-webkit-keyframes hatch { + 0% { + -webkit-transform: rotate(0deg) scaleY(0.6) + } + + 20% { + -webkit-transform: rotate(-2deg) scaleY(1.05) + } + + 35% { + -webkit-transform: rotate(2deg) scaleY(1) + } + + 50% { + -webkit-transform: rotate(-2deg) + } + + 65% { + -webkit-transform: rotate(1deg) + } + + 80% { + -webkit-transform: rotate(-1deg) + } + + 100% { + -webkit-transform: rotate(0deg) + } +} + +.floating { + animation-name: floating; + -webkit-animation-name: floating; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes floating { + 0% { + transform: translateY(0%) + } + + 50% { + transform: translateY(8%) + } + + 100% { + transform: translateY(0%) + } +} + +@-webkit-keyframes floating { + 0% { + -webkit-transform: translateY(0%) + } + + 50% { + -webkit-transform: translateY(8%) + } + + 100% { + -webkit-transform: translateY(0%) + } +} + +.tossing { + animation-name: tossing; + -webkit-animation-name: tossing; + animation-duration: 2.5s; + -webkit-animation-duration: 2.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes tossing { + 0% { + transform: rotate(-4deg) + } + + 50% { + transform: rotate(4deg) + } + + 100% { + transform: rotate(-4deg) + } +} + +@-webkit-keyframes tossing { + 0% { + -webkit-transform: rotate(-4deg) + } + + 50% { + -webkit-transform: rotate(4deg) + } + + 100% { + -webkit-transform: rotate(-4deg) + } +} + +.pullUp { + animation-name: pullUp; + -webkit-animation-name: pullUp; + animation-duration: 1.1s; + -webkit-animation-duration: 1.1s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -webkit-transform-origin: 50% 100% +} + +@keyframes pullUp { + 0% { + transform: scaleY(0.1) + } + + 40% { + transform: scaleY(1.02) + } + + 100%,60% { + transform: scaleY(0.98) + } + + 80% { + transform: scaleY(1.01) + } + + 100% { + transform: scaleY(1) + } +} + +@-webkit-keyframes pullUp { + 0% { + -webkit-transform: scaleY(0.1) + } + + 40% { + -webkit-transform: scaleY(1.02) + } + + 100%,60% { + -webkit-transform: scaleY(0.98) + } + + 80% { + -webkit-transform: scaleY(1.01) + } + + 100% { + -webkit-transform: scaleY(1) + } +} + +.pullDown { + animation-name: pullDown; + -webkit-animation-name: pullDown; + animation-duration: 1.1s; + -webkit-animation-duration: 1.1s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + -webkit-transform-origin: 50% 0 +} + +@keyframes pullDown { + 0% { + transform: scaleY(0.1) + } + + 40% { + transform: scaleY(1.02) + } + + 100%,60% { + transform: scaleY(0.98) + } + + 80% { + transform: scaleY(1.01) + } + + 100% { + transform: scaleY(1) + } +} + +@-webkit-keyframes pullDown { + 0% { + -webkit-transform: scaleY(0.1) + } + + 40% { + -webkit-transform: scaleY(1.02) + } + + 100%,60% { + -webkit-transform: scaleY(0.98) + } + + 80% { + -webkit-transform: scaleY(1.01) + } + + 100% { + -webkit-transform: scaleY(1) + } +} + +.stretchLeft { + animation-name: stretchLeft; + -webkit-animation-name: stretchLeft; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -webkit-transform-origin: 100% 0 +} + +@keyframes stretchLeft { + 0% { + transform: scaleX(0.3) + } + + 40% { + transform: scaleX(1.02) + } + + 100%,60% { + transform: scaleX(0.98) + } + + 80% { + transform: scaleX(1.01) + } + + 100% { + transform: scaleX(1) + } +} + +@-webkit-keyframes stretchLeft { + 0% { + -webkit-transform: scaleX(0.3) + } + + 40% { + -webkit-transform: scaleX(1.02) + } + + 100%,60% { + -webkit-transform: scaleX(0.98) + } + + 80% { + -webkit-transform: scaleX(1.01) + } + + 100% { + -webkit-transform: scaleX(1) + } +} + +.stretchRight { + animation-name: stretchRight; + -webkit-animation-name: stretchRight; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 0 0; + -ms-transform-origin: 0 0; + -webkit-transform-origin: 0 0 +} + +@keyframes stretchRight { + 0% { + transform: scaleX(0.3) + } + + 40% { + transform: scaleX(1.02) + } + + 100%,60% { + transform: scaleX(0.98) + } + + 80% { + transform: scaleX(1.01) + } + + 100% { + transform: scaleX(1) + } +} + +@-webkit-keyframes stretchRight { + 0% { + -webkit-transform: scaleX(0.3) + } + + 40% { + -webkit-transform: scaleX(1.02) + } + + 100%,60% { + -webkit-transform: scaleX(0.98) + } + + 80% { + -webkit-transform: scaleX(1.01) + } + + 100% { + -webkit-transform: scaleX(1) + } +} + +.pulseSlow { + animation-name: pulseSlow; + -webkit-animation-name: pulseSlow; + animation-duration: 30s; + -webkit-animation-duration: 30s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-animation-timing-function: linear +} + +@keyframes pulseSlow { + 0% { + transform: scale(1.1) + } + + 50% { + transform: scale(1) + } + + 100% { + transform: scale(1.1) + } +} + +@-webkit-keyframes pulseSlow { + 0% { + -webkit-transform: scale(1.1) + } + + 50% { + -webkit-transform: scale(1) + } + + 100% { + -webkit-transform: scale(1.1) + } +} + +.floatingHor { + animation-name: floatingHor; + -webkit-animation-name: floatingHor; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes floatingHor { + 0% { + transform: translateX(0%) + } + + 50% { + transform: translateX(8%) + } + + 100% { + transform: translateX(0%) + } +} + +@-webkit-keyframes floatingHor { + 0% { + -webkit-transform: translateX(0%) + } + + 50% { + -webkit-transform: translateX(8%) + } + + 100% { + -webkit-transform: translateX(0%) + } +} + +.fadeInQuick { + animation-name: fadeInQuick; + -webkit-animation-name: fadeInQuick; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick { + 0% { + transform: scale(0.9); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick { + 0% { + -webkit-transform: scale(0.9); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuickInv { + animation-name: fadeInQuickInv; + -webkit-animation-name: fadeInQuickInv; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuickInv { + 0% { + transform: scale(1.1); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuickInv { + 0% { + -webkit-transform: scale(1.1); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuick2 { + animation-name: fadeInQuick2; + -webkit-animation-name: fadeInQuick2; + animation-duration: .25s; + -webkit-animation-duration: .25s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick2 { + 0% { + transform: scale(.75); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick2 { + 0% { + -webkit-transform: scale(.75); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuick2Inv { + animation-name: fadeInQuick2Inv; + -webkit-animation-name: fadeInQuick2Inv; + animation-duration: .25s; + -webkit-animation-duration: .25s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick2Inv { + 0% { + transform: scale(1.25); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick2Inv { + 0% { + -webkit-transform: scale(1.25); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeIn360 { + animation-name: fadeIn360; + -webkit-animation-name: fadeIn360; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeIn360 { + 0% { + transform: rotate(0deg) scale(1.3); + opacity: 0 + } + + 100% { + transform: rotate(360deg) scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeIn360 { + 0% { + -webkit-transform: rotate(0deg) scale(1.3); + opacity: 0 + } + + 100% { + -webkit-transform: rotate(360deg) scale(1); + opacity: 1 + } +} + diff --git a/backend/app/project/static/vendor/animo/animo.js b/backend/app/project/static/vendor/animo/animo.js new file mode 100644 index 0000000..4e96502 --- /dev/null +++ b/backend/app/project/static/vendor/animo/animo.js @@ -0,0 +1,323 @@ +;(function ( $, window, document, undefined ) { + + /*! + * animo is a powerful little tool that makes managing CSS animations extremely easy. Stack animations, set callbacks, make magic. + * Modern browsers and almost all mobile browsers support CSS animations (http://caniuse.com/css-animation). + * + * @author Daniel Raftery : twitter/ThrivingKings + * @version 1.0.2 + */ + function animo( element, options, callback, other_cb ) { + + // Default configuration + var defaults = { + duration: 1, + animation: null, + iterate: 1, + timing: "linear", + keep: false + }; + + // Browser prefixes for CSS + this.prefixes = ["", "-moz-", "-o-animation-", "-webkit-"]; + + // Cache the element + this.element = $(element); + + this.bare = element; + + // For stacking of animations + this.queue = []; + + // Hacky + this.listening = false; + + // Figure out where the callback is + var cb = (typeof callback == "function" ? callback : other_cb); + + // Options can sometimes be a command + switch(options) { + + case "blur": + + defaults = { + amount: 3, + duration: 0.5, + focusAfter: null + }; + + this.options = $.extend( defaults, callback ); + + this._blur(cb); + + break; + + case "focus": + + this._focus(); + + break; + + case "rotate": + + defaults = { + degrees: 15, + duration: 0.5 + }; + + this.options = $.extend( defaults, callback ); + + this._rotate(cb); + + break; + + case "cleanse": + + this.cleanse(); + + break; + + default: + + this.options = $.extend( defaults, options ); + + this.init(cb); + + break; + } + } + + animo.prototype = { + + // A standard CSS animation + init: function(callback) { + + var $me = this; + + // Are we stacking animations? + if(Object.prototype.toString.call( $me.options.animation ) === '[object Array]') { + $.merge($me.queue, $me.options.animation); + } else { + $me.queue.push($me.options.animation); + } + + $me.cleanse(); + + $me.animate(callback); + + }, + + // The actual adding of the class and listening for completion + animate: function(callback) { + + this.element.addClass('animated'); + + this.element.addClass(this.queue[0]); + + this.element.data("animo", this.queue[0]); + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"animation-duration", this.options.duration+"s"); + + this.element.css(this.prefixes[ai]+"animation-iteration-count", this.options.iterate); + + this.element.css(this.prefixes[ai]+"animation-timing-function", this.options.timing); + + } + + var $me = this, _cb = callback; + + if($me.queue.length>1) { + _cb = null; + } + + // Listen for the end of the animation + this._end("AnimationEnd", function() { + + // If there are more, clean it up and move on + if($me.element.hasClass($me.queue[0])) { + + if(!$me.options.keep) { + $me.cleanse(); + } + + $me.queue.shift(); + + if($me.queue.length) { + + $me.animate(callback); + } + } + }, _cb); + }, + + cleanse: function() { + + this.element.removeClass('animated'); + + this.element.removeClass(this.queue[0]); + + this.element.removeClass(this.element.data("animo")); + + var ai = this.prefixes.length; + + while(ai--) { + + this.element.css(this.prefixes[ai]+"animation-duration", ""); + + this.element.css(this.prefixes[ai]+"animation-iteration-count", ""); + + this.element.css(this.prefixes[ai]+"animation-timing-function", ""); + + this.element.css(this.prefixes[ai]+"transition", ""); + + this.element.css(this.prefixes[ai]+"transform", ""); + + this.element.css(this.prefixes[ai]+"filter", ""); + + } + }, + + _blur: function(callback) { + + if(this.element.is("img")) { + + var svg_id = "svg_" + (((1 + Math.random()) * 0x1000000) | 0).toString(16).substring(1); + var filter_id = "filter_" + (((1 + Math.random()) * 0x1000000) | 0).toString(16).substring(1); + + $('body').append(''); + + var ai = this.prefixes.length; + + while(ai--) { + + this.element.css(this.prefixes[ai]+"filter", "blur("+this.options.amount+"px)"); + + this.element.css(this.prefixes[ai]+"transition", this.options.duration+"s all linear"); + + } + + this.element.css("filter", "url(#"+filter_id+")"); + + this.element.data("svgid", svg_id); + + } else { + + var color = this.element.css('color'); + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", "all "+this.options.duration+"s linear"); + + } + + this.element.css("text-shadow", "0 0 "+this.options.amount+"px "+color); + this.element.css("color", "transparent"); + } + + this._end("TransitionEnd", null, callback); + + var $me = this; + + if(this.options.focusAfter) { + + var focus_wait = window.setTimeout(function() { + + $me._focus(); + + focus_wait = window.clearTimeout(focus_wait); + + }, (this.options.focusAfter*1000)); + } + + }, + + _focus: function() { + + var ai = this.prefixes.length; + + if(this.element.is("img")) { + + while(ai--) { + + this.element.css(this.prefixes[ai]+"filter", ""); + + this.element.css(this.prefixes[ai]+"transition", ""); + + } + + var $svg = $('#'+this.element.data('svgid')); + + $svg.remove(); + } else { + + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", ""); + + } + + this.element.css("text-shadow", ""); + this.element.css("color", ""); + } + }, + + _rotate: function(callback) { + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", "all "+this.options.duration+"s linear"); + + this.element.css(this.prefixes[ai]+"transform", "rotate("+this.options.degrees+"deg)"); + + } + + this._end("TransitionEnd", null, callback); + + }, + + _end: function(type, todo, callback) { + + var $me = this; + + var binding = type.toLowerCase()+" webkit"+type+" o"+type+" MS"+type; + + this.element.bind(binding, function() { + + $me.element.unbind(binding); + + if(typeof todo == "function") { + + todo(); + } + + if(typeof callback == "function") { + + callback($me); + } + }); + + } + }; + + $.fn.animo = function ( options, callback, other_cb ) { + + return this.each(function() { + + new animo( this, options, callback, other_cb ); + + }); + + }; + +})( jQuery, window, document ); diff --git a/backend/app/project/static/vendor/animo/animo.min.js b/backend/app/project/static/vendor/animo/animo.min.js new file mode 100644 index 0000000..0b62324 --- /dev/null +++ b/backend/app/project/static/vendor/animo/animo.min.js @@ -0,0 +1,9 @@ +(function(d,c,a,e){ +/*! + * animo is a powerful little tool that makes managing CSS animations extremely easy. Stack animations, set callbacks, make magic. + * Modern browsers and almost all mobile browsers support CSS animations (http://caniuse.com/css-animation). + * + * @author Daniel Raftery : twitter/ThrivingKings + * @version 1.0.2 + */ +;function b(i,h,k,g){var j={duration:1,animation:null,iterate:1,timing:"linear",keep:false};this.prefixes=["","-moz-","-o-animation-","-webkit-"];this.element=d(i);this.bare=i;this.queue=[];this.listening=false;var f=(typeof k=="function"?k:g);switch(h){case"blur":j={amount:3,duration:0.5,focusAfter:null};this.options=d.extend(j,k);this._blur(f);break;case"focus":this._focus();break;case"rotate":j={degrees:15,duration:0.5};this.options=d.extend(j,k);this._rotate(f);break;case"cleanse":this.cleanse();break;default:this.options=d.extend(j,h);this.init(f);break}}b.prototype={init:function(g){var f=this;if(Object.prototype.toString.call(f.options.animation)==="[object Array]"){d.merge(f.queue,f.options.animation)}else{f.queue.push(f.options.animation)}f.cleanse();f.animate(g)},animate:function(i){this.element.addClass("animated");this.element.addClass(this.queue[0]);this.element.data("animo",this.queue[0]);var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"animation-duration",this.options.duration+"s");this.element.css(this.prefixes[f]+"animation-iteration-count",this.options.iterate);this.element.css(this.prefixes[f]+"animation-timing-function",this.options.timing)}var h=this,g=i;if(h.queue.length>1){g=null}this._end("AnimationEnd",function(){if(h.element.hasClass(h.queue[0])){if(!h.options.keep){h.cleanse()}h.queue.shift();if(h.queue.length){h.animate(i)}}},g)},cleanse:function(){this.element.removeClass("animated");this.element.removeClass(this.queue[0]);this.element.removeClass(this.element.data("animo"));var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"animation-duration","");this.element.css(this.prefixes[f]+"animation-iteration-count","");this.element.css(this.prefixes[f]+"animation-timing-function","");this.element.css(this.prefixes[f]+"transition","");this.element.css(this.prefixes[f]+"transform","");this.element.css(this.prefixes[f]+"filter","")}},_blur:function(l){if(this.element.is("img")){var h="svg_"+(((1+Math.random())*16777216)|0).toString(16).substring(1);var k="filter_"+(((1+Math.random())*16777216)|0).toString(16).substring(1);d("body").append('');var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"filter","blur("+this.options.amount+"px)");this.element.css(this.prefixes[f]+"transition",this.options.duration+"s all linear")}this.element.css("filter","url(#"+k+")");this.element.data("svgid",h)}else{var g=this.element.css("color");var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"transition","all "+this.options.duration+"s linear")}this.element.css("text-shadow","0 0 "+this.options.amount+"px "+g);this.element.css("color","transparent")}this._end("TransitionEnd",null,l);var i=this;if(this.options.focusAfter){var j=c.setTimeout(function(){i._focus();j=c.clearTimeout(j)},(this.options.focusAfter*1000))}},_focus:function(){var f=this.prefixes.length;if(this.element.is("img")){while(f--){this.element.css(this.prefixes[f]+"filter","");this.element.css(this.prefixes[f]+"transition","")}var g=d("#"+this.element.data("svgid"));g.remove()}else{while(f--){this.element.css(this.prefixes[f]+"transition","")}this.element.css("text-shadow","");this.element.css("color","")}},_rotate:function(g){var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"transition","all "+this.options.duration+"s linear");this.element.css(this.prefixes[f]+"transform","rotate("+this.options.degrees+"deg)")}this._end("TransitionEnd",null,g)},_end:function(h,f,j){var g=this;var i=h.toLowerCase()+" webkit"+h+" o"+h+" MS"+h;this.element.bind(i,function(){g.element.unbind(i);if(typeof f=="function"){f()}if(typeof j=="function"){j(g)}})}};d.fn.animo=function(g,h,f){return this.each(function(){new b(this,g,h,f)})}})(jQuery,window,document); \ No newline at end of file diff --git a/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css b/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css new file mode 100644 index 0000000..a031303 --- /dev/null +++ b/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,347 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 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: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: 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-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.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: 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: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + 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 { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', 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: 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 { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', 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; +} +.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: 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: 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: 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: 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: 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, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + 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: 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: 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: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.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 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.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: 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, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + 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: 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: 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: 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: 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/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css.map b/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css.map new file mode 100644 index 0000000..b36fc9a --- /dev/null +++ b/backend/app/project/static/vendor/bootstrap/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"AAeA;AACA;AACA;AACA;AACA;AACA;EACE,wCAAA;ECoGA,2FAAA;EACQ,mFAAA;;ADhGR,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;AACD,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;EC8FD,wDAAA;EACQ,gDAAA;;ADnER,IAAC;AACD,IAAC;EACC,sBAAA;;AAKJ;EC4PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;EAyB2C,yBAAA;EAA2B,kBAAA;;AAvBtE,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAeJ;EC2PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAgBJ;EC0PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAiBJ;ECyPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,SAAC;AACD,SAAC;EACC,yBAAA;EACA,qBAAA;;AAkBJ;ECwPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAmBJ;ECuPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,WAAC;AACD,WAAC;EACC,yBAAA;EACA,qBAAA;;AA2BJ;AACA;EC6CE,kDAAA;EACQ,0CAAA;;ADpCV,cAAe,KAAK,IAAG;AACvB,cAAe,KAAK,IAAG;ECmOnB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDpOF,yBAAA;;AAEF,cAAe,UAAU;AACzB,cAAe,UAAU,IAAG;AAC5B,cAAe,UAAU,IAAG;EC6NxB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9NF,yBAAA;;AAUF;ECiNI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;EDrPA,kBAAA;ECaA,2FAAA;EACQ,mFAAA;;ADjBV,eAOE,YAAY,UAAU;EC0MpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,wDAAA;EACQ,gDAAA;;ADLV;AACA,WAAY,KAAK;EACf,8CAAA;;AAIF;EC+LI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;;ADtOF,eAIE,YAAY,UAAU;EC2LpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,uDAAA;EACQ,+CAAA;;ADCV,eASE;AATF,eAUE,YAAY,KAAK;EACf,yCAAA;;AAKJ;AACA;AACA;EACE,gBAAA;;AAUF;EACE,6CAAA;EChCA,0FAAA;EACQ,kFAAA;;AD2CV;ECqJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAKF;ECoJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAMF;ECmJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAOF;ECkJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAgBF;ECyII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADlIJ;EC+HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADjIJ;EC8HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADhIJ;EC6HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD/HJ;EC4HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD9HJ;EC2HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtHJ;EACE,kBAAA;EC/EA,kDAAA;EACQ,0CAAA;;ADiFV,gBAAgB;AAChB,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;EACrB,6BAAA;EC4GE,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED7GF,qBAAA;;AAUF;ECjGE,iDAAA;EACQ,yCAAA;;AD0GV,cAAe;ECsFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxFJ,cAAe;ECqFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADvFJ,cAAe;ECoFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtFJ,WAAY;ECmFR,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADrFJ,cAAe;ECkFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADpFJ,aAAc;ECiFV,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD5EJ;ECyEI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED1EF,qBAAA;EC1HA,yFAAA;EACQ,iFAAA","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\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\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\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\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//\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//\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//\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 > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-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\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-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\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//\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\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\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//\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","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\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\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\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 the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-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-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// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\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// Animations\n.animation(@animation) {\n -webkit-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\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.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\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// User select\n// For selecting text on the page\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\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\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// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\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, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\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: 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: 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: 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: 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: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\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.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\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\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\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// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\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 &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\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\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 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 @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\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\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\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\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) when (@index = 1) { // 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) when (@index = 1) { // 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) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\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// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
    `.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\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  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\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  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\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: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\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: 200;\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: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\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\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@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\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-transform: 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// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\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  white-space: nowrap;\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\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","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  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-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\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    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\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/10 (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/10 (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@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\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","//\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: -webkit-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  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;\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    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\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 date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\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: 15px;\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  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\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  float: left;\n  margin-left: -20px;\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  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//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\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 {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\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\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\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) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\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}.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                   { &: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","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\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-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-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\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; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .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      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\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: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
      ,
        , or
        .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\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","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\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 > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} \ No newline at end of file diff --git a/backend/app/project/static/vendor/bootstrap/css/bootstrap.min.css b/backend/app/project/static/vendor/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..0ed4ee2 --- /dev/null +++ b/backend/app/project/static/vendor/bootstrap/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]: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}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-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:62.5%;-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:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;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{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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:400;line-height:1;color:#999}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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.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:#428bca}a.bg-primary:hover{background-color:#3071a9}.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;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.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.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.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.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.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}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,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{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .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;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;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: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:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.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: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:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;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: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:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;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: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:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;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: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:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;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: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{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;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%;padding-left:0;padding-right:0}.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;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:400;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{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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.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-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-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.33;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:400;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-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#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:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.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);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .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;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.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:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;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;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.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-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#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:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.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:#428bca;-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;transition:width .6s ease}.progress-striped .progress-bar{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:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}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{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{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}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child 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 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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.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;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix: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{content:" ";display:table}.clearfix: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-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{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 (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: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: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 (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}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..4a4ca86 Binary files /dev/null and b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..3e09a1c --- /dev/null +++ b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/backend/app/project/static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/backend/app/project/static/vendor/bootstrap/js/bootstrap.js b/backend/app/project/static/vendor/bootstrap/js/bootstrap.js new file mode 100644 index 0000000..721101b --- /dev/null +++ b/backend/app/project/static/vendor/bootstrap/js/bootstrap.js @@ -0,0 +1,1951 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } + +/* ======================================================================== + * Bootstrap: transition.js v3.1.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd', + 'MozTransition' : 'transitionend', + 'OTransition' : 'oTransitionEnd otransitionend', + 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.1.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.1.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.1.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return this.sliding = false + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid.bs.carousel', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid.bs.carousel') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.1.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.1.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(' + + + + \ No newline at end of file diff --git a/backend/app/project/templates/cloud/dashboard.html b/backend/app/project/templates/cloud/dashboard.html new file mode 100644 index 0000000..f2edd5b --- /dev/null +++ b/backend/app/project/templates/cloud/dashboard.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + Somecloud-Dashboard + + + + +
        +
        +
        +
        +

        DASHBOARD +
        + Server Status +

        +
        + +
        +
        +
        + + + + + + + + + + + + + +
        Server NameLast ChangedStatus
        No Server
        +
        +
        +
        + + + add cloud +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/cloud/detail.html b/backend/app/project/templates/cloud/detail.html new file mode 100644 index 0000000..746ff2b --- /dev/null +++ b/backend/app/project/templates/cloud/detail.html @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + Somecloud-Monitoring + + + + + +
        +
        +
        +
        +

        클라우드 모니터링 +
        + 클라우드 사용량 / 네트워크 사용량 +

        +
        + + +
        + +
        +
        + +
        +

        Cloud Detail

        +
        + + + +
        +
        +
        +
        + +
        +

        Hostname : {{ hostname }}.some-cloud.net

        +

        Cloud Public IP : {{ cloud["Reservations"][0]["Instances"][0]["PublicIpAddress"]}}

        +

        Cloud Private IP : {{ cloud["Reservations"][0]["Instances"][0]["PrivateIpAddress"]}}

        +

        Architecture : {{ cloud["Reservations"][0]["Instances"][0]["Architecture"]}}

        +

        PrivateDnsName : {{ cloud["Reservations"][0]["Instances"][0]["PrivateDnsName"]}}

        +

        OutboundTraffic Usage : {{traffic }}

        +
        +
        +
        +
        +
        +
        + + +
        +
        +
        +
        +
        +
        + +
        {{ output["Output"] }}
        +
        +
        +
        +
        +
        +
        + +
        + + +
        +
        +
        +
        +
        + +
        + +
        +
        + + + + +
        +
        + +
        +
        +
        + +
        +
        +
        +
        +
        + +
        +
        + +
        +
        +
        + +
        +
        +
        +
        +
        + +
        +
        + +
        +
        +
        + +
        +
        +
        +
        +
        + + +
        +
        + +
        +
        +
        + +
        +
        +
        +
        +
        + + + {% if cloudinfo.is_lb_env_created == True %} +
        +
        +

        Actions

        + + + +
        +
        +
        +
        +

        App Status

        + {{ app_status }} +
        +
        + {% endif %} + +
        +
        +
        + + + + diff --git a/backend/app/project/templates/cloud/list.html b/backend/app/project/templates/cloud/list.html new file mode 100644 index 0000000..82a33d5 --- /dev/null +++ b/backend/app/project/templates/cloud/list.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + Somecloud-Dashboard + + + + + + +
        +
        +
        +
        +

        클라우드 대시보드 +
        + 클라우드 리스트 +

        +
        + + {% include "_notifier.html" %} + +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + {% if cloud[0] == NULL %} + + + + {% endif %} + + {% for item in cloud %} + + + + + + + + + + + + + + + + + + {% endfor %} + + + + +
        Server NamePlanOSStatusIPRegion생성 날짜제거 날짜작업
        클라우드가 없습니다.
        + {% if item.Cloud.status == "Running" %} + + + + + {% else %} + {{ item.Cloud.hostname }} + {% endif %} + + {{ item.Plan.plan_name}} + + {{ item.Oslist.os_name}} + + {{ item.Cloud.status}} + + {{ item.Cloud.ip_addr}} + + {{ item.Cloud.region}} + + {{ item.Cloud.created_at}} + + {{ item.Cloud.deleted_at}} + + + {% if item.Cloud.status == "Running" %} +
        + + +
        + + + {% else %} +

        제거됨

        + {% endif %} +
        +
        +
        +
        +
        + +
        + + + + +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/cloud_detail.html b/backend/app/project/templates/cloud_detail.html new file mode 100644 index 0000000..a74633f --- /dev/null +++ b/backend/app/project/templates/cloud_detail.html @@ -0,0 +1,27 @@ +{% extends "_base.html" %} +{% block title %}Cloud Detail{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        +
        +

        Information

        +

        Cloud Public IP : {{ cloud["Reservations"][0]["Instances"][0]["PublicIpAddress"]}}

        +

        Cloud Private IP : {{ cloud["Reservations"][0]["Instances"][0]["PrivateIpAddress"]}}

        +

        Architecture : {{ cloud["Reservations"][0]["Instances"][0]["Architecture"]}}

        +

        PrivateDnsName : {{ cloud["Reservations"][0]["Instances"][0]["PrivateDnsName"]}}

        +

        OutboundTraffic Usage : {{traffic }}

        +
        +
        +

        Console Status

        + + +
        +
        +

        Console Logs

        +
        {{ output["Output"] }}
        +
        + +
        + +{% endblock %} diff --git a/backend/app/project/templates/delete_item.html b/backend/app/project/templates/delete_item.html new file mode 100644 index 0000000..9bffbd9 --- /dev/null +++ b/backend/app/project/templates/delete_item.html @@ -0,0 +1,26 @@ + +{% extends "_base.html" %} +{% block title %}Delete Item{% endblock %} +{% block content %} + +
        + + + + + + + + + {% for item in items %} + + + + + {% endfor %} + +
        NameNotes
        {{ item.name }}{{ item.notes }}
        + +
        + +{% endblock %} diff --git a/backend/app/project/templates/download.html b/backend/app/project/templates/download.html new file mode 100644 index 0000000..71efae1 --- /dev/null +++ b/backend/app/project/templates/download.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/backend/app/project/templates/edit_cloud.html b/backend/app/project/templates/edit_cloud.html new file mode 100644 index 0000000..5779698 --- /dev/null +++ b/backend/app/project/templates/edit_cloud.html @@ -0,0 +1,15 @@ +{% extends "_base.html" %} +{% block title %}Edit Item{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        + {{ form.csrf_token }} +
        + {{ form.name.label }} + {{ render_field(form.name, class="form-control", value=cloud.Cloud.hostname) }} +
        + +
        + +{% endblock %} diff --git a/backend/app/project/templates/edit_item.html b/backend/app/project/templates/edit_item.html new file mode 100644 index 0000000..51c2d16 --- /dev/null +++ b/backend/app/project/templates/edit_item.html @@ -0,0 +1,19 @@ +{% extends "_base.html" %} +{% block title %}Edit Item{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        + {{ form.csrf_token }} +
        + {{ form.name.label }} + {{ render_field(form.name, class="form-control", value=item.Items.name) }} +
        +
        + {{ form.notes.label }} + {{ render_field(form.notes, class="form-control", value=item.Items.notes) }} +
        + +
        + +{% endblock %} diff --git a/backend/app/project/templates/edit_keypair.html b/backend/app/project/templates/edit_keypair.html new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/templates/email_change.html b/backend/app/project/templates/email_change.html new file mode 100644 index 0000000..34f2d1c --- /dev/null +++ b/backend/app/project/templates/email_change.html @@ -0,0 +1,20 @@ +{% extends "_base.html" %} +{% block title %}Change Email Address{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, placeholder="Enter New Email Address", class="form-control") }} +
        + +
        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/email_confirmation.html b/backend/app/project/templates/email_confirmation.html new file mode 100644 index 0000000..3682de5 --- /dev/null +++ b/backend/app/project/templates/email_confirmation.html @@ -0,0 +1,7 @@ +{# project/templates/email_confirmation.html #} + +

        Your account on Flask App Blueprint was successfully created.

        + +

        Please click the link below to confirm your email address and activate your account:

        + +

        {{ confirm_url }}

        diff --git a/backend/app/project/templates/email_password_reset.html b/backend/app/project/templates/email_password_reset.html new file mode 100644 index 0000000..05863ef --- /dev/null +++ b/backend/app/project/templates/email_password_reset.html @@ -0,0 +1,7 @@ +{# project/templates/email_password_reset.html #} + +

        You requested that the password for your Flask App Blueprint account be reset.

        + +

        Please click the link below to reset your password:

        + +

        {{ password_reset_url }}

        diff --git a/backend/app/project/templates/home.html b/backend/app/project/templates/home.html new file mode 100644 index 0000000..6b992b7 --- /dev/null +++ b/backend/app/project/templates/home.html @@ -0,0 +1,31 @@ +{% extends "_base.html" %} +{% block title %}Dashboard{% endblock %} +{% block content %} + +
        +
        +

        My Items

        + {% if items[0] == NULL %} +

        No items are added yet, add a new item.

        + {% else %} + + + + + + + + + {% for item in items %} + + + + + {% endfor %} + +
        NameNotes
        {{ item.name }}{{ item.notes }}
        + {% endif %} +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/keypair/add.html b/backend/app/project/templates/keypair/add.html new file mode 100644 index 0000000..9f5328c --- /dev/null +++ b/backend/app/project/templates/keypair/add.html @@ -0,0 +1,51 @@ + + + + + + + + + + +{% from "_formshelper.html" import render_field %} + + + + + + + + Somecloud + + + + +
        +
        +
        +
        +
        +
        키페어 등록
        +
        + +
        + {{ form.csrf_token }} +
        + {{ form.name.label }} + {{ render_field(form.name, class="form-control") }} +
        + + +
        +
        +
        + +
        + +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/keypair/list.html b/backend/app/project/templates/keypair/list.html new file mode 100644 index 0000000..20b0a94 --- /dev/null +++ b/backend/app/project/templates/keypair/list.html @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + Somecloud + + + + +
        +
        +
        +
        +

        Keypair +
        + 키페어 리스트 +

        +
        + + {% include "_notifier.html" %} + +
        +
        +
        +
        +
        + + + + + + + + + + + {% if keypairs[0] == NULL %} + + + + {% endif %} + {% for item in keypairs %} + + + + + + + {% endfor %} + + + +
        idkeypair namefingerprint작업
        키페어가 없습니다.
        {{ item.id }} + {{ item.name }} + + {{ item.fingerprint}} + + + +
        +
        +
        +
        +
        + +
        + + + + +
        +
        +
        + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/landing.html b/backend/app/project/templates/landing.html new file mode 100644 index 0000000..48218ba --- /dev/null +++ b/backend/app/project/templates/landing.html @@ -0,0 +1 @@ +awefawfawe \ No newline at end of file diff --git a/backend/app/project/templates/lock.html b/backend/app/project/templates/lock.html new file mode 100644 index 0000000..f09f065 --- /dev/null +++ b/backend/app/project/templates/lock.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
        +
        + +
        + lock-bg +
        +

        Hello Sarah!

        +

        Please login to unlock your screen.

        +
        +
        + + + + +
        +
        +
        + +
        +
        + +
        +
        +
        +
        +
        + +
        +
        + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/login-multi.html b/backend/app/project/templates/login-multi.html new file mode 100644 index 0000000..7459daf --- /dev/null +++ b/backend/app/project/templates/login-multi.html @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        + + Image + +
        +
        + +
        + +
        +
        +
        +
        + + + +
        +
        + + + +
        +
        +
        + +
        +
        +
        + +
        \ +
        +
        +
        +
        + + +
        + +
        +
        +
        +
        + + + +
        +
        + + + +
        +
        + + + +
        +
        +
        + +
        +
        + +
        +
        +
        +
        + + +
        + +
        +
        +
        +

        Fill with your mail to receive instructions on how to reset your password.

        +
        + + + +
        + +
        +
        +
        +
        + +
        +
        +
        +
        + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/login.html b/backend/app/project/templates/login.html new file mode 100644 index 0000000..79c3d20 --- /dev/null +++ b/backend/app/project/templates/login.html @@ -0,0 +1,32 @@ +{% extends "_base.html" %} +{% block title %}Flask App Blueprint{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, class="form-control", placeholder="Email address") }} +
        +
        + {{ form.password.label }} + {{ render_field(form.password, class="form-control", placeholder="Password") }} +
        + +


        Forgot your password?

        +
        +
        +
        +

        Start your new MVP today!

        +

        Flask App Blueprint: focus on your unique idea.

        +

        With Flask App Blueprint you have a simple to start direclty with your idea, without spending way to much time fixing the basics. Get going, start today.

        +

        Don't have an account yet? Sign up for free!

        +
        +
        + + +{% endblock %} diff --git a/backend/app/project/templates/new/landing_ori.html b/backend/app/project/templates/new/landing_ori.html new file mode 100644 index 0000000..105bd40 --- /dev/null +++ b/backend/app/project/templates/new/landing_ori.html @@ -0,0 +1,374 @@ + + + + + + + + + + Somecloud + + + + + + + + + + + + + + + + + + +
        +
        + +
        +
        +
        +
        + App Name +
        +
        + +
        +
        +
        사이트 무제한 생성 클라우드 웹 호스팅
        +
        +
        +

        사용 여부에 따라 필요한 만큼만 사용하는 방식이며

        +

        24시간 질문 페이지 / 다른 서비스와의 연동 / 모니터링 등의 기능을 통해

        +

        초심자에게 간편한 서비스를 제공합니다

        +
        + +
        +
        +
        +
        +
        +
        + + +
        +
        + +
        +
        + + +
        +
        +
        +
        + App Name +
        +
        + +

        서버 운용 지식이 없어도 쉽게 사용가능한 방식

        +

        생성, 제거를 자유자재로 가능하므로 용량 내에서는 여러 웹사이트 제작 가능

        +

        안전하고 믿을 만한 단독 서버 사용

        +
        +
        +
        +
        +
        +
        +
        +
        +
        + +

        상담을 통해 선정하는 불투명한 산출 방식 대신 정찰제로 운영

        +

        원하는 크기와 기간에 따른 다양한 선택폭

        +

        타사보다 80% 정도 저렴한 가격

        +
        +
        +
        + App Name +
        +
        +
        +
        +
        +
        +
        +
        + App Name +
        +
        + +

        사이트에서 제공하는 다양한 모니터링 기능 제공

        +

        24시간 질문 관리자 상주

        +

        사용량에 따라 서버 크기 자유롭게 변경 가능

        +
        +
        +
        +
        +
        + + + + + + +
        +
        +

        모든 운영체제를 지원합니다 +
        + 여러 운영체제로 사용가능합니다 +

        +
        + +
        + +
        +
        +
        + +
        +
        +

        넓은 선택폭을 제공합니다 +
        + 필요한 서비스와 필요한 크기에 따라 서비스를 선택해보세요 +
        +
        +

        +
        +
        +

        m2.small

        +

        2048GB RAM

        +

        40GB SSD

        +

        2048 GB Traffic

        + select +
        +
        +
        +
        +

        m3.medium

        +

        4000GB RAM

        +

        60GB SSD

        +

        2048 GB Traffic

        + select +
        +
        +
        +
        +

        m3.big

        +

        16384GB RAM

        +

        100GB SSD

        +

        6000 GB Traffic

        + select +
        +
        +
        +
        +

        m4.large

        +

        32768GB RAM

        +

        100GB SSD

        +

        8000 GB Traffic

        + select +
        +
        + +
        +
        + + +
        +
        +

        지금 시작하세요

        +
        + + Join NOW ! + +

        +
        +
        + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/new/login.html b/backend/app/project/templates/new/login.html new file mode 100644 index 0000000..109a9f1 --- /dev/null +++ b/backend/app/project/templates/new/login.html @@ -0,0 +1,75 @@ +{% from "_formshelper.html" import render_field %} + + + + + + + + + + + Login + + + + + + + + + + +
        + +
        + {% include "_notifier.html" %} +
        +
        + + Image + +

        + Login +

        +
        + +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, type="email", class="form-control", placeholder="Email address") }} + +
        +
        + {{ render_field(form.password, class="form-control", placeholder="Password") }} + +
        +
        +
        + +
        + +
        + +
        +

        Don't have an account yet?

        + Sign up for free! +
        +
        +
        +
        +
        +
        + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/new/recover.html b/backend/app/project/templates/new/recover.html new file mode 100644 index 0000000..7cebfad --- /dev/null +++ b/backend/app/project/templates/new/recover.html @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + Somecloud + + + + + + + + + + + + + + + + + + +
        +
        + +
        +
        + + Image + +

        + PASSWORD RESET +

        +
        +
        +
        +

        Fill with your mail to receive instructions on how to reset your password.

        +
        + + + +
        + +
        +
        +
        + +
        +
        + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/new/signup.html b/backend/app/project/templates/new/signup.html new file mode 100644 index 0000000..f960c74 --- /dev/null +++ b/backend/app/project/templates/new/signup.html @@ -0,0 +1,70 @@ +{% from "_formshelper.html" import render_field %} + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + +
        +
        + +
        +
        + + Image + +

        + Register +

        +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, class="form-control", placeholder="Email address") }} +
        +
        + {{ form.password.label }} + {{ render_field(form.password, class="form-control", placeholder="Password") }} +
        +
        + {{ form.confirm.label }} + {{ render_field(form.confirm, class="form-control", placeholder="Confirm password") }} +
        + +
        + +
        +
        + +
        +
        + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/app/project/templates/password_change.html b/backend/app/project/templates/password_change.html new file mode 100644 index 0000000..41d7e37 --- /dev/null +++ b/backend/app/project/templates/password_change.html @@ -0,0 +1,20 @@ +{% extends "_base.html" %} +{% block title %}Change Password{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.password.label }} + {{ render_field(form.password, placeholder="Enter New Password", class="form-control") }} +
        + +
        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/password_reset_email.html b/backend/app/project/templates/password_reset_email.html new file mode 100644 index 0000000..54e0a8c --- /dev/null +++ b/backend/app/project/templates/password_reset_email.html @@ -0,0 +1,20 @@ +{% extends "_base.html" %} +{% block title %}Forgot password{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, class="form-control", placeholder="Enter your email address") }} +
        + +
        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/register.html b/backend/app/project/templates/register.html new file mode 100644 index 0000000..441f605 --- /dev/null +++ b/backend/app/project/templates/register.html @@ -0,0 +1,41 @@ +{% extends "_base.html" %} +{% block title %}Get started with a free account{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.email.label }} + {{ render_field(form.email, class="form-control", placeholder="Email address") }} +
        +
        + {{ form.password.label }} + {{ render_field(form.password, class="form-control", placeholder="Password") }} +
        +
        + {{ form.confirm.label }} + {{ render_field(form.confirm, class="form-control", placeholder="Confirm password") }} +
        + +
        +
        +
        +

        Start your new MVP today!

        +

        Flask App Blueprint: focus on your unique idea.

        +

        With Flask App Blueprint you have a simple to start direclty with your idea, without spending way to much time fixing the basics. Get going, start today.

        +

        +

          +
        • Powerful technology stack (Python, Postgress, Flask, Bootstrap, and more).
        • +
        • Directly able to go live by deploying to Heroku.
        • +
        • Register, Login, CRUD to database, public and private posts.
        • +
        +

        +

        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/reset_password_with_token.html b/backend/app/project/templates/reset_password_with_token.html new file mode 100644 index 0000000..e61c599 --- /dev/null +++ b/backend/app/project/templates/reset_password_with_token.html @@ -0,0 +1,20 @@ +{% extends "_base.html" %} +{% block title %}Change your password{% endblock %} +{% from "_formshelper.html" import render_field %} + +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.password.label }} + {{ render_field(form.password, class="form-control", placeholder="New Password") }} +
        + +
        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/secgroup/detail.html b/backend/app/project/templates/secgroup/detail.html new file mode 100644 index 0000000..06b96b4 --- /dev/null +++ b/backend/app/project/templates/secgroup/detail.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + Somecloud-Security + + + + +
        +
        + +
        +
        +

        SECURITY +
        + Security Detail +

        +
        + +
        +
        +
        +
        +
        + + + + + + + + + + + + + {% for item in detail %} + + + + + + + + + + {% endfor %} + +
        ProtocolFromPortToportCidrDetailActions
        + {{ item.protocol }} + + {{ item.fromport }} + + {{ item.toport }} + + {{ item.cidr }} + + {{ item.desc }} + +
        + + +
        + + +
        +
        +
        +

        방화벽 규칙을 더 생성할 수 있습니다.

        + 규칙 생성 +
        +
        +
        +
        +
        + +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/secgroup/groupadd.html b/backend/app/project/templates/secgroup/groupadd.html new file mode 100644 index 0000000..6dc9558 --- /dev/null +++ b/backend/app/project/templates/secgroup/groupadd.html @@ -0,0 +1,54 @@ + + + + + + + + + + +{% from "_formshelper.html" import render_field %} + + + + + + + + Somecloud-Security + + + + +
        +
        + +
        +
        +
        +
        방화벽 등록
        +
        + +
        + {{ form.csrf_token }} +
        + {{ form.name.label }} + {{ render_field(form.name, class="form-control") }} +
        + + + + +
        +
        +
        + +
        + +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/secgroup/list.html b/backend/app/project/templates/secgroup/list.html new file mode 100644 index 0000000..2c58078 --- /dev/null +++ b/backend/app/project/templates/secgroup/list.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + Somecloud-Security + + + + +
        +
        + {% include "_notifier.html" %} +
        +
        +

        방화벽 +
        + 생성된 방화벽 목록 +

        +
        + +
        +
        +
        +
        +
        + + + + + + + + + + + {% for item in secgroups %} + + + + + + + + + + + {% endfor %} + + + +
        이름그룹 ID사용중인 인스턴스VPC ID
        + + + + {{ item.sec_group_id}} + + {{ item.associated_to}} + + {{ item.vpc_id}} +
        +
        +
        +
        +
        + +
        + + +
        +

        보안 그룹을 더 생성할 수 있습니다.

        + 방화벽 생성 +
        + + + +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/secgroup/ruleadd.html b/backend/app/project/templates/secgroup/ruleadd.html new file mode 100644 index 0000000..9a963b3 --- /dev/null +++ b/backend/app/project/templates/secgroup/ruleadd.html @@ -0,0 +1,65 @@ + + + + + + + + + + +{% from "_formshelper.html" import render_field %} + + + + + + + + Somecloud-Security + + + + +
        +
        + +
        +
        +
        +
        Add SecurityRule
        +
        + +
        + {{ form.csrf_token }} +
        + {{ form.fromport.label }} + {{ render_field(form.fromport, class="form-control") }} +
        +
        + {{ form.toport.label }} + {{ render_field(form.toport, class="form-control") }} +
        +
        + {{ form.protocol.label }} + {{ render_field(form.protocol, class="form-control") }} +
        +
        + {{ form.cidr.label }} + {{ render_field(form.cidr, class="form-control") }} +
        + + + +
        +
        +
        + +
        + +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/secgroup/ruleedit.html b/backend/app/project/templates/secgroup/ruleedit.html new file mode 100644 index 0000000..2b5cc63 --- /dev/null +++ b/backend/app/project/templates/secgroup/ruleedit.html @@ -0,0 +1,63 @@ + + + + + + + + + + +{% from "_formshelper.html" import render_field %} + + + + + + + + Somecloud-Security + + + + +
        +
        + +
        +
        +
        +
        Security Rule Detail
        +
        + +
        + {{ form.csrf_token }} +
        + {{ form.cidr.label }} + {{ render_field(form.cidr, class="form-control", value=detail.cidr) }} +
        +
        + {{ form.protocol.label }} + {{ render_field(form.protocol, class="form-control", value=detail.protocol) }} +
        +
        + {{ form.fromport.label }} + {{ render_field(form.fromport, class="form-control", value=detail.fromport) }} +
        +
        + {{ form.toport.label }} + {{ render_field(form.toport, class="form-control", value=detail.toport) }} +
        + +
        +
        +
        + +
        + +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/secgroup_detail.html b/backend/app/project/templates/secgroup_detail.html new file mode 100644 index 0000000..5ffc26d --- /dev/null +++ b/backend/app/project/templates/secgroup_detail.html @@ -0,0 +1,54 @@ +{% extends "_base.html" %} +{% block title %}Security Rule Detail{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        +
        + + + + + + + + + + + + + {% for item in detail %} + + + + + + + + + {% endfor %} + +
        ProtocolFromPortToPortCIDRDescription
        + {{ item.protocol }} + + {{ item.fromport }} + + {{ item.toport }} + + {{ item.cidr }} + + +
        +

        보안 규칙을 더 생성할 수 있습니다. add a new item.

        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/secgroup_edit.html b/backend/app/project/templates/secgroup_edit.html new file mode 100644 index 0000000..b299a79 --- /dev/null +++ b/backend/app/project/templates/secgroup_edit.html @@ -0,0 +1,27 @@ +{% extends "_base.html" %} +{% block title %}Edit securityrule{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        + {{ form.csrf_token }} +
        + {{ form.cidr.label }} + {{ render_field(form.cidr, class="form-control", value=detail.cidr) }} +
        +
        + {{ form.protocol.label }} + {{ render_field(form.protocol, class="form-control", value=detail.protocol) }} +
        +
        + {{ form.fromport.label }} + {{ render_field(form.fromport, class="form-control", value=detail.fromport) }} +
        +
        + {{ form.toport.label }} + {{ render_field(form.toport, class="form-control", value=detail.toport) }} +
        + +
        + +{% endblock %} diff --git a/backend/app/project/templates/secgroup_rule_add.html b/backend/app/project/templates/secgroup_rule_add.html new file mode 100644 index 0000000..310f43e --- /dev/null +++ b/backend/app/project/templates/secgroup_rule_add.html @@ -0,0 +1,36 @@ +{% extends "_base.html" %} +{% block title %}Add Security Rule{% endblock %} +{% from "_formshelper.html" import render_field %} +{% block content %} + +
        +
        +
        + {{ form.csrf_token }} +
        + {{ form.fromport.label }} + {{ render_field(form.fromport, class="form-control") }} +
        +
        + {{ form.toport.label }} + {{ render_field(form.toport, class="form-control") }} +
        +
        + {{ form.protocol.label }} + {{ render_field(form.protocol, class="form-control") }} +
        +
        + {{ form.cidr.label }} + {{ render_field(form.cidr, class="form-control") }} +
        + + +
        +
        +
        +

        On adding items

        +

        If you need hep, provide it here.

        +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/support/add.html b/backend/app/project/templates/support/add.html new file mode 100644 index 0000000..bc3e3aa --- /dev/null +++ b/backend/app/project/templates/support/add.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + Somecloud-Support + + + + + +
        +
        +
        +
        +

        SUPPORT +
        + Support Add +

        +
        +
        +
        + +
        +
        + +
        + +
        +
        +
        + + + + + + + + + + + + + + + +
        + +
        + +
        + +
        +
        + +
        +
        + +
        +
        + + + +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/support/detail.html b/backend/app/project/templates/support/detail.html new file mode 100644 index 0000000..ce2b4e2 --- /dev/null +++ b/backend/app/project/templates/support/detail.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + Somecloud-Support + + + + + +
        +
        +
        +
        +

        SUPPORT +
        + Support Detail +

        +
        +
        +
        + + +
        +
        +
        + +
        +
        +
        +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        +
        + + + + +
        +
        +
        + +
        +
        +
        + + +
        +
        +
        + +
        +
        +
        +
        2021/03/14 19:05:44
        +

        JENNY

        +

        + 기술 엔지니어 +

        +
        +
        + 안녕하세요 JENNY 님. 대시보드 - Cloud list 에서 CentOS 로 재설치해야 할 것 같습니다. +
        +
        +
        +
        +
        +
        + +
        +
        +
        +
        2021/03/14 10:35:14
        +

        User

        +

        + 사용자 +

        +
        +
        +

        weofijweoifjwoweij

        +
        +
        +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/support/list.html b/backend/app/project/templates/support/list.html new file mode 100644 index 0000000..b71b171 --- /dev/null +++ b/backend/app/project/templates/support/list.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + Somecloud-Support + + + + + +
        +
        +
        +
        +

        SUPPORT +
        + Support Page +

        +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + +
        ID제목날짜상태
        1서버 재부팅 에러 문제03월 11일 (목)대기 중
        +
        +
        +
        + +
        +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/user/profile.html b/backend/app/project/templates/user/profile.html new file mode 100644 index 0000000..64da5fa --- /dev/null +++ b/backend/app/project/templates/user/profile.html @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + Somecloud-UserProfile + + + + + + +
        +
        +
        +
        +

        사용자 정보 +
        + 인적사항 변경 사항 +

        +
        + +
        +
        +
        + + +
        +
        +
        + +
        +
        +
        + + Change E-mail +
        + {{current_user.email}} +
        +
        +
        + +
        +
        +
        + + +
        +
        +
        + +
        +
        +
        + + Change Password +
        +
        +
        + + +
        +
        +
        +
        + +
        +

        Member since: {{ current_user.registered_on.strftime("%A %B %d, %Y") }}

        + {% if current_user.last_logged_in != None %} +

        Last Logged In: {{ current_user.last_logged_in.strftime("%A %B %d, %Y") }}

        + {% else %} +

        First time logged in. Welcome!

        + {% endif %} + {% if current_user.email_confirmed_on != None %} +

        Email confirmed on: {{ current_user.email_confirmed_on.strftime("%A %B %d, %Y") }}

        + {% else %} +

        Email has not been confirmed!

        + {% endif %} +
        +
        +
        + + +
        +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/templates/user_profile.html b/backend/app/project/templates/user_profile.html new file mode 100644 index 0000000..1beb5b3 --- /dev/null +++ b/backend/app/project/templates/user_profile.html @@ -0,0 +1,39 @@ +{% extends "_base.html" %} +{% from "_formshelper.html" import render_field %} +{% block title %}User Profile{% endblock %} + +{% block content %} + +
        +
        Email Address
        +
        +

        {{current_user.email}}

        +
        +
        + +
        +
        Account Actions
        + +
        + +
        +
        Statistics
        +
        +

        Member since: {{ current_user.registered_on.strftime("%A %B %d, %Y") }}

        + {% if current_user.last_logged_in != None %} +

        Last Logged In: {{ current_user.last_logged_in.strftime("%A %B %d, %Y") }}

        + {% else %} +

        First time logged in. Welcome!

        + {% endif %} + {% if current_user.email_confirmed_on != None %} +

        Email confirmed on: {{ current_user.email_confirmed_on.strftime("%A %B %d, %Y") }}

        + {% else %} +

        Email has not been confirmed!

        + {% endif %} +
        +
        + +{% endblock %} diff --git a/backend/app/project/templates/viewtemplate.html b/backend/app/project/templates/viewtemplate.html new file mode 100644 index 0000000..449fe4b --- /dev/null +++ b/backend/app/project/templates/viewtemplate.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
        +
        + +
        +
        + + + + \ No newline at end of file diff --git a/backend/app/project/tests/fixtures/oslist.csv b/backend/app/project/tests/fixtures/oslist.csv new file mode 100644 index 0000000..7dffae5 --- /dev/null +++ b/backend/app/project/tests/fixtures/oslist.csv @@ -0,0 +1,3 @@ +id,os_name,aws_image_id +1,ubuntu,ami-067abcae434ee508b +2,amazonLinux,ami-09282971cf2faa4c9 \ No newline at end of file diff --git a/backend/app/project/tests/fixtures/plan.csv b/backend/app/project/tests/fixtures/plan.csv new file mode 100644 index 0000000..47e82bd --- /dev/null +++ b/backend/app/project/tests/fixtures/plan.csv @@ -0,0 +1,2 @@ +id,plan_name,aws_plan,core,ram,traffic,ssd,iops +1,m1.small,t3.small,1,1024,1,40,4000 \ No newline at end of file diff --git a/backend/app/project/tests/test_basic.py b/backend/app/project/tests/test_basic.py new file mode 100644 index 0000000..c59dd08 --- /dev/null +++ b/backend/app/project/tests/test_basic.py @@ -0,0 +1,75 @@ +# project/test_basic.py +import unittest + +from project import app, db, mail +import os + +class BasicTests(unittest.TestCase): + # SETUP AND TEARDOWN + def setUp(self): + app.config['TESTING'] = True + app.config['WTF_CSRF_ENABLED'] = False + app.config['DEBUG'] = False + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join( 'testcode.db') + self.app = app.test_client() + db.drop_all() + db.create_all() + + mail.init_app(app) + self.assertEqual(app.debug, False) + + def tearDown(self): + pass + + # HELPER METHODS + def register(self, email, password, confirm): + return self.app.post( + '/register', + data=dict(email=email, password=password, confirm=confirm), + follow_redirects=True + ) + + def login(self, email, password): + return self.app.post( + '/login', + data=dict(email=email, password=password), + follow_redirects=True + ) + + def logout_user(self): + return self.app.get( + '/logout', + follow_redirects=True + ) + + # TESTS + def test_main_page(self): + response = self.app.get('/', follow_redirects=True) + self.assertEqual(response.status_code, 200) + + def test_valid_user_registration(self): + response = self.register('test11@test11.com', + 'PasswIsGood13#$', + 'PasswIsGood13#$') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Success! Thanks for registering.', response.data) + + def test_invalid_user_registration_different_passwords(self): + response = self.register('test22@test22.com', + 'Pass129', + 'Different') + self.assertIn(b'Field must be equal to password.', response.data) + + def test_invalid_user_registration_duplicate_email(self): + response = self.register('test33@test33.com', + '%^#@12sa', + '%^#@12sa') + self.assertEqual(response.status_code, 200) + response = self.register('test33@test33.com', + '89298dka', + '89298dka') + self.assertIn(b'Error! Unable to process registration.', response.data) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/app/project/tests/test_items.py b/backend/app/project/tests/test_items.py new file mode 100644 index 0000000..01f1a97 --- /dev/null +++ b/backend/app/project/tests/test_items.py @@ -0,0 +1,183 @@ +import unittest + +from project import app, db, mail +from project.models import Items, User +import os + +class UserTests(unittest.TestCase): + # SETUP AND TEARDOWN + def setUp(self): + app.config['TESTING'] = True + app.config['WTF_CSRF_ENABLED'] = False + app.config['DEBUG'] = False + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join( 'testcode-db.db') + self.app = app.test_client() + db.drop_all() + db.create_all() + + mail.init_app(app) + self.assertEqual(app.debug, False) + + def tearDown(self): + pass + + # HELPER METHODS + def register(self, email, password, confirm): + return self.app.post( + '/register', + data=dict(email=email, password=password, confirm=confirm), + follow_redirects=True + ) + + def login(self, email, password): + return self.app.post( + '/login', + data=dict(email=email, password=password), + follow_redirects=True + ) + + def register_user(self): + new_user = User(email='user1@flaskappblueprint.com', password='User$$1!') + new_user.email_confirmed = True + db.session.add(new_user) + db.session.commit() + + def register_user2(self): + new_user = User(email='user2@flaskappblueprint.com', password='User$$2&') + new_user.email_confirmed = True + db.session.add(new_user) + db.session.commit() + + def login_user(self): + self.app.get('/login', follow_redirects=True) + self.login('user1@flaskappblueprint.com', 'User$$1!') + + def login_user2(self): + self.app.get('/login', follow_redirects=True) + self.login('user2@flaskappblueprint.com', 'User$$2&') + + def logout_user(self): + self.app.get('/logout', follow_redirects=True) + + def add_items(self): + self.register_user() + self.register_user2() + user1 = User.query.filter_by(email='user1@flaskappblueprint.com').first() + user2 = User.query.filter_by(email='user2@flaskappblueprint.com').first() + item1 = Items('Lorem ipsum', 'Consectetur adipiscing elit', user1.id) + item2 = Items('Aliquam felis', ' Pellentesque volutpat consequat est.', user1.id) + item3 = Items('Sed a dapibus', 'Fusce gravida posuere turpis, ut leo suscipit at.', user1.id) + item4 = Items('Vestibulum', 'Nullam fermentum scelerisque sem', user2.id) + item5 = Items('Sed sodales', 'Mauris pellentesque leo a erat finibus semper', user2.id) + db.session.add(item1) + db.session.add(item2) + db.session.add(item3) + db.session.add(item4) + db.session.add(item5) + db.session.commit() + + # TESTS + def test_main_page(self): + self.add_items() + self.login_user() + response = self.app.get('/', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Lorem ipsum', response.data) + self.assertIn(b'Aliquam felis', response.data) + self.assertIn(b'user1@flaskappblueprint.com', response.data) + self.assertNotIn(b'Vestibulum', response.data) + self.assertNotIn(b'Sed sodales', response.data) + + def test_add_item_page(self): + self.register_user() + self.login_user() + response = self.app.get('/add_item', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Add Item', response.data) + + def test_add_item(self): + self.register_user() + self.login_user() + response = self.app.post( + '/add_item', + data=dict(name='Rare Item', + notes='Test if Special Item is Added'), + follow_redirects=True) + self.assertIn(b'Item added successfully!', response.data) + self.assertIn(b'Rare Item', response.data) + self.assertIn(b'Test if Special Item is Added', response.data) + + def test_add_invalid_item(self): + self.register_user() + self.login_user() + response = self.app.post( + '/add_item', + data=dict(name='', + notes='Test if item without title is added'), + follow_redirects=True) + self.assertIn(b'This field is required.', response.data) + + def test_item_edit_valid_user(self): + self.add_items() + self.login_user() + response = self.app.get('/edit_item/2', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Aliquam felis', response.data) + self.assertIn(b'user1@flaskappblueprint.com', response.data) + + def test_item_edit_invalid_user(self): + self.add_items() + self.login_user2() + response = self.app.get('/edit_item/2', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Incorrect permissions to access this item.', response.data) + + def test_item_edit_invalid_item(self): + self.add_items() + self.login_user2() + response = self.app.get('/edit_item/98', follow_redirects=True) + self.assertIn(b'Item does not exist.', response.data) + + def test_item_delete_valid_user(self): + self.add_items() + self.login_user() + response = self.app.get('/delete_item/2', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'was deleted', response.data) + + def test_item_delete_invalid_user(self): + self.add_items() + self.login_user2() + response = self.app.get('/delete_item/2', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Incorrect permissions to delete this item', response.data) + + def test_item_delete_invalid_item(self): + self.add_items() + self.login_user2() + response = self.app.get('/delete_item/99', follow_redirects=True) + self.assertEqual(response.status_code, 404) + + def test_item_all_items(self): + self.add_items() + self.login_user() + response = self.app.get('/all_items', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Lorem ipsum', response.data) + self.assertIn(b'Aliquam felis', response.data) + self.assertIn(b'Sed a dapibus', response.data) + self.assertNotIn(b'Vestibulum', response.data) + self.assertNotIn(b'Sed sodales', response.data) + self.logout_user() + self.login_user2() + response = self.app.get('/all_items', follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Vestibulum', response.data) + self.assertIn(b'Sed sodales', response.data) + self.assertNotIn(b'Lorem ipsum', response.data) + self.assertNotIn(b'Aliquam felis', response.data) + self.logout_user() + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/app/project/tests/test_users.py b/backend/app/project/tests/test_users.py new file mode 100644 index 0000000..1bae145 --- /dev/null +++ b/backend/app/project/tests/test_users.py @@ -0,0 +1,223 @@ +import unittest +import os +from project import app, db, mail +from project.models import User + + +class UserTests(unittest.TestCase): + # SETUP AND TEARDOWN + def setUp(self): + app.config['TESTING'] = True + app.config['WTF_CSRF_ENABLED'] = False + app.config['DEBUG'] = False + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join( 'testcode.db') + + self.app = app.test_client() + db.drop_all() + db.create_all() + + mail.init_app(app) + self.assertEqual(app.debug, False) + + def tearDown(self): + pass + + # HELPER METHODS + def register(self, email, password, confirm): + return self.app.post( + '/register', + data=dict(email=email, password=password, confirm=confirm), + follow_redirects=True + ) + + def login(self, email, password): + return self.app.post( + '/login', + data=dict(email=email, password=password), + follow_redirects=True + ) + + def create_admin_user(self): + new_user = User(email='admin@flaskappblueprint.com', password='adminpassword123') + new_user.role = 'admin' + new_user.email_confirmed = True + db.session.add(new_user) + db.session.commit() + + def create_email_confirmed_user(self): + new_user = User(email='confirmed@flaskappblueprint.com', password='C0nFirmed!') + new_user.email_confirmed = True + db.session.add(new_user) + db.session.commit() + + # TESTS + def test_user_registration_form_displays(self): + response = self.app.get('/register') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Get started with a free account', response.data) + + def test_valid_user_registration(self): + self.app.get('/register', follow_redirects=True) + response = self.register('test11@test11.com', 'c0mple*p$ssword!', 'c0mple*p$ssword!') + self.assertIn(b'Thanks for registering', response.data) + + def test_duplicate_email_user_registration_error(self): + self.app.get('/register', follow_redirects=True) + self.register('test@test.com', 'N98=Q\?r-Y=!=jjg', 'N98=Q\?r-Y=!=jjg') + self.app.get('/register', follow_redirects=True) + response = self.register('test@test.com', 'N98=Q\?r-Y=!=jjg', 'N98=Q\?r-Y=!=jjg') + self.assertIn(b'Unable to process registration.', response.data) + + def test_missing_field_user_registration_error(self): + self.app.get('/register', follow_redirects=True) + response = self.register('test@test.com', ')gm@c8Zqw)Q4+B3P', '') + self.assertIn(b'This field is required.', response.data) + + def test_login_form_displays(self): + response = self.app.get('/login') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Log In', response.data) + self.assertIn(b'Sign up for free!', response.data) + self.assertIn(b'Forgot your password?', response.data) + + def test_valid_login(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + self.assertIn(b'confirmed@flaskappblueprint.com', response.data) + self.assertIn(b'You are now successfully logged in.', response.data) + + def test_login_without_registering(self): + self.app.get('/login', follow_redirects=True) + response = self.login('nonexistinguser@flaskappblueprint.com', 'LZ-u}>(R-wn!q45g') + self.assertIn(b'Incorrect login credentials.', response.data) + + def test_valid_logout(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + self.assertIn(b'You are now successfully logged in.', response.data) + response = self.app.get('/logout', follow_redirects=True) + self.assertIn(b'You are now logged out.', response.data) + + def test_invalid_logout_within_being_logged_in(self): + response = self.app.get('/logout', follow_redirects=True) + self.assertIn(b'Log In', response.data) + + def test_user_profile_page(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + response = self.app.get('/user_profile') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Email Address', response.data) + self.assertIn(b'Account Actions', response.data) + self.assertIn(b'Statistics', response.data) + self.assertIn(b'Member since', response.data) + + def test_extra_verification_email_after_logging_in(self): + self.app.get('/register', follow_redirects=True) + response = self.register('test11@test11.com', 'c0mple*p$ssword!', 'c0mple*p$ssword!') + self.assertIn(b'Thanks for registering', response.data) + self.app.get('/login', follow_redirects=True) + response = self.login('test11@test11.com', 'c0mple*p$ssword!') + self.assertIn(b'Email sent to confirm your email address', response.data) + + def test_user_profile_without_logging_in(self): + response = self.app.get('/user_profile') + self.assertEqual(response.status_code, 302) + self.assertIn(b'You should be redirected automatically to target URL:', response.data) + self.assertIn(b'/login?next=%2Fuser_profile', response.data) + + def test_change_email_address_page(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + response = self.app.get('/email_change') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Change Email Address', response.data) + + def test_change_email_address(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + self.app.post('/email_change', data=dict(email='confirmednew@flaskappblueprint.com'), follow_redirects=True) + response = self.app.get('/user_profile') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Email Address', response.data) + self.assertIn(b'confirmednew@flaskappblueprint.com', response.data) + self.assertNotIn(b'confirmed@flaskappblueprint.com', response.data) + + def test_change_email_address_with_existing_email(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + response = self.app.post('/email_change', data=dict(email='confirmed@flaskappblueprint.com'), follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Sorry, that email already exists!', response.data) + self.assertIn(b'Change Email Address', response.data) + + def test_change_email_without_logging_in(self): + response = self.app.get('/email_change') + self.assertEqual(response.status_code, 302) + self.assertIn(b'You should be redirected automatically to target URL:', response.data) + self.assertIn(b'/login?next=%2Femail_change', response.data) + response = self.app.post('/email_change', data=dict(email='testemail@test.com'), follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Log In', response.data) + self.assertIn(b'Sign up for free!', response.data) + + def test_change_password_page(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + response = self.app.get('/password_change') + self.assertEqual(response.status_code, 200) + self.assertIn(b'Change Password', response.data) + + def test_change_password(self): + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + response = self.app.post('/password_change', data=dict(password='MyNewPassword1234'), follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Password has been updated!', response.data) + self.assertIn(b'User Profile', response.data) + + def test_change_password_logging_in(self): + response = self.app.get('/password_change') + self.assertEqual(response.status_code, 302) + self.assertIn(b'You should be redirected automatically to target URL:', response.data) + self.assertIn(b'/login?next=%2Fpassword_change', response.data) + response = self.app.post('/password_change', data=dict(password='MyNewPassword1234'), follow_redirects=True) + self.assertEqual(response.status_code, 200) + self.assertIn(b'Log In', response.data) + self.assertIn(b'Sign up for free!', response.data) + + def test_admin_site_valid_access(self): + self.create_admin_user() + self.app.get('/login', follow_redirects=True) + response = self.login('admin@flaskappblueprint.com', 'adminpassword123') + self.assertIn(b'admin@flaskappblueprint.com', response.data) + self.assertIn(b'Admin Dashboard', response.data) + response = self.app.get('/admin_view_users') + self.assertIn(b'Admin: All Users', response.data) + + def test_admin_site_invalid_access(self): + response = self.app.get('/admin_view_users') + self.assertEqual(response.status_code, 302) + self.assertIn(b'You should be redirected automatically to target URL:', response.data) + self.assertIn(b'/login?next=%2Fadmin_view_users', response.data) + self.create_email_confirmed_user() + self.app.get('/login', follow_redirects=True) + response = self.login('confirmed@flaskappblueprint.com', 'C0nFirmed!') + self.assertIn(b'confirmed@flaskappblueprint.com', response.data) + self.assertNotIn(b'Admin Dashboard', response.data) + response = self.app.get('/admin_view_users') + self.assertEqual(response.status_code, 403) + self.assertIn(b'403', response.data) + self.assertIn(b'Forbidden', response.data) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/app/project/users/__init__.py b/backend/app/project/users/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/project/users/forms.py b/backend/app/project/users/forms.py new file mode 100644 index 0000000..575cd38 --- /dev/null +++ b/backend/app/project/users/forms.py @@ -0,0 +1,29 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, PasswordField +from wtforms.validators import DataRequired, Length, EqualTo, Email + + +class RegisterForm(FlaskForm): + email = StringField('Email', validators=[DataRequired(), + Email(), + Length(min=6, max=254)]) + password = PasswordField('Password', validators=[DataRequired(), + Length(min=6, max=254)]) + confirm = PasswordField('Repeat Password', + validators=[DataRequired(), + EqualTo('password')]) + + +class LoginForm(FlaskForm): + email = StringField('Email', validators=[DataRequired(), + Email(), + Length(min=6, max=40)]) + password = PasswordField('Password', validators=[DataRequired()]) + + +class EmailForm(FlaskForm): + email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=254)]) + + +class PasswordForm(FlaskForm): + password = PasswordField('Password', validators=[DataRequired()]) diff --git a/backend/app/project/users/views.py b/backend/app/project/users/views.py new file mode 100644 index 0000000..5d309eb --- /dev/null +++ b/backend/app/project/users/views.py @@ -0,0 +1,447 @@ +# project/users/views.py + +# IMPORTS +from flask import render_template, Blueprint, request, redirect, url_for, flash, Markup, abort, make_response, jsonify +from sqlalchemy.exc import IntegrityError +from flask_login import login_user, current_user, login_required, logout_user +from itsdangerous import URLSafeTimedSerializer +from threading import Thread +from flask_mail import Message +from datetime import datetime, timedelta + +from .forms import RegisterForm, LoginForm, EmailForm, PasswordForm +from project import app, db, mail +from project.models import User, Balance +import project.cloud.views as cloud_env + +# CONFIG +users_blueprint = Blueprint('users', __name__, template_folder='templates') + +# HELPERS +def send_async_email(msg): + with app.app_context(): + try: + mail.send(msg) + print(msg) + except Exception as e: + print("ERROR") + print(e) + + +def send_email(subject, recipients, html_body): + msg = Message(subject, recipients=recipients) + msg.html = html_body + thr = Thread(target=send_async_email, args=[msg]) + thr.start() + + +def send_confirmation_email(user_email): + confirm_serializer = URLSafeTimedSerializer(app.config['SECRET_KEY']) + + confirm_url = url_for( + 'users.confirm_email', + token=confirm_serializer.dumps(user_email, salt='email-confirmation-salt'), + _external=True) + + html = render_template( + 'email_confirmation.html', + confirm_url=confirm_url) + print("send to {}".format(user_email)) + send_email('Confirm Your Email Address', [user_email], html) + + +def send_password_reset_email(user_email): + password_reset_serializer = URLSafeTimedSerializer(app.config['SECRET_KEY']) + + password_reset_url = url_for( + 'users.reset_with_token', + token=password_reset_serializer.dumps(user_email, salt='password-reset-salt'), + _external=True) + + html = render_template( + 'email_password_reset.html', + password_reset_url=password_reset_url) + + send_email('Password Reset Requested', [user_email], html) + + +# ROUTES +@users_blueprint.route('/register', methods=['GET', 'POST']) +def register(): + form = RegisterForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + try: + new_user = User(form.email.data, form.password.data) + new_user.authenticated = True + db.session.add(new_user) + db.session.commit() + send_confirmation_email(new_user.email) + + # if request.args("rest") == "true": + # auth_token = new_user.encode_auth_token(user.id) + # responseObject = { + # 'status': 'success', + # 'message': 'Successfully registered.', + # 'auth_token': auth_token.decode() + # } + # return make_response(jsonify(responseObject)), 201 + + message = Markup( + "Success! Thanks for registering. Please check your email to confirm your email address.") + flash(message, 'success') + return redirect(url_for('home')) + + except IntegrityError: + db.session.rollback() + message = Markup( + "Error! Unable to process registration.") + flash(message, 'danger') + return render_template('new/signup.html', form=form) + +@users_blueprint.route('/token', methods=["POST"]) +def token_login(): + post_data = request.get_json() + print(post_data) + try: + # fetch the user data + user = User.query.filter_by(email=post_data.get('email')).first() + if user is not None and user.is_correct_password(post_data.get('pass')): + if user.is_email_confirmed is not True: + user.authenticated = True + db.session.add(user) + db.session.commit() + login_user(user) + return redirect(url_for('users.resend_email_confirmation'), ) + if user.is_email_confirmed is True: + auth_token = user.encode_auth_token(user.id) + if auth_token: + responseObject = { + 'status': 'success', + 'message': 'Successfully logged in.', + 'auth_token': auth_token.decode() + } + return make_response(jsonify(responseObject)), 200 + else: + responseObject = { + 'status': 'fail', + 'message': 'account incorrect', + } + return make_response(jsonify(responseObject)), 500 + except Exception as e: + print(e) + responseObject = { + 'status': 'fail', + 'message': 'Try again' + } + return make_response(jsonify(responseObject)), 500 + + +@users_blueprint.route('/login', methods=['GET', 'POST']) +def login(): + print("Login") + form = LoginForm(request.form) + if request.method == 'POST': + if form.validate_on_submit(): + user = User.query.filter_by(email=form.email.data).first() + if user is not None and user.is_correct_password(form.password.data): + if user.is_email_confirmed is not True: + user.authenticated = True + db.session.add(user) + db.session.commit() + login_user(user) + # responseObject = { + # 'status': 'success', + # 'message': 'Email is not confirmed', + # } + # return make_response(jsonify(responseObject)), 200 + return redirect(url_for('users.resend_email_confirmation'), ) + + if user.is_email_confirmed is True: + auth_token = user.encode_auth_token(user.id) + user.authenticated = True + user.last_logged_in = user.current_logged_in + user.current_logged_in = datetime.now() + db.session.add(user) + db.session.commit() + login_user(user) + # responseObject = { + # 'status': 'success', + # 'message': 'Successfully logged in.', + # 'auth_token': auth_token.decode() + # } + # return make_response(jsonify(responseObject)), 200 + message = Markup( + "Welcome back! You are now successfully logged in.") + flash(message, 'success') + return redirect(url_for('cloud.all_clouds')) + else: + message = Markup( + "Error! Incorrect login credentials.") + flash(message, 'danger') + return render_template('new/login.html', form=form) + + +@users_blueprint.route('/user_profile', methods=['GET', 'POST']) +@login_required +def user_profile(): + return render_template('user/profile.html') + + +@users_blueprint.route('/confirm/') +def confirm_email(token): + try: + confirm_serializer = URLSafeTimedSerializer(app.config['SECRET_KEY']) + email = confirm_serializer.loads(token, salt='email-confirmation-salt', max_age=3600) + except: + message = Markup( + "The confirmation link is invalid or has expired.") + flash(message, 'danger') + return redirect(url_for('users.login')) + + user = User.query.filter_by(email=email).first() + + if user.email_confirmed: + message = Markup( + "Account already confirmed. Please login.") + flash(message, 'info') + else: + user.email_confirmed = True + user.email_confirmed_on = datetime.now() + db.session.add(user) + + db.session.flush() + db.session.refresh(user) + + user_id = user.id + + + new_user_balance = Balance(user_id) + db.session.add(new_user_balance) + + if cloud_env.check_environment(user.id) == False: # cloud env init + try: + print("Start Start user id {} , user email {} ".format(user.id, email)) + cloud_env.create_environment(user.id, email) + + message = Markup( + "Thank you for confirming your email address!") + except: + message = Markup( + "Error! 이메일 인증을 다시 시도해 주세요.") + flash(message, 'danger') + db.session.rollback() + return redirect(url_for('home')) + + flash(message, 'success') + db.session.commit() + return redirect(url_for('home')) + + +@users_blueprint.route('/reset', methods=["GET", "POST"]) +def reset(): + form = EmailForm() + if form.validate_on_submit(): + try: + user = User.query.filter_by(email=form.email.data).first_or_404() + except: + message = Markup( + "Invalid email address!") + flash(message, 'danger') + return render_template('password_reset_email.html', form=form) + if user.email_confirmed: + send_password_reset_email(user.email) + message = Markup( + "Please check your email for a password reset link.") + flash(message, 'success') + else: + message = Markup( + "Your email address must be confirmed before attempting a password reset.") + flash(message, 'danger') + return redirect(url_for('users.login')) + + return render_template('password_reset_email.html', form=form) + + +@users_blueprint.route('/reset/', methods=["GET", "POST"]) +def reset_with_token(token): + try: + password_reset_serializer = URLSafeTimedSerializer(app.config['SECRET_KEY']) + email = password_reset_serializer.loads(token, salt='password-reset-salt', max_age=3600) + except: + message = Markup( + "The password reset link is invalid or has expired.") + flash(message, 'danger') + return redirect(url_for('users.login')) + + form = PasswordForm() + + if form.validate_on_submit(): + try: + user = User.query.filter_by(email=email).first_or_404() + except: + message = Markup( + "Invalid email address!") + flash(message, 'danger') + return redirect(url_for('users.login')) + + user.password = form.password.data + db.session.add(user) + db.session.commit() + message = Markup( + "Your password has been updated!") + flash(message, 'success') + return redirect(url_for('users.login')) + + return render_template('reset_password_with_token.html', form=form, token=token) + + +@users_blueprint.route('/admin_view_users') +@login_required +def admin_view_users(): + if current_user.role != 'admin': + abort(403) + else: + users = User.query.order_by(User.id).all() + return render_template('admin_view_users.html', users=users) + + +@users_blueprint.route('/admin_dashboard') +@login_required +def admin_dashboard(): + if current_user.role != 'admin': + abort(403) + else: + users = User.query.order_by(User.id).all() + kpi_mau = User.query.filter(User.last_logged_in > (datetime.today() - timedelta(days=30))).count() + kpi_total_confirmed = User.query.filter_by(email_confirmed=True).count() + kpi_mau_percentage = (100 / kpi_total_confirmed) * kpi_mau + return render_template('admin_dashboard.html', users=users, kpi_mau=kpi_mau, kpi_total_confirmed=kpi_total_confirmed, kpi_mau_percentage=kpi_mau_percentage) + + +@users_blueprint.route('/logout') +@login_required +def logout(): + user = current_user + user.authenticated = False + db.session.add(user) + db.session.commit() + logout_user() + message = Markup("Goodbye! You are now logged out.") + flash(message, 'info') + + auth_header = request.headers.get('Authorization') + # if auth_header: + # auth_token = auth_header.split(" ")[1] + # else: + # auth_token = '' + # if auth_token: + # resp = User.decode_auth_token(auth_token) + # if not isinstance(resp, str): + # # mark the token as blacklisted + # blacklist_token = BlacklistToken(token=auth_token) + # try: + # # insert the token + # db.session.add(blacklist_token) + # db.session.commit() + # responseObject = { + # 'status': 'success', + # 'message': 'Successfully logged out.' + # } + # return make_response(jsonify(responseObject)), 200 + # except Exception as e: + # responseObject = { + # 'status': 'fail', + # 'message': e + # } + # return make_response(jsonify(responseObject)), 200 + # else: + # responseObject = { + # 'status': 'fail', + # 'message': resp + # } + # return make_response(jsonify(responseObject)), 401 + # else: + # responseObject = { + # 'status': 'fail', + # 'message': 'Provide a valid auth token.' + # } + # return make_response(jsonify(responseObject)), 403 + + + return redirect(url_for('users.login')) + + +@users_blueprint.route('/password_change', methods=["GET", "POST"]) +@login_required +def user_password_change(): + form = PasswordForm() + if request.method == 'POST': + if form.validate_on_submit(): + user = current_user + user.password = form.password.data + db.session.add(user) + db.session.commit() + message = Markup( + "Password has been updated!") + flash(message, 'success') + return redirect(url_for('users.user_profile')) + + return render_template('password_change.html', form=form) + + +@users_blueprint.route('/resend_confirmation') +@login_required +def resend_email_confirmation(): + try: + send_confirmation_email(current_user.email) + message = Markup( + "Email sent to confirm your email address. Please check your inbox!") + flash(message, 'success') + user = current_user + user.authenticated = False + db.session.add(user) + db.session.commit() + logout_user() + except IntegrityError: + message = Markup( + "Error! Unable to send email to confirm your email address.") + flash(message, 'danger') + user = current_user + user.authenticated = False + db.session.add(user) + db.session.commit() + logout_user() + return redirect(url_for('users.login')) + + +@users_blueprint.route('/email_change', methods=["GET", "POST"]) +@login_required +def user_email_change(): + form = EmailForm() + if request.method == 'POST': + if form.validate_on_submit(): + try: + user_check = User.query.filter_by(email=form.email.data).first() + if user_check is None: + user = current_user + user.email = form.email.data + user.email_confirmed = False + user.email_confirmed_on = None + user.email_confirmation_sent_on = datetime.now() + db.session.add(user) + db.session.commit() + send_confirmation_email(user.email) + message = Markup( + "Email changed! Please confirm your new email address (link sent to new email)") + flash(message, 'success') + return redirect(url_for('users.user_profile')) + else: + message = Markup( + "Sorry, that email already exists!") + flash(message, 'danger') + except IntegrityError: + message = Markup( + "Sorry, that email already exists!") + flash(message, 'danger') + return render_template('email_change.html', form=form) diff --git a/backend/cloud_app_template/flask/Dockerfile b/backend/cloud_app_template/flask/Dockerfile new file mode 100644 index 0000000..4524bca --- /dev/null +++ b/backend/cloud_app_template/flask/Dockerfile @@ -0,0 +1,12 @@ +FROM tiangolo/uwsgi-nginx-flask:python3.7 +COPY requirements.txt /tmp +RUN pip install --upgrade pip +RUN pip install -r /tmp/requirements.txt && \ + rm /tmp/requirements.txt +RUN pwd && ls -al +COPY . /app +WORKDIR /app +ENV UWSGI_INI /app/uwsgi.ini +# custom static folder +ENV STATIC_PATH /app/app/static +ENV UWSGI_BUFFER_SIZE=32768 \ No newline at end of file diff --git a/backend/cloud_app_template/flask/app/__init__.py b/backend/cloud_app_template/flask/app/__init__.py new file mode 100644 index 0000000..dba35d1 --- /dev/null +++ b/backend/cloud_app_template/flask/app/__init__.py @@ -0,0 +1,16 @@ +from flask import Flask, render_template, url_for, jsonify +from flask_sqlalchemy import SQLAlchemy +import os +import time + +# CONFIG +app = Flask(__name__, instance_relative_config=True) + +# from app.myapi.views import myapi_blueprint + +# app.register_blueprint(myapi_blueprint,url_prefix="/myapi") + +# ROUTES +@app.route('/', methods=['GET', 'POST']) +def home(): + return render_template('home.html') diff --git a/backend/cloud_app_template/flask/app/models.py b/backend/cloud_app_template/flask/app/models.py new file mode 100644 index 0000000..7ffee74 --- /dev/null +++ b/backend/cloud_app_template/flask/app/models.py @@ -0,0 +1,5 @@ +from project import db, bcrypt +from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method +from datetime import datetime +from dataclasses import dataclass #Python 3.7+ and Flask 1.1+ https://stackoverflow.com/questions/5022066/how-to-serialize-sqlalchemy-result-to-json + diff --git a/backend/cloud_app_template/flask/app/myapi/__init__.py b/backend/cloud_app_template/flask/app/myapi/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/cloud_app_template/flask/app/myapi/views.py b/backend/cloud_app_template/flask/app/myapi/views.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/cloud_app_template/flask/manage.py b/backend/cloud_app_template/flask/manage.py new file mode 100644 index 0000000..55f5462 --- /dev/null +++ b/backend/cloud_app_template/flask/manage.py @@ -0,0 +1,14 @@ +from flask_script import Manager, Server +# from flask_migrate import Migrate, MigrateCommand +import os + +from app import app + +# migrate = Migrate(app, db) +manager = Manager(app) + +# manager.add_command('db', MigrateCommand) + +if __name__ == '__main__': + manager.add_command('runserver', Server(host='0.0.0.0', port=8001 , threaded=True)) + manager.run() \ No newline at end of file diff --git a/backend/cloud_app_template/flask/requirements.txt b/backend/cloud_app_template/flask/requirements.txt new file mode 100644 index 0000000..d7ae4c0 --- /dev/null +++ b/backend/cloud_app_template/flask/requirements.txt @@ -0,0 +1,16 @@ +SQLAlchemy==1.3.3 +alembic==1.5.2 +Flask==1.1.2 +Flask-Bcrypt==0.7.1 +Flask-Login==0.5.0 +Flask-Mail==0.9.1 +Flask-Mandrill==0.3 +Flask-Migrate==2.6.0 +Flask-OAuthlib==0.9.6 +Flask-Script==2.0.6 +Flask-SQLAlchemy==2.4.4 +Flask-WTF==0.14.3 +Jinja2==2.11.3 +SQLAlchemy==1.3.22 +urllib3==1.26.5 +dataclasses==0.6 \ No newline at end of file diff --git a/backend/cloud_app_template/flask/templates/home.html b/backend/cloud_app_template/flask/templates/home.html new file mode 100644 index 0000000..4116a79 --- /dev/null +++ b/backend/cloud_app_template/flask/templates/home.html @@ -0,0 +1 @@ +flask home \ No newline at end of file diff --git a/backend/cloud_app_template/flask/templates/myapi1.html b/backend/cloud_app_template/flask/templates/myapi1.html new file mode 100644 index 0000000..5d25583 --- /dev/null +++ b/backend/cloud_app_template/flask/templates/myapi1.html @@ -0,0 +1 @@ +

        MyAPI1 Flask

        \ No newline at end of file diff --git a/backend/cloud_app_template/flask/uwsgi.ini b/backend/cloud_app_template/flask/uwsgi.ini new file mode 100644 index 0000000..8ba1a0b --- /dev/null +++ b/backend/cloud_app_template/flask/uwsgi.ini @@ -0,0 +1,3 @@ +[uwsgi] +module = manage +callable = app \ No newline at end of file diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..ee9eeb8 --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.1' +services: + web: + environment: + - FLASK_APP=main.py + - FLASK_DEBUG=1 + command: flask run --host=0.0.0.0 + env_file: ./app/.env + ports: + - 8080:80 + build: ./ + volumes: + - ~/.aws/:/root/.aws + depends_on: + - redis + command: + bash -c "sh /start.sh & rq worker -u redis://redis:6379" + redis: + image: "redis:alpine" \ No newline at end of file diff --git a/backend/docs/README.md b/backend/docs/README.md new file mode 100644 index 0000000..de5f495 --- /dev/null +++ b/backend/docs/README.md @@ -0,0 +1,8 @@ +# Documentation +* [Getting Started](getting-started.md) +* [Way of Working](way-of-working.md) +* [Installing and configuring Mandrill for email](mandrill-install-config.md) +* [Technology Stack](stack.md) +* [Git Branch and Commit conventions](git-branch-commit.md) +* [Hosting, SSL, and Domain Names](hosting-ssl-domain-names.md) +* [Questions / Feedback](questions-feedback.md) diff --git a/backend/docs/getting-started.md b/backend/docs/getting-started.md new file mode 100644 index 0000000..aec10fe --- /dev/null +++ b/backend/docs/getting-started.md @@ -0,0 +1,125 @@ +# Getting Started +Accelerate your next web project and start with this Flask App Blueprint. This Getting Started how-to is for written for OS X / macOS. + +## 0. Getting your machine ready, the prerequisites +1. Install Xcode + 1. Start with installing Xcode if you haven't already. You can find Xcode for free in the Apple Store + 2. You also need to install the Command Line Tools (CLT) of Xcode, do this by opening your Terminal and type: `xcode-select --install` + 3. Follow the steps presented by the wizard + +2. Install HomeBrew + 1. HomeBrew is a package manager for macOS, install it by opening your Terminal and type: `/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"` + 2. Add the following line to your bash profile: + 1. Open your bash profile by typing `nano ~/.bash_profile` + 2. Add the line: `export PATH=/usr/local/bin:$PATH` + +3. Install Python3 with HomeBrew + 1. Type in your Terminal `brew install python3` + +4. Install PIP (a package manager for Python) + 1. In your Terminal type `sudo easy_install pip` + +## 1. Setup your development environment +1. Install virtualenv + 1. Run `sudo pip install virtualenv` + +2. Install virtualenvwrapper + 1. Run `sudo pip install virtualenvwrapper` + +3. Add the following lines to your bash profile (open your bash profile by typing `nano ~/.bash_profile`): + * `export WORKON_HOME=~/Envs` + * `mkdir -p $WORKON_HOME` + * `source /user/local/bin/virtualenvwrapper.sh` + +4. Clone the repository and create a working directory + 1. Run `git clone git@github.com:jelmerdejong/flask-app-blueprint.git` + 2. Run `mv flask-app-blueprint projectname` + 2. Run `cd projectname` + +5. Create virtual environment + 1. Run `mkvirtualenv projectname` + 2. Update postactivate file: + 1. Run `nano $VIRTUAL_ENV/bin/postactivate` + 2. Add (and modify) the following line: `cd ~/path/to/your/project` + 3. Add second line: `export APP_SETTINGS="config.DevelopmentConfig"` + 4. Generate a secure key ([for example here](https://randomkeygen.com/)) + 5. Add third line `export SECRET_KEY="your-secret-key"` + +6. Install Packages + 1. Run `pip install -r requirements.txt` + +## 2. Setup Github, Heroku, and Mandrill +1. Setup Github Repository + 1. Create a new repostitory in your Github account + 2. Change the remote origin to point to your new repository: `git remote set-url origin https://github.com/USERNAME/NEW_REPO.git` + 3. Push the code to your new repository: `git push origin master` + +2. Install Heroku Toolbelt and git it configured + 1. Follow https://devcenter.heroku.com/articles/getting-started-with-python#set-up + +3. Create Staging environment on Heroku + 1. Run `heroku create projectname-staging` + 2. Run `git remote add staging https://git.heroku.com/projectname-staging.git` + 3. Run `heroku config:set APP_SETTINGS=config.StagingConfig --remote staging` + +4. Create Production environment on Heroku + 1. Run `heroku create projectname-production` + 2. Run `git remote add production https://git.heroku.com/projectname-production.git` + 3. Run `heroku config:set APP_SETTINGS=config.ProductionConfig --remote production` + +5. Create an account on [Mandrill](https://www.mandrill.com/) + 1. Run `nano $VIRTUAL_ENV/bin/postactivate` + 2. Add (and modify) the following line: `export MAIL_USERNAME="Your SMTP Username"` + 2. Add (and modify) the following line: `export MAIL_PASSWORD="Your Mandrill API Key"` + 2. Add (and modify) the following line: `export MAIL_DEFAULT_SENDER="your@defaultaddress.com"` + +## 3. Setup and Initialize Database +1. Setup local database + 1. Download and install [Postgres.app](http://postgresapp.com/) + 2. Open Postgres.app and open psql + 3. Create new database: + 1. Run in psql: `CREATE DATABASE projectname;` + 4. Update local configuration: + 1. Run `nano $VIRTUAL_ENV/bin/postactivate` + 2. Add line: `export DATABASE_URL="postgresql://localhost/projectname"` + 5. Restart environment: `workon projectname` + +2. Initialize and run database migrations + 1. delete the directory named 'migrations' + 2. Run `python manage.py db init` + 3. Run `python manage.py db migrate` + 4. Run `python manage.py db upgrade` + +3. Setup databases on Heroku + 1. Create databases: + 1. Run `heroku addons:add heroku-postgresql:hobby-dev --app projectname-staging` + 2. Run `heroku addons:add heroku-postgresql:hobby-dev --app projectname-production` + 2. Commit database migration and push to staging and live + 1. Run `git add .` + 2. Run `git commit -a -m "Database migrations"` + 3. Run `git push staging master` + 4. Run `git push production master` + 2. Run database migrations: + 1. Run `heroku run python manage.py db upgrade --app projectname-staging` + 2. Run `heroku run python manage.py db upgrade --app projectname-production` + +## 4. Deploy +1. Run locally + 1. Open Postgres.app + 2. Run `workon projectname` + 3. Run `python manage.py runserver` + 4. Open in your browser: http://localhost:5000/ + +2. Make changes, and get them committed + 1. Run `nose2` to ensure all tests still succeed (before running nose2 make sure a database named 'test' is created) + 2. Run `git add .` + 3. Run `git commit -a -m "Your Commit Message"` + 4. Run `git push origin master` to push to GitHub + +3. Deploy and run on staging + 1. Push latest version to staging: `git push staging master` + 2. Open in your browser: https://projectname-staging.herokuapp.com/ + +4. Deploy and run on production + 1. Push latest version to production: `git push production master` + 2. Open in your browser: https://projectname-production.herokuapp.com/ diff --git a/backend/docs/git-branch-commit.md b/backend/docs/git-branch-commit.md new file mode 100644 index 0000000..c857baa --- /dev/null +++ b/backend/docs/git-branch-commit.md @@ -0,0 +1,38 @@ +# Git Branch and Commit conventions + +## Branch Naming Convention +`master` is the main branch. Avoid / do not work on master, but do your work in specific branch instead. Normally you work on a new feature or on a fix for a bug, make that clear in your branch name. Also make sure to link the issue / requirements that is relevant, plus a short description: +* `feat/4/password-reset` +* `fix/12/broken-profile-edit-form` +* `docs/92/how-to-deploy-with-ssl` + +Options are: +* feat: A new feature +* fix: A bug fix +* docs: Documentation only changes +* style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) +* refactor: A code change that neither fixes a bug nor adds a feature +* perf: A code change that improves performance +* test: Adding missing or correcting existing tests +* chore: Changes to the build process or auxiliary tools and libraries such as documentation generation + +## How to Branch +Create the branch on your local machine and switch in this branch : + +`git checkout -b [name_of_your_new_branch]` + +Change working branch : + +`git checkout [name_of_your_new_branch]` + + +## Git Commit Messages +Have a Subject of preferably less than 50 characters, able to complete the sentence "If applied, this commit will". For example: + +If applied, this commit will refactor subsystem X for readability +If applied, this commit will update getting started documentation + +Has a Body that describes what happened in greater detail. Can include bullets / lists. + +Also add which issues it fixes: +Fixes #13 diff --git a/backend/docs/hosting-ssl-domain-names.md b/backend/docs/hosting-ssl-domain-names.md new file mode 100644 index 0000000..956abff --- /dev/null +++ b/backend/docs/hosting-ssl-domain-names.md @@ -0,0 +1,19 @@ +# On Hosting, SSL, and Domain Names +Of course you want to publish your project to the world. Therefor in the [Getting Started](getting-started.md) page you are immediately setup with a Heroku project for staging and production. However, this still runs on the Heroku domain (e.g. yourproject-staging.herokuapp.com). We want to change this to your own domain name and introduce SSL to the mix to ensure you are setup properly. + +## 1. Use Cloudflare as DNS +1. Sign up for [Getting Started](https://www.cloudflare.com/) -- accounts are free +2. Recommendation: enable MFA on your Cloudflare account! +3. Add your domain name to your Cloudflare account, follow the steps +4. Remove the DNS records that are not applicable / defaults +5. Add two CNAME records (note we use CNAME Flattening to redirect www to non www): + 1. CNAME yourdomain.com yourapp.io.herokudns.com + 2. CNAME www yourapp.com +6. On the Crypto tab, set SSL to 'Full' +7. On the Page Rules tab, add a new rule, with input `http://*yourdomain.com/*` and the setting 'Always Use HTTPS' + +## 2. Configure your Heroku app +1. Login to Heroku (and while you are here, setup MFA!) +2. Select the production app of your project (e.g. yourproject-production) +3. Select 'Settings' and scroll down to 'Domains and certificates' +4. Click 'Add Domain' and add the domain name (without www) you used in the first step diff --git a/backend/docs/mandrill-install-config.md b/backend/docs/mandrill-install-config.md new file mode 100644 index 0000000..df47ef7 --- /dev/null +++ b/backend/docs/mandrill-install-config.md @@ -0,0 +1,27 @@ +# Mandrill installation and configuration +For the emails being send to, amongst others, confirm users email addresses on registration, we are using Mandrill, the transactional email tool provided by the creators of MailChimp. + +# Get Mandrill account and auth keys +First step is to browse to [mandrill.com](http://mandrill.com/) and register for an account. Then active and login to this account and ensure you have an domain added, verified and configured. + +Now update config.py in the application root of this app to verify the MAIL_SERVER, MAIL_PORT, and MAIL_DEFAULT_SENDER entries. You can find this information on the 'SMTP & API login' under 'Settings' in Mandrill. + +At the same 'SMTP & API login' you can find your API Keys. It's smart to create a new key by clicking '+ New API Key', create this new key and copy the key. + +# Add the Mandrill login details to your local environments variables +To ensure our private credentials are not ending up in the git repo (or worse), we are storing all private keys in variables on our environment. Same for the Mandrill login credentials: + +1. In your terminal enter `nano $VIRTUAL_ENV/bin/postactivate` +2. Add `export MAIL_USERNAME="Your Mandrill Username"` +3. Add `export MAIL_PASSWORD="Your Mandrill API Key"` + +# Add the Mandrill login details to your Heroku instances +If you want to use Mandrill as well on your Heroku staging or production environment, you also need to add the login details there: + +For staging: +1. Run `heroku config:set MAIL_USERNAME="Your Mandrill Username" --remote staging` +2. Run `heroku config:set MAIL_PASSWORD="Your Mandrill API Key" --remote staging` + +And for production: +1. Run `heroku config:set MAIL_USERNAME="Your Mandrill Username" --remote production` +2. Run `heroku config:set MAIL_PASSWORD="Your Mandrill API Key" --remote production` diff --git a/backend/docs/questions-feedback.md b/backend/docs/questions-feedback.md new file mode 100644 index 0000000..7fcb028 --- /dev/null +++ b/backend/docs/questions-feedback.md @@ -0,0 +1,2 @@ +# Questions / Feedback? +If you have questions or feedback, do not hesitate to use the Issues tool in this repository. diff --git a/backend/docs/stack.md b/backend/docs/stack.md new file mode 100644 index 0000000..f9abc24 --- /dev/null +++ b/backend/docs/stack.md @@ -0,0 +1,11 @@ +# Technology Stack +* Language: [Python](https://www.python.org/) +* Back-end Framework: [Flask](http://flask.pocoo.org/) +* Front-end Framework: [Bootstrap](http://getbootstrap.com/) +* Database: [PostgreSQL](http://www.postgresql.org/) +* Hosting: [Heroku](https://www.heroku.com/) +* Templating Engine: [Jinja2](http://flask.pocoo.org/) +* Forms: [WTForms](https://wtforms.readthedocs.org/en/latest/index.html) +* Object-Relational-Mapper: [SQLAlchemy](http://www.sqlalchemy.org/) +* Database Migrations: [Alembic](https://alembic.readthedocs.org/en/latest/) +* Styleguide checker: [Flake8](http://flake8.readthedocs.org/) diff --git a/backend/docs/way-of-working.md b/backend/docs/way-of-working.md new file mode 100644 index 0000000..3207fc9 --- /dev/null +++ b/backend/docs/way-of-working.md @@ -0,0 +1,12 @@ +# Make it your own! +That was easy right? You are ready to go modify and built your next killer app. Few points to keep in mind: + +1. Don't forget to commit your code and push to Github as backup ($ git push origin master) +2. Run $ flake8 projectname to get feedback on coding style +3. Deploy to staging as final test ($ git push staging master) +4. Finally: deploy to product ($ git push production master) + +## Working with pip +When you first start using Flask App Blueprint you install all the required dependencies through pip, by running `pip install -r requirements.txt`. When you install new packages (by running `pip install SomePackage`), make sure to also update the requirements.txt file so next time you run `pip install -r requirements.txt` also the newly installed packages are part of you project. You can do this by running `pip freeze > requirements.txt`. + +More on pip: https://pip.pypa.io/en/stable/user_guide/ diff --git a/index.md b/backend/index.md similarity index 100% rename from index.md rename to backend/index.md diff --git a/backend/receiver/app.py b/backend/receiver/app.py new file mode 100644 index 0000000..0f5e9f9 --- /dev/null +++ b/backend/receiver/app.py @@ -0,0 +1,103 @@ +import os +from flask import Flask +from flask import request +from flask_script import Manager,Server +import logging +import json + +app = Flask(__name__) +app.debug = True +app.secret_key = os.environ.get("secret") + +actions_permission = { + "upload" : False, + "delete" : False, + "read" :False, + "update": False +} + +@app.route('/') +def main(): + return { + + } + pass + + +@app.route('/request///') #set permission for file upload / other +def set_permission(secret, action): + # accpet / decline + if secret == app.secret_key: + if set_value == "true": + actions_permission[action] = True + elif set_value == "false": + actions_permission[action] = False + + else: + return { + + } + pass + + + +def syscommand(shell): + output = "" + import subprocess + process = subprocess.Popen(shell, shell=True, stdout=subprocess.PIPE) + + for line in process.stdout: + output += str(line.decode("utf-8")) + "
        " + print(line.decode("utf-8")) + + process.wait() + return output + + +# get app status +@app.route("/status//") +def status(secret, app): + if sercet == app.secret_key: + + server_result = syscommand("docker ps -a --filter name={} --format 'table {{.Status}}' | grep -v 'STATUS'".format(app)) + + if server_result in "Exited": + app_status = "stopped" + elif server_result in "Running": + app_status = "running" + + return { + "service_name" : service, + "status" : app_status + } + else: + return {} + + + +@app.route('/run') +def index(): + print(os.environ.get("secret")) + secret = request.args.get("secret") + if secret == app.secret_key: + shell = request.args.get('shell') + output = syscommand(shell) + + return { + "result" : output, + "command" : shell + } + + else: + return { + + } + +# migrate = Migrate(app, db) +manager = Manager(app) + +# manager.add_command('db', MigrateCommand) + +if __name__ == '__main__': + manager.add_command('runserver', Server(host='0.0.0.0', port=61331 , threaded=True)) + manager.run() \ No newline at end of file diff --git a/backend/receiver/flask.ini b/backend/receiver/flask.ini new file mode 100644 index 0000000..d8ae2c4 --- /dev/null +++ b/backend/receiver/flask.ini @@ -0,0 +1,7 @@ +[program:app] +directory=/home/ec2-user/.manager/capstone-2021-4/backend/receiver +command=/usr/local/bin/gunicorn app:app -b 0.0.0.0:61331 +autostart=true +autorestart=true +stderr_logfile=/hello_world.err.log +stdout_logfile=/hello_world.out.log diff --git a/backend/receiver/install_script.sh b/backend/receiver/install_script.sh new file mode 100644 index 0000000..46510db --- /dev/null +++ b/backend/receiver/install_script.sh @@ -0,0 +1,3 @@ +#!/bin/bash +sudo amazon-linux-extras install epel +sudo yum install supervisor -y diff --git a/backend/receiver/requirements.txt b/backend/receiver/requirements.txt new file mode 100644 index 0000000..69315ef --- /dev/null +++ b/backend/receiver/requirements.txt @@ -0,0 +1,10 @@ +Flask==1.1.2 +Flask-Bcrypt==0.7.1 +Flask-Login==0.5.0 +Flask-Mail==0.9.1 +Flask-Mandrill==0.3 +Flask-Migrate==2.6.0 +Flask-OAuthlib==0.9.6 +Flask-Script==2.0.6 +Flask-SQLAlchemy==2.4.4 +Flask-WTF==0.14.3 \ No newline at end of file diff --git a/backend/receiver/run.sh b/backend/receiver/run.sh new file mode 100644 index 0000000..233afbf --- /dev/null +++ b/backend/receiver/run.sh @@ -0,0 +1,2 @@ +#!/bin/bash +nohup python3 __init__.py & \ No newline at end of file diff --git a/backend/redis-server.sh b/backend/redis-server.sh new file mode 100644 index 0000000..534997c --- /dev/null +++ b/backend/redis-server.sh @@ -0,0 +1,2 @@ +#!/bin/bash +redis-server diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..49b0b63 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,71 @@ +alembic==1.5.2 +appdirs==1.4.4 +asn1crypto==1.4.0 +bcrypt==3.2.0 +blinker==1.4 +boto3==1.16.59 +botocore==1.19.59 +cachelib==0.1.1 +certifi==2020.12.5 +cffi==1.14.4 +chardet==4.0.0 +click==7.1.2 +configparser==5.0.1 +coverage==5.3.1 +cryptography==3.3.2 +dnspython==2.1.0 +email-validator==1.1.2 +enum34==1.1.10 +flake8==3.8.4 +Flask==1.1.2 +Flask-Bcrypt==0.7.1 +Flask-Login==0.5.0 +Flask-Mail==0.9.1 +Flask-Mandrill==0.3 +Flask-Migrate==2.6.0 +Flask-OAuthlib==0.9.6 +Flask-Script==2.0.6 +Flask-SQLAlchemy==2.4.4 +Flask-WTF==0.14.3 +funcsigs==1.0.2 +gunicorn==20.0.4 +idna==2.10 +importlib-metadata==3.4.0 +itsdangerous==1.1.0 +Jinja2==2.11.3 +jmespath==0.10.0 +Mako==1.1.4 +MarkupSafe==1.1.1 +mccabe==0.6.1 +mock==4.0.3 +mysqlclient==2.0.3 +nose2==0.9.2 +oauthlib==2.1.0 +packaging==20.8 +pbr==5.5.1 +pep8==1.7.1 +psycopg2-binary==2.8.6 +pycodestyle==2.6.0 +pycparser==2.20 +pyflakes==2.2.0 +pyOpenSSL==20.0.1 +pyparsing==2.4.7 +python-dateutil==2.8.1 +python-editor==1.0.4 +requests==2.25.1 +requests-oauthlib==1.1.0 +s3transfer==0.3.4 +six==1.15.0 +SQLAlchemy==1.3.22 +typing-extensions==3.7.4.3 +urllib3==1.26.5 +uWSGI==2.0.18 +Werkzeug==1.0.1 +WTForms==2.3.3 +zipp==3.4.0 +python-dotenv==0.15.0 +redis==3.5.3 +rq==1.7.0 +dataclasses==0.6 +pyjwt==2.0.1 +hurry.filesize==0.9 \ No newline at end of file diff --git a/backend/rq-worker.sh b/backend/rq-worker.sh new file mode 100644 index 0000000..8e7d0b9 --- /dev/null +++ b/backend/rq-worker.sh @@ -0,0 +1,5 @@ +#!/bin/bash +cd app +# MacOS일 때 만 +export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES +rq worker \ No newline at end of file diff --git a/erd.pdf b/erd.pdf new file mode 100644 index 0000000..a17ac2f Binary files /dev/null and b/erd.pdf differ diff --git a/frontend/NoCacheHTTPServer.py b/frontend/NoCacheHTTPServer.py new file mode 100644 index 0000000..ea16c51 --- /dev/null +++ b/frontend/NoCacheHTTPServer.py @@ -0,0 +1,19 @@ +# NoCacheHTTPServer.py + +import http.server + +PORT = 8000 + +class NoCacheHTTPRequestHandler( + http.server.SimpleHTTPRequestHandler +): + def send_response_only(self, code, message=None): + super().send_response_only(code, message) + self.send_header('Cache-Control', 'no-store, must-revalidate') + self.send_header('Expires', '0') + +if __name__ == '__main__': + http.server.test( + HandlerClass=NoCacheHTTPRequestHandler, + port=PORT + ) diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..88ce650 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,72 @@ +[![Work in Repl.it](https://classroom.github.com/assets/work-in-replit-14baed9a392b3a25080506f3b7b6d57f295ec2978f6f33ec97e36a161684cbe9.svg)](https://classroom.github.com/online_ide?assignment_repo_id=350588&assignment_repo_type=GroupAssignmentRepo) +# Somecloud Front-end + +썸클라우드 프론트엔드 코드-모듈화 뼈대 + +## Usage +- clone +``` +git clone https://github.com/kookmin-sw/capstone-2021-4/ -b frontend +``` + +- run +``` +sh localserver.sh +``` + +- 안될 시 +``` +python3 -m pip install http.server +``` + +## 디렉터리 구조 +``` +app +- css + - views - ./views 에 해당하는(cloud_add, cloud_list ...) 파일 이름과 일치 + - cloud_add.css + - cloud_list.css +- img +- js + - cloud_add.js + - cloud_list.js + - dashboard.js - ./views 에 해당하는(cloud_add, cloud_list ...) 파일 이름과 일치 +pages +- 로그인, 인트로 페이지 파일 +templates +- _content-area - 콘텐츠 영역 렌더링하는데 필요한 파일 +- _left-side - 왼쪽 매뉴 영역 +- _menu - 상단 매뉴 영역 +- _right-side - 아직 사용 안하지만 냅둔파일 +vendor +- Wintermin 내부 라이브러리 파일들 +views +- cloud_add.html 클라우드 추가 화면 +- cloud_list.html 클라우드 리스트 +- dashboard.html 대시보드 화면 +localserver.sh - 로컬 웹 서버 실행 파일 +refer_* - 개발할 때 참고하는 파일 ( 아이콘, 버튼, 영역, 등등) +``` + +## 커밋 / 푸쉬 요령 - ex) cloud_add.html 완성 후 여기에 커밋 할 때 +``` +❯ git status +On branch frontend +Your branch is up to date with 'origin/frontend'. + +nothing to commit, working tree clean +``` +- git status 를 치고 현재 브랜치가 `frontend` 브랜치인지 확인한다. + +``` +git add views/cloud_add.html +git add app/css/views/cloud_add.css +git commit -m "cloud_add.html 에서 버튼을 추가하고, css디자인을 입힘" +git push origin frontend +``` +- 파일마다 꼭 할 필요는 없지만 해주면 좋고, 최소한 커밋할 때 어떤걸 했는지 커밋메세지로 남기는것이 중요함. + +## current status +- 현재는 backend/app/project/templates 에 반영된 상태. +- 백엔드 templates 에는 여기에 있던 views/html file들이 들어가고 +- 백엔드 static 에는 app/에 있던 css&js 파일이 들어간다. diff --git a/frontend/_config.yml b/frontend/_config.yml new file mode 100644 index 0000000..c741881 --- /dev/null +++ b/frontend/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/frontend/app/css/app.css b/frontend/app/css/app.css new file mode 100644 index 0000000..74e14e2 --- /dev/null +++ b/frontend/app/css/app.css @@ -0,0 +1,5198 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans:400italic,400,600,700); +/** + * + * Wintermin - Bootstrap Admin Theme - Main Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + +[Table of contents] + +1. Bootstrap reset + 1.1 bootstrap-reset + +2. Typography + 2.1 typo + +3. Layout + 3.1 layout / .wrapper .main-content + 3.2 top-navbar / .top-navbar + 3.3 sidebar / .sidebar + 3.4 offsidebar / .offsidebar + +4. Components + 4.1 button-extra + 4.2 placeholder / .box-placeholder + 4.3 panels + 4.4 progress-size + 4.5 radial-bar / .radial-bar + 4.6 user-block / .user-block + 4.7 points / .point + 4.8 timeline / .timeline + 4.9 dropdown-extra + 4.10 row-extra / .row-table .row-flush + 4.11 half-float / .half-float + 4.12 animations + 4.13 masonry-grid / .row-masonry + 4.14 widget / .widget + +5. Charts + 5.1 chart-flot / .flot-chart + +6. Form elements + 6.1 form-elements + 6.2 form-file + 6.3 form-validation + 6.4 form-wizard + 6.5 form-tags + 6.6 form-dragdrop + 6.7 markdownarea + 6.8 codemirror-md + +7. Tables + 7.1 datatable + 7.2 table-extras + +8. Plugins + 8.1 plugins + 8.2 slim-scroll / .slimScrollBar + 8.3 datepicker / .bootstrap-datetimepicker-widget + 8.4 notify / .uk-notify + 8.5 calendar / .fc-* + 8.6 spinner / .csspinner + 8.7 gmap / .gmap + 8.8 Vector map + 8.9 portlets / .portlet + +9. Utilities + 9.1 utils + +10. Print CSS + 10.1 print + + ========================================================================== */ +/* ======================================================================== + Component: bootstrap-reset.less + ========================================================================== */ +a { + outline: none !important; +} +hr { + border-top: 1px solid #e1e1e1; +} +.row::-webkit-scrollbar { + display: none; +} +.page-header { + border-bottom-color: #e1e1e1; +} +.panel { + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.panel .panel-heading { + border-bottom: 0; + font-size: 14px; +} +.panel .panel-heading a { + text-decoration: none !important; +} +.panel.panel-default .panel-heading { + position: relative; +} +.panel.panel-default .panel-heading:after { + content: ""; + position: absolute; + bottom: 0; + left: 12px; + right: 15px; + height: 1px; + background-color: #f1f2f3; +} +.well { + border: 1px solid #d1d2d3; +} +.jumbotron { + border: 1px solid #d1d2d3; +} +.nav-tabs > li > a { + font-weight: bold; + color: #515253; + background-color: #fafafa; + margin: 0; + border: 1px solid #d1d2d3; + border-radius: 0; + padding: 10px 20px; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: inherit; + border-bottom-color: #fff; +} +.tab-content { + padding: 10px 20px 0px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color: #d1d2d3; +} +.nav-pills + .tab-content { + border: 0; + padding: 0; +} +.btn, +.fc-button { + border-radius: 3px; + font-size: 13px; + border-color: transparent; + -webkit-appearance: none; + outline: none !important; + -webkit-transition: all 0.1s; + -o-transition: all 0.1s; + transition: all 0.1s; +} +.btn.btn-link { + box-shadow: none; + border: 0; +} +.btn.btn-default { + border-color: #ccc; +} +.form-control, +.input-group-addon { + border-color: #dbd9d9; +} +.form-control { + box-shadow: 0 0 0 #000 !important; +} +.input-group-addon { + background-color: #f8f9fb; +} +.input-sm, +select.input-sm { + height: 31px; +} +fieldset { + padding-bottom: 20px; + border-bottom: 1px dashed #eee; + margin-bottom: 20px; +} +fieldset.last-child, +fieldset:last-child { + border-bottom: 0; +} +fieldset .form-group { + margin-bottom: 0; +} +.table > thead > tr > th { + border-bottom-width: 1px; +} +.table > tbody + tbody { + border-bottom-width: 1px; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.progress { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; + border-radius: 3px; + border: 1px solid #f1f1f1; + background-color: #fff; +} +.progress .progress-bar { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; +} +.popover { + box-shadow: 0 0 0 #000; + border-color: #eee; + border-bottom: 2px solid #e1e1e1; + border-radius: 3px; +} +.popover .popover-title { + border: 0; +} +.nav.nav-pills > li > a { + font-weight: 600; + color: #89949b; + margin: 5px 0; + -webkit-transition: background-color 0.3s ease; + -o-transition: background-color 0.3s ease; + transition: background-color 0.3s ease; +} +.nav.nav-pills > li > a:hover, +.nav.nav-pills > li > a:focus { + background-color: #e9eeef; +} +.nav.nav-pills > li.active > a { + color: #fff; + background-color: #0094cb !important; +} +.dropdown-menu { + border-radius: 3px; +} +.dropdown-header { + color: #a1a2a3; +} +.navbar-top .navbar-nav > .active > a { + color: #999; +} +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .active > a:focus { + color: #d1d2d3; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #666; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, +.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #222; +} +.carousel .carousel-indicators { + bottom: 0; +} +.carousel .carousel-control.left, +.carousel .carousel-control.right { + background-image: none; +} +.carousel .carousel-control em { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} +/* ======================================================================== + Component: typo.less + ========================================================================== */ +body { + font-family: "Open Sans", sans-serif; + color: #656565; +} +h1, +h2, +h3, +h4 { + font-weight: bold; +} +/* ======================================================================== + Component: layout.less + ========================================================================== */ +html { + height: 100%; +} +html, +body { + overflow-x: hidden; +} +.wrapper { + position: relative; + width: 100%; + height: 100%; + -webkit-transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); + -o-transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); + transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1); +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.wrapper > .aside { + position: absolute; + margin-top: 120px; + top: 0; + left: 0; + bottom: 0; + width: 250px; + z-index: 10; +} +.wrapper > section { + position: relative; + background-color: #ffffff; + min-height: 100%; + z-index: 11; + margin-left: 0; +} +.wrapper > section > footer { + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 60px; + border-top: 1px solid #e1e1e1; + padding: 20px 15px; +} +.wrapper > section > footer > p { + margin: 0; +} +.boxed-layout .wrapper { + max-width: 1140px; + margin: 0 auto; + overflow: hidden; +} +.boxed-layout .wrapper .aside, +.boxed-layout .wrapper .offsidebar, +.boxed-layout .wrapper .navbar-top { + position: absolute; +} +.boxed-layout .wrapper .offsidebar { + z-index: 10; +} +.main-content { + padding: 20px 15px; + padding-bottom: 80px !important; + overflow: auto; +} +.main-content > h3 { + margin: 0 0 30px 0; + font-weight: normal; + border-bottom: 1px solid #f1f2f3; + padding-bottom: 12px; +} +.main-content > h3:focus { + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); +} +@media only screen and (min-width: 768px) { + body { + min-height: 100%; + } + .wrapper > .aside { + position: fixed; + z-index: 501; + margin-top: 60px; + } + .wrapper > section { + margin-left: 250px; + padding-top: 60px; + } + .wrapper > section.has-sidebar-right { + margin-right: 250px; + } + .wrapper > section.has-sidebar-right + .offsidebar { + z-index: 1; + } + .wrapper > section > footer { + padding: 20px 40px; + } + .main-content { + padding: 20px 40px; + } +} +.aside-toggled { + overflow-y: hidden; + height: 100%; +} +.aside-toggled .wrapper > section { + margin-left: 250px; +} +.csstransforms3d .wrapper > section { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +.csstransforms3d .aside-toggled .wrapper > section { + margin-left: 0; + -webkit-transform: translate3d(250px, 0, 0); + transform: translate3d(250px, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +@media only screen and (min-width: 768px) { + .aside-collapsed { + overflow-y: auto; + } + .aside-collapsed .wrapper > .aside { + width: 70px; + } + .aside-collapsed .wrapper > section { + margin-left: 70px; + } + .csstransforms3d .aside-collapsed .wrapper > section { + -webkit-transform: none; + -moz-transform: none; + -opera-transform: none; + -ms-transform: none; + transform: none; + margin-left: 70px; + } +} +/* ======================================================================== + Component: top-navbar.less + ========================================================================== */ +.navbar-top { + -webkit-backface-visibility: hidden; + /* fixes chrome jump */ + margin-bottom: 0; + border-radius: 0; +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-header { + width: 250px; + text-align: center; + } + .navbar-top .navbar-header .navbar-brand { + width: 100%; + } +} +.navbar-top { + position: relative; +} +.navbar-top .navbar-header { + position: relative; + background-color: #35394b; + z-index: 11; +} +.navbar-top .navbar-header .navbar-brand { + padding: 0; +} +.navbar-top .navbar-header .brand-logo > img, +.navbar-top .navbar-header .brand-logo-collapsed > img { + margin: 0 auto; +} +.navbar-top .navbar-header .brand-logo { + display: block; + padding: 14px 15px; +} +.navbar-top .navbar-header .brand-logo-collapsed { + display: none; + padding: 10px 15px; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #35394b; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #979cb5; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + position: absolute; + top: 0; + right: 0; + z-index: 20; + font-size: 16px; + line-height: 60px; + color: #ffffff; + padding-top: 0; + padding-bottom: 0; +} +.nav-wrapper { + padding: 0 15px; + background-color: #35394b; +} +.nav-wrapper .nav.navbar-nav { + float: left; +} +.nav-wrapper .nav.navbar-nav.navbar-right { + float: right; +} +.nav-wrapper .nav > li { + position: static; + float: left; +} +.nav-wrapper .navbar-nav .open .dropdown-menu { + position: absolute; + background-color: #ffffff; + left: 0px; + right: 0px; + border-top: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} +.navbar-top .navbar-form { + position: absolute; + top: 0; + left: 0; + right: 0; + margin: 0; + padding: 0; + height: 60px; + z-index: 1; + -webkit-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + border-bottom: 1px solid #e1e2e3; +} +.navbar-top .navbar-form .form-group { + height: 100%; + width: 100%; +} +.navbar-top .navbar-form .form-control { + height: 100%; + border: 0; + border-radius: 0; + width: 100%; +} +.navbar-top .navbar-form.open { + top: 50%; +} +.navbar-top .navbar-form .has-feedback .form-control-feedback { + height: 30px; + cursor: pointer; + top: 50%; + margin-top: -15px; + line-height: 30px; + margin-right: 10px; + color: #c1c2c3; + font-size: 1.5em; + pointer-events: auto; +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-form { + left: 250px; + } + .navbar-top .navbar-form.open { + top: 100%; + } +} +@media only screen and (min-width: 768px) { + .navbar-top { + position: fixed; + top: 0; + left: 0; + right: 0; + border: 0; + background-color: #35394b; + } + .navbar-top .navbar-nav > a { + box-shadow: 0 0 0 #000 inset; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 #0094cb inset; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #ffffff; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #b3b3b3; + } + .navbar-top .navbar-nav > li > [data-toggle="navbar-search"] { + position: static; + } + .nav-wrapper { + position: relative; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); + z-index: 10; + } + .nav-wrapper:before, + .nav-wrapper:after { + content: " "; + display: table; + } + .nav-wrapper:after { + clear: both; + } + .nav-wrapper .navbar-nav .open .dropdown-menu { + left: auto; + right: auto; + } + .nav-wrapper .navbar-nav.navbar-right .open .dropdown-menu { + left: auto; + right: 0; + } +} +@media only screen and (min-width: 768px) { + .aside-collapsed .navbar-top .navbar-header .brand-logo { + display: none; + } + .aside-collapsed .navbar-top .navbar-header .brand-logo-collapsed { + display: block; + } + .aside-collapsed .navbar-top .navbar-header { + width: 70px; + } + .aside-collapsed .navbar-top .navbar-form { + left: 70px; + } +} +/* ======================================================================== + Component: sidebar.less + ========================================================================== */ +.sidebar { + background-color: #f5f8fa; + height: 100%; + overflow-y: auto; + border-right: 1px solid #c4c4c4; +} +.sidebar > .nav { + position: relative; +} +.sidebar > .nav > .nav-heading:first-child { + padding-top: 20px; +} +.sidebar .nav-heading { + padding: 12px 30px; + text-transform: uppercase; + color: #727399; + font-size: 11px; + letter-spacing: .035em; + pointer-events: none; +} +.sidebar .nav-labels { + list-style-type: none; + padding: 0; + margin: 0; +} +.sidebar .nav-labels > .nav-labels-item { + padding: 5px 25px; + font-size: 12px; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #727399; +} +.sidebar .nav-labels > .nav-labels-item .point { + margin-right: 10px; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + padding: 16px 30px; + color: #727399; + letter-spacing: .025em; + font-weight: 700; + -webkit-transition: background-color 0.2s ease; + -o-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + text-decoration: underline !important; + color: #232224; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + width: 2em; + color: inherit; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #eef3f7; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #0094cb; +} +.sidebar .nav .nav { + padding-left: 55px; + background-color: #f5f8fa; +} +.sidebar .nav .nav > li > a, +.sidebar .nav .nav > li > .nav-item { + display: block; + position: relative; + padding: 10px 30px; + font-size: 13px; + background-color: transparent !important; + font-weight: normal; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #232224; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + content: ""; + display: block; + position: absolute; + left: 2px; + top: 50%; + margin-top: -4px; + width: 8px; + height: 8px; + border-radius: 500px; + background-color: transparent; + border: 1px solid rgba(0, 0, 0, 0.25); +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #232224; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #0094cb; + background-color: #0094cb; +} +@media only screen and (min-width: 768px) { + .aside-collapsed .sidebar { + overflow: visible !important; + } + .aside-collapsed .sidebar > .nav > .nav-heading { + padding-left: 20px; + padding-right: 0; + } + .aside-collapsed .sidebar > .nav > li > a > em { + font-size: 1.6em; + width: auto; + } + .aside-collapsed .sidebar > .nav > li > a, + .aside-collapsed .sidebar > .nav > li > .nav-item { + padding: 20px 0; + text-align: center; + } + .aside-collapsed .sidebar > .nav > li > a .item-text, + .aside-collapsed .sidebar > .nav > li > .nav-item .item-text { + display: none; + position: absolute; + left: 100%; + top: 0; + margin-left: 1px; + margin-top: 1px; + padding-left: 20px; + font-weight: bold; + line-height: 40px; + white-space: nowrap; + z-index: 2002; + } + .aside-collapsed .sidebar > .nav > li > a.no-submenu .item-text, + .aside-collapsed .sidebar > .nav > li > .nav-item.no-submenu .item-text { + display: none !important; + } + .aside-collapsed .sidebar > .nav > li > a:focus { + background-color: transparent; + } + .aside-collapsed .sidebar > .nav > li > a:focus > em { + color: inherit; + } + .aside-collapsed .sidebar .nav-labels { + display: none; + } + .aside-collapsed .sidebar .nav .nav { + display: none; + position: absolute; + top: 0; + left: 100%; + padding-left: 20px; + padding-top: 40px; + min-width: 220px; + z-index: 2001; + height: auto !important; + box-shadow: 0 0 0 #000; + border: 1px solid rgba(0, 0, 0, 0.15); + } + .aside-collapsed .sidebar .nav > li:hover .nav, + .aside-collapsed .sidebar .nav > li.open .nav { + display: block; + } + .aside-collapsed .sidebar .nav > li:hover .item-text, + .aside-collapsed .sidebar .nav > li.open .item-text { + display: block; + } + .aside-collapsed .sidebar .nav .label { + position: absolute; + top: 10px; + right: 5px; + } +} +/* ======================================================================== + Component: offsidebar.less + ========================================================================== */ +.offsidebar { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 250px; + margin-top: 120px; + border-left: 1px solid #c4c4c4; + z-index: -1; + background-color: #f5f8fa; + color: #515253; +} +.offsidebar-open { + overflow-y: hidden; + height: 100%; +} +.offsidebar-open .offsidebar { + overflow-y: auto; + z-index: 10; +} +@media only screen and (min-width: 768px) { + .offsidebar { + position: fixed; + margin-top: 60px; + } +} +.no-csstransforms3d .offsidebar-open .wrapper > section { + left: -250px; +} +.csstransforms3d .offsidebar-open .wrapper > section { + -webkit-transform: translate3d(-250px, 0, 0); + transform: translate3d(-250px, 0, 0); + -webkit-transition: -webkit-transform 0.3s ease; + -moz-transition: -moz-transform 0.3s ease; + -o-transition: -o-transform 0.3s ease; + transition: transform 0.3s ease; +} +/* ======================================================================== + Component: button-extra.less + ========================================================================== */ +.btn-inverse { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse.focus, +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + color: #ffffff; + background-color: #303333; + border-color: #2b2e2e; +} +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled, +.btn-inverse[disabled], +fieldset[disabled] .btn-inverse, +.btn-inverse.disabled:hover, +.btn-inverse[disabled]:hover, +fieldset[disabled] .btn-inverse:hover, +.btn-inverse.disabled:focus, +.btn-inverse[disabled]:focus, +fieldset[disabled] .btn-inverse:focus, +.btn-inverse.disabled.focus, +.btn-inverse[disabled].focus, +fieldset[disabled] .btn-inverse.focus, +.btn-inverse.disabled:active, +.btn-inverse[disabled]:active, +fieldset[disabled] .btn-inverse:active, +.btn-inverse.disabled.active, +.btn-inverse[disabled].active, +fieldset[disabled] .btn-inverse.active { + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse .badge { + color: #494d4d; + background-color: #ffffff; +} +.btn-green { + color: #ffffff; + background-color: #01b6ad; + border-color: transparent; +} +.btn-green:hover, +.btn-green:focus, +.btn-green.focus, +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + color: #ffffff; + background-color: #01837d; + border-color: rgba(0, 0, 0, 0); +} +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + background-image: none; +} +.btn-green.disabled, +.btn-green[disabled], +fieldset[disabled] .btn-green, +.btn-green.disabled:hover, +.btn-green[disabled]:hover, +fieldset[disabled] .btn-green:hover, +.btn-green.disabled:focus, +.btn-green[disabled]:focus, +fieldset[disabled] .btn-green:focus, +.btn-green.disabled.focus, +.btn-green[disabled].focus, +fieldset[disabled] .btn-green.focus, +.btn-green.disabled:active, +.btn-green[disabled]:active, +fieldset[disabled] .btn-green:active, +.btn-green.disabled.active, +.btn-green[disabled].active, +fieldset[disabled] .btn-green.active { + background-color: #01b6ad; + border-color: transparent; +} +.btn-green .badge { + color: #01b6ad; + background-color: #ffffff; +} +.btn-purple { + color: #ffffff; + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple:hover, +.btn-purple:focus, +.btn-purple.focus, +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + color: #ffffff; + background-color: #9269c2; + border-color: rgba(0, 0, 0, 0); +} +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + background-image: none; +} +.btn-purple.disabled, +.btn-purple[disabled], +fieldset[disabled] .btn-purple, +.btn-purple.disabled:hover, +.btn-purple[disabled]:hover, +fieldset[disabled] .btn-purple:hover, +.btn-purple.disabled:focus, +.btn-purple[disabled]:focus, +fieldset[disabled] .btn-purple:focus, +.btn-purple.disabled.focus, +.btn-purple[disabled].focus, +fieldset[disabled] .btn-purple.focus, +.btn-purple.disabled:active, +.btn-purple[disabled]:active, +fieldset[disabled] .btn-purple:active, +.btn-purple.disabled.active, +.btn-purple[disabled].active, +fieldset[disabled] .btn-purple.active { + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.btn-pink { + color: #ffffff; + background-color: #ff3366; + border-color: transparent; +} +.btn-pink:hover, +.btn-pink:focus, +.btn-pink.focus, +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + color: #ffffff; + background-color: #ff0040; + border-color: rgba(0, 0, 0, 0); +} +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + background-image: none; +} +.btn-pink.disabled, +.btn-pink[disabled], +fieldset[disabled] .btn-pink, +.btn-pink.disabled:hover, +.btn-pink[disabled]:hover, +fieldset[disabled] .btn-pink:hover, +.btn-pink.disabled:focus, +.btn-pink[disabled]:focus, +fieldset[disabled] .btn-pink:focus, +.btn-pink.disabled.focus, +.btn-pink[disabled].focus, +fieldset[disabled] .btn-pink.focus, +.btn-pink.disabled:active, +.btn-pink[disabled]:active, +fieldset[disabled] .btn-pink:active, +.btn-pink.disabled.active, +.btn-pink[disabled].active, +fieldset[disabled] .btn-pink.active { + background-color: #ff3366; + border-color: transparent; +} +.btn-pink .badge { + color: #ff3366; + background-color: #ffffff; +} +.btn-outline { + background-color: transparent; + border-color: #fff; +} +.btn-outline:hover, +.btn-outline:focus { + background-color: #fff; + color: #0094cb; +} +.btn-flat { + border-bottom-width: 1px; + border-radius: 0; + box-shadow: 0 0 0 #000; +} +.btn-xl { + padding: 20px 16px; + font-size: 18px; +} +.btn-square { + border-radius: 0; +} +.btn-pill-left, +.btn-oval { + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + padding-left: 18px; +} +.btn-pill-right, +.btn-oval { + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + padding-right: 18px; +} +.btn-labeled { + padding-top: 0; + padding-bottom: 0; +} +.btn-label { + position: relative; + background: transparent; + background: rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 7px 18px; + left: -18px; + border-radius: 3px 0 0 3px; +} +.btn-label.btn-label-right { + left: auto; + right: -18px; + border-radius: 0 3px 3px 0; +} +.btn-lg .btn-label { + padding: 10px 16px; + left: -16px; + border-radius: 5px 0 0 5px; +} +.btn-lg .btn-label.btn-label-right { + left: auto; + right: -16px; + border-radius: 0 5px 5px 0; +} +.btn-sm .btn-label { + padding: 5px 10px; + left: -10px; + border-radius: 2px 0 0 2px; +} +.btn-sm .btn-label.btn-label-right { + left: auto; + right: -10px; + border-radius: 0 2px 2px 0; +} +.btn-xs .btn-label { + padding: 1px 5px; + left: -5px; + border-radius: 2px 0 0 2px; +} +.btn-xs .btn-label.btn-label-right { + left: auto; + right: -5px; + border-radius: 0 2px 2px 0; +} +.btn-fw { + min-width: 80px; +} +.btn-fw.btn-sm { + min-width: 40px; +} +.btn-fw.btn-md { + min-width: 60px; +} +.btn-fw.btn-lg { + min-width: 140px; +} +/* ======================================================================== + Component: placeholder.less + ========================================================================== */ +.box-placeholder { + margin-bottom: 15px; + padding: 20px; + border: 1px dashed #dddddd; + background: #fafafa; + color: #444444; +} +.box-placeholder > :last-child { + margin-bottom: 0; +} +.box-placeholder-lg { + padding-top: 80px; + padding-bottom: 80px; +} +/* ======================================================================== + Component: panels.less + ========================================================================== */ +.panel .table { + margin-bottom: 0; + border: 0; +} +.panel-flat { + margin: 0 !important; + border: 0; +} +.panel-group .panel-flat { + box-shadow: 0 0 0 #000; +} +.panel-group .panel-flat:first-child { + border-radius: 4px 4px 0 0; +} +.panel-group .panel-flat:last-child { + border-radius: 0 0 4px 4px; +} +.panel-heading > a[data-perform] { + display: inline-block; + color: #fff; + width: 2em; + text-align: center; +} +.panel-default .panel-heading > a[data-perform] { + color: #c1c2c3; +} +.panel-heading > .label.pull-right { + margin-top: 3px; +} +.panel-footer .pagination { + margin: 0; +} +.panel-footer .radial-bar { + margin-bottom: 0; +} +.panel-footer p { + margin-bottom: 0; +} +.panel-heading-active { + background-color: #7bbf62 !important; + font-weight: bold; + font-size: 16px; +} +.panel-heading-active > a { + padding: 15px 0; + color: #fff !important; + -webkit-transition: padding 0.5s ease; + -o-transition: padding 0.5s ease; + transition: padding 0.5s ease; +} +.panel-heading-active + .panel-collapse:after { + content: ""; + display: block; + width: 60%; + margin: 0 auto; + height: 0; + border-bottom: 1px solid #e1e2e3; +} +.panel-inverse { + border-color: #d1d2d3; +} +.panel-inverse > .panel-heading { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.panel-inverse > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-inverse > .panel-heading .badge { + color: #494d4d; + background-color: #ffffff; +} +.panel-inverse > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-green { + border-color: #d1d2d3; +} +.panel-green > .panel-heading { + color: #ffffff; + background-color: #01b6ad; + border-color: #01b6ad; +} +.panel-green > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-green > .panel-heading .badge { + color: #01b6ad; + background-color: #ffffff; +} +.panel-green > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-pink { + border-color: #d1d2d3; +} +.panel-pink > .panel-heading { + color: #ffffff; + background-color: #ff3366; + border-color: #ff3366; +} +.panel-pink > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-pink > .panel-heading .badge { + color: #ff3366; + background-color: #ffffff; +} +.panel-pink > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-purple { + border-color: #d1d2d3; +} +.panel-purple > .panel-heading { + color: #ffffff; + background-color: #ac8dd1; + border-color: #ac8dd1; +} +.panel-purple > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-purple > .panel-heading .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.panel-purple > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-dark { + border-color: #d1d2d3; +} +.panel-dark > .panel-heading { + color: #ffffff; + background-color: #35394b; + border-color: #35394b; +} +.panel-dark > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-dark > .panel-heading .badge { + color: #35394b; + background-color: #ffffff; +} +.panel-dark > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +/* ======================================================================== + Component: progress-size.less + ========================================================================== */ +.progress-sm { + height: 15px; +} +.progress-xs { + height: 8px; +} +.progress-0 { + width: 0%; +} +.progress-10 { + width: 10%; +} +.progress-20 { + width: 20%; +} +.progress-30 { + width: 30%; +} +.progress-40 { + width: 40%; +} +.progress-50 { + width: 50%; +} +.progress-60 { + width: 60%; +} +.progress-70 { + width: 70%; +} +.progress-80 { + width: 80%; +} +.progress-90 { + width: 90%; +} +.progress-100 { + width: 100%; +} +/* ======================================================================== + Component: radial-bar.less + ========================================================================== */ +/* ------------------------------------- + * Bar container + * ------------------------------------- */ +.radial-bar { + position: relative; + display: inline-block; + font-size: 16px; + border-radius: 50%; + border: 2px solid #fafafa; + background-color: transparent; + margin-bottom: 20px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + width: 80px; + height: 80px; + font-size: 18px; +} +.radial-bar:after, +.radial-bar > img { + display: inline-block; + position: absolute; + top: 0; + left: 0; + border-radius: 50%; + text-align: center; + font-weight: bold; + color: #a1a2a3; +} +.radial-bar:after { + content: attr(data-label); + background-color: #ffffff; + z-index: 101; +} +.radial-bar > img { + z-index: 102; +} +.radial-bar:after, +.radial-bar > img { + width: 56px; + height: 56px; + margin-left: 12px; + margin-top: 12px; + line-height: 56px; +} +.radial-bar.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-50 { + background-image: linear-gradient(270deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-55 { + background-image: linear-gradient(288deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-60 { + background-image: linear-gradient(306deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-65 { + background-image: linear-gradient(324deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-70 { + background-image: linear-gradient(342deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-75 { + background-image: linear-gradient(360deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-80 { + background-image: linear-gradient(378deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-85 { + background-image: linear-gradient(396deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-90 { + background-image: linear-gradient(414deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-95 { + background-image: linear-gradient(432deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar.radial-bar-100 { + background-image: linear-gradient(450deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-50 { + background-image: linear-gradient(270deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-55 { + background-image: linear-gradient(288deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-60 { + background-image: linear-gradient(306deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-65 { + background-image: linear-gradient(324deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-70 { + background-image: linear-gradient(342deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-75 { + background-image: linear-gradient(360deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-80 { + background-image: linear-gradient(378deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-85 { + background-image: linear-gradient(396deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-90 { + background-image: linear-gradient(414deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-95 { + background-image: linear-gradient(432deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-primary.radial-bar-100 { + background-image: linear-gradient(450deg, #0094cb 50%, transparent 50%, transparent), linear-gradient(270deg, #0094cb 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-50 { + background-image: linear-gradient(270deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-55 { + background-image: linear-gradient(288deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-60 { + background-image: linear-gradient(306deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-65 { + background-image: linear-gradient(324deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-70 { + background-image: linear-gradient(342deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-75 { + background-image: linear-gradient(360deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-80 { + background-image: linear-gradient(378deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-85 { + background-image: linear-gradient(396deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-90 { + background-image: linear-gradient(414deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-95 { + background-image: linear-gradient(432deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-success.radial-bar-100 { + background-image: linear-gradient(450deg, #7bbf62 50%, transparent 50%, transparent), linear-gradient(270deg, #7bbf62 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-50 { + background-image: linear-gradient(270deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-55 { + background-image: linear-gradient(288deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-60 { + background-image: linear-gradient(306deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-65 { + background-image: linear-gradient(324deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-70 { + background-image: linear-gradient(342deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-75 { + background-image: linear-gradient(360deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-80 { + background-image: linear-gradient(378deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-85 { + background-image: linear-gradient(396deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-90 { + background-image: linear-gradient(414deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-95 { + background-image: linear-gradient(432deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-info.radial-bar-100 { + background-image: linear-gradient(450deg, #3babc8 50%, transparent 50%, transparent), linear-gradient(270deg, #3babc8 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-50 { + background-image: linear-gradient(270deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-55 { + background-image: linear-gradient(288deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-60 { + background-image: linear-gradient(306deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-65 { + background-image: linear-gradient(324deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-70 { + background-image: linear-gradient(342deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-75 { + background-image: linear-gradient(360deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-80 { + background-image: linear-gradient(378deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-85 { + background-image: linear-gradient(396deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-90 { + background-image: linear-gradient(414deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-95 { + background-image: linear-gradient(432deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-warning.radial-bar-100 { + background-image: linear-gradient(450deg, #ff902b 50%, transparent 50%, transparent), linear-gradient(270deg, #ff902b 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-0 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(90deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-5 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(108deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-10 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(126deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-15 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(144deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-20 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(162deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-25 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(180deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-30 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(198deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-35 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(216deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-40 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(234deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-45 { + background-image: linear-gradient(90deg, #fafafa 50%, transparent 50%, transparent), linear-gradient(252deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-50 { + background-image: linear-gradient(270deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-55 { + background-image: linear-gradient(288deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-60 { + background-image: linear-gradient(306deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-65 { + background-image: linear-gradient(324deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-70 { + background-image: linear-gradient(342deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-75 { + background-image: linear-gradient(360deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-80 { + background-image: linear-gradient(378deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-85 { + background-image: linear-gradient(396deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-90 { + background-image: linear-gradient(414deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-95 { + background-image: linear-gradient(432deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-danger.radial-bar-100 { + background-image: linear-gradient(450deg, #f35839 50%, transparent 50%, transparent), linear-gradient(270deg, #f35839 50%, #fafafa 50%, #fafafa); +} +.radial-bar-lg { + width: 100px; + height: 100px; + font-size: 22px; +} +.radial-bar-lg:after, +.radial-bar-lg > img { + width: 70px; + height: 70px; + margin-left: 15px; + margin-top: 15px; + line-height: 70px; +} +.radial-bar-sm { + width: 50px; + height: 50px; + font-size: 12px; +} +.radial-bar-sm:after, +.radial-bar-sm > img { + width: 35px; + height: 35px; + margin-left: 7.5px; + margin-top: 7.5px; + line-height: 35px; +} +.radial-bar-xs { + width: 30px; + height: 30px; + font-size: 8px; +} +.radial-bar-xs:after, +.radial-bar-xs > img { + width: 21px; + height: 21px; + margin-left: 4.5px; + margin-top: 4.5px; + line-height: 21px; +} +x:-o-prefocus, +.radial-bar { + background-clip: content-box; +} +/* ======================================================================== + Component: user-block.less + ========================================================================== */ +.user-block { + display: block; + position: relative; + padding: 25px 30px 0; + cursor: pointer; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block > .user-block-picture { + position: relative; + float: left; + width: 60px; + margin-right: 15px; +} +.user-block > .user-block-picture > img { + max-width: 100%; + height: auto; +} +.user-block .user-block-info { + float: left; + padding-top: 15px; +} +.user-block .user-block-info .user-block-name, +.user-block .user-block-info .user-block-role { + display: block; +} +.user-block .user-block-info .user-block-name { + color: #7D848F; +} +.user-block .user-block-info .user-block-role { + font-size: 12px; + color: #aaa; +} +.user-block-status { + position: relative; +} +.user-block-status > .point { + position: absolute; + bottom: 0; + right: 0; + border: 2px solid #fff; +} +@media only screen and (min-width: 768px) { + .aside-collapsed .user-block { + padding: 30px 0 0; + margin: 0; + text-align: center; + } + .aside-collapsed .user-block > .user-block-picture { + float: none; + margin: 0 auto; + width: 50px; + } + .aside-collapsed .user-block > .user-block-picture > .user-block-status { + display: block; + } + .aside-collapsed .user-block .user-block-role, + .aside-collapsed .user-block .user-block-status, + .aside-collapsed .user-block .user-block-name { + display: none; + } +} +/* ======================================================================== + Component: points.less + ========================================================================== */ +.point { + display: inline-block; + width: 7px; + height: 7px; + border-radius: 500px; + margin: 0 .5em; + background-color: #ddd; + vertical-align: baseline; + border: 2px solid transparent; +} +.point.text-left { + margin-left: 0; +} +.point.text-right { + margin-right: 0; +} +.point-primary { + background-color: #0094cb; +} +.point-success { + background-color: #7bbf62; +} +.point-info { + background-color: #3babc8; +} +.point-warning { + background-color: #ff902b; +} +.point-danger { + background-color: #f35839; +} +.point-green { + background-color: #01b6ad; +} +.point-pink { + background-color: #ff3366; +} +.point-inverse { + background-color: #494d4d; +} +.point-purple { + background-color: #ac8dd1; +} +.point-sm { + width: 5px; + height: 5px; +} +.point-lg { + width: 11px; + height: 11px; +} +.point-xl { + width: 18px; + height: 18px; +} +.point-outline { + background-color: transparent; +} +.point-outline.point-primary { + border: 1px solid #0094cb; +} +.point-outline.point-success { + border: 1px solid #7bbc62; +} +.point-outline.point-info { + border: 1px solid #3babc8; +} +.point-outline.point-warning { + border: 1px solid #ff902b; +} +.point-outline.point-danger { + border: 1px solid #f35839; +} +/* ======================================================================== + Component: timeline.less + ========================================================================== */ +.timeline { + list-style: none; + padding: 0 0 20px; + position: relative; +} +.timeline:before { + top: 0; + bottom: 0; + position: absolute; + content: " "; + width: 1px; + background-color: #d1d2d3; + left: 60px; +} +.timeline > li { + margin-bottom: 20px; + position: relative; + margin-top: 30px; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li.timeline-separator:before { + content: attr(data-datetime); + display: inline-block; + width: 120px; + text-align: center; + padding: 0 20px; + line-height: 30px; + border: 1px solid #e1e1e1; + background-color: #f1f2f3; + color: #a1a2a3; +} +.timeline > li > .timeline-panel { + position: relative; + margin-left: 130px; +} +.timeline > li > .timeline-panel .popover { + position: relative; + display: block; + margin: 0; + width: 100%; + max-width: none; +} +.timeline > li > .timeline-panel .popover .arrow { + display: none; +} +.timeline > li > .timeline-panel .popover .popover-content .popover-title { + background-color: transparent; + border: 0; + padding-left: 0; + padding-top: 0; +} +.timeline > li > .timeline-date { + float: right; + margin: -20px 0 0; + display: block; + height: 20px; + line-height: 20px; + font-size: 13px; +} +.timeline > li > .timeline-date > time:after { + content: attr(datetime); +} +.timeline > li > .timeline-badge { + position: absolute; + top: 0; + left: 60px; + width: 50px; + height: 50px; + border-radius: 500px; + margin-left: -25px; + line-height: 50px; + font-size: 1.4em; + text-align: center; + color: #fff; + background-color: #999999; + z-index: 100; +} +.timeline > li > .timeline-badge.primary { + background-color: #0094cb; +} +.timeline > li > .timeline-badge.success { + background-color: #7bbf62; +} +.timeline > li > .timeline-badge.warning { + background-color: #ff902b; +} +.timeline > li > .timeline-badge.danger { + background-color: #f35839; +} +.timeline > li > .timeline-badge.info { + background-color: #3babc8; +} +.timeline-title { + margin-top: 0; + color: inherit; +} +.timeline-body > p, +.timeline-body > ul { + margin-bottom: 0; +} +.timeline-body > p + p { + margin-top: 5px; +} +@media only screen and (min-width: 992px) { + .timeline:before { + left: 50%; + margin-left: 25px; + } + .timeline > li.timeline-separator { + margin-left: 25px; + text-align: center; + } + .timeline > li.timeline-separator:before { + margin-left: 25px; + } + .timeline > li > .timeline-badge { + left: 50%; + margin-left: 0; + } + .timeline > li > .timeline-date { + float: none; + position: absolute; + width: 40%; + left: 50%; + top: 25px; + margin-left: 75px; + margin-top: -10px; + } + .timeline > li > .timeline-panel { + float: left; + margin: 0; + width: 48%; + } + .timeline > li > .timeline-panel:before { + border-left-width: 15px; + border-right-width: 0; + top: 26px; + right: -15px; + left: auto; + } + .timeline > li > .timeline-panel:after { + border-left-width: 14px; + border-right-width: 0; + top: 27px; + right: -14px; + left: auto; + } + .timeline > li > .timeline-panel .popover .arrow { + top: 25px; + display: block; + } + .timeline > li.timeline-inverted > .timeline-panel { + float: right; + padding-left: 50px; + } + .timeline > li.timeline-inverted .timeline-date { + left: auto; + right: 50%; + width: auto; + margin-left: 0; + margin-right: 50px; + } +} +/* ======================================================================== + Component: dropdown-extras.less + ========================================================================== */ +.dropdown-lg > .dropdown-menu { + min-width: 200px; +} +.dropdown-list > .dropdown-menu { + padding: 0; + min-width: 220px; +} +.dropdown-list .list-group { + margin: 0; +} +.dropdown-list .list-group-item { + border-radius: 0; + border-left: 0; + border-right: 0; +} +.dropdown-list .list-group-item:first-child { + border-top: 0; +} +.dropdown-list .list-group-item:last-child { + border-bottom: 0; +} +.dropdown > a { + position: relative; +} +.dropdown > a > .label { + position: absolute; + top: 0; + right: 0; + padding: 2px 5px; +} +@media only screen and (min-width: 768px) { + .dropdown > a > .label { + top: 10px; + } +} +.dropdown-menu-header { + padding: 10px 15px; + background-color: #f7f8f9; + border-bottom: 1px solid #e1e1e1; +} +/* ======================================================================== + Component: row-extra.less + ========================================================================== */ +.row-table { + display: table; + table-layout: fixed; + height: 100%; + width: 100%; + margin: 0; +} +.row-table > [class*="col-"] { + display: table-cell; + float: none; + table-layout: fixed; + vertical-align: middle; +} +.row-flush > [class*="col-"] { + padding-left: 0; + padding-right: 0; +} +/* ======================================================================== + Component: half-float.less + ========================================================================== */ +.half-float { + position: relative; + margin-bottom: 65px; +} +.half-float .half-float-bottom, +.half-float .half-float-top { + position: absolute; + left: 50%; + bottom: -60px; + width: 120px; + height: 120px; + margin-left: -60px; + z-index: 2; +} +.half-float .half-float-top { + bottom: auto; + top: -60px; +} +.half-float + * { + margin-top: -55px; + padding-top: 65px; +} +/* ======================================================================== + Component: animations.less + ========================================================================== */ +[data-toggle="play-animation"][data-offset] { + visibility: hidden; +} +[data-toggle="play-animation"][data-offset].anim-done { + visibility: visible; +} +/* ======================================================================== + Component: masonry-grid.less + ========================================================================== */ +.row-masonry { + position: relative; + margin: 0; + padding: 0; + width: 100%; +} +.row-masonry > .col-masonry { + display: inline-block; + width: 100%; + min-height: 1em; + margin-bottom: 15px; +} +/* Columns definition by devices */ +@media only screen and (min-width: 480px) { + .row-masonry-sm-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-sm-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-sm-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-sm-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-sm-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-sm-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-sm-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-sm-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-sm-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-sm-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-sm-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-sm-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-sm-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-sm-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-sm-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-sm-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-sm-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-sm-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-sm-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-sm-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-sm-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-sm-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-sm-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-sm-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-sm-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-sm-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 768px) { + .row-masonry-md-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-md-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-md-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-md-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-md-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-md-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-md-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-md-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-md-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-md-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-md-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-md-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-md-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-md-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-md-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-md-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-md-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-md-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-md-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-md-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-md-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-md-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-md-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-md-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-md-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-md-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 992px) { + .row-masonry-lg-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-lg-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-lg-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-lg-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-lg-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-lg-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-lg-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-lg-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-lg-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-lg-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-lg-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-lg-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-lg-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-lg-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-lg-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-lg-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-lg-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-lg-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-lg-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-lg-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-lg-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-lg-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-lg-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-lg-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-lg-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-lg-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +@media only screen and (min-width: 1200px) { + .row-masonry-xl-1 { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 1; + -webkit-columns: 1; + columns: 1; + } + .no-csscolumns .row-masonry-xl-1 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-1:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-1 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 99%; + } + .row-masonry-xl-2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 2; + -webkit-columns: 2; + columns: 2; + } + .no-csscolumns .row-masonry-xl-2 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-2:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-2 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 49%; + } + .row-masonry-xl-3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 3; + -webkit-columns: 3; + columns: 3; + } + .no-csscolumns .row-masonry-xl-3 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-3:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-3 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 32%; + } + .row-masonry-xl-4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 4; + -webkit-columns: 4; + columns: 4; + } + .no-csscolumns .row-masonry-xl-4 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-4:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-4 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 24%; + } + .row-masonry-xl-5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 5; + -webkit-columns: 5; + columns: 5; + } + .no-csscolumns .row-masonry-xl-5 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-5:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-5 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 19%; + } + .row-masonry-xl-6 { + -moz-column-count: 6; + -webkit-column-count: 6; + column-count: 6; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 6; + -webkit-columns: 6; + columns: 6; + } + .no-csscolumns .row-masonry-xl-6 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-6:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-6 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 15%; + } + .row-masonry-xl-7 { + -moz-column-count: 7; + -webkit-column-count: 7; + column-count: 7; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 7; + -webkit-columns: 7; + columns: 7; + } + .no-csscolumns .row-masonry-xl-7 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-7:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-7 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 13%; + } + .row-masonry-xl-8 { + -moz-column-count: 8; + -webkit-column-count: 8; + column-count: 8; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 8; + -webkit-columns: 8; + columns: 8; + } + .no-csscolumns .row-masonry-xl-8 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-8:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-8 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 11%; + } + .row-masonry-xl-9 { + -moz-column-count: 9; + -webkit-column-count: 9; + column-count: 9; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 9; + -webkit-columns: 9; + columns: 9; + } + .no-csscolumns .row-masonry-xl-9 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-9:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-9 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 10%; + } + .row-masonry-xl-10 { + -moz-column-count: 10; + -webkit-column-count: 10; + column-count: 10; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 10; + -webkit-columns: 10; + columns: 10; + } + .no-csscolumns .row-masonry-xl-10 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-10:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-10 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 9%; + } + .row-masonry-xl-11 { + -moz-column-count: 11; + -webkit-column-count: 11; + column-count: 11; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 11; + -webkit-columns: 11; + columns: 11; + } + .no-csscolumns .row-masonry-xl-11 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-11:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-11 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 8%; + } + .row-masonry-xl-12 { + -moz-column-count: 12; + -webkit-column-count: 12; + column-count: 12; + -moz-column-gap: 15px; + -webkit-column-gap: 15px; + column-gap: 15px; + -moz-columns: 12; + -webkit-columns: 12; + columns: 12; + } + .no-csscolumns .row-masonry-xl-12 { + text-align: justify; + } + .no-csscolumns .row-masonry-xl-12:after { + content: ''; + display: inline-block; + width: 100%; + } + .no-csscolumns .row-masonry-xl-12 > .col-masonry { + vertical-align: top; + display: inline-block; + width: 7%; + } +} +/* ======================================================================== + Component: widget.less + ========================================================================== */ +.widget { + margin-bottom: 20px; +} +.widget.panel, +.widget .panel { + overflow: hidden; +} +/* ======================================================================== + Component: chart-flot.less + ========================================================================== */ +.flot-chart { + display: block; + height: 250px; +} +.flot-chart .legend > table tr td { + padding: 3px; +} +.flot-chart .legend > table tr td:first-child { + padding-left: 3px; +} +.flot-chart .legend > table tr td:last-child { + padding-right: 3px; +} +.flot-chart .legend > table tr + tr td { + padding-top: 0; +} +.flot-chart .legend > div:first-child { + border-color: rgba(0, 0, 0, 0.1) !important; +} +.flot-chart .legend .legendColorBox > div, +.flot-chart .legend .legendColorBox > div > div { + border-radius: 400px; +} +.flot-chart-content { + width: 100%; + height: 100%; +} +.flot-pie-label { + padding: 3px 5px; + font-size: 10px; + text-align: center; + color: #fff; +} +#flotTip { + position: relative; + padding: 5px; + font-size: 12px !important; + border-radius: 2px !important; + border-color: transparent !important; + background-color: rgba(0, 0, 0, 0.75) !important; + color: #f1f1f1; + z-index: 5; +} +/* ======================================================================== + Component: form-elements.less + ========================================================================== */ +/** + * Custom form elements + * - Checkbox + * - Radios + * - Switch + * - Rounded inputs + */ +.c-checkbox, +.c-radio { + margin-right: 4px; +} +.c-checkbox *, +.c-radio * { + cursor: pointer; +} +.c-checkbox input, +.c-radio input { + opacity: 0; + position: absolute; + margin-left: 0 !important; +} +.c-checkbox span, +.c-radio span { + position: relative; + display: inline-block; + vertical-align: top; + margin-left: -20px; + width: 20px; + height: 20px; + border-radius: 2px; + border: 1px solid #ccc; + margin-right: 5px; +} +.c-checkbox:hover span, +.c-radio:hover span { + border-color: #0094cb; +} +.form-inline .c-checkbox span, +.form-inline .c-radio span { + margin-left: 0; +} +.c-checkbox.c-checkbox-rounded span, +.c-radio.c-checkbox-rounded span, +.c-checkbox.c-radio-rounded span, +.c-radio.c-radio-rounded span { + border-radius: 500px; +} +/* override for radio */ +.c-radio span { + border-radius: 500px; +} +/* the icon */ +.c-checkbox span:before, +.c-radio span:before { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0; + text-align: center !important; + font-size: 12px; + line-height: 18px; + vertical-align: middle; +} +/* Checked state */ +input[type=checkbox]:checked + span:before, +input[type=radio]:checked + span:before { + color: #fff; + opacity: 1; + transition: color 0.3s ease-out; +} +input[type=checkbox]:checked + span, +input[type=radio]:checked + span { + border-color: #0094cb; + background-color: #0094cb; +} +/* override for radio */ +input[type=radio]:checked + span { + background-color: #fff; +} +input[type=radio]:checked + span:before { + color: #0094cb; +} +/* Disable state */ +input[type=checkbox]:disabled + span, +input[type=radio]:disabled + span { + border-color: #dddddd !important; + background-color: #dddddd !important; +} +/* override for radio */ +input[type=radio]:disabled + span { + background-color: #fff !important; +} +input[type=radio]:disabled + span:before { + color: #dddddd; +} +.form-control-rounded { + border-radius: 100px; +} +.switch * { + cursor: pointer; +} +.switch input { + opacity: 0; + position: absolute; + z-index: -1; +} +.switch span { + position: relative; + display: inline-block; + width: 60px; + height: 30px; + background-color: #fff; + border: 1px solid #dddddd; + border-radius: 100px; + transition: all .5s; + box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.1) inset; +} +.switch span:after { + content: ""; + position: absolute; + background-color: #fff; + top: 0; + left: 0; + height: 28px; + width: 28px; + border: 1px solid #ddd; + border-radius: 400px; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); + -webkit-transition: all .2s; +} +.switch input:checked + span { + background-color: #0094cb; + border-color: #0094cb; + transition: all .5s; +} +.switch input:checked + span:after { + left: 50%; + transition: all .2s; +} +.has-feedback .form-control-feedback { + top: 10px; +} +label + .form-control + .form-control-feedback { + top: 32px; +} +.input-md { + width: 260px; +} +/* ======================================================================== + Component: form-file.less + ========================================================================== */ +.form-file { + position: relative; + display: inline-block; + vertical-align: bottom; + overflow: hidden; +} +.form-file input[type="file"] { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + width: 100%; + opacity: 0; + cursor: pointer; + /* 1 */ + left: 0; + /* 2 */ + font-size: 500px; +} +/* ======================================================================== + Component: form-validation.less + ========================================================================== */ +.parsley-error { + border-color: #f35839 !important; +} +.parsley-errors-list { + display: none; + margin: 0; + padding: 0; +} +.parsley-errors-list.filled { + display: block; +} +.parsley-errors-list > li { + font-size: 12px; + list-style: none; + color: #f35839; +} +/* ======================================================================== + Component: form-tags.less + ========================================================================== */ +.bootstrap-tagsinput { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.bootstrap-tagsinput:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.bootstrap-tagsinput::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.bootstrap-tagsinput:-ms-input-placeholder { + color: #b7bac9; +} +.bootstrap-tagsinput::-webkit-input-placeholder { + color: #b7bac9; +} +.bootstrap-tagsinput[disabled], +.bootstrap-tagsinput[readonly], +fieldset[disabled] .bootstrap-tagsinput { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.bootstrap-tagsinput { + height: auto; +} +.bootstrap-tagsinput .tag { + color: inherit; +} +/* ======================================================================== + Component: form-wizard.less + ========================================================================== */ +.form-wizard > ol { + list-style-type: none; + padding: 0 15px; +} +.form-wizard > ol > li { + min-height: 50px; + padding-top: 15px; + padding-bottom: 15px; + background-color: #fcfcfc; + cursor: pointer; + -webkit-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} +.form-wizard > ol > li > a { + text-decoration: none; +} +.form-wizard > ol > li .label { + color: #0094cb; + border: 1px solid #0094cb; + vertical-align: super; + margin-right: 6px; +} +.form-wizard > ol > li .label[href]:hover, +.form-wizard > ol > li .label[href]:focus { + color: #006f98; + border-color: #006f98; +} +.form-wizard > ol > li h4 { + display: inline-block; + color: #515253; +} +.form-wizard > ol > li small { + display: block; + color: #b1b2b2; +} +.form-wizard > ol > li.active { + background-color: #0094cb; +} +.form-wizard > ol > li.active h4, +.form-wizard > ol > li.active small { + color: #fff; +} +.form-wizard > ol > li.active .label { + background-color: #0094cb; + border-color: #fff; + color: #fff; +} +.form-wizard .well { + border: 0; + margin: 0; + padding: 10px 0; + box-shadow: 0 0 0 #000; +} +.form-wizard .well fieldset { + margin: 0; +} +.form-wizard.wizard-horizontal > ol > li { + display: inline-block; +} +.form-wizard.wizard-vertical:before, +.form-wizard.wizard-vertical:after { + content: " "; + display: table; +} +.form-wizard.wizard-vertical:after { + clear: both; +} +.form-wizard.wizard-vertical > ol { + float: left; + width: 39%; + padding: 0; +} +.form-wizard.wizard-vertical > ol > li { + display: block; + padding: 10px; +} +.form-wizard.wizard-vertical > ol > li h4 { + font-size: 14px; +} +.form-wizard.wizard-vertical > div { + float: right; + width: 59%; +} +.form-wizard.wizard-vertical .pager { + clear: both; + padding-top: 10px; +} +.form-wizard.wizard-vertical .well { + padding: 0; +} +/* ======================================================================== + Component: form-dragdrop.less + ========================================================================== */ +/** + * Provides a dragover state for uploads + */ +.dragover { + box-shadow: 0 0 20px rgba(100, 100, 100, 0.3); +} +/* ======================================================================== + Component: markdownarea.less + ========================================================================== */ +.uk-markdownarea-navbar { + background: #eeeeee; +} +.uk-markdownarea-navbar:before, +.uk-markdownarea-navbar:after { + content: " "; + display: table; +} +.uk-markdownarea-navbar:after { + clear: both; +} +.uk-markdownarea-navbar-nav { + margin: 0; + padding: 0; + list-style: none; + float: left; +} +.uk-markdownarea-navbar-nav > li { + float: left; +} +.uk-markdownarea-navbar-nav > li > a { + display: block; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-decoration: none; + /* 1 */ + height: 40px; + padding: 0 15px; + line-height: 40px; + /* 2 */ + color: #444444; + font-size: 11px; + cursor: pointer; +} +.uk-markdownarea-navbar-nav > li:hover > a, +.uk-markdownarea-navbar-nav > li > a:focus { + background-color: #f5f5f5; + color: #444444; + outline: none; + /* 2 */ +} +.uk-markdownarea-navbar-nav > li > a:active { + background-color: #dddddd; + color: #444444; +} +.uk-markdownarea-navbar-nav > li.uk-active > a { + background-color: #f5f5f5; + color: #444444; +} +.uk-markdownarea-navbar-flip { + float: right; +} +[data-mode='split'] .uk-markdown-button-markdown, +[data-mode='split'] .uk-markdown-button-preview { + display: none; +} +.uk-markdownarea-content { + border-left: 1px solid #dddddd; + border-right: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + background: #ffffff; +} +.uk-markdownarea-content:before, +.uk-markdownarea-content:after { + content: " "; + display: table; +} +.uk-markdownarea-content:after { + clear: both; +} +.uk-markdownarea-fullscreen { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 990; +} +.uk-markdownarea-fullscreen .uk-markdownarea-content { + position: absolute; + top: 40px; + left: 0; + right: 0; + bottom: 0; +} +.uk-markdownarea-fullscreen .uk-icon-expand:before { + content: "\f066"; +} +.uk-markdownarea-code, +.uk-markdownarea-preview { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.uk-markdownarea-preview { + padding: 20px; + overflow-y: scroll; +} +.uk-markdownarea-preview h1:first-child, +.uk-markdownarea-preview h2:first-child, +.uk-markdownarea-preview h3:first-child, +.uk-markdownarea-preview h4:first-child { + margin-top: 0; +} +[data-mode='tab'][data-active-tab='code'] .uk-markdownarea-preview, +[data-mode='tab'][data-active-tab='preview'] .uk-markdownarea-code { + display: none; +} +[data-mode='split'] .uk-markdownarea-code, +[data-mode='split'] .uk-markdownarea-preview { + float: left; + width: 50%; +} +[data-mode='split'] .uk-markdownarea-code { + border-right: 1px solid #eeeeee; +} +.uk-markdownarea .CodeMirror { + padding: 10px; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/* Fullscreen MArkdown area editor */ +html.markdownarea-fullscreen, +.markdownarea-fullscreen body { + height: 100%; + -webkit-transition: height 0s linear 0.2s; + -o-transition: height 0s linear 0.2s; + transition: height 0s linear 0.2s; +} +.markdownarea-fullscreen .navbar-top, +.markdownarea-fullscreen .sidebar, +.markdownarea-fullscreen .offsidebar { + visibility: hidden; + opacity: 0; + -webkit-transition: opacity .2s ease, visibility 0s ease 0.2s; + -o-transition: opacity .2s ease, visibility 0s ease 0.2s; + transition: opacity .2s ease, visibility 0s ease 0.2s; +} +.markdownarea-fullscreen .wrapper > section { + margin-left: 0; +} +/* ======================================================================== + Component: codemirror-md.less + ========================================================================== */ +/** + * Style for the markdown area on new and edit article pages + * Most of the style overwrite codemirror and + * markdownarea uikit addon styles + */ +/* CODEMIRROR MD THEME */ +.cm-s-default pre { + font-family: "Helvetica Neue", "Trebuchet MS", "Arial", sans-serif; + line-height: 1.6; +} +.cm-s-default pre * { + color: #222222 !important; +} +.cm-s-default .cm-header { + line-height: 1.1; + margin-bottom: 0.7em; +} +.cm-s-default .cm-quote, +.cm-s-default .cm-variable-2 { + padding-left: 10px; +} +.cm-s-default .cm-header-1 { + font-size: 2.6em; +} +.cm-s-default .cm-header-2 { + font-size: 2.15em; +} +.cm-s-default .cm-header-3 { + font-size: 1.7em; +} +.cm-s-default .cm-header-4 { + font-size: 1.25em; +} +.cm-s-default .cm-header:after, +.cm-s-default .cm-header:before { + content: ""; + display: inline-block; + font-size: inherit; + width: 100%; +} +.CodeMirror-lines pre:first-child .cm-header:before { + display: none; +} +.uk-markdownarea-navbar { + background-color: transparent; +} +.uk-markdownarea-content { + font-family: "Helvetica Neue", "Trebuchet MS", "Arial", sans-serif; + border: 1px solid #DDDDDD; +} +.uk-markdownarea-fullscreen { + background-color: #fff; + z-index: 1011; +} +.uk-markdownarea-fullscreen .uk-markdownarea-navbar, +.uk-markdownarea-fullscreen .uk-markdownarea-content { + max-width: 960px; + margin: 0 auto; + border: 0; +} +/* ======================================================================== + Component: datatable.less + ========================================================================== */ +.dataTables_filter input { + margin-left: 10px; +} +.dataTables_length select { + margin-right: 10px; +} +table.dataTable tfoot > tr > th { + color: #a1a2a3; + background: #f1f2f3; +} +.ColVis .ColVis_Button { + background-image: none; + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.ColVis .ColVis_Button > span { + color: #656565; +} +.ColVis_collectionBackground { + display: none; +} +ul.ColVis_collection { + background-color: #fff; +} +ul.ColVis_collection > li { + border: 0 !important; + background-image: none !important; + box-shadow: 0 0 0 #000 !important; + margin: 0; +} +ul.ColVis_collection > li > label { + margin: 0; +} +ul.ColVis_collection > li > label > span { + color: #888; + vertical-align: top; + font-weight: normal; +} +ul.ColVis_collection > li > label > span:hover { + color: #555; +} +ul.ColVis_collection > li > label input[type=checkbox]:checked + span, +ul.ColVis_collection > li > label input[type=radio]:checked + span { + background-color: transparent; +} +/* ======================================================================== + Component: table-extras.less + ========================================================================== */ +.table > thead > tr > th { + padding: 14px 8px; + color: #888; +} +.table > tbody > tr > td { + vertical-align: middle; +} +.table > tbody > tr > td > .media img { + width: 36px; + height: 36px; + margin: 0 auto; +} +.table .checkbox { + margin: 0 auto; + width: 20px; +} +.table .progress { + margin-bottom: 0; +} +.table .radial-bar { + margin-bottom: 0; + margin: 0 auto; +} +.jqstooltip { + box-sizing: content-box; +} +#table-ext-1 th:nth-child(1) { + width: 3%; +} +#table-ext-1 th:nth-child(2) { + width: 5%; +} +#table-ext-1 th:nth-child(7) { + width: 5%; +} +#table-ext-1 th:nth-child(9) { + width: 5%; +} +#table-ext-2 th:nth-child(1) { + width: 5%; +} +#table-ext-2 th:nth-child(3) { + width: 10%; +} +/* ======================================================================== + Component: plugins.less + ========================================================================== */ +/** + * Bootstrap Slider + */ +.slider-handle, +.slider-track, +.slider-selection { + background-image: none; + box-shadow: 0 0 0 #000; +} +.slider-handle { + background-color: #fff; + border: 1px solid #0094cb; + opacity: 1; +} +.slider-track { + background-color: #fff; + border: 1px solid #0094cb; +} +.slider-selection { + background-color: #0094cb; +} +.slider .tooltip.top .tooltip-arrow { + border-top-color: #2c3037; +} +.slider .tooltip.right .tooltip-arrow { + border-right-color: #2c3037; +} +.slider .tooltip-inner { + background-color: #2c3037; +} +.slider-lg { + width: 380px; +} +/** + * Chosen + */ +.chosen-container-multi .chosen-choices { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.chosen-container-multi .chosen-choices:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.chosen-container-multi .chosen-choices::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.chosen-container-multi .chosen-choices:-ms-input-placeholder { + color: #b7bac9; +} +.chosen-container-multi .chosen-choices::-webkit-input-placeholder { + color: #b7bac9; +} +.chosen-container-multi .chosen-choices[disabled], +.chosen-container-multi .chosen-choices[readonly], +fieldset[disabled] .chosen-container-multi .chosen-choices { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.chosen-container-multi .chosen-choices { + height: auto; +} +.chosen-container-multi .chosen-choices li.search-field input[type=text] { + height: auto; + padding: 0; +} +.chosen-container-multi .chosen-choices li.search-choice { + margin: 0 5px 3px 0; + background-color: #f5f6f7; + border: 1px solid #e7e9ec; + background-image: none; +} +.chosen-container .chosen-results li.highlighted { + background-color: #a1a2a3; + background-image: none; +} +.chosen-container .chosen-drop { + border-color: #ddd; +} +.chosen-container .chosen-results li.group-result { + color: #747576; + letter-spacing: 0.02em; +} +.chosen-container-single .chosen-single, +.chosen-container-active.chosen-with-drop .chosen-single { + border-color: #dbd9d9; + box-shadow: 0 0 0 #000 !important; + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.chosen-container-single .chosen-single:focus, +.chosen-container-active.chosen-with-drop .chosen-single:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.chosen-container-single .chosen-single::-moz-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.chosen-container-single .chosen-single:-ms-input-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single:-ms-input-placeholder { + color: #b7bac9; +} +.chosen-container-single .chosen-single::-webkit-input-placeholder, +.chosen-container-active.chosen-with-drop .chosen-single::-webkit-input-placeholder { + color: #b7bac9; +} +.chosen-container-single .chosen-single[disabled], +.chosen-container-active.chosen-with-drop .chosen-single[disabled], +.chosen-container-single .chosen-single[readonly], +.chosen-container-active.chosen-with-drop .chosen-single[readonly], +fieldset[disabled] .chosen-container-single .chosen-single, +fieldset[disabled] .chosen-container-active.chosen-with-drop .chosen-single { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.chosen-container-single .chosen-single, +textarea.chosen-container-active.chosen-with-drop .chosen-single { + height: auto; +} +.chosen-container-single .chosen-drop { + margin-top: -3px; +} +.chosen-container-single .chosen-single div { + top: 6px; + right: 5px; +} +.chosen-container-multi .chosen-choices li.search-field input[type=text] { + color: #b7bac9; +} +/** + * Filestyle + */ +.bootstrap-filestyle { + outline: none; +} +.bootstrap-filestyle > input { + max-width: 200px; + display: inline-block; + vertical-align: middle; +} +/* ======================================================================== + Component: slim-scroll.less + ========================================================================== */ +.slimScrollBar { + opacity: 1 !important; + background-color: rgba(0, 0, 0, 0.35) !important; + border: 0 !important; + border-radius: 1px !important; +} +.slimScrollRail { + opacity: 1 !important; + background-color: rgba(0, 0, 0, 0.15) !important; + border: 0 !important; + border-radius: 0 !important; +} +/* ======================================================================== + Component: datepicker.less + ========================================================================== */ +.bootstrap-datetimepicker-widget .btn { + padding: 6px; + box-shadow: 0 0 0 #000; + border: 0; +} +.bootstrap-datetimepicker-widget td.day:hover, +.bootstrap-datetimepicker-widget td.hour:hover, +.bootstrap-datetimepicker-widget td.minute:hover, +.bootstrap-datetimepicker-widget td.second:hover { + background: #fafafa; +} +.bootstrap-datetimepicker-widget td.old, +.bootstrap-datetimepicker-widget td.new { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td.active, +.bootstrap-datetimepicker-widget td.active:hover { + background-color: #0094cb; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget td.disabled, +.bootstrap-datetimepicker-widget td.disabled:hover { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td span:hover { + background: #fafafa; +} +.bootstrap-datetimepicker-widget td span.active { + background-color: #0094cb; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.bootstrap-datetimepicker-widget td span.old { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget td span.disabled, +.bootstrap-datetimepicker-widget td span.disabled:hover { + background: none; + color: #e1e1e1; + cursor: not-allowed; +} +.bootstrap-datetimepicker-widget th.disabled, +.bootstrap-datetimepicker-widget th.disabled:hover { + color: #e1e1e1; +} +.bootstrap-datetimepicker-widget thead tr:first-child th:hover { + background: #fafafa; +} +/* ======================================================================== + Component: notify.less + ========================================================================== */ +.uk-notify { + position: fixed; + top: 50px; + left: 50px; + z-index: 1040; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 350px; +} +.uk-notify-top-right, +.uk-notify-bottom-right { + left: auto; + right: 50px; +} +.uk-notify-top-center, +.uk-notify-bottom-center { + left: 50%; + margin-left: -175px; +} +.uk-notify-bottom-left, +.uk-notify-bottom-right, +.uk-notify-bottom-center { + top: auto; + bottom: 50px; +} +@media (max-width: 480px) { + .uk-notify { + left: 10px; + right: 10px; + width: auto; + margin: 0; + } +} +.uk-notify-message { + position: relative; + margin-bottom: 10px; + padding: 8px; + font-size: 13px; + line-height: 22px; + border-radius: 3px; + padding-right: 35px; + cursor: pointer; +} +.uk-notify-message.alert.alert-normal { + background: #444444; + color: #ffffff; +} +.uk-notify-message > .close { + visibility: hidden; +} +.uk-notify-message:hover > .close { + visibility: visible; +} +/* ======================================================================== + Component: calendar.less + ========================================================================== */ +.fc-button { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; + background-image: none; +} +.fc-button:hover, +.fc-button:focus, +.fc-button.focus, +.fc-button:active, +.fc-button.active, +.open > .dropdown-toggle.fc-button { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.fc-button:active, +.fc-button.active, +.open > .dropdown-toggle.fc-button { + background-image: none; +} +.fc-button.disabled, +.fc-button[disabled], +fieldset[disabled] .fc-button, +.fc-button.disabled:hover, +.fc-button[disabled]:hover, +fieldset[disabled] .fc-button:hover, +.fc-button.disabled:focus, +.fc-button[disabled]:focus, +fieldset[disabled] .fc-button:focus, +.fc-button.disabled.focus, +.fc-button[disabled].focus, +fieldset[disabled] .fc-button.focus, +.fc-button.disabled:active, +.fc-button[disabled]:active, +fieldset[disabled] .fc-button:active, +.fc-button.disabled.active, +.fc-button[disabled].active, +fieldset[disabled] .fc-button.active { + background-color: #ffffff; + border-color: #cccccc; +} +.fc-button .badge { + color: #ffffff; + background-color: #333333; +} +.fc-button:active, +.fc-button.active, +.fc-button.fc-state-active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.fc-button .fc-icon { + margin: 0 .1em; + font-size: inherit; + font-family: FontAwesome !important; + vertical-align: baseline; + color: #555; +} +.fc-button .fc-icon:after { + display: none; +} +.fc-state-highlight, +.fc-day:hover { + background-color: #f7f8f9; +} +.fc-day-number { + font-size: 18px; + font-weight: bold; + color: #a1a2a3; +} +.fc-view { + overflow: visible; +} +.external-events { + margin: 0; +} +.external-events > div { + display: inline-block; + margin-right: 5px; + margin-bottom: 5px; + padding: 6px 10px; + color: #fff; + font-size: 11px; + cursor: pointer; +} +.external-events:empty { + content: "EMRTPUY"; +} +.external-events-trash { + position: relative; + min-height: 120px; +} +.external-events-trash:after { + content: "\f00d"; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #494d4d; + opacity: 0; + font-family: FontAwesome; + color: #fff; + text-align: center; + font-size: 50px; + padding: 8%; + max-height: 100%; + -webkit-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + z-index: -1; +} +.external-events-trash.active:after { + opacity: 1; + z-index: 1; +} +.external-events-trash.hovered:after { + background-color: #fb797e; +} +.external-event-color-selector .point.selected { + border: 3px solid rgba(255, 255, 255, 0.5); +} +/* ======================================================================== + Component: datatable.less + ========================================================================== */ +/* (cs)spinner.css - http://jh3y.github.io/-cs-spinner + Licensed under the MIT license | Jhey Tompkins (c) 2014. */ +/* (cs)spinner base styling */ +.csspinner { + position: relative; +} +.csspinner:before { + content: attr(data-spinner-text); + display: block; + background-color: #f0f0f0; + opacity: 0.7; +} +.csspinner.solid { + opacity: 1; +} +.ie9 .csspinner:before, +.lt-ie9 .csspinner:before { + opacity: .9; +} +.ie9 .csspinner:after, +.lt-ie9 .csspinner:after { + content: "Loading..."; + width: 40px; + height: 40px; + margin: -20px 0 0 -20px; + line-height: 40px; + color: #000; + opacity: 1; + border: 0; + box-shadow: 0 0 0 #000; + background-color: transparent; + text-align: center; +} +/* ======================================================================== + Component: gmap.less + ========================================================================== */ +.gmap { + height: 300px; +} +.gmap.gmap-sm { + height: 150px; +} +/* ======================================================================== + Component: vector-map.less + ========================================================================== */ +.jvectormap-label { + position: absolute; + display: none; + border: solid 1px #313232; + border-radius: 2px; + background: #313232; + color: white; + padding: 3px 6px; + opacity: 0.9; + z-index: 11; +} +.jvectormap-zoomin, +.jvectormap-zoomout { + position: absolute; + left: 10px; + width: 22px; + height: 22px; + border-radius: 2px; + background: #515253; + padding: 5px; + color: white; + cursor: pointer; + line-height: 10px; + text-align: center; +} +.jvectormap-zoomin { + top: 10px; +} +.jvectormap-zoomout { + top: 30px; +} +/* ======================================================================== + Component: portlets.less + ========================================================================== */ +.porlet-wrapper { + overflow: auto; +} +[data-toggle="portlet"] { + min-height: 30px; +} +[data-toggle="portlet"].portlet-handler, +[data-toggle="portlet"] .portlet-handler { + cursor: move; +} +.portlet.box-placeholder { + padding: 0; +} +/* ======================================================================== + Component: mailbox.less + ========================================================================== */ +.mb-boxes { + height: 0; + overflow: hidden; +} +@media only screen and (min-width: 1200px) { + .mb-boxes { + height: auto !important; + display: block; + } +} +.mb-mails > tbody > tr > td { + border-top-color: transparent; +} +.mb-mails .mb-mail-active { + background-color: #f7f8f9 !important; +} +.mb-mails .mb-mail-avatar { + float: left; + margin-right: 10px; + width: 40px; + height: 40px; + border-radius: 3px; +} +.mb-mails .mb-mail-date { + display: block; + float: right; + color: #b1b2b2; + font-size: 12px; + font-weight: bold; +} +.mb-mails .mb-mail-from { + display: block; + color: #37475d; + font-size: 14px; + font-weight: 600; + line-height: 1; +} +.mb-mails .mb-mail-subject { + color: #37475d; + font-size: 18px; + font-weight: 600; + line-height: 1.8; +} +.mb-mails .mb-mail-preview { + clear: both; + margin-top: 10px; + color: #b1b2b2; +} +.mb-panel > h3 { + font-weight: 600; + margin-top: 0; + font-size: 48px; +} +.mb-panel .mb-panel-form .mb-panel-form-reply { + min-height: 120px; + border-color: transparent; + -webkit-transition: border-color 0.3s ease; + -o-transition: border-color 0.3s ease; + transition: border-color 0.3s ease; +} +.mb-panel .mb-panel-form .mb-panel-form-reply:focus { + border-color: #d1d2d3; +} +/* ======================================================================== + Component: utils.less + ========================================================================== */ +.m { + margin: 10px !important; +} +.ml { + margin-left: 10px !important; +} +.mr { + margin-right: 10px !important; +} +.mt { + margin-top: 10px !important; +} +.mb { + margin-bottom: 10px !important; +} +.m-sm { + margin: 5px !important; +} +.ml-sm { + margin-left: 5px !important; +} +.mr-sm { + margin-right: 5px !important; +} +.mt-sm { + margin-top: 5px !important; +} +.mb-sm { + margin-bottom: 5px !important; +} +.m-lg { + margin: 15px !important; +} +.ml-lg { + margin-left: 15px !important; +} +.mr-lg { + margin-right: 15px !important; +} +.mt-lg { + margin-top: 15px !important; +} +.mb-lg { + margin-bottom: 15px !important; +} +.m-xl { + margin: 30px !important; +} +.ml-xl { + margin-left: 30px !important; +} +.mr-xl { + margin-right: 30px !important; +} +.mt-xl { + margin-top: 30px !important; +} +.mb-xl { + margin-bottom: 30px !important; +} +.mv { + margin-top: 10px !important; + margin-bottom: 10px !important; +} +.mh { + margin-left: 10px !important; + margin-right: 10px !important; +} +.mv-lg { + margin-top: 15px !important; + margin-bottom: 15px !important; +} +.mh-lg { + margin-left: 15px !important; + margin-right: 15px !important; +} +.mv-sm { + margin-top: 5px !important; + margin-bottom: 5px !important; +} +.mh-sm { + margin-left: 5px !important; + margin-right: 5px !important; +} +.m0 { + margin: 0 !important; +} +.ml0 { + margin-left: 0 !important; +} +.mr0 { + margin-right: 0 !important; +} +.mt0 { + margin-top: 0 !important; +} +.mb0 { + margin-bottom: 0 !important; +} +.p { + padding: 10px !important; +} +.pl { + padding-left: 10px !important; +} +.pr { + padding-right: 10px !important; +} +.pt { + padding-top: 10px !important; +} +.pb { + padding-bottom: 10px !important; +} +.p-sm { + padding: 5px !important; +} +.pl-sm { + padding-left: 5px !important; +} +.pr-sm { + padding-right: 5px !important; +} +.pt-sm { + padding-top: 5px !important; +} +.pb-sm { + padding-bottom: 5px !important; +} +.p-lg { + padding: 15px !important; +} +.pl-lg { + padding-left: 15px !important; +} +.pr-lg { + padding-right: 15px !important; +} +.pt-lg { + padding-top: 15px !important; +} +.pb-lg { + padding-bottom: 15px !important; +} +.pv { + padding-top: 10px !important; + padding-bottom: 10px !important; +} +.ph { + padding-left: 10px !important; + padding-right: 10px !important; +} +.pv-lg { + padding-top: 15px !important; + padding-bottom: 15px !important; +} +.ph-lg { + padding-left: 15px !important; + padding-right: 15px !important; +} +.pv-sm { + padding-top: 5px !important; + padding-bottom: 5px !important; +} +.ph-sm { + padding-left: 5px !important; + padding-right: 5px !important; +} +.p0 { + padding: 0 !important; +} +.pl0 { + padding-left: 0 !important; +} +.pr0 { + padding-right: 0 !important; +} +.pt0 { + padding-top: 0 !important; +} +.pb0 { + padding-bottom: 0 !important; +} +.b0 { + border-width: 0 !important; +} +.bl0 { + border-left-width: 0 !important; +} +.br0 { + border-right-width: 0 !important; +} +.bt0 { + border-top-width: 0 !important; +} +.bb0 { + border-bottom-width: 0 !important; +} +.br { + border-right: 1px solid #e1e1e1; +} +.bl { + border-left: 1px solid #e1e1e1; +} +.bt { + border-top: 1px solid #e1e1e1; +} +.bb { + border-bottom: 1px solid #e1e1e1; +} +.b { + border-right: 1px solid #e1e1e1; + border-left: 1px solid #e1e1e1; + border-top: 1px solid #e1e1e1; + border-bottom: 1px solid #e1e1e1; +} +.radius-clear { + border-radius: 0 !important; +} +.shadow-clear { + box-shadow: 0 0 0 #000 !important; +} +.text-white { + color: #fff; +} +.text-inverse { + color: #494d4d; +} +.text-alpha { + color: rgba(255, 255, 255, 0.5); +} +.text-pink { + color: #ff3366; +} +.text-purple { + color: #ac8dd1; +} +.text-dark { + color: #35394b; +} +.text-alpha-inverse { + color: rgba(0, 0, 0, 0.5); +} +.text-green { + color: #01b6ad; +} +.text-gray-darker { + color: #37475d; +} +.text-gray-dark { + color: #89949b; +} +.text-gray { + color: #d1d2d3; +} +.text-gray-light { + color: #e1e1e1; +} +.text-gray-lighter { + color: #fafafa; +} +.text-ellipsis { + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 .2em; + overflow: hidden; +} +.text-sm { + font-size: 11.05px; +} +.text-md { + font-size: 16.9px; +} +.text-lg { + font-size: 39px; +} +.inline { + display: inline-block !important; +} +.block-center { + margin: 0 auto; +} +.bg-primary { + background-color: #0094cb; + color: #ffffff; +} +.bg-success { + background-color: #7bbf62; + color: #ffffff; +} +.bg-info { + background-color: #3babc8; + color: #ffffff; +} +.bg-warning { + background-color: #ff902b; + color: #ffffff; +} +.bg-danger { + background-color: #f35839; + color: #ffffff; +} +.bg-inverse { + background-color: #494d4d; + color: #ffffff; +} +.bg-white { + background-color: #ffffff; + color: inherit; +} +.bg-green { + background-color: #01b6ad; + color: #ffffff; +} +.bg-pink { + background-color: #ff3366; + color: #ffffff; +} +.bg-purple { + background-color: #ac8dd1; + color: #ffffff; +} +.bg-gray-darker { + background-color: #37475d; + color: #ffffff; +} +.bg-gray-dark { + background-color: #89949b; + color: #ffffff; +} +.bg-gray { + background-color: #d1d2d3; + color: #ffffff; +} +.bg-gray-light { + background-color: #e1e1e1; + color: #ffffff; +} +.bg-gray-lighter { + background-color: #fafafa; + color: #ffffff; +} +.thumb8 { + width: 8px; + height: 8px; +} +.thumb16 { + width: 16px; + height: 16px; +} +.thumb32 { + width: 32px; + height: 32px; +} +.thumb48 { + width: 48px; + height: 48px; +} +.thumb64 { + width: 64px; + height: 64px; +} +.thumb96 { + width: 96px; + height: 96px; +} +.thumb128 { + width: 128px; + height: 128px; +} +.align-middle { + vertical-align: middle; +} +.align-top { + vertical-align: top; +} +.align-bottom { + vertical-align: bottom; +} +.bg-center { + background-position: center center; + background-size: cover; +} +.list-icon em { + font-size: 14px; + width: 40px; + vertical-align: middle; + margin: 0; + display: inline-block; + text-align: center; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + line-height: 30px; +} +.list-icon div:hover em { + -webkit-transform: scale(3, 3); + -ms-transform: scale(3, 3); + -o-transform: scale(3, 3); + transform: scale(3, 3); +} +.label-inverse { + color: #494d4d; + border: 1px solid #494d4d; +} +.label-inverse[href]:hover, +.label-inverse[href]:focus { + color: #303333; + border-color: #303333; +} +.label-green { + color: #01b6ad; + border: 1px solid #01b6ad; +} +.label-green[href]:hover, +.label-green[href]:focus { + color: #01837d; + border-color: #01837d; +} +.label-pink { + color: #ff3366; + border: 1px solid #ff3366; +} +.label-pink[href]:hover, +.label-pink[href]:focus { + color: #ff0040; + border-color: #ff0040; +} +.label-purple { + color: #ac8dd1; + border: 1px solid #ac8dd1; +} +.label-purple[href]:hover, +.label-purple[href]:focus { + color: #9269c2; + border-color: #9269c2; +} +@media only screen and (min-width: 992px) { + .discoverer .discover { + opacity: 0; + visibility: hidden; + -webkit-transition: opacity .4s ease 0s, visibility 0s linear 0s; + -o-transition: opacity .4s ease 0s, visibility 0s linear 0s; + transition: opacity .4s ease 0s, visibility 0s linear 0s; + } + .discoverer:hover .discover { + opacity: 1; + visibility: visible; + } +} +/* ======================================================================== + Component: print.less + ========================================================================== */ +@media print { + .sidebar, + .navbar-top, + .offsidebar, + .btn, + .fc-button { + display: none !important; + width: 0 !important; + height: 0 !important; + } + .wrapper, + .wrapper > section, + .main-content { + margin: 0 !important; + /* remove margin used for sidebar and expand the content */ + padding: 0 !important; + width: 100% !important; + } + .main-content { + overflow: hidden !important; + } +} diff --git a/frontend/app/css/bootstrap.css b/frontend/app/css/bootstrap.css new file mode 100644 index 0000000..96efa2d --- /dev/null +++ b/frontend/app/css/bootstrap.css @@ -0,0 +1,5621 @@ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +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: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +@media print { + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="javascript:"]:after, + a[href^="#"]: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; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +* { + -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: 13px; + line-height: 1.52857143; + color: #515253; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #d7d7d7; + text-decoration: none; +} +a:hover, +a:focus { + color: #005c7e; + 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 { + padding: 2px; + line-height: 1.52857143; + background-color: #e1e2e3; + border: 1px solid #e1e2e3; + border-radius: 3px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 19px; + margin-bottom: 19px; + border: 0; + border-top: 1px solid #fafafa; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +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: #89949b; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 19px; + margin-bottom: 9.5px; +} +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: 9.5px; + margin-bottom: 9.5px; +} +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: 33px; +} +h2, +.h2 { + font-size: 27px; +} +h3, +.h3 { + font-size: 23px; +} +h4, +.h4 { + font-size: 17px; +} +h5, +.h5 { + font-size: 13px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 9.5px; +} +.lead { + margin-bottom: 19px; + font-size: 14px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 19.5px; + } +} +small, +.small { + font-size: 92%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #b1b2b2; +} +.text-primary { + color: #0094cb; +} +a.text-primary:hover { + color: #006f98; +} +.text-success { + color: #60a945; +} +a.text-success:hover { + color: #4b8536; +} +.text-info { + color: #3babc8; +} +a.text-info:hover { + color: #2e8aa2; +} +.text-warning { + color: #ffab5e; +} +a.text-warning:hover { + color: #ff902b; +} +.text-danger { + color: #f68169; +} +a.text-danger:hover { + color: #f35839; +} +.bg-primary { + color: #fff; + background-color: #0094cb; +} +a.bg-primary:hover { + background-color: #006f98; +} +.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: 8.5px; + margin: 38px 0 19px; + border-bottom: 1px solid #fafafa; +} +ul, +ol { + margin-top: 0; + margin-bottom: 9.5px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 19px; +} +dt, +dd { + line-height: 1.52857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #89949b; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 9.5px 19px; + margin: 0 0 19px; + font-size: 16.25px; + border-left: 5px solid #fafafa; +} +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.52857143; + color: #89949b; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #fafafa; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 19px; + font-style: normal; + line-height: 1.52857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; +} +pre { + display: block; + padding: 9px; + margin: 0 0 9.5px; + font-size: 12px; + line-height: 1.52857143; + word-break: break-all; + word-wrap: break-word; + color: #89949b; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #b1b2b2; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 19px; +} +.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.52857143; + vertical-align: top; + border-top: 1px solid #eeeeee; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #eeeeee; +} +.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 #eeeeee; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #eeeeee; +} +.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 #eeeeee; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #fafbfc; +} +.table-hover > tbody > tr:hover { + background-color: #fafbfc; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #fafbfc; +} +.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: #eaeef2; +} +.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; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 14.25px; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #eeeeee; + -webkit-overflow-scrolling: touch; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 19px; + font-size: 19.5px; + line-height: inherit; + color: #89949b; + 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: 8px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; +} +.form-control { + display: block; + width: 100%; + height: 35px; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + color: #89949b; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #b7bac9; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #b7bac9; +} +.form-control::-webkit-input-placeholder { + color: #b7bac9; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #fafafa; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 35px; + line-height: 1.52857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 30px; + line-height: 1.5 \0; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 45px; + line-height: 1.33 \0; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 19px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 8px; + padding-bottom: 8px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 45px; + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 45px; + line-height: 45px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 43.75px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 35px; + height: 35px; + line-height: 35px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 45px; + height: 45px; + line-height: 45px; +} +.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: #60a945; +} +.has-success .form-control { + border-color: #60a945; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #4b8536; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #99ce86; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #99ce86; +} +.has-success .input-group-addon { + color: #60a945; + border-color: #60a945; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #60a945; +} +.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: #ffab5e; +} +.has-warning .form-control { + border-color: #ffab5e; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #ff902b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffe0c4; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffe0c4; +} +.has-warning .input-group-addon { + color: #ffab5e; + border-color: #ffab5e; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #ffab5e; +} +.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: #f68169; +} +.has-error .form-control { + border-color: #f68169; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #f35839; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fcd2c9; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fcd2c9; +} +.has-error .input-group-addon { + color: #f68169; + border-color: #f68169; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #f68169; +} +.has-feedback label ~ .form-control-feedback { + top: 24px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #909293; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 8px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 8px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + 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: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #0094cb; + border-color: #0081b2; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #006f98; + border-color: #005574; +} +.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: #0094cb; + border-color: #0081b2; +} +.btn-primary .badge { + color: #0094cb; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #31ba85; + border-color: #31ba85; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + /* #237052 */ + background-color: #40ad83; + border-color: #31ba8549; +} +.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: #31ba85; + border-color: #31ba85; +} +.btn-success .badge { + color: #31ba85; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #3babc8; + border-color: #339bb6; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #2e8aa2; + border-color: #267387; +} +.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: #3babc8; + border-color: #339bb6; +} +.btn-info .badge { + color: #3babc8; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #ff902b; + border-color: #ff8312; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #f77600; + border-color: #d36500; +} +.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: #ff902b; + border-color: #ff8312; +} +.btn-warning .badge { + color: #ff902b; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #f35839; + border-color: #f24421; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #eb330e; + border-color: #c92c0c; +} +.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: #f35839; + border-color: #f24421; +} +.btn-danger .badge { + color: #f35839; + background-color: #ffffff; +} +.btn-link { + color: #0094cb; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.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: #005c7e; + 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: #e1e1e1; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 13px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid #e1e1e1; + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 8.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.52857143; + color: #5f5f5f; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #7b878f; + background-color: #fafbfc; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0094cb; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #e1e1e1; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.52857143; + color: #e1e1e1; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.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-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 17px; + line-height: 1.33; + 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: 45px; + line-height: 45px; +} +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: 7px 18px; + font-size: 13px; + font-weight: normal; + line-height: 1; + color: #89949b; + text-align: center; + background-color: #fafafa; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 17px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: transparent; +} +.nav > li.disabled > a { + color: #e1e1e1; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #e1e1e1; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: transparent; + border-color: #0094cb; +} +.nav .nav-divider { + height: 1px; + margin: 8.5px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.52857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #dddddd #dddddd #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #d1d2d3; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #0094cb; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 60px; + margin-bottom: 19px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 20.5px 15px; + font-size: 17px; + line-height: 19px; + height: 60px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 13px; + margin-bottom: 13px; + 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: 10.25px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 19px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 19px; + } + .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: 20.5px; + padding-bottom: 20.5px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 12.5px; + margin-bottom: 12.5px; +} +@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; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 12.5px; + margin-bottom: 12.5px; +} +.navbar-btn.btn-sm { + margin-top: 15px; + margin-bottom: 15px; +} +.navbar-btn.btn-xs { + margin-top: 19px; + margin-bottom: 19px; +} +.navbar-text { + margin-top: 20.5px; + margin-bottom: 20.5px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #ffffff; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #e6e6e6; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #ffffff; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #dddddd; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #dddddd; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #dddddd; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #ffffff; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #dddddd; + 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: #dddddd; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #ffffff; +} +.navbar-default .navbar-link:hover { + color: #dddddd; +} +.navbar-default .btn-link { + color: #ffffff; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #dddddd; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #e1e1e1; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #e1e1e1; +} +.navbar-inverse .navbar-nav > li > a { + color: #e1e1e1; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #e1e1e1; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #e1e1e1; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #e1e1e1; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 12px 15px; + margin-bottom: 19px; + list-style: none; + background-color: #fafafa; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: ">\00a0"; + padding: 0 5px; + color: #c1c2c3; +} +.breadcrumb > .active { + color: #515253; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 19px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 7px 18px; + line-height: 1.52857143; + text-decoration: none; + color: #515253; + background-color: #ffffff; + border: 1px solid #eeeeee; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #005c7e; + background-color: #fafafa; + border-color: #eeeeee; +} +.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: #ffffff; + background-color: #0094cb; + border-color: #0094cb; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #e1e1e1; + background-color: #ffffff; + border-color: #eeeeee; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 17px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 19px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #eeeeee; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #fafafa; +} +.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: #e1e1e1; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + background-color: #fff; +} +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + color: #e1e1e1; + border: 1px solid #e1e1e1; +} +.label-default[href]:hover, +.label-default[href]:focus { + color: #c8c8c8; + border-color: #c8c8c8; +} +.label-primary { + color: #0094cb; + border: 1px solid #0094cb; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + color: #006f98; + border-color: #006f98; +} +.label-success { + color: #7bbf62; + border: 1px solid #7bbf62; +} +.label-success[href]:hover, +.label-success[href]:focus { + color: #60a945; + border-color: #60a945; +} +.label-info { + color: #3babc8; + border: 1px solid #3babc8; +} +.label-info[href]:hover, +.label-info[href]:focus { + color: #2e8aa2; + border-color: #2e8aa2; +} +.label-warning { + color: #ff902b; + border: 1px solid #ff902b; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + color: #f77600; + border-color: #f77600; +} +.label-danger { + color: #f35839; + border: 1px solid #f35839; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + color: #eb330e; + border-color: #eb330e; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #e1e1e1; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #0094cb; + background-color: #ffffff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #fcfcfc; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 20px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #e3e3e3; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 58.5px; + } +} +.thumbnail { + display: block; + padding: 2px; + margin-bottom: 19px; + line-height: 1.52857143; + background-color: #e1e2e3; + border: 1px solid #e1e2e3; + border-radius: 3px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #0094cb; +} +.thumbnail .caption { + padding: 9px; + color: #515253; +} +.alert { + padding: 8px; + margin-bottom: 19px; + border: 1px solid transparent; + border-radius: 3px; +} +.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: 28px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #7bbf62; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-success hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-success .alert-link { + color: #e6e6e6; +} +.alert-info { + background-color: #3babc8; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-info hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-info .alert-link { + color: #e6e6e6; +} +.alert-warning { + background-color: #ff902b; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-warning hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-warning .alert-link { + color: #e6e6e6; +} +.alert-danger { + background-color: #f35839; + border-color: rgba(0, 0, 0, 0.1); + color: #ffffff; +} +.alert-danger hr { + border-top-color: rgba(0, 0, 0, 0.1); +} +.alert-danger .alert-link { + color: #e6e6e6; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 19px; + margin-bottom: 19px; + background-color: #f1f1f1; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 19px; + color: #ffffff; + text-align: center; + background-color: #0094cb; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="0"] { + color: #e1e1e1; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #7bbf62; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #3babc8; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #ff902b; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #f35839; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-object { + display: block; +} +.media-heading { + margin: 0 0 5px; +} +.media > .pull-left { + margin-right: 10px; +} +.media > .pull-right { + margin-left: 10px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #f1f2f3; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #fafbfc; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #fafafa; + color: #e1e1e1; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #e1e1e1; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #0094cb; + border-color: #0094cb; +} +.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: #98e3ff; +} +.list-group-item-success { + color: #60a945; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #60a945; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #60a945; + 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: #60a945; + border-color: #60a945; +} +.list-group-item-info { + color: #3babc8; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #3babc8; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #3babc8; + 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: #3babc8; + border-color: #3babc8; +} +.list-group-item-warning { + color: #ffab5e; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #ffab5e; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #ffab5e; + 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: #ffab5e; + border-color: #ffab5e; +} +.list-group-item-danger { + color: #f68169; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #f68169; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #f68169; + 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: #f68169; + border-color: #f68169; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 19px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 15px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #fafafa; + border-top: 1px solid #eeeeee; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + 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-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child 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 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 { + border-top: 1px solid #eeeeee; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 19px; +} +.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 { + border-top: 1px solid #eeeeee; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #eeeeee; +} +.panel-default { + border-color: #d1d2d3; +} +.panel-default > .panel-heading { + color: #444444; + background-color: #ffffff; + border-color: #d1d2d3; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-default > .panel-heading .badge { + color: #ffffff; + background-color: #444444; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-primary { + border-color: #d1d2d3; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #0094cb; + border-color: #d1d2d3; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-primary > .panel-heading .badge { + color: #0094cb; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-success { + border-color: #d1d2d3; +} +.panel-success > .panel-heading { + color: #ffffff; + background-color: #7bbf62; + border-color: #d1d2d3; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-success > .panel-heading .badge { + color: #7bbf62; + background-color: #ffffff; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-info { + border-color: #d1d2d3; +} +.panel-info > .panel-heading { + color: #ffffff; + background-color: #3babc8; + border-color: #d1d2d3; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-info > .panel-heading .badge { + color: #3babc8; + background-color: #ffffff; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-warning { + border-color: #d1d2d3; +} +.panel-warning > .panel-heading { + color: #ffffff; + background-color: #ff902b; + border-color: #d1d2d3; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-warning > .panel-heading .badge { + color: #ff902b; + background-color: #ffffff; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.panel-danger { + border-color: #d1d2d3; +} +.panel-danger > .panel-heading { + color: #ffffff; + background-color: #f35839; + border-color: #d1d2d3; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d1d2d3; +} +.panel-danger > .panel-heading .badge { + color: #f35839; + background-color: #ffffff; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d1d2d3; +} +.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 { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #ededed; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 19.5px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.52857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.52857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #222222; + 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: #222222; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #222222; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #222222; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #222222; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #222222; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #222222; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #ffffff; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid #e1e1e1; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 13px; + font-weight: normal; + line-height: 18px; + background-color: #ffffff; + border-bottom: 1px solid #f2f2f2; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: #e1e1e1; + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: #e1e1e1; +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: #e1e1e1; + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: #e1e1e1; +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + 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; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -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 { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !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; + } +} diff --git a/frontend/app/css/common.css b/frontend/app/css/common.css new file mode 100644 index 0000000..fdbb558 --- /dev/null +++ b/frontend/app/css/common.css @@ -0,0 +1,496 @@ +/** + * + * Wintermin - Bootstrap Admin Theme - Page Common Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + Component: bootstrap-reset.less + ========================================================================== */ +a { + outline: none !important; +} +hr { + border-top: 1px solid #e1e1e1; +} +.row::-webkit-scrollbar { + display: none; +} +.page-header { + border-bottom-color: #e1e1e1; +} +.panel { + border: 1px solid #e1e2e3; + box-shadow: 0 0 0 #000; +} +.panel .panel-heading { + border-bottom: 0; + font-size: 14px; +} +.panel .panel-heading a { + text-decoration: none !important; +} +.panel.panel-default .panel-heading { + position: relative; +} +.panel.panel-default .panel-heading:after { + content: ""; + position: absolute; + bottom: 0; + left: 12px; + right: 15px; + height: 1px; + background-color: #f1f2f3; +} +.well { + border: 1px solid #d1d2d3; +} +.jumbotron { + border: 1px solid #d1d2d3; +} +.nav-tabs > li > a { + font-weight: bold; + color: #515253; + background-color: #fafafa; + margin: 0; + border: 1px solid #d1d2d3; + border-radius: 0; + padding: 10px 20px; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: inherit; + border-bottom-color: #fff; +} +.tab-content { + padding: 10px 20px 0px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color: #d1d2d3; +} +.nav-pills + .tab-content { + border: 0; + padding: 0; +} + +.btn { + border-radius: 3px; + font-size: 13px; + border-color: transparent; + -webkit-appearance: none; + outline: none !important; + -webkit-transition: all 0.1s; + -o-transition: all 0.1s; + transition: all 0.1s; +} +.btn.btn-link { + box-shadow: none; + border: 0; +} +.btn.btn-default { + border-color: #ccc; +} +.form-control, +.input-group-addon { + border-color: #dbd9d9; +} +.form-control { + box-shadow: 0 0 0 #000 !important; +} +.input-group-addon { + background-color: #f8f9fb; +} +.input-sm, +select.input-sm { + height: 31px; +} +fieldset { + padding-bottom: 20px; + border-bottom: 1px dashed #eee; + margin-bottom: 20px; +} +fieldset.last-child, +fieldset:last-child { + border-bottom: 0; +} +fieldset .form-group { + margin-bottom: 0; +} +.table > thead > tr > th { + border-bottom-width: 1px; +} +.table > tbody + tbody { + border-bottom-width: 1px; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +.progress { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; + border-radius: 3px; + border: 1px solid #f1f1f1; + background-color: #fff; +} +.progress .progress-bar { + -webkit-box-shadow: 0 0 0 #000000; + box-shadow: 0 0 0 #000000; +} +.popover { + box-shadow: 0 0 0 #000; + border-color: #eee; + border-bottom: 2px solid #e1e1e1; + border-radius: 3px; +} +.popover .popover-title { + border: 0; +} +.nav.nav-pills > li > a { + font-weight: 600; + color: #89949b; + margin: 5px 0; + -webkit-transition: background-color 0.3s ease; + -o-transition: background-color 0.3s ease; + transition: background-color 0.3s ease; +} +.nav.nav-pills > li > a:hover, +.nav.nav-pills > li > a:focus { + background-color: #e9eeef; +} +.nav.nav-pills > li.active > a { + color: #fff; + background-color: #0094cb !important; +} +.dropdown-menu { + border-radius: 3px; +} +.dropdown-header { + color: #a1a2a3; +} +.navbar-top .navbar-nav > .active > a { + color: #999; +} +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .active > a:focus { + color: #d1d2d3; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #666; +} +.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, +.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #222; +} +.carousel .carousel-indicators { + bottom: 0; +} +.carousel .carousel-control.left, +.carousel .carousel-control.right { + background-image: none; +} +.carousel .carousel-control em { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} +/* ======================================================================== + Component: button-extra.less + ========================================================================== */ +.btn-inverse { + color: #ffffff; + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse.focus, +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + color: #ffffff; + background-color: #303333; + border-color: #2b2e2e; +} +.btn-inverse:active, +.btn-inverse.active, +.open > .dropdown-toggle.btn-inverse { + background-image: none; +} +.btn-inverse.disabled, +.btn-inverse[disabled], +fieldset[disabled] .btn-inverse, +.btn-inverse.disabled:hover, +.btn-inverse[disabled]:hover, +fieldset[disabled] .btn-inverse:hover, +.btn-inverse.disabled:focus, +.btn-inverse[disabled]:focus, +fieldset[disabled] .btn-inverse:focus, +.btn-inverse.disabled.focus, +.btn-inverse[disabled].focus, +fieldset[disabled] .btn-inverse.focus, +.btn-inverse.disabled:active, +.btn-inverse[disabled]:active, +fieldset[disabled] .btn-inverse:active, +.btn-inverse.disabled.active, +.btn-inverse[disabled].active, +fieldset[disabled] .btn-inverse.active { + background-color: #494d4d; + border-color: #494d4d; +} +.btn-inverse .badge { + color: #494d4d; + background-color: #ffffff; +} +.btn-green { + color: #ffffff; + background-color: #01b6ad; + border-color: transparent; +} +.btn-green:hover, +.btn-green:focus, +.btn-green.focus, +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + color: #ffffff; + background-color: #01837d; + border-color: rgba(0, 0, 0, 0); +} +.btn-green:active, +.btn-green.active, +.open > .dropdown-toggle.btn-green { + background-image: none; +} +.btn-green.disabled, +.btn-green[disabled], +fieldset[disabled] .btn-green, +.btn-green.disabled:hover, +.btn-green[disabled]:hover, +fieldset[disabled] .btn-green:hover, +.btn-green.disabled:focus, +.btn-green[disabled]:focus, +fieldset[disabled] .btn-green:focus, +.btn-green.disabled.focus, +.btn-green[disabled].focus, +fieldset[disabled] .btn-green.focus, +.btn-green.disabled:active, +.btn-green[disabled]:active, +fieldset[disabled] .btn-green:active, +.btn-green.disabled.active, +.btn-green[disabled].active, +fieldset[disabled] .btn-green.active { + background-color: #01b6ad; + border-color: transparent; +} +.btn-green .badge { + color: #01b6ad; + background-color: #ffffff; +} +.btn-purple { + color: #ffffff; + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple:hover, +.btn-purple:focus, +.btn-purple.focus, +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + color: #ffffff; + background-color: #9269c2; + border-color: rgba(0, 0, 0, 0); +} +.btn-purple:active, +.btn-purple.active, +.open > .dropdown-toggle.btn-purple { + background-image: none; +} +.btn-purple.disabled, +.btn-purple[disabled], +fieldset[disabled] .btn-purple, +.btn-purple.disabled:hover, +.btn-purple[disabled]:hover, +fieldset[disabled] .btn-purple:hover, +.btn-purple.disabled:focus, +.btn-purple[disabled]:focus, +fieldset[disabled] .btn-purple:focus, +.btn-purple.disabled.focus, +.btn-purple[disabled].focus, +fieldset[disabled] .btn-purple.focus, +.btn-purple.disabled:active, +.btn-purple[disabled]:active, +fieldset[disabled] .btn-purple:active, +.btn-purple.disabled.active, +.btn-purple[disabled].active, +fieldset[disabled] .btn-purple.active { + background-color: #ac8dd1; + border-color: transparent; +} +.btn-purple .badge { + color: #ac8dd1; + background-color: #ffffff; +} +.btn-pink { + color: #ffffff; + background-color: #ff3366; + border-color: transparent; +} +.btn-pink:hover, +.btn-pink:focus, +.btn-pink.focus, +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + color: #ffffff; + background-color: #ff0040; + border-color: rgba(0, 0, 0, 0); +} +.btn-pink:active, +.btn-pink.active, +.open > .dropdown-toggle.btn-pink { + background-image: none; +} +.btn-pink.disabled, +.btn-pink[disabled], +fieldset[disabled] .btn-pink, +.btn-pink.disabled:hover, +.btn-pink[disabled]:hover, +fieldset[disabled] .btn-pink:hover, +.btn-pink.disabled:focus, +.btn-pink[disabled]:focus, +fieldset[disabled] .btn-pink:focus, +.btn-pink.disabled.focus, +.btn-pink[disabled].focus, +fieldset[disabled] .btn-pink.focus, +.btn-pink.disabled:active, +.btn-pink[disabled]:active, +fieldset[disabled] .btn-pink:active, +.btn-pink.disabled.active, +.btn-pink[disabled].active, +fieldset[disabled] .btn-pink.active { + background-color: #ff3366; + border-color: transparent; +} +.btn-pink .badge { + color: #ff3366; + background-color: #ffffff; +} +.btn-outline { + background-color: transparent; + border-color: #fff; +} +.btn-outline:hover, +.btn-outline:focus { + background-color: #fff; + color: #0094cb; +} +.btn-flat { + border-bottom-width: 1px; + border-radius: 0; + box-shadow: 0 0 0 #000; +} +.btn-xl { + padding: 20px 16px; + font-size: 18px; +} +.btn-square { + border-radius: 0; +} +.btn-pill-left, +.btn-oval { + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + padding-left: 18px; +} +.btn-pill-right, +.btn-oval { + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + padding-right: 18px; +} +.btn-labeled { + padding-top: 0; + padding-bottom: 0; +} +.btn-label { + position: relative; + background: transparent; + background: rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 7px 18px; + left: -18px; + border-radius: 3px 0 0 3px; +} +.btn-label.btn-label-right { + left: auto; + right: -18px; + border-radius: 0 3px 3px 0; +} +.btn-lg .btn-label { + padding: 10px 16px; + left: -16px; + border-radius: 5px 0 0 5px; +} +.btn-lg .btn-label.btn-label-right { + left: auto; + right: -16px; + border-radius: 0 5px 5px 0; +} +.btn-sm .btn-label { + padding: 5px 10px; + left: -10px; + border-radius: 2px 0 0 2px; +} +.btn-sm .btn-label.btn-label-right { + left: auto; + right: -10px; + border-radius: 0 2px 2px 0; +} +.btn-xs .btn-label { + padding: 1px 5px; + left: -5px; + border-radius: 2px 0 0 2px; +} +.btn-xs .btn-label.btn-label-right { + left: auto; + right: -5px; + border-radius: 0 2px 2px 0; +} +.btn-fw { + min-width: 80px; +} +.btn-fw.btn-sm { + min-width: 40px; +} +.btn-fw.btn-md { + min-width: 60px; +} +.btn-fw.btn-lg { + min-width: 140px; +} +body { + min-height: 400px; +} +@media only screen and (min-width: 768px) { + html, + body { + height: 100%; + } +} +.page-wrapper { + height: 100%; + padding: 50px 0; + background-color: #e8ebec; +} diff --git a/frontend/app/css/global.css b/frontend/app/css/global.css new file mode 100644 index 0000000..763a212 --- /dev/null +++ b/frontend/app/css/global.css @@ -0,0 +1,28 @@ +.mainbtn { + background-color: rgba(0, 0, 0, 0); + color: #31ba85; + border-radius: 5px; + border: #31ba85 1px solid; + outline: none !important; + padding: 7px 18px; + font-size: 13px; + line-height: 1.52857143; + display: inline-block; + } + .mainbtn:hover{ + background-color: #31ba85; + color: white ; + text-decoration: none; + } + .opbtn{ + background-color: #31ba85; + border: #31ba85 1px solid; + color: white; + border-radius: 2px; +} + .container{ + text-align: center; + width: 100%; + height: max-content; +} + diff --git a/frontend/app/css/landing_ori.css b/frontend/app/css/landing_ori.css new file mode 100644 index 0000000..f815bfd --- /dev/null +++ b/frontend/app/css/landing_ori.css @@ -0,0 +1,212 @@ +/** + * + * Wintermin - Bootstrap Admin Theme - Landing Page Stylesheet + * + * Author: @geedmo + * Website: http://geedmo.com + * License: Codecanyon Regular License + * + */ +/* ======================================================================== + +[Table of contents] + +1. Body +2. Header + 2.1 Logo / .logo-wrapper + 2.2 Header content / .header-content +3 Clients / #clients +4 Testimonials / #testimonials +5 Call to action / #callout +6 List of Features / .feature-list +7 Footers + 7.1 Top footer / .footer-1 + 7.2 Bottom footer / .footer-2 + + ========================================================================== */ +body { + background-color: #f1f2f3; + font-size: 16px; + line-height: 1.6; +} +body > section, +body > footer { + font-size: 14px; + padding: 80px 0; +} +header { + min-height: 100%; + padding-bottom: 60px; + text-align: center; + background-image: url('../img/landing/background.jpg'); + background-repeat: no-repeat; + background-color: #fff; + background-attachment: fixed; +} +header > .container { + min-height: 100%; +} +header nav { + padding: 40px 0 20px; +} +header .app-logo, +header .menuapp-buttons { + font-size: 14px; + margin-bottom: 30px; +} +header .app-logo a, +header .menuapp-buttons a { + text-decoration: none !important; +} +@media only screen and (min-width: 992px) { + header { + background-size: 100% 100%; + padding-bottom: 0; + } + header .app-logo { + text-align: left; + margin-bottom: 0; + } + header .menuapp-buttons { + text-align: right; + } +} +.header-content { + height: 80%; + color: #fff; +} +.header-content .row-table, +.header-content .row-table > [class*="col-"] { + display: block; +} +.header-content .header-title { + font-size: 35px; + line-height: 1.2; +} +.header-content .header-subtitle { + font-size: 18px; +} +.header-content .header-button { + margin: 60px 0; +} +@media only screen and (min-width: 992px) { + .header-content { + color: #888; + } + .header-content .header-title { + font-size: 55px; + } + .header-content .row-table { + display: table; + } + .header-content .row-table > [class*="col-"] { + display: table-cell; + } + .header-content .app-presentation { + margin-right: -12%; + } + .header-content .side-presentation { + text-align: left; + padding-left: 15%; + } +} +.logo-wrapper { + display: inline-block; + height: auto; + margin-top: -15px; +} +.store-list { + margin: 20px 0; +} +.store-list > li { + max-width: 140px; + padding-left: 0; +} +.section-header { + text-align: center; + margin-bottom: 80px; +} +#clients img { + display: block; + margin: 0 auto; + margin-bottom: 20px; +} +#testimonial .carousel { + min-height: 200px; +} +#testimonial .carousel .item { + text-align: center; + margin: 0 auto; +} +#testimonial .carousel .item > .row { + margin-bottom: 50px; +} +#testimonial .carousel .item h4 { + font-weight: normal; + font-style: italic; + line-height: 1.4; +} +#callout { + background-image: url('../img/landing/callout.jpg'); + background-repeat: no-repeat; + background-color: #fff; + background-attachment: fixed; +} +@media only screen and (min-width: 992px) { + #callout { + background-size: 100% auto; + } +} +.feature-list { + list-style-type: none; + margin: 0; + padding: 0; +} +.feature-list > li { + margin-bottom: 30px; +} +.feature-list > li:last-child { + margin-bottom: 0; +} +@media only screen and (min-width: 992px) { + .feature-list > li { + margin-bottom: 70px; + } +} +.feature-list .point { + margin-bottom: 1px; +} +.footer-1 form > h5, +.footer-1 nav > h5 { + color: #fff; + font-size: 14px; + font-weight: bold; +} +.footer-1 nav > ul > li > a { + color: #989898; +} +.footer-1 nav > ul > li > a:hover, +.footer-1 nav > ul > li > a:focus { + color: #fff; + text-decoration: none; +} +.footer-2 { + padding-top: 0 !important; + padding-bottom: 30px; + background-color: #333; + text-align: center; +} +.footer-2 a { + color: #989898; +} +.footer-2 p { + margin: 0; +} +.footer-2 [class*="col-"] { + padding-top: 30px; +} +@media only screen and (min-width: 992px) { + .footer-2 { + text-align: left; + } +} diff --git a/frontend/app/css/views/cloudadd.css b/frontend/app/css/views/cloudadd.css new file mode 100644 index 0000000..5402075 --- /dev/null +++ b/frontend/app/css/views/cloudadd.css @@ -0,0 +1,64 @@ + + #option{ + color: black; + font-size: 30px; + font-weight: 600; + font-style: italic; + } + #option_detail{ + color: #8f8f8f; + } + label { + display: inline; + font-weight: lighter; + } + + input,label { + margin: 5px; + } + + .textbox { + position: relative; + width: 100%; + } + .textbox label { + position: absolute; + top: 1px; /* input 요소의 border-top 설정값 만큼 */ + left: 1px; /* input 요소의 border-left 설정값 만큼 */ + padding: .8em .5em; /* input 요소의 padding 값 만큼 */ + color: #999; + cursor: text; + } + .textbox input[type="text"]{ + width: 100%; + height: auto; + line-height : normal; + padding: .8em .5em; + border: 1px solid #999; + border-radius: 0; + border-radius: 5px; + } + + + + .box-placeholder { + background-color: white; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); + transition: 0.3s; + border-radius: 10px; + border: none; + } + .box-placeholder:hover { + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); + background-color: #31ba850e; + } + + #nonebox { + box-shadow: none; + } + #nonebox:hover { + background-color:white; + box-shadow: none; + } + + diff --git a/frontend/app/css/views/cloudlist.css b/frontend/app/css/views/cloudlist.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/dashboard.css b/frontend/app/css/views/dashboard.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/default.css b/frontend/app/css/views/default.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/landing.css b/frontend/app/css/views/landing.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/priceview.css b/frontend/app/css/views/priceview.css new file mode 100644 index 0000000..e3e6188 --- /dev/null +++ b/frontend/app/css/views/priceview.css @@ -0,0 +1,175 @@ +.select-box { + display: flex; + width: 400px; + flex-direction: column; + } + + .select-box .options-container { + background: #2f3640; + color: #f5f6fa; + max-height: 0; + width: 100%; + opacity: 0; + transition: all 0.4s; + border-radius: 8px; + overflow: hidden; + + order: 1; + } + + .selected { + background: #2f3640; + border-radius: 8px; + margin-bottom: 8px; + color: #f5f6fa; + position: relative; + + order: 0; + } + + .selected::after { + content: ""; + background: url("img/arrow-down.svg"); + background-size: contain; + background-repeat: no-repeat; + + position: absolute; + height: 100%; + width: 32px; + right: 10px; + top: 5px; + + transition: all 0.4s; + } + + .select-box .options-container.active { + max-height: 240px; + opacity: 1; + overflow-y: scroll; + } + + .select-box .options-container.active + .selected::after { + transform: rotateX(180deg); + top: -6px; + } + + .select-box .options-container::-webkit-scrollbar { + width: 8px; + background: #0d141f; + border-radius: 0 8px 8px 0; + } + + .select-box .options-container::-webkit-scrollbar-thumb { + background: #525861; + border-radius: 0 8px 8px 0; + } + + .select-box .option, + .selected { + padding: 12px 24px; + cursor: pointer; + } + + .select-box .option:hover { + background: #414b57; + } + + .select-box label { + cursor: pointer; + } + + .select-box .option .radio { + display: none; + } + + + + /* 아래부터는 html에 있던 css 갖고온거임 */ + + +/* .btn_group button{ + border: 1px solid #31ba85; + background-color: rgba(0,0,0,0); + color: #31ba85; + padding: 5px 10px; + outline: none; + } */ + /* .btn_group button:hover{ + color: white; + background-color: #31ba85; + } */ + #groupbtn1{ + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + margin-right:-4px; + } + #groupbtn2{ + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + margin-left:-1px; + } + .tabContainer{ + width: 100%; + height: 100%; + } + .tabContainer .btn_group { + height: 15%; + } + .tabContainer .btn_group button { + width: 100px; + float: left; + border: 1px solid #31ba85; + outline: none; + cursor:pointer; + padding: 5px 15px; + + background-color: white; + color: #31ba85; + /* font-size: larger; */ + } + .tabContainer .btn_group button:hover { + background-color: #31ba85; + color: white; + } + .tabContainer .tabPanel{ + height: 85%; + background-color: white; + text-align: start; + padding-top: 105px; + box-sizing: border-box; + display: none; + padding-inline-start: 5px; + } + .cbox-dropdown { + width: 400px; + } + .cbox-dropdown:hover .cbox-dropdown-list { + opacity: 1; + visibility: visible; + } + .cbox-dropdown-select { + padding: 10px; + border-radius: 4px; + width: 100%; + display: inline-flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list { + top: 110%; + left: 0%; + right: 0%; + opacity: 0; + visibility: hidden; + transition: opacity 0.2s linear, visibility 0.2s linear; + border-radius: 4px; + background-color: #282a3b; + color: white; + } + .cbox-dropdown-list-item { + padding: 1px; + + } \ No newline at end of file diff --git a/frontend/app/css/views/security_detail.css b/frontend/app/css/views/security_detail.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/security_edit.css b/frontend/app/css/views/security_edit.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/security_group.css b/frontend/app/css/views/security_group.css new file mode 100644 index 0000000..83c89a3 --- /dev/null +++ b/frontend/app/css/views/security_group.css @@ -0,0 +1 @@ +[data-href] { cursor: pointer; } diff --git a/frontend/app/css/views/setting.css b/frontend/app/css/views/setting.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/support.css b/frontend/app/css/views/support.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/supportAdd.css b/frontend/app/css/views/supportAdd.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/views/supportDetail.html.css b/frontend/app/css/views/supportDetail.html.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/css/wintermin-theme-a.css b/frontend/app/css/wintermin-theme-a.css new file mode 100644 index 0000000..0efc5f4 --- /dev/null +++ b/frontend/app/css/wintermin-theme-a.css @@ -0,0 +1,150 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #f5f7fa; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top { + background-color: #fff; +} +.navbar-top .navbar-header { + background-color: transparent; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); +} +@media only screen and (min-width: 768px) { + .navbar-top .navbar-header { + background-image: none; + } +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #43c1c2; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #277778; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #ffffff; +} +.navbar-top .nav-wrapper { + background-color: #43c1c2; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #43c1c2; + background-image: -webkit-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: -o-linear-gradient(left, #43c1c2 0%, #49d1b3 100%); + background-image: linear-gradient(to right, #43c1c2 0%, #49d1b3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff43c1c2', endColorstr='#ff49d1b3', GradientType=1); + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #ffffff; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #277778; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #ffffff; + border-right-color: #cccccc; +} +.sidebar .nav-heading { + color: #919293; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #919293; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #919293; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #666666; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: inherits; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #fcfcfc; + color: #666666; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #43c1c2; +} +.sidebar .nav .nav { + background-color: #ffffff; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #666666; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: rgba(0, 0, 0, 0.25); +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #666666; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #43c1c2; + background-color: #43c1c2; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #cccccc; + background-color: #ffffff; + color: #515253; +} diff --git a/frontend/app/css/wintermin-theme-b.css b/frontend/app/css/wintermin-theme-b.css new file mode 100644 index 0000000..0be6db9 --- /dev/null +++ b/frontend/app/css/wintermin-theme-b.css @@ -0,0 +1,140 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #3db1d7; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #e1e2e3; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #ffffff; + } + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:focus, + .navbar-top .navbar-nav > li > a:focus { + box-shadow: 0 -3px 0 #3db1d7 inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #888888; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #666666; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #888888; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover { + color: #7b7b7b; + } + .nav-wrapper { + background-color: #ffffff; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #2e3b42; + border-right-color: #050505; +} +.sidebar .nav-heading { + color: #b1b2b3; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #b1b2b3; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #b1b2b3; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #ffffff; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #b1b2b3; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #2c383f; + color: #ffffff; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #ffffff; +} +.sidebar .nav .nav { + background-color: #2e3b42; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #ffffff; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #b1b2b3; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #ffffff; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #ffffff; + background-color: #ffffff; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #050505; + background-color: #2e3b42; + color: #eeeeee; +} +.offsidebar .text-muted { + color: #ddd; +} diff --git a/frontend/app/css/wintermin-theme-c.css b/frontend/app/css/wintermin-theme-c.css new file mode 100644 index 0000000..d410324 --- /dev/null +++ b/frontend/app/css/wintermin-theme-c.css @@ -0,0 +1,141 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #e25e45; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #fff; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #373c38; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #aaaaaa; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #ffffff; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #aaaaaa; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #ffffff; + } + .nav-wrapper { + background-color: #373c38; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #373c38; + border-right-color: #060606; +} +.sidebar .nav-heading { + color: #b1b2b3; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #b1b2b3; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #b1b2b3; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #ffffff; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #b1b2b3; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #353936; + color: #ffffff; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #e25e45; +} +.sidebar .nav .nav { + background-color: #373c38; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #ffffff; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #b1b2b3; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #ffffff; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #e25e45; + background-color: #e25e45; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #060606; + background-color: #373c38; + color: #f1f2f3; +} +.offsidebar .text-muted { + color: #ccc; +} diff --git a/frontend/app/css/wintermin-theme-d.css b/frontend/app/css/wintermin-theme-d.css new file mode 100644 index 0000000..32b92c1 --- /dev/null +++ b/frontend/app/css/wintermin-theme-d.css @@ -0,0 +1,144 @@ +/* ======================================================================== + Component: layout + ========================================================================== */ +body, +.wrapper > section { + background-color: #ffffff; +} +/* ======================================================================== + Component: top-navbar + ========================================================================== */ +.navbar-top .navbar-header { + background-color: #4d4645; +} +.navbar-top .navbar-nav > li > a, +.navbar-top .navbar-nav > .open > a { + color: #888888; +} +.navbar-top .navbar-nav > li > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > li > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + color: #666666; +} +.navbar-top .navbar-nav > .active > a, +.navbar-top .navbar-nav > .open > a, +.navbar-top .navbar-nav > .active > a:hover, +.navbar-top .navbar-nav > .open > a:hover, +.navbar-top .navbar-nav > .active > a:focus, +.navbar-top .navbar-nav > .open > a:focus { + background-color: transparent; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #fff; +} +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, +.navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #fff; +} +@media only screen and (min-width: 768px) { + .navbar-top { + background-color: #4d4645; + } + .navbar-top .navbar-nav > .open > a, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > .open > a:focus { + box-shadow: 0 -3px 0 rgba(255, 255, 255, 0.5) inset; + } + .navbar-top .navbar-nav > li > a, + .navbar-top .navbar-nav > .open > a { + color: #cccccc; + } + .navbar-top .navbar-nav > li > a:hover, + .navbar-top .navbar-nav > .open > a:hover, + .navbar-top .navbar-nav > li > a:focus, + .navbar-top .navbar-nav > .open > a:focus { + color: #ffffff; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search'] { + color: #cccccc; + } + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:hover, + .navbar-top .navbar-nav > li > [data-toggle='navbar-search']:focus { + color: #ffffff; + } + .nav-wrapper { + background-color: #4d4645; + } +} +/* ======================================================================== + Component: sidebar + ========================================================================== */ +.sidebar { + background-color: #ffffff; + border-right-color: #cccccc; +} +.sidebar .nav-heading { + color: #909090; +} +.sidebar .nav-labels > .nav-labels-item > a { + color: #909090; +} +.sidebar .nav > li > a, +.sidebar .nav > li > .nav-item { + color: #909090; +} +.sidebar .nav > li > a:focus, +.sidebar .nav > li > .nav-item:focus { + color: #808080; +} +.sidebar .nav > li > a > em, +.sidebar .nav > li > .nav-item > em { + color: #909090; +} +.sidebar .nav > li.active, +.sidebar .nav > li:hover, +.sidebar .nav > li.active > a, +.sidebar .nav > li:hover > a, +.sidebar .nav > li.active > a > .item-text, +.sidebar .nav > li:hover > a > .item-text, +.sidebar .nav > li.active .nav, +.sidebar .nav > li:hover .nav { + background-color: #fafafa; + color: #808080; +} +.sidebar .nav > li.active > a > em, +.sidebar .nav > li:hover > a > em { + color: #6dce9b; +} +.sidebar .nav .nav { + background-color: #ffffff; +} +.sidebar .nav .nav > li > a:focus, +.sidebar .nav .nav > li > .nav-item:focus, +.sidebar .nav .nav > li > a:hover, +.sidebar .nav .nav > li > .nav-item:hover { + color: #808080; +} +.sidebar .nav .nav > li > a:after, +.sidebar .nav .nav > li > .nav-item:after { + border-color: #909090; +} +.sidebar .nav .nav > li.active > a, +.sidebar .nav .nav > li.active > .nav-item { + color: #808080; +} +.sidebar .nav .nav > li.active > a:after, +.sidebar .nav .nav > li.active > .nav-item:after { + border-color: #6dce9b; + background-color: #6dce9b; +} +/* ======================================================================== + Component: offsidebar + ========================================================================== */ +.offsidebar { + border-left: 1px solid #2e2e2e; + background-color: #665d5c; + color: #f1f2f3; +} +.offsidebar a { + color: #f1f2f3; +} +.offsidebar .text-muted { + color: #d1d2d3; +} diff --git a/frontend/app/img/background.jpg b/frontend/app/img/background.jpg new file mode 100644 index 0000000..86fdafb Binary files /dev/null and b/frontend/app/img/background.jpg differ diff --git a/frontend/app/img/bg1.jpg b/frontend/app/img/bg1.jpg new file mode 100644 index 0000000..6a54e69 Binary files /dev/null and b/frontend/app/img/bg1.jpg differ diff --git a/frontend/app/img/bg10.jpg b/frontend/app/img/bg10.jpg new file mode 100644 index 0000000..0fccc05 Binary files /dev/null and b/frontend/app/img/bg10.jpg differ diff --git a/frontend/app/img/bg2.jpg b/frontend/app/img/bg2.jpg new file mode 100644 index 0000000..38e9845 Binary files /dev/null and b/frontend/app/img/bg2.jpg differ diff --git a/frontend/app/img/bg3.jpg b/frontend/app/img/bg3.jpg new file mode 100644 index 0000000..849e105 Binary files /dev/null and b/frontend/app/img/bg3.jpg differ diff --git a/frontend/app/img/bg4.jpg b/frontend/app/img/bg4.jpg new file mode 100644 index 0000000..9d22605 Binary files /dev/null and b/frontend/app/img/bg4.jpg differ diff --git a/frontend/app/img/bg5.jpg b/frontend/app/img/bg5.jpg new file mode 100644 index 0000000..88b6a4a Binary files /dev/null and b/frontend/app/img/bg5.jpg differ diff --git a/frontend/app/img/bg6.jpg b/frontend/app/img/bg6.jpg new file mode 100644 index 0000000..0aa0cb2 Binary files /dev/null and b/frontend/app/img/bg6.jpg differ diff --git a/frontend/app/img/bg7.jpg b/frontend/app/img/bg7.jpg new file mode 100644 index 0000000..3e793eb Binary files /dev/null and b/frontend/app/img/bg7.jpg differ diff --git a/frontend/app/img/bg8.jpg b/frontend/app/img/bg8.jpg new file mode 100644 index 0000000..76cb84d Binary files /dev/null and b/frontend/app/img/bg8.jpg differ diff --git a/frontend/app/img/bg9.jpg b/frontend/app/img/bg9.jpg new file mode 100644 index 0000000..18702a1 Binary files /dev/null and b/frontend/app/img/bg9.jpg differ diff --git a/frontend/app/img/dummy.png b/frontend/app/img/dummy.png new file mode 100644 index 0000000..a22f407 Binary files /dev/null and b/frontend/app/img/dummy.png differ diff --git a/frontend/app/img/landing/app-chart.png b/frontend/app/img/landing/app-chart.png new file mode 100644 index 0000000..444f8f5 Binary files /dev/null and b/frontend/app/img/landing/app-chart.png differ diff --git a/frontend/app/img/landing/app-mobile.png b/frontend/app/img/landing/app-mobile.png new file mode 100644 index 0000000..9b84d43 Binary files /dev/null and b/frontend/app/img/landing/app-mobile.png differ diff --git a/frontend/app/img/landing/app-multi.png b/frontend/app/img/landing/app-multi.png new file mode 100644 index 0000000..69c95d9 Binary files /dev/null and b/frontend/app/img/landing/app-multi.png differ diff --git a/frontend/app/img/landing/app-widget.png b/frontend/app/img/landing/app-widget.png new file mode 100644 index 0000000..e20b79e Binary files /dev/null and b/frontend/app/img/landing/app-widget.png differ diff --git a/frontend/app/img/landing/background.jpg b/frontend/app/img/landing/background.jpg new file mode 100644 index 0000000..4f5ebcf Binary files /dev/null and b/frontend/app/img/landing/background.jpg differ diff --git a/frontend/app/img/landing/callout.jpg b/frontend/app/img/landing/callout.jpg new file mode 100644 index 0000000..919177c Binary files /dev/null and b/frontend/app/img/landing/callout.jpg differ diff --git a/frontend/app/img/landing/clients/bootstrap.png b/frontend/app/img/landing/clients/bootstrap.png new file mode 100644 index 0000000..a6a53ee Binary files /dev/null and b/frontend/app/img/landing/clients/bootstrap.png differ diff --git a/frontend/app/img/landing/clients/client-logos.psd b/frontend/app/img/landing/clients/client-logos.psd new file mode 100644 index 0000000..d2a709f Binary files /dev/null and b/frontend/app/img/landing/clients/client-logos.psd differ diff --git a/frontend/app/img/landing/clients/gulp.png b/frontend/app/img/landing/clients/gulp.png new file mode 100644 index 0000000..09c273e Binary files /dev/null and b/frontend/app/img/landing/clients/gulp.png differ diff --git a/frontend/app/img/landing/clients/jade.png b/frontend/app/img/landing/clients/jade.png new file mode 100644 index 0000000..39977d1 Binary files /dev/null and b/frontend/app/img/landing/clients/jade.png differ diff --git a/frontend/app/img/landing/clients/jquery.png b/frontend/app/img/landing/clients/jquery.png new file mode 100644 index 0000000..88edfb1 Binary files /dev/null and b/frontend/app/img/landing/clients/jquery.png differ diff --git a/frontend/app/img/landing/clients/less.png b/frontend/app/img/landing/clients/less.png new file mode 100644 index 0000000..9739c7a Binary files /dev/null and b/frontend/app/img/landing/clients/less.png differ diff --git a/frontend/app/img/landing/clients/node.png b/frontend/app/img/landing/clients/node.png new file mode 100644 index 0000000..3bcfe80 Binary files /dev/null and b/frontend/app/img/landing/clients/node.png differ diff --git a/frontend/app/img/landing/iphone.png b/frontend/app/img/landing/iphone.png new file mode 100644 index 0000000..56fb890 Binary files /dev/null and b/frontend/app/img/landing/iphone.png differ diff --git a/frontend/app/img/landing/server1.jpg b/frontend/app/img/landing/server1.jpg new file mode 100644 index 0000000..10632c3 Binary files /dev/null and b/frontend/app/img/landing/server1.jpg differ diff --git a/frontend/app/img/landing/server2.jpg b/frontend/app/img/landing/server2.jpg new file mode 100644 index 0000000..e2f8352 Binary files /dev/null and b/frontend/app/img/landing/server2.jpg differ diff --git a/frontend/app/img/landing/store-apple.png b/frontend/app/img/landing/store-apple.png new file mode 100644 index 0000000..9b9f096 Binary files /dev/null and b/frontend/app/img/landing/store-apple.png differ diff --git a/frontend/app/img/landing/store-google.png b/frontend/app/img/landing/store-google.png new file mode 100644 index 0000000..22e209c Binary files /dev/null and b/frontend/app/img/landing/store-google.png differ diff --git a/frontend/app/img/lock-bg.jpg b/frontend/app/img/lock-bg.jpg new file mode 100644 index 0000000..018f9ad Binary files /dev/null and b/frontend/app/img/lock-bg.jpg differ diff --git a/frontend/app/img/logo-single.png b/frontend/app/img/logo-single.png new file mode 100644 index 0000000..dddb17a Binary files /dev/null and b/frontend/app/img/logo-single.png differ diff --git a/frontend/app/img/logo.png b/frontend/app/img/logo.png new file mode 100644 index 0000000..fd61333 Binary files /dev/null and b/frontend/app/img/logo.png differ diff --git a/frontend/app/img/mb-sample.jpg b/frontend/app/img/mb-sample.jpg new file mode 100644 index 0000000..435c28f Binary files /dev/null and b/frontend/app/img/mb-sample.jpg differ diff --git a/frontend/app/img/offsidebar-bg.jpg b/frontend/app/img/offsidebar-bg.jpg new file mode 100644 index 0000000..23dd1a8 Binary files /dev/null and b/frontend/app/img/offsidebar-bg.jpg differ diff --git a/frontend/app/img/server.png b/frontend/app/img/server.png new file mode 100644 index 0000000..64c83dd Binary files /dev/null and b/frontend/app/img/server.png differ diff --git a/frontend/app/img/user/01.jpg b/frontend/app/img/user/01.jpg new file mode 100644 index 0000000..c6c722e Binary files /dev/null and b/frontend/app/img/user/01.jpg differ diff --git a/frontend/app/img/user/02.jpg b/frontend/app/img/user/02.jpg new file mode 100644 index 0000000..e9e1e63 Binary files /dev/null and b/frontend/app/img/user/02.jpg differ diff --git a/frontend/app/img/user/03.jpg b/frontend/app/img/user/03.jpg new file mode 100644 index 0000000..891240d Binary files /dev/null and b/frontend/app/img/user/03.jpg differ diff --git a/frontend/app/img/user/04.jpg b/frontend/app/img/user/04.jpg new file mode 100644 index 0000000..fac7503 Binary files /dev/null and b/frontend/app/img/user/04.jpg differ diff --git a/frontend/app/img/user/05.jpg b/frontend/app/img/user/05.jpg new file mode 100644 index 0000000..fdf9625 Binary files /dev/null and b/frontend/app/img/user/05.jpg differ diff --git a/frontend/app/img/user/06.jpg b/frontend/app/img/user/06.jpg new file mode 100644 index 0000000..5e359ec Binary files /dev/null and b/frontend/app/img/user/06.jpg differ diff --git a/frontend/app/img/user/07.jpg b/frontend/app/img/user/07.jpg new file mode 100644 index 0000000..c917721 Binary files /dev/null and b/frontend/app/img/user/07.jpg differ diff --git a/frontend/app/img/user/08.jpg b/frontend/app/img/user/08.jpg new file mode 100644 index 0000000..a83789d Binary files /dev/null and b/frontend/app/img/user/08.jpg differ diff --git a/frontend/app/img/user/09.jpg b/frontend/app/img/user/09.jpg new file mode 100644 index 0000000..5cbc80c Binary files /dev/null and b/frontend/app/img/user/09.jpg differ diff --git a/frontend/app/img/user/10.jpg b/frontend/app/img/user/10.jpg new file mode 100644 index 0000000..d4e5c15 Binary files /dev/null and b/frontend/app/img/user/10.jpg differ diff --git a/frontend/app/img/user/11.jpg b/frontend/app/img/user/11.jpg new file mode 100644 index 0000000..4d292d8 Binary files /dev/null and b/frontend/app/img/user/11.jpg differ diff --git a/frontend/app/img/user/12.jpg b/frontend/app/img/user/12.jpg new file mode 100644 index 0000000..8a442f9 Binary files /dev/null and b/frontend/app/img/user/12.jpg differ diff --git a/frontend/app/img/user/13.jpg b/frontend/app/img/user/13.jpg new file mode 100644 index 0000000..6ee6ca3 Binary files /dev/null and b/frontend/app/img/user/13.jpg differ diff --git a/frontend/app/js/app.js b/frontend/app/js/app.js new file mode 100644 index 0000000..d1e3f05 --- /dev/null +++ b/frontend/app/js/app.js @@ -0,0 +1,3046 @@ +/**========================================================= + * Module: calendar-ui.js + * This script handle the calendar demo with draggable + * events and events creations + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if(!$.fn.fullCalendar) return; + + // global shared var to know what we are dragging + var draggingEvent = null; + + + /** + * ExternalEvent object + * @param jQuery Object elements Set of element as jQuery objects + */ + var ExternalEvent = function (elements) { + + if (!elements) return; + + elements.each(function() { + var $this = $(this); + // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) + // it doesn't need to have a start or end + var calendarEventObject = { + title: $.trim($this.text()) // use the element's text as the event title + }; + + // store the Event Object in the DOM element so we can get to it later + $this.data('calendarEventObject', calendarEventObject); + + // make the event draggable using jQuery UI + $this.draggable({ + zIndex: 1070, + revert: true, // will cause the event to go back to its + revertDuration: 0 // original position after the drag + }); + + }); + }; + + /** + * Invoke full calendar plugin and attach behavior + * @param jQuery [calElement] The calendar dom element wrapped into jQuery + * @param EventObject [events] An object with the event list to load when the calendar displays + */ + function initCalendar(calElement, events) { + + // check to remove elements from the list + var removeAfterDrop = $('#remove-after-drop'); + + calElement.fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + buttonIcons: { // note the space at the beginning + prev: ' fa fa-caret-left', + next: ' fa fa-caret-right' + }, + buttonText: { + today: 'today', + month: 'month', + week: 'week', + day: 'day' + }, + editable: true, + droppable: true, // this allows things to be dropped onto the calendar + drop: function(date, allDay) { // this function is called when something is dropped + + var $this = $(this), + // retrieve the dropped element's stored Event Object + originalEventObject = $this.data('calendarEventObject'); + + // if something went wrong, abort + if(!originalEventObject) return; + + // clone the object to avoid multiple events with reference to the same object + var clonedEventObject = $.extend({}, originalEventObject); + + // assign the reported date + clonedEventObject.start = date; + clonedEventObject.allDay = allDay; + clonedEventObject.backgroundColor = $this.css('background-color'); + clonedEventObject.borderColor = $this.css('border-color'); + + // render the event on the calendar + // the last `true` argument determines if the event "sticks" + // (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) + calElement.fullCalendar('renderEvent', clonedEventObject, true); + + // if necessary remove the element from the list + if(removeAfterDrop.is(':checked')) { + $this.remove(); + } + }, + eventDragStart: function (event, js, ui) { + draggingEvent = event; + }, + // This array is the events sources + events: events + }); + } + + /** + * Inits the external events panel + * @param jQuery [calElement] The calendar dom element wrapped into jQuery + */ + function initExternalEvents(calElement){ + // Panel with the external events list + var externalEvents = $('.external-events'); + + // init the external events in the panel + new ExternalEvent(externalEvents.children('div')); + + // External event color is danger-red by default + var currColor = '#f6504d'; + // Color selector button + var eventAddBtn = $('.external-event-add-btn'); + // New external event name input + var eventNameInput = $('.external-event-name'); + // Color switchers + var eventColorSelector = $('.external-event-color-selector .point'); + + // Trash events Droparea + $('.external-events-trash').droppable({ + accept: '.fc-event', + activeClass: 'active', + hoverClass: 'hovered', + tolerance: 'touch', + drop: function(event, ui) { + + // You can use this function to send an ajax request + // to remove the event from the repository + + if(draggingEvent) { + var eid = draggingEvent.id || draggingEvent._id; + // Remove the event + calElement.fullCalendar('removeEvents', eid); + // Remove the dom element + ui.draggable.remove(); + // clear + draggingEvent = null; + } + } + }); + + eventColorSelector.click(function(e) { + e.preventDefault(); + var $this = $(this); + + // Save color + currColor = $this.css('background-color'); + // De-select all and select the current one + eventColorSelector.removeClass('selected'); + $this.addClass('selected'); + }); + + eventAddBtn.click(function(e) { + e.preventDefault(); + + // Get event name from input + var val = eventNameInput.val(); + // Dont allow empty values + if ($.trim(val) === '') return; + + // Create new event element + var newEvent = $('
        ').css({ + 'background-color': currColor, + 'border-color': currColor, + 'color': '#fff' + }) + .html(val); + + // Prepends to the external events list + externalEvents.prepend(newEvent); + // Initialize the new event element + new ExternalEvent(newEvent); + // Clear input + eventNameInput.val(''); + }); + } + + /** + * Creates an array of events to display in the first load of the calendar + * Wrap into this function a request to a source to get via ajax the stored events + * @return Array The array with the events + */ + function createDemoEvents() { + // Date for the calendar events (dummy data) + var date = new Date(); + var d = date.getDate(), + m = date.getMonth(), + y = date.getFullYear(); + + return [ + { + title: 'All Day Event', + start: new Date(y, m, 1), + backgroundColor: '#f56954', //red + borderColor: '#f56954' //red + }, + { + title: 'Long Event', + start: new Date(y, m, d - 5), + end: new Date(y, m, d - 2), + backgroundColor: '#f39c12', //yellow + borderColor: '#f39c12' //yellow + }, + { + title: 'Meeting', + start: new Date(y, m, d, 10, 30), + allDay: false, + backgroundColor: '#0073b7', //Blue + borderColor: '#0073b7' //Blue + }, + { + title: 'Lunch', + start: new Date(y, m, d, 12, 0), + end: new Date(y, m, d, 14, 0), + allDay: false, + backgroundColor: '#00c0ef', //Info (aqua) + borderColor: '#00c0ef' //Info (aqua) + }, + { + title: 'Birthday Party', + start: new Date(y, m, d + 1, 19, 0), + end: new Date(y, m, d + 1, 22, 30), + allDay: false, + backgroundColor: '#00a65a', //Success (green) + borderColor: '#00a65a' //Success (green) + }, + { + title: 'Open Google', + start: new Date(y, m, 28), + end: new Date(y, m, 29), + url: 'http://google.com/', + backgroundColor: '#3c8dbc', //Primary (light-blue) + borderColor: '#3c8dbc' //Primary (light-blue) + } + ]; + } + + // When dom ready, init calendar and events + $(function() { + + // The element that will display the calendar + var calendar = $('#calendar'); + + var demoEvents = createDemoEvents(); + + initExternalEvents(calendar); + + initCalendar(calendar, demoEvents); + + }); + + +}(jQuery, window, document)); + + + +/**========================================================= + * Module: classy-loader.js + * Enable use of classyloader directly from data attributes + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="classyloader"]', + $scroller = $(window), + inViewFlagClass = 'js-is-in-view'; // a classname to detect when a chart has been triggered after scroll + + $(Selector).each(function (e) { + + var $element = $(this), + options = $element.data(); + + // At lease we need a data-percentage attribute + if(options) { + if( options.triggerInView ) { + + $scroller.scroll(function() { + var offset = 0; + if( ! $element.hasClass(inViewFlagClass) && + $.Utils.isInView($element, {topoffset: offset}) ) { + $element.ClassyLoader(options).addClass(inViewFlagClass); + } + }); + + } + else + $element.ClassyLoader(options); + } + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: clear-storage.js + * Removes a key from the browser storage via element click + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if( !store || !store.enabled ) return; + + var Selector = '[data-toggle="reset"]'; + + $(document).on('click', Selector, function (e) { + e.preventDefault(); + var key = $(this).data('key'); + + if(key) { + store.remove(key); + } + else { + var shouldClear = confirm("This action will restore the current app state."); + if (shouldClear == true) { + store.clear(); + } + } + + // at last, reload the page + window.location.reload(); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: datepicker,js + * DateTime Picker init + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function(){ + + if ( ! $.fn.dataTable ) return; + + // + // Zero configuration + // + + $('#datatable1').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + } + }); + + + // + // Filtering by Columns + // + + var dtInstance2 = $('#datatable2').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + } + }); + var inputSearchClass = 'datatable_input_col_search'; + var columnInputs = $('tfoot .'+inputSearchClass); + + // On input keyup trigger filtering + columnInputs + .keyup(function () { + dtInstance2.fnFilter(this.value, columnInputs.index(this)); + }); + + + // + // Column Visibilty Extension + // + + $('#datatable3').dataTable({ + 'paging': true, // Table pagination + 'ordering': true, // Column ordering + 'info': true, // Bottom left status text + // Text translation options + // Note the required keywords between underscores (e.g _MENU_) + oLanguage: { + sSearch: 'Search all columns:', + sLengthMenu: '_MENU_ records per page', + info: 'Showing page _PAGE_ of _PAGES_', + zeroRecords: 'Nothing found - sorry', + infoEmpty: 'No records available', + infoFiltered: '(filtered from _MAX_ total records)' + }, + sDom: 'C<"clear">lfrtip', + colVis: { + order: 'alfa', + 'buttonText': 'Show/Hide Columns' + } + }); + + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: datepicker,js + * DateTime Picker init + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '.datetimepicker'; + + $(Selector).each(function() { + + var $this = $(this), + options = $this.data(); // allow to set options via data-* attributes + + $this.datetimepicker($.extend( + options, + { // support for FontAwesome icons + icons: { + time: 'fa fa-clock-o', + date: 'fa fa-calendar', + up: 'fa fa-arrow-up', + down: 'fa fa-arrow-down' + } + })); + + // Force a dropdown hide when click out of the input + $(document).on('click', function(){ + $this.data('DateTimePicker').hide(); + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: dropdown-animate.js + * Animated transition for dropdown open state + * Animation name placed in [data-play="animationName"] (http://daneden.github.io/animate.css/) + * Optionally add [data-duration=seconds] + * + * Requires animo.js + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + var Selector = '.dropdown-toggle[data-play]', + parent = $(Selector).parent(); /* From BS-Doc: All dropdown events are fired at the .dropdown-menu's parent element. */ + + parent.on('show.bs.dropdown', function () { + //e.preventDefault(); + + var $this = $(this), + toggle = $this.children('.dropdown-toggle'), + animation = toggle.data('play'), + duration = toggle.data('duration') || 0.5, + target = $this.children('.dropdown-menu'); + + if(!target || !target.length) + $.error('No target for play-animation'); + else + if( $.fn.animo && animation) + target.animo( { animation: animation, duration: duration} ); + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: filter-tag.js + * Basic items filter + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var selectorFilterTag = '[data-filter-tag]', // the trigger button + selectorFilterGroup = '[data-filter-group]', // items to be filtered + itemAnimation = 'fadeIn'; // supported by animo.js + + $(function() { + + $(selectorFilterGroup).first().closest('.row').eq(0).css('overflow','hidden'); + + $(document).on('click', selectorFilterTag, function() { + + var $this = $(this), + targetGroup = $this.data('filterTag'); + + + if(targetGroup) { + + var allItems = $(selectorFilterGroup), + visibleItems = allItems.filter(function() { + var group = $(this).data('filterGroup'); + return ('all' == targetGroup || group == targetGroup); + }); + + allItems.parent() // select the col- element + .hide() // Hide them + //.removeClass('elementHasBeenFiltered') + ; + visibleItems.parent() // select the col- element + .show() // display and run the animation + .animo( { animation: itemAnimation, duration: 0.5} ) + //.addClass('elementHasBeenFiltered') + ; + + // active by default de current trigger + $this.addClass('active'); + // try to active the parent when in ul.nav element + var res = $this.parents('ul').eq(0).children('li').removeClass('active'); + if(res.length) $this.parent().addClass('active'); + } + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: flot-chart.js + * Initializes the flot chart plugin and attaches the + * plugin to elements according to its type + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + /** + * Global object to load data for charts using ajax + * Request the chart data from the server via post + * Expects a response in JSON format to init the plugin + * Usage + * chart = new floatChart('#id', 'server/chart-data.php') + * ... + * chart.requestData(options); + * + * @param Chart element placeholder or selector + * @param Url to get the data via post. Response in JSON format + */ + window.FlotChart = function (element, url) { + // Properties + this.element = $(element); + this.url = url; + + // Public method + this.requestData = function (option, method, callback) { + var self = this; + + // support params (option), (option, method, callback) or (option, callback) + callback = (method && $.isFunction(method)) ? method : callback; + method = (method && typeof method == 'string') ? method : 'POST'; + + self.option = option; // save options + + $.ajax({ + url: self.url, + cache: false, + type: method, + dataType: 'json' + }).done(function (data) { + + $.plot( self.element, data, option ); + + if(callback) callback(); + + }); + + return this; // chain-ability + + }; + + // Listen to refresh events + this.listen = function() { + var self = this, + chartPanel = this.element.parents('.panel').eq(0); + + // attach custom event + chartPanel.on('panel-refresh', function(event, panel) { + // request data and remove spinner when done + self.requestData(self.option, function(){ + panel.removeSpinner(); + }); + + }); + + return this; // chain-ability + }; + + }; + + // + // Start of Demo Script + // + $(function () { + + // Bar chart + (function () { + var Selector = '.chart-bar'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Bar: No source defined.'); + var chart = new FlotChart(this, source), + //panel = $(Selector).parents('.panel'), + option = { + series: { + bars: { + align: 'center', + lineWidth: 0, + show: true, + barWidth: 0.6, + fill: 0.9 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + + })(); + // Bar Stacked chart + (function () { + var Selector = '.chart-bar-stacked'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Bar Stacked: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + stack: true, + bars: { + align: 'center', + lineWidth: 0, + show: true, + barWidth: 0.6, + fill: 0.9 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + })(); + // Area chart + (function () { + var Selector = '.chart-area'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Area: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + lines: { + show: true, + fill: 0.8 + }, + points: { + show: true, + radius: 4 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#fcfcfc', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee', + tickFormatter: function (v) { + return v + ' visitors'; + } + }, + shadowSize: 0 + }; + + // Send Request and Listen for refresh events + chart.requestData(option).listen(); + + }); + })(); + // Line chart + (function () { + var Selector = '.chart-line'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Line: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + lines: { + show: true, + fill: 0.01 + }, + points: { + show: true, + radius: 4 + } + }, + grid: { + borderColor: '#eee', + borderWidth: 1, + hoverable: true, + backgroundColor: '#fcfcfc' + }, + tooltip: true, + tooltipOpts: { + content: '%x : %y' + }, + xaxis: { + tickColor: '#eee', + mode: 'categories' + }, + yaxis: { + tickColor: '#eee' + }, + shadowSize: 0 + }; + // Send Request + chart.requestData(option); + }); + })(); + // Pïe + (function () { + var Selector = '.chart-pie'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Pie: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + pie: { + show: true, + innerRadius: 0, + label: { + show: true, + radius: 0.8, + formatter: function (label, series) { + return '
        ' + + //label + ' : ' + + Math.round(series.percent) + + '%
        '; + }, + background: { + opacity: 0.8, + color: '#222' + } + } + } + } + }; + // Send Request + chart.requestData(option); + }); + })(); + // Donut + (function () { + var Selector = '.chart-donut'; + $(Selector).each(function() { + var source = $(this).data('source') || $.error('Donut: No source defined.'); + var chart = new FlotChart(this, source), + option = { + series: { + pie: { + show: true, + innerRadius: 0.5 // This makes the donut shape + } + } + }; + // Send Request + chart.requestData(option); + }); + })(); + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: form-wizard.js + * Handles form wizard plugin and validation + * [data-toggle="wizard"] to activate wizard plugin + * [data-validate-step] to enable step validation via parsley + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + if(!$.fn.bwizard) return; + + var Selector = '[data-toggle="wizard"]'; + + $(Selector).each(function() { + + var wizard = $(this), + validate = wizard.data('validateStep'); // allow to set options via data-* attributes + + if(validate) { + wizard.bwizard({ + clickableSteps: false, + validating: function(e, ui) { + + var $this = $(this), + form = $this.parent(), + group = form.find('.bwizard-activated'); + + if (false === form.parsley().validate( group[0].id )) { + e.preventDefault(); + return; + } + } + }); + } + else { + wizard.bwizard(); + } + + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: gmap.js + * Init Google Map plugin + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + // ------------------------- + // Map Style definition + // ------------------------- + + // Custom core styles + // Get more styles from http://snazzymaps.com/style/29/light-monochrome + // - Just replace and assign to 'MapStyles' the new style array + var MapStyles = [{featureType:'water',stylers:[{visibility:'on'},{color:'#bdd1f9'}]},{featureType:'all',elementType:'labels.text.fill',stylers:[{color:'#334165'}]},{featureType:'landscape',stylers:[{color:'#e9ebf1'}]},{featureType:'road.highway',elementType:'geometry',stylers:[{color:'#c5c6c6'}]},{featureType:'road.arterial',elementType:'geometry',stylers:[{color:'#fff'}]},{featureType:'road.local',elementType:'geometry',stylers:[{color:'#fff'}]},{featureType:'transit',elementType:'geometry',stylers:[{color:'#d8dbe0'}]},{featureType:'poi',elementType:'geometry',stylers:[{color:'#cfd5e0'}]},{featureType:'administrative',stylers:[{visibility:'on'},{lightness:33}]},{featureType:'poi.park',elementType:'labels',stylers:[{visibility:'on'},{lightness:20}]},{featureType:'road',stylers:[{color:'#d8dbe0',lightness:20}]}]; + + + // ------------------------- + // Custom Script + // ------------------------- + + var mapSelector = '[data-toggle="gmap"]'; + var gMapRefs = []; + + if($.fn.gMap) { + + // Init all gmap visibles in the page + $(mapSelector).each(function(){ + + // do not init maps in modal + if( ! $(this).parents('.modal').length ) + initGmap(this); + + }); //each + + // attach gmap initialization when modal opens + $('.modal').each(function() { + + var $this = $(this), + mapsInModal = $this.find(mapSelector); + + if ( mapsInModal.length ) { + + $this.on('shown.bs.modal', function (e) { + mapsInModal.each(function(){ + + initGmap(this); + + }); //each + }); + + } // if + + }); + } + + // Center Map marker on resolution change + $(window).resize(function() { + + if(gMapRefs && gMapRefs.length) { + for( var r in gMapRefs) { + var mapRef = gMapRefs[r]; + var currMapCenter = mapRef.getCenter(); + if(mapRef && currMapCenter) { + google.maps.event.trigger(mapRef, 'resize'); + mapRef.setCenter(currMapCenter); + } + } + } + }); + + function initGmap(element){ + + var $this = $(element), + addresses = $this.data('address') && $this.data('address').split(';'), + titles = $this.data('title') && $this.data('title').split(';'), + zoom = $this.data('zoom') || 14, + maptype = $this.data('maptype') || 'ROADMAP', // or 'TERRAIN' + markers = []; + + if(addresses) { + for(var a in addresses) { + if(typeof addresses[a] == 'string') { + markers.push({ + address: addresses[a], + html: (titles && titles[a]) || '', + popup: true /* Always popup */ + }); + } + } + + var options = { + controls: { + panControl: true, + zoomControl: true, + mapTypeControl: true, + scaleControl: true, + streetViewControl: true, + overviewMapControl: true + }, + scrollwheel: false, + maptype: maptype, + markers: markers, + zoom: zoom + // More options https://github.com/marioestrada/jQuery-gMap + }; + + var gMap = $this.gMap(options); + + var ref = gMap.data('gMap.reference'); + // save in the map references list + gMapRefs.push(ref); + + // set the styles + if($this.data('styled') !== undefined) { + + ref.setOptions({ + styles: MapStyles + }); + + } + } + +} + +}(jQuery, window, document)); + +/**========================================================= + * Module: load-css.js + * Request and load into the current page a css file + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="load-css"]', + storageKeyName = 'autoloadCSS'; + + restoreStylesheet(); + $(document) + .ready(function() { + }) + .on('click', Selector, function (e) { + e.preventDefault(); + var uri = $(this).data('uri'); + + createStylesheet(uri); + + }); + + // Creates a link element and injects the stylesheet href + function createStylesheet(uri) { + var link; + if(uri) { + link = createLink(); + if(link) { + injectStylesheet(link, uri); + } + else { + $.error('Error creating new stylsheet link element.'); + } + } + else { + $.error('No stylesheet location defined.'); + } + } + + function createLink() { + var linkId = 'autoloaded-stylesheet', + link = $('#'+linkId); + + if( ! link.length ) { + var newLink = $('').attr('id', linkId); + $('head').append(newLink); + link = $('#'+linkId); + } + return link; + } + + function injectStylesheet(element, uri) { + var v = '?id='+Math.round(Math.random()*10000); // forces to jump cache + if(element.length) { + element.attr('href', uri + v); + } + saveStylesheet(uri); + } + + // Save the loaded stylesheet link + function saveStylesheet(uri) { + store.set(storageKeyName, uri); + } + // Restores the stylesheet + function restoreStylesheet() { + var uri = store.get(storageKeyName); + if(uri) { + createStylesheet(uri); + } + } + +}(jQuery, window, document)); + +/**========================================================= + * Module: markdownarea.js + * Markdown Editor from UIKit adapted for Bootstrap Layout + * Requires uikit core - codemirror - marked + * @author: geedmo (http://geedmo.com) + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Markdownarea = function(element, options){ + + var $element = $(element); + + if($element.data("markdownarea")) return; + + this.element = $element; + this.options = $.extend({}, Markdownarea.defaults, options); + + this.marked = this.options.marked || marked; + this.CodeMirror = this.options.CodeMirror || CodeMirror; + + this.marked.setOptions({ + gfm : true, + tables : true, + breaks : true, + pedantic : true, + sanitize : false, + smartLists : true, + smartypants : false, + langPrefix : 'lang-' + }); + + this.init(); + + this.element.data("markdownarea", this); + }; + + $.extend(Markdownarea.prototype, { + + init: function(){ + + var $this = this, tpl = Markdownarea.template; + + tpl = tpl.replace(/\{\:lblPreview\}/g, this.options.lblPreview); + tpl = tpl.replace(/\{\:lblCodeview\}/g, this.options.lblCodeview); + + this.markdownarea = $(tpl); + this.content = this.markdownarea.find(".uk-markdownarea-content"); + this.toolbar = this.markdownarea.find(".uk-markdownarea-toolbar"); + this.preview = this.markdownarea.find(".uk-markdownarea-preview").children().eq(0); + this.code = this.markdownarea.find(".uk-markdownarea-code"); + + this.element.before(this.markdownarea).appendTo(this.code); + + this.editor = this.CodeMirror.fromTextArea(this.element[0], this.options.codemirror); + + this.editor.markdownarea = this; + + this.editor.on("change", (function(){ + var render = function(){ + + var value = $this.editor.getValue(); + + $this.currentvalue = String(value); + + $this.element.trigger("markdownarea-before", [$this]); + + $this.applyPlugins(); + + $this.marked($this.currentvalue, function (err, markdown) { + + if (err) throw err; + + $this.preview.html(markdown); + $this.element.val($this.editor.getValue()).trigger("markdownarea-update", [$this]); + }); + }; + render(); + return $.Utils.debounce(render, 150); + })()); + + this.code.find(".CodeMirror").css("height", this.options.height); + + this._buildtoolbar(); + this.fit(); + + $(window).on("resize", $.Utils.debounce(function(){ + $this.fit(); + }, 200)); + + + var previewContainer = $this.preview.parent(), + codeContent = this.code.find('.CodeMirror-sizer'), + codeScroll = this.code.find('.CodeMirror-scroll').on('scroll',$.Utils.debounce(function() { + + if($this.markdownarea.attr("data-mode")=="tab") return; + + // calc position + var codeHeight = codeContent.height() - codeScroll.height(), + previewHeight = previewContainer[0].scrollHeight - previewContainer.height(), + ratio = previewHeight / codeHeight, + previewPostition = codeScroll.scrollTop() * ratio; + + // apply new scroll + previewContainer.scrollTop(previewPostition); + }, 10)); + + this.markdownarea.on("click", ".uk-markdown-button-markdown, .uk-markdown-button-preview", function(e){ + + e.preventDefault(); + + if($this.markdownarea.attr("data-mode")=="tab") { + + $this.markdownarea.find(".uk-markdown-button-markdown, .uk-markdown-button-preview").removeClass("uk-active").filter(this).addClass("uk-active"); + + $this.activetab = $(this).hasClass("uk-markdown-button-markdown") ? "code":"preview"; + $this.markdownarea.attr("data-active-tab", $this.activetab); + } + }); + + this.preview.parent().css("height", this.code.height()); + }, + + applyPlugins: function(){ + + var $this = this, + plugins = Object.keys(Markdownarea.plugins), + plgs = Markdownarea.plugins; + + this.markers = {}; + + if(plugins.length) { + + var lines = this.currentvalue.split("\n"); + + plugins.forEach(function(name){ + this.markers[name] = []; + }, this); + + for(var line=0,max=lines.length;line'+Markdownarea.commands[cmd].label+''); + + if(Markdownarea.commands[cmd].shortcut) { + $this.registerShortcut(Markdownarea.commands[cmd].shortcut, Markdownarea.commands[cmd].action); + } + } + }); + + this.toolbar.html(bar.join("\n")); + + this.markdownarea.on("click", "a[data-markdownarea-cmd]", function(){ + var cmd = $(this).data("markdownareaCmd"); + + if(cmd && Markdownarea.commands[cmd] && (!$this.activetab || $this.activetab=="code" || cmd=="fullscreen")) { + Markdownarea.commands[cmd].action.apply($this, [$this.editor]); + } + + }); + }, + + fit: function() { + + var mode = this.options.mode; + + if(mode=="split" && this.markdownarea.width() < this.options.maxsplitsize) { + mode = "tab"; + } + + if(mode=="tab") { + + if(!this.activetab) { + this.activetab = "code"; + this.markdownarea.attr("data-active-tab", this.activetab); + } + + this.markdownarea.find(".uk-markdown-button-markdown, .uk-markdown-button-preview").removeClass("uk-active") + .filter(this.activetab=="code" ? '.uk-markdown-button-markdown':'.uk-markdown-button-preview').addClass("uk-active"); + + } + + this.editor.refresh(); + this.preview.parent().css("height", this.code.height()); + + this.markdownarea.attr("data-mode", mode); + }, + + registerShortcut: function(combination, callback){ + + var $this = this; + + combination = $.isArray(combination) ? combination : [combination]; + + for(var i=0,max=combination.length;i < max;i++) { + var map = {}; + + map[combination[i]] = function(){ + callback.apply($this, [$this.editor]); + }; + + $this.editor.addKeyMap(map); + } + }, + + getMode: function(){ + var pos = this.editor.getDoc().getCursor(); + + return this.editor.getTokenAt(pos).state.base.htmlState ? 'html':'markdown'; + } + }); + + //jQuery plugin + + $.fn.markdownarea = function(options){ + + return this.each(function(){ + + var ele = $(this); + + if(!ele.data("markdownarea")) { + var obj = new Markdownarea(ele, options); + } + }); + }; + + var baseReplacer = function(replace, editor){ + var text = editor.getSelection(), + markdown = replace.replace('$1', text); + + editor.replaceSelection(markdown, 'end'); + }; + + Markdownarea.commands = { + "fullscreen": { + "title" : 'Fullscreen', + "label" : '', + "action" : function(editor){ + + editor.markdownarea.markdownarea.toggleClass("uk-markdownarea-fullscreen"); + + // dont use uk- to avoid rules declaration + $('html').toggleClass("markdownarea-fullscreen"); + $('html, body').scrollTop(0); + + var wrap = editor.getWrapperElement(); + + if(editor.markdownarea.markdownarea.hasClass("uk-markdownarea-fullscreen")) { + + editor.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, width: wrap.style.width, height: wrap.style.height}; + wrap.style.width = ""; + wrap.style.height = editor.markdownarea.content.height()+"px"; + document.documentElement.style.overflow = "hidden"; + + } else { + + document.documentElement.style.overflow = ""; + var info = editor.state.fullScreenRestore; + wrap.style.width = info.width; wrap.style.height = info.height; + window.scrollTo(info.scrollLeft, info.scrollTop); + } + + editor.refresh(); + editor.markdownarea.preview.parent().css("height", editor.markdownarea.code.height()); + } + }, + + "bold" : { + "title" : "Bold", + "label" : '', + "shortcut": ['Ctrl-B', 'Cmd-B'], + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"**$1**", editor); + } + }, + "italic" : { + "title" : "Italic", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"*$1*", editor); + } + }, + "strike" : { + "title" : "Strikethrough", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "$1":"~~$1~~", editor); + } + }, + "blockquote" : { + "title" : "Blockquote", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? "

        $1

        ":"> $1", editor); + } + }, + "link" : { + "title" : "Link", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? '$1':"[$1](http://)", editor); + } + }, + "picture" : { + "title" : "Picture", + "label" : '', + "action" : function(editor){ + baseReplacer(this.getMode() == 'html' ? '$1':"![$1](http://)", editor); + } + }, + "listUl" : { + "title" : "Unordered List", + "label" : '', + "action" : function(editor){ + if(this.getMode() == 'markdown') baseReplacer("* $1", editor); + } + }, + "listOl" : { + "title" : "Ordered List", + "label" : '', + "action" : function(editor){ + if(this.getMode() == 'markdown') baseReplacer("1. $1", editor); + } + } + }; + + Markdownarea.defaults = { + "mode" : "split", + "height" : 500, + "maxsplitsize" : 1000, + "codemirror" : { mode: 'gfm', tabMode: 'indent', tabindex: "2", lineWrapping: true, dragDrop: false, autoCloseTags: true, matchTags: true }, + "toolbar" : [ "bold", "italic", "strike", "link", "picture", "blockquote", "listUl", "listOl" ], + "lblPreview" : "Preview", + "lblCodeview" : "Markdown" + }; + + Markdownarea.template = '
        ' + + '
        ' + + '
          ' + + '
          ' + + '' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          ' + + '
          '; + + Markdownarea.plugins = {}; + Markdownarea.addPlugin = function(name, identifier, callback) { + Markdownarea.plugins[name] = {"identifier":identifier, "cb":callback}; + }; + + $.fn["markdownarea"] = Markdownarea; + + // init code + $(function() { + + $("textarea[data-uk-markdownarea]").each(function() { + var area = $(this), obj; + + if (!area.data("markdownarea")) { + obj = new Markdownarea(area, $.Utils.options(area.attr("data-uk-markdownarea"))); + } + }); + }); + + return Markdownarea; + +}(jQuery, window, document)); + +/**========================================================= + * Module: navbar-search.js + * Navbar search toggler + * To open search add a buton with [data-toggle="navbar-search"] + * To close search add an element with [data-toggle="navbar-search-dismiss"] + * + * Auto dismiss on ESC key + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + + var openSelector = '[data-toggle="navbar-search"]', + dismissSelector = '[data-toggle="navbar-search-dismiss"]', + inputSelector = '.navbar-form input[type="text"]', + navbarForm = $('form.navbar-form'); + + var NavSearch = { + toggle: function() { + + navbarForm.toggleClass('open'); + + var isOpen = navbarForm.hasClass('open'); + + navbarForm.find('input')[isOpen ? 'focus' : 'blur'](); + + }, + + dismiss: function() { + navbarForm + .removeClass('open') // Close control + .find('input[type="text"]').blur() // remove focus + .val('') // Empty input + ; + } + + }; + + $(document) + .on('click', NavSearch.dismiss) + .on('click', openSelector +', '+ inputSelector +', '+ dismissSelector, function (e) { + e.stopPropagation(); + }) + .on('click', dismissSelector, NavSearch.dismiss) + .on('click', openSelector, NavSearch.toggle) + .keyup(function(e) { + if (e.keyCode == 27) // ESC + NavSearch.dismiss(); + }); + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: notify.js + * Create toggleable notifications that fade out automatically. + * Based on Notify addon from UIKit (http://getuikit.com/docs/addons_notify.html) + * [data-toggle="notify"] + * [data-options="options in json format" ] + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="notify"]', + autoloadSelector = '[data-onload]', + doc = $(document); + + + $(function() { + + $(Selector).each(function(){ + + var $this = $(this), + onload = $this.data('onload'); + + if(onload !== undefined) { + setTimeout(function(){ + notifyNow($this); + }, 1000); + } + + $this.on('click', function (e) { + e.preventDefault(); + notifyNow($this); + }); + + }); + + }); + + function notifyNow($element) { + var message = $element.data('message'), + options = $element.data('options'); + + if(!message) + $.error('Notify: No message specified'); + + $.notify(message, options || {}); + } + + +}(jQuery, window, document)); + + +/** + * Notify Addon definition as jQuery plugin + * Adapted version to work with Bootstrap classes + * More information http://getuikit.com/docs/addons_notify.html + */ + +(function($, window, document){ + + var containers = {}, + messages = {}, + + notify = function(options){ + + if ($.type(options) == 'string') { + options = { message: options }; + } + + if (arguments[1]) { + options = $.extend(options, $.type(arguments[1]) == 'string' ? {status:arguments[1]} : arguments[1]); + } + + return (new Message(options)).show(); + }, + closeAll = function(group, instantly){ + if(group) { + for(var id in messages) { if(group===messages[id].group) messages[id].close(instantly); } + } else { + for(var id in messages) { messages[id].close(instantly); } + } + }; + + var Message = function(options){ + + var $this = this; + + this.options = $.extend({}, Message.defaults, options); + + this.uuid = "ID"+(new Date().getTime())+"RAND"+(Math.ceil(Math.random() * 100000)); + this.element = $([ + // @geedmo: alert-dismissable enables bs close icon + '
          ', + '×', + '
          '+this.options.message+'
          ', + '
          ' + + ].join('')).data("notifyMessage", this); + + // status + if (this.options.status) { + this.element.addClass('alert alert-'+this.options.status); + this.currentstatus = this.options.status; + } + + this.group = this.options.group; + + messages[this.uuid] = this; + + if(!containers[this.options.pos]) { + containers[this.options.pos] = $('
          ').appendTo('body').on("click", ".uk-notify-message", function(){ + $(this).data("notifyMessage").close(); + }); + } + }; + + + $.extend(Message.prototype, { + + uuid: false, + element: false, + timout: false, + currentstatus: "", + group: false, + + show: function() { + + if (this.element.is(":visible")) return; + + var $this = this; + + containers[this.options.pos].show().prepend(this.element); + + var marginbottom = parseInt(this.element.css("margin-bottom"), 10); + + this.element.css({"opacity":0, "margin-top": -1*this.element.outerHeight(), "margin-bottom":0}).animate({"opacity":1, "margin-top": 0, "margin-bottom":marginbottom}, function(){ + + if ($this.options.timeout) { + + var closefn = function(){ $this.close(); }; + + $this.timeout = setTimeout(closefn, $this.options.timeout); + + $this.element.hover( + function() { clearTimeout($this.timeout); }, + function() { $this.timeout = setTimeout(closefn, $this.options.timeout); } + ); + } + + }); + + return this; + }, + + close: function(instantly) { + + var $this = this, + finalize = function(){ + $this.element.remove(); + + if(!containers[$this.options.pos].children().length) { + containers[$this.options.pos].hide(); + } + + delete messages[$this.uuid]; + }; + + if(this.timeout) clearTimeout(this.timeout); + + if(instantly) { + finalize(); + } else { + this.element.animate({"opacity":0, "margin-top": -1* this.element.outerHeight(), "margin-bottom":0}, function(){ + finalize(); + }); + } + }, + + content: function(html){ + + var container = this.element.find(">div"); + + if(!html) { + return container.html(); + } + + container.html(html); + + return this; + }, + + status: function(status) { + + if(!status) { + return this.currentstatus; + } + + this.element.removeClass('alert alert-'+this.currentstatus).addClass('alert alert-'+status); + + this.currentstatus = status; + + return this; + } + }); + + Message.defaults = { + message: "", + status: "normal", + timeout: 5000, + group: null, + pos: 'top-center' + }; + + + $["notify"] = notify; + $["notify"].message = Message; + $["notify"].closeAll = closeAll; + + return notify; + +}(jQuery, window, document)); + +/**========================================================= + * Module: panel-perform.js + * Dismiss panels + * [data-perform="panel-dismiss"] + * + * Requires animo.js + =========================================================*/ +(function($, window, document){ + 'use strict'; + + var panelSelector = '[data-perform="panel-dismiss"]', + removeEvent = 'panel-remove', + removedEvent = 'panel-removed'; + + $(document).on('click', panelSelector, function () { + + // find the first parent panel + var parent = $(this).closest('.panel'); + + if($.support.animation) { + parent.animo({animation: 'bounceOut'}, removeElement); + } + else removeElement(); + + function removeElement() { + // Trigger the event and finally remove the element + $.when(parent.trigger(removeEvent, [parent])) + .done(destroyPanel); + } + + function destroyPanel() { + var col = parent.parent(); + parent.remove(); + // remove the parent if it is a row and is empty and not a sortable (portlet) + col + .trigger(removedEvent) // An event to catch when the panel has been removed from DOM + .filter(function() { + var el = $(this); + return (el.is('[class*="col-"]:not(.sortable)') && el.children('*').length === 0); + }).remove(); + + } + + }); + +}(jQuery, window, document)); + + +/** + * Collapse panels + * [data-perform="panel-collapse"] + * + * Also uses browser storage to keep track + * of panels collapsed state + */ +(function($, window, document) { + 'use strict'; + var panelSelector = '[data-perform="panel-collapse"]', + storageKeyName = 'panelState'; + + // Prepare the panel to be collapsable and its events + $(panelSelector).each(function() { + // find the first parent panel + var $this = $(this), + parent = $this.closest('.panel'), + wrapper = parent.find('.panel-wrapper'), + collapseOpts = {toggle: false}, + iconElement = $this.children('em'), + panelId = parent.attr('id'); + + // if wrapper not added, add it + // we need a wrapper to avoid jumping due to the paddings + if( ! wrapper.length) { + wrapper = + parent.children('.panel-heading').nextAll() //find('.panel-body, .panel-footer') + .wrapAll('
          ') + .parent() + .addClass('panel-wrapper'); + collapseOpts = {}; + } + + // Init collapse and bind events to switch icons + wrapper + .collapse(collapseOpts) + .on('hide.bs.collapse', function() { + setIconHide( iconElement ); + savePanelState( panelId, 'hide' ); + }) + .on('show.bs.collapse', function() { + setIconShow( iconElement ); + savePanelState( panelId, 'show' ); + }); + + // Load the saved state if exists + var currentState = loadPanelState( panelId ); + if(currentState) { + setTimeout(function() { wrapper.collapse( currentState ); }, 0); + savePanelState( panelId, currentState ); + } + + }); + + // finally catch clicks to toggle panel collapse + $(document).on('click', panelSelector, function () { + + var parent = $(this).closest('.panel'); + var wrapper = parent.find('.panel-wrapper'); + + wrapper.collapse('toggle'); + + }); + + ///////////////////////////////////////////// + // Common use functions for panel collapse // + ///////////////////////////////////////////// + function setIconShow(iconEl) { + iconEl.removeClass('fa-plus').addClass('fa-minus'); + } + + function setIconHide(iconEl) { + iconEl.removeClass('fa-minus').addClass('fa-plus'); + } + + function savePanelState(id, state) { + if(!id || !store || !store.enabled) return false; + var data = store.get(storageKeyName); + if(!data) { data = {}; } + data[id] = state; + store.set(storageKeyName, data); + } + + function loadPanelState(id) { + if(!id || !store || !store.enabled) return false; + var data = store.get(storageKeyName); + if(data) { + return data[id] || false; + } + } + + +}(jQuery, window, document)); + + +/** + * Refresh panels + * [data-perform="panel-refresh"] + * [data-spinner="standard"] + */ +(function($, window, document){ + 'use strict'; + var panelSelector = '[data-perform="panel-refresh"]', + refreshEvent = 'panel-refresh', + csspinnerClass = 'csspinner', + defaultSpinner = 'standard'; + + // method to clear the spinner when done + function removeSpinner(){ + this.removeClass(csspinnerClass); + } + + // catch clicks to toggle panel refresh + $(document).on('click', panelSelector, function () { + var $this = $(this), + panel = $this.parents('.panel').eq(0), + spinner = $this.data('spinner') || defaultSpinner + ; + + // start showing the spinner + panel.addClass(csspinnerClass + ' ' + spinner); + + // attach as public method + panel.removeSpinner = removeSpinner; + + // Trigger the event and send the panel object + $this.trigger(refreshEvent, [panel]); + + }); + + + /** + * This function is only to show a demonstration + * of how to use the panel refresh system via + * custom event. + * IMPORTANT: see how to remove the spinner. + */ + + $('.panel.panel-demo').on('panel-refresh', function(e, panel){ + + // perform any action when a .panel triggers a the refresh event + setTimeout(function(){ + + // when the action is done, just remove the spinner class + panel.removeSpinner(); + + }, 3000); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: play-animation.js + * Provides a simple way to run animation with a trigger + * Targeted elements must have + * [data-toggle="play-animation"] + * [data-target="Target element affected by the animation"] + * [data-play="Animation name (http://daneden.github.io/animate.css/)"] + * + * Requires animo.js + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="play-animation"]'; + + $(function() { + + var $scroller = $(window).add('body, .wrapper'); + + // Parse animations params and attach trigger to scroll + $(Selector).each(function() { + var $this = $(this), + offset = $this.data('offset'), + delay = $this.data('delay') || 100, // milliseconds + animation = $this.data('play') || 'bounce'; + + if(typeof offset !== 'undefined') { + + // test if the element starts visible + testAnimation($this); + // test on scroll + $scroller.scroll(function(){ + testAnimation($this); + }); + + } + + // Test an element visibilty and trigger the given animation + function testAnimation(element) { + if ( !element.hasClass('anim-running') && + $.Utils.isInView(element, {topoffset: offset})) { + element + .addClass('anim-running'); + + setTimeout(function() { + element + .addClass('anim-done') + .animo( { animation: animation, duration: 0.7} ); + }, delay); + + } + } + + }); + + // Run click triggered animations + $(document).on('click', Selector, function() { + + var $this = $(this), + targetSel = $this.data('target'), + animation = $this.data('play') || 'bounce', + target = $(targetSel); + + if(target && target) { + target.animo( { animation: animation } ); + } + + }); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: portlet.js + * Drag and drop any panel to change its position + * The Selector should could be applied to any object that contains + * panel, so .col-* element are ideal. + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + // Component is required + if(!$.fn.sortable) return; + + var Selector = '[data-toggle="portlet"]', + storageKeyName = 'portletState'; + + $(function(){ + + $( Selector ).sortable({ + connectWith: Selector, + items: 'div.panel', + handle: '.portlet-handler', + opacity: 0.7, + placeholder: 'portlet box-placeholder', + cancel: '.portlet-cancel', + forcePlaceholderSize: true, + iframeFix: false, + tolerance: 'pointer', + helper: 'original', + revert: 200, + forceHelperSize: true, + start: saveListSize, + update: savePortletOrder, + create: loadPortletOrder + }) + // optionally disables mouse selection + //.disableSelection() + ; + + }); + + function savePortletOrder(event, ui) { + + var data = store.get(storageKeyName); + + if(!data) { data = {}; } + + data[this.id] = $(this).sortable('toArray'); + + if(data) { + store.set(storageKeyName, data); + } + + // save portlet size to avoid jumps + saveListSize.apply(this); + } + + function loadPortletOrder() { + + var data = store.get(storageKeyName); + + if(data) { + + var porletId = this.id, + panels = data[porletId]; + + if(panels) { + var portlet = $('#'+porletId); + + $.each(panels, function(index, value) { + $('#'+value).appendTo(portlet); + }); + } + + } + + // save portlet size to avoid jumps + saveListSize.apply(this); + } + + // Keeps a consistent size in all portlet lists + function saveListSize() { + var $this = $(this); + $this.css('min-height', $this.height()); + } + + /*function resetListSize() { + $(this).css('min-height', ""); + }*/ + +}(jQuery, window, document)); + + +/**========================================================= + * Module: sidebar-menu.js + * Provides a simple way to implement bootstrap collapse plugin using a target + * next to the current element (sibling) + * Targeted elements must have [data-toggle="collapse-next"] + =========================================================*/ +(function($, window, document){ + 'use strict'; + + var collapseSelector = '[data-toggle="collapse-next"]', + colllapsibles = $('.sidebar .collapse').collapse({toggle: false}), + toggledClass = 'aside-collapsed', + $body = $('body'), + phone_mq = 768; // media querie + + $(function() { + + $(document) + .on('click', collapseSelector, function (e) { + e.preventDefault(); + + if ($(window).width() > phone_mq && + $body.hasClass(toggledClass)) return; + + // Try to close all of the collapse areas first + colllapsibles.collapse('hide'); + // ...then open just the one we want + var $target = $(this).siblings('ul'); + $target.collapse('show'); + + }) + // Submenu when aside is toggled + .on('click', '.sidebar > .nav > li', function() { + + if ($body.hasClass(toggledClass) && + $(window).width() > phone_mq) { + + $('.sidebar > .nav > li') + .not(this) + .removeClass('open') + .end() + .filter(this) + .toggleClass('open'); + } + + }); + + }); + + +}(jQuery, window, document)); + +/**========================================================= + * Module: sparkline.js + * SparkLines Mini Charts + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '.inlinesparkline'; + + // Match color with css values to style charts + var colors = { + primary: '#5fb5cb', + success: '#27ae60', + info: '#22bfe8', + warning: '#ffc61d', + danger: '#f6504d' + }; + + // Inline sparklines take their values from the contents of the tag + $(Selector).each(function() { + + var $this = $(this); + var data = $this.data(); + + if(data.barColor && colors[data.barColor]) + data.barColor = colors[data.barColor]; + + var options = data; + options.type = data.type || 'bar'; // default chart is bar + + $(this).sparkline('html', options); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: table-checkall.js + * Tables check all checkbox + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = 'th.check-all'; + + $(Selector).on('change', function() { + var $this = $(this), + index= $this.index() + 1, + checkbox = $this.find('input[type="checkbox"]'), + table = $this.parents('table'); + // Make sure to affect only the correct checkbox column + table.find('tbody > tr > td:nth-child('+index+') input[type="checkbox"]') + .prop('checked', checkbox[0].checked); + + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: toggle-state.js + * Toggle a classname from the BODY. Useful to change a state that + * affects globally the entire layout or more than one item + * Targeted elements must have [data-toggle="CLASS-NAME-TO-TOGGLE"] + * Optionally save and restore state [data-persists="true"] + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var SelectorToggle = '[data-toggle-state]', + $body = $('body'), + storageKeyName = 'toggleState'; + + + $(document) + .ready(function() { + restoreState($body); + }) + .on('click', SelectorToggle, function (e) { + e.preventDefault(); + var classname = $(this).data('toggleState'), + persists = $(this).data('persists'); + + if(classname) { + if( $body.hasClass(classname) ) { + $body.removeClass(classname); + if(persists) removeState(classname); + } + else { + $body.addClass(classname); + if(persists) addState(classname); + } + + } + + }); + + // Add a state to the browser storage to be restored later + function addState(classname){ + var data = store.get(storageKeyName); + + if(!data) { + data = classname; + } + else { + data = WordChecker.addWord(data, classname); + } + + store.set(storageKeyName, data); + } + + // Remove a state from the browser storage + function removeState(classname){ + var data = store.get(storageKeyName); + // nothing to remove + if(!data) return; + + data = WordChecker.removeWord(data, classname); + + store.set(storageKeyName, data); + } + + // Load the state string and restore the classlist + function restoreState($elem) { + var data = store.get(storageKeyName); + + // nothing to restore + if(!data) return; + $elem.addClass(data); + } + + + ////////////////////////////////////////////////// + // Helper object to check for words in a phrase // + ////////////////////////////////////////////////// + var WordChecker = { + hasWord: function (phrase, word) { + return new RegExp('(^|\\s)' + word + '(\\s|$)').test(phrase); + }, + addWord: function (phrase, word) { + if (!this.hasWord(phrase, word)) { + return (phrase + (phrase ? ' ' : '') + word); + } + }, + removeWord: function (phrase, word) { + if (this.hasWord(phrase, word)) { + return phrase.replace(new RegExp('(^|\\s)*' + word + '(\\s|$)*', 'g'), ''); + } + } + }; + + +}(jQuery, window, document)); + +/**========================================================= + * Module: tooltips.js + * Initialize Bootstrap tooltip with auto placement + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function(){ + + $('[data-toggle="tooltip"]').tooltip({ + container: 'body', + placement: function (context, source) { + //return (predictTooltipTop(source) < 0) ? "bottom": "top"; + var pos = 'top'; + if(predictTooltipTop(source) < 0) + pos = 'bottom'; + if(predictTooltipLeft(source) < 0) + pos = 'right'; + return pos; + } + }); + + }); + + // Predicts tooltip top position + // based on the trigger element + function predictTooltipTop(el) { + var top = el.offsetTop; + var height = 40; // asumes ~40px tooltip height + + while(el.offsetParent) { + el = el.offsetParent; + top += el.offsetTop; + } + return (top - height) - (window.pageYOffset); + } + + // Predicts tooltip top position + // based on the trigger element + function predictTooltipLeft(el) { + var left = el.offsetLeft; + var width = el.offsetWidth; + + while(el.offsetParent) { + el = el.offsetParent; + left += el.offsetLeft; + } + return (left - width) - (window.pageXOffset); + } + +}(jQuery, window, document)); + +/**========================================================= + * Module: upload-demo.js + * Upload Demostration + * See file server/upload.php for more details + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + $(function() { + + var progressbar = $('#progressbar'), + bar = progressbar.find('.progress-bar'), + settings = { + + action: 'server/upload.php', // upload url + + allow : '*.(jpg|jpeg|gif|png)', // allow only images + + param: 'upfile', + + loadstart: function() { + bar.css('width', '0%').text('0%'); + progressbar.removeClass('hidden'); + }, + + progress: function(percent) { + percent = Math.ceil(percent); + bar.css('width', percent+'%').text(percent+'%'); + }, + + allcomplete: function(response) { + + bar.css('width', '100%').text('100%'); + + setTimeout(function(){ + progressbar.addClass('hidden'); + }, 250); + + // Upload Completed + alert(response); + } + }; + + var select = new $.upload.select($('#upload-select'), settings), + drop = new $.upload.drop($('#upload-drop'), settings); + }); + +}(jQuery, window, document)); + +/**========================================================= + * Module: upload.js + * Allow users to upload files through a file input form element or a placeholder area. + * Based on addon from UIKit (http://getuikit.com/docs/addons_upload.html) + * + * Adapted version to work with Bootstrap classes + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var UploadSelect = function(element, options) { + + var $this = this, + $element = $(element), + options = $.extend({}, xhrupload.defaults, UploadSelect.defaults, options); + + if ($element.data("uploadSelect")) return; + + this.element = $element.on("change", function() { + xhrupload($this.element[0].files, options); + }); + + $element.data("uploadSelect", this); + }; + + UploadSelect.defaults = {}; + + var UploadDrop = function(element, options) { + + var $this = this, + $element = $(element), + options = $.extend({}, xhrupload.defaults, UploadDrop.defaults, options), + hasdragCls = false; + + if ($element.data("uploadDrop")) return; + + $element.on("drop", function(e){ + + if (e.dataTransfer && e.dataTransfer.files) { + + e.stopPropagation(); + e.preventDefault(); + + $element.removeClass(options.dragoverClass); + + xhrupload(e.dataTransfer.files, options); + } + + }).on("dragenter", function(e){ + e.stopPropagation(); + e.preventDefault(); + }).on("dragover", function(e){ + e.stopPropagation(); + e.preventDefault(); + + if (!hasdragCls) { + $element.addClass(options.dragoverClass); + hasdragCls = true; + } + }).on("dragleave", function(e){ + e.stopPropagation(); + e.preventDefault(); + $element.removeClass(options.dragoverClass); + hasdragCls = false; + }); + + $element.data("uploadDrop", this); + }; + + UploadDrop.defaults = { + 'dragoverClass': 'dragover' + }; + + $.upload = { "select" : UploadSelect, "drop" : UploadDrop }; + + $.support.ajaxupload = (function() { + + function supportFileAPI() { + var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi; + } + + function supportAjaxUploadProgressEvents() { + var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); + } + + function supportFormData() { + return !! window.FormData; + } + + return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData(); + })(); + + if ($.support.ajaxupload){ + $.event.props.push("dataTransfer"); + } + + function xhrupload(files, settings) { + + if (!$.support.ajaxupload){ + return this; + } + + settings = $.extend({}, xhrupload.defaults, settings); + + if (!files.length){ + return; + } + + if (settings.allow !== '*.*') { + + for(var i=0,file;file=files[i];i++) { + + if(!matchName(settings.allow, file.name)) { + + if(typeof(settings.notallowed) == 'string') { + alert(settings.notallowed); + } else { + settings.notallowed(file, settings); + } + return; + } + } + } + + var complete = settings.complete; + + if (settings.single){ + + var count = files.length, + uploaded = 0; + + settings.complete = function(response, xhr){ + uploaded = uploaded+1; + complete(response, xhr); + if (uploaded 0) || //IE 10 + (window.navigator['pointerEnabled'] && window.navigator['maxTouchPoints'] > 0) || //IE >=11 + false + ); + $.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver || null); + + $.Utils = {}; + + $.Utils.debounce = function(func, wait, immediate) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + }; + + $.Utils.removeCssRules = function(selectorRegEx) { + var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref; + + if(!selectorRegEx) return; + + setTimeout(function(){ + try { + _ref = document.styleSheets; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + stylesheet = _ref[_i]; + idxs = []; + stylesheet.cssRules = stylesheet.cssRules; + for (idx = _j = 0, _len1 = stylesheet.cssRules.length; _j < _len1; idx = ++_j) { + if (stylesheet.cssRules[idx].type === CSSRule.STYLE_RULE && selectorRegEx.test(stylesheet.cssRules[idx].selectorText)) { + idxs.unshift(idx); + } + } + for (_k = 0, _len2 = idxs.length; _k < _len2; _k++) { + stylesheet.deleteRule(idxs[_k]); + } + } + } catch (_error) {} + }, 0); + }; + + $.Utils.isInView = function(element, options) { + + var $element = $(element); + + if (!$element.is(':visible')) { + return false; + } + + var window_left = $win.scrollLeft(), + window_top = $win.scrollTop(), + offset = $element.offset(), + left = offset.left, + top = offset.top; + + options = $.extend({topoffset:0, leftoffset:0}, options); + + if (top + $element.height() >= window_top && top - options.topoffset <= window_top + $win.height() && + left + $element.width() >= window_left && left - options.leftoffset <= window_left + $win.width()) { + return true; + } else { + return false; + } + }; + + $.Utils.options = function(string) { + + if ($.isPlainObject(string)) return string; + + var start = (string ? string.indexOf("{") : -1), options = {}; + + if (start != -1) { + try { + options = (new Function("", "var json = " + string.substr(start) + "; return JSON.parse(JSON.stringify(json));"))(); + } catch (e) {} + } + + return options; + }; + + $.Utils.events = {}; + $.Utils.events.click = $.support.touch ? 'tap' : 'click'; + + $.langdirection = $html.attr("dir") == "rtl" ? "right" : "left"; + + $(function(){ + + // Check for dom modifications + if(!$.support.mutationobserver) return; + + // Install an observer for custom needs of dom changes + var observer = new $.support.mutationobserver($.Utils.debounce(function(mutations) { + $(doc).trigger("domready"); + }, 300)); + + // pass in the target node, as well as the observer options + observer.observe(document.body, { childList: true, subtree: true }); + + }); + + // add touch identifier class + $html.addClass($.support.touch ? "touch" : "no-touch"); + +}(jQuery, window, document)); +/**========================================================= + * Module: vmaps,js + * jVector Maps support + =========================================================*/ + +(function($, window, document){ + 'use strict'; + + var Selector = '[data-toggle="vector-map"]', + defaultColors = { + markerColor: '#5194cb', // the marker points + bgColor: '#fafafa', // the background + scaleColors: ['#5a5e6a'], // the color of the region in the serie + regionFill: '#818590' // the base region color + }; + + $(Selector).each(function() { + + var $this = $(this), + options = { + markerColor: $this.data('markerColor') || defaultColors.markerColor, + bgColor: $this.data('bgColor') || defaultColors.bgColor, + scale: $this.data('scale') || 1, + scaleColors: $this.data('scaleColors') || defaultColors.scaleColors, + regionFill: $this.data('regionFill') || '#818590' + }; + + var seriesData = { + 'CA': 11100, // Canada + 'DE': 2510, // Germany + 'FR': 3710, // France + 'AU': 5710, // Australia + 'GB': 8310, // Great Britain + 'RU': 9310, // Russia + 'BR': 6610, // Brazil + 'IN': 7810, // India + 'CN': 4310, // China + 'US': 839, // USA + 'SA': 410 // Saudi Arabia + }; + + var markersData = [ + { latLng:[41.90, 12.45], name:'Vatican City' }, + { latLng:[43.73, 7.41], name:'Monaco' }, + { latLng:[-0.52, 166.93], name:'Nauru' }, + { latLng:[-8.51, 179.21], name:'Tuvalu' }, + { latLng:[7.11,171.06], name:'Marshall Islands' }, + { latLng:[17.3,-62.73], name:'Saint Kitts and Nevis' }, + { latLng:[3.2,73.22], name:'Maldives' }, + { latLng:[35.88,14.5], name:'Malta' }, + { latLng:[41.0,-71.06], name:'New England' }, + { latLng:[12.05,-61.75], name:'Grenada' }, + { latLng:[13.16,-59.55], name:'Barbados' }, + { latLng:[17.11,-61.85], name:'Antigua and Barbuda' }, + { latLng:[-4.61,55.45], name:'Seychelles' }, + { latLng:[7.35,134.46], name:'Palau' }, + { latLng:[42.5,1.51], name:'Andorra' } + ]; + + initVectorMap( $this , options, seriesData, markersData); + + }); + + function initVectorMap($element, opts, series, markers) { + $element.vectorMap({ + map: 'world_mill_en', + backgroundColor: opts.bgColor, + zoomMin: 2, + zoomMax: 8, + zoomOnScroll: false, + regionStyle: { + initial: { + 'fill': defaultColors.regionFill, + 'fill-opacity': 1, + 'stroke': 'none', + 'stroke-width': 1.5, + 'stroke-opacity': 1 + }, + hover: { + 'fill-opacity': 0.8 + }, + selected: { + fill: 'blue' + }, + selectedHover: { + } + }, + focusOn:{ x:0.4, y:0.6, scale: opts.scale}, + markerStyle: { + initial: { + fill: opts.markerColor, + stroke: opts.markerColor + } + }, + onRegionLabelShow: function(e, el, code) { + if ( series && series[code] ) + el.html(el.html() + ': ' + series[code] + ' visitors'); + }, + markers: markers, + series: { + regions: [{ + values: series, + scale: opts.scaleColors, + normalizeFunction: 'polynomial' + }] + }, + }); + } + +}(jQuery, window, document)); + +/** + * Provides a start point to run plugins and other scripts + */ +(function($, window, document){ + 'use strict'; + + if (typeof $ === 'undefined') { throw new Error('This application\'s JavaScript requires jQuery'); } + + $(window).load(function() { + + $('.scroll-content').slimScroll({ + height: '250px' + }); + + adjustLayout(); + + }).resize(adjustLayout); + + + $(function() { + + // Init Fast click for mobiles + FastClick.attach(document.body); + + // inhibits null links + $('a[href="#"]').each(function(){ + this.href = 'javascript:void(0);'; + }); + + // popover init + $('[data-toggle=popover]').popover(); + + // Bootstrap slider + $('.slider').slider(); + + // Chosen + $('.chosen-select').chosen(); + + // Filestyle + $('.filestyle').filestyle(); + + // Masked inputs initialization + $.fn.inputmask && $('[data-toggle="masked"]').inputmask(); + + }); + + // keeps the wrapper covering always the entire body + // necessary when main content doesn't fill the viewport + function adjustLayout() { + $('.wrapper > section').css('min-height', $(window).height()); + } + +}(jQuery, window, document)); diff --git a/frontend/app/js/cloudadd.js b/frontend/app/js/cloudadd.js new file mode 100644 index 0000000..394245f --- /dev/null +++ b/frontend/app/js/cloudadd.js @@ -0,0 +1,3 @@ +var cloud_add = {} + + diff --git a/frontend/app/js/cloudlist.js b/frontend/app/js/cloudlist.js new file mode 100644 index 0000000..39cc726 --- /dev/null +++ b/frontend/app/js/cloudlist.js @@ -0,0 +1,6 @@ +var cloud_list = {} + +// cloud_list.add = function() { +// route("cloud_add") +// } + \ No newline at end of file diff --git a/frontend/app/js/dashboard.js b/frontend/app/js/dashboard.js new file mode 100644 index 0000000..af5512d --- /dev/null +++ b/frontend/app/js/dashboard.js @@ -0,0 +1,9 @@ +var dashboard = {} + +dashboard.add_cloud = function() { + route('cloudadd') +} + +dashboard.move_view = function() { + route('landing') +} diff --git a/frontend/app/js/default.js b/frontend/app/js/default.js new file mode 100644 index 0000000..0f491e3 --- /dev/null +++ b/frontend/app/js/default.js @@ -0,0 +1 @@ +console.log("[Console] Default javascript") \ No newline at end of file diff --git a/frontend/app/js/landing.js b/frontend/app/js/landing.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/js/load.js b/frontend/app/js/load.js new file mode 100644 index 0000000..411b0e1 --- /dev/null +++ b/frontend/app/js/load.js @@ -0,0 +1,103 @@ + +function load(url, callback, renderTo, elementId) { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + callback(xhr.response, renderTo, elementId); + } + } + xhr.onerror = function() { + alert(' web server 동작 확인해주어야함- localserver.sh') + } + xhr.open('GET', url, true); + xhr.send(''); +} + +function render(response, renderTo, elementId) { + document.getElementById(elementId).insertAdjacentHTML(renderTo, response) +} + +function defaultCssLoader(view='default') { + document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend", ``) +} + +function renderByTag(response, tag, location) { + document.getElementsByTagName(tag)[0].insertAdjacentHTML(location, response) +} + +var head = document.head; + +function addScript(jsFiles) { + // 얘는 배열을 인자로 받는 함수 녀석이다. 순서대로 js를 불러와주도록 하여 오류를 줄여준다. + return new Promise((resolve, reject) => { + var load = function(i) { + var file = jsFiles[i]; + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.onload = function() { + i++; + if(i === jsFiles.length) { + resolve(); + } else { + load(i); + } + } + script.src = file; + head.appendChild(script); + }; + load(0); + }); + +} + +async function scriptLoader(view='default') { + // same as \ No newline at end of file diff --git a/frontend/index.md b/frontend/index.md new file mode 100644 index 0000000..b1e80ac --- /dev/null +++ b/frontend/index.md @@ -0,0 +1,37 @@ +## Welcome to GitHub Pages + +You can use the [editor on GitHub](https://github.com/kookmin-sw/cap-template/edit/master/index.md) to maintain and preview the content for your website in Markdown files. + +Whenever you commit to this repository, GitHub Pages will run [Jekyll](https://jekyllrb.com/) to rebuild the pages in your site, from the content in your Markdown files. + +### Markdown + +Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for + +```markdown +Syntax highlighted code block + +# Header 1 +## Header 2 +### Header 3 + +- Bulleted +- List + +1. Numbered +2. List + +**Bold** and _Italic_ and `Code` text + +[Link](url) and ![Image](src) +``` + +For more details see [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/). + +### Jekyll Themes + +Your Pages site will use the layout and styles from the Jekyll theme you have selected in your [repository settings](https://github.com/kookmin-sw/cap-template/settings). The name of this theme is saved in the Jekyll `_config.yml` configuration file. + +### Support or Contact + +Having trouble with Pages? Check out our [documentation](https://help.github.com/categories/github-pages-basics/) or [contact support](https://github.com/contact) and we’ll help you sort it out. diff --git a/frontend/localserver.sh b/frontend/localserver.sh new file mode 100644 index 0000000..e1d06a9 --- /dev/null +++ b/frontend/localserver.sh @@ -0,0 +1 @@ +python3 -m http.server \ No newline at end of file diff --git a/frontend/pages/landing_ori.html b/frontend/pages/landing_ori.html new file mode 100644 index 0000000..f39b408 --- /dev/null +++ b/frontend/pages/landing_ori.html @@ -0,0 +1,436 @@ + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
          +
          + +
          +
          +
          +
          + App Name + +
          +
          + +
          +
          +
          사이트 무제한 생성
          +
          클라우드 웹호스팅
          +

          사용 여부에 따라 필요한 만큼만 사용하는 방식으로 기존 클라우드 방식 보다 70% 이상 비용 절약 가능

          +
          + +
          +
          +
            + + +
          • + +
          • + + +
          +
          +
          +
          +
          +
          +
          + + +
          +
          + +
          +
          + + +
          +
          +
          +
          + App Name +
          +
          + +

          서버 운용 지식이 없어도 쉽게 사용가능한 방식

          +

          생성, 제거를 자유자재로 가능하므로 용량 내에서는 여러 웹사이트 제작 가능

          +

          안전하고 믿을 만한 단독 서버 사용(dashboard)

          +
          +

          + + Start Demo Now + +

          +
          +
          +
          +
          +
          +
          +
          +
          + +

          상담을 통해 선정하는 불투명한 산출 방식 대신 정찰제로 운영

          +

          원하는 크기와 기간에 따른 다양한 선택폭

          +

          타사보다 80% 정도 저렴한 가격

          +
          +

          + + Watch Now(price_view) + +

          +
          +
          + App Name +
          +
          +
          +
          + + + + + + +
          +
          +

          모든 운영체제를 지원합니다 +
          + 여러 운영체제로 사용가능합니다 +

          +
          + +
          +
          + client +
          +
          + client +
          +
          + client +
          +
          + client +
          +
          + client +
          +
          + client +
          +
          +
          +
          + +
          +
          +

          원하는 호스팅을 선택해주세요 +
          + 필요한 서비스를 선택해주세요 +
          +
          +

          +
          +
          +

          1VCore

          +

          1GB RAM

          +

          30GB SSD

          +

          1TB

          + select +
          +
          +
          +
          +

          1VCore

          +

          1GB RAM

          +

          30GB SSD

          +

          1TB

          + select +
          +
          +
          +
          +

          1VCore

          +

          1GB RAM

          +

          30GB SSD

          +

          1TB

          + select +
          +
          +
          +
          +

          1VCore

          +

          1GB RAM

          +

          30GB SSD

          +

          1TB

          + select +
          +
          + +
          +
          + + +
          +
          +

          Ready to start? Try this App today

          +

          And see why people around the world choose this APP to create great cross-platform websites

          +

          +
          + + Join Now! + +

          +
          +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/pages/lock.html b/frontend/pages/lock.html new file mode 100644 index 0000000..f09f065 --- /dev/null +++ b/frontend/pages/lock.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
          +
          + +
          + lock-bg +
          +

          Hello Sarah!

          +

          Please login to unlock your screen.

          +
          +
          + + + + +
          +
          +
          + +
          +
          + +
          +
          +
          +
          +
          + +
          +
          + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/pages/login-multi.html b/frontend/pages/login-multi.html new file mode 100644 index 0000000..889b4e3 --- /dev/null +++ b/frontend/pages/login-multi.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
          +
          +
          +
          + + Image + +
          +
          + +
          + +
          +
          +
          +
          + + + +
          +
          + + + +
          +
          +
          + +
          +
          + +
          +
          +
          +
          + + +
          + +
          +
          +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          +
          + +
          +
          + +
          +
          +
          +
          + + +
          + +
          +
          +
          +

          Fill with your mail to receive instructions on how to reset your password.

          +
          + + + +
          + +
          +
          +
          +
          + +
          +
          +
          +
          + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/pages/login.html b/frontend/pages/login.html new file mode 100644 index 0000000..4d7e45c --- /dev/null +++ b/frontend/pages/login.html @@ -0,0 +1,68 @@ + + + + + + + + + + Login + + + + + + + + + + +
          +
          +
          +
          + + Image + +

          + LOGIN +

          +
          +
          +
          +
          + + +
          +
          + + +
          +
          +
          + +
          + +
          + +
          +

          Don't have an account yet?

          + Sign up +
          +
          +
          +
          +
          +
          + + + + + + + + \ No newline at end of file diff --git a/frontend/pages/recover.html b/frontend/pages/recover.html new file mode 100644 index 0000000..b8385da --- /dev/null +++ b/frontend/pages/recover.html @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + +
          +
          + +
          +
          + + Image + +

          + PASSWORD RESET +

          +
          +
          +
          +

          Fill with your mail to receive instructions on how to reset your password.

          +
          + + + +
          + +
          +
          +
          + +
          +
          + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/pages/signup.html b/frontend/pages/signup.html new file mode 100644 index 0000000..34284ef --- /dev/null +++ b/frontend/pages/signup.html @@ -0,0 +1,79 @@ + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + +
          +
          + +
          +
          + + Image + +

          + SIGNUP TO GET INSTANT ACCESS. +

          +
          +
          +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          +
          + +
          +
          + +
          +
          +
          + +
          +
          + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/refer_buttons.html b/frontend/refer_buttons.html new file mode 100644 index 0000000..4edc295 --- /dev/null +++ b/frontend/refer_buttons.html @@ -0,0 +1,1506 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + +
          + +
          +

          Buttons

          + +
          +
          + +
          +
          +

          Button colors

          +
          +
          + + + + + + + + + + +
          +
          Button Link + + + anchor tag + +
          +
          + +
          +
          + +
          +
          +

          Button Labeled

          +
          +
          + + + + + + + + +
          +
          + + + + +
          +
          + +
          +
          + + +
          +
          + +
          +
          +

          Button sizing

          +
          +
          +
          +
          +

          + + +

          +

          + + +

          +
          +
          +

          + + +

          +

          + + +

          +
          +
          +
          +
          + +
          +
          + +
          +
          +

          Button group

          +
          +
          +

          +
          + + + +
          +

          +

          +
          + + + + +
          +
          + + + +
          +
          + +
          +
          +
          + +
          +
          + + +
          +
          + +
          +
          +

          Button Pills

          +
          +
          +

          Pill left

          +

          + + + + + + + +

          +

          Pill right

          +

          + + + + + + + +

          +
          +
          + +
          +
          + +
          +
          +

          Button Oval

          +
          +
          + + + + + + + +
          +
          + + +
          +
          +

          Button Square

          +
          +
          + + + + + + + +
          +
          + +
          +
          + + +
          +
          + +
          +
          +

          Button dropdown

          +
          +
          + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + + +
          + +
          +
          + +
          +
          + +
          +
          +

          Split button dropdown

          +
          +
          + +
          + + + +
          + + +
          + + + +
          + + +
          + + + +
          + + +
          + + + +
          + + +
          + + + +
          + + +
          + + + +
          + + +
          + + + +
          + +
          +
          + +
          +
          + + +
          +
          + +
          +
          +

          Pagination

          +
          +
          + +
          +
          +

          Default pagination

          +
            +
          • « +
          • +
          • 1 +
          • +
          • 2 +
          • +
          • 3 +
          • +
          • 4 +
          • +
          • 5 +
          • +
          • » +
          • +
          +

          Disabled and active states

          + +
          +
          +

          Size

          +
          +
            +
          • « +
          • +
          • 1 +
          • +
          • 2 +
          • +
          • 3 +
          • +
          • 4 +
          • +
          • » +
          • +
          +
          +
          +
            +
          • « +
          • +
          • 1 +
          • +
          • 2 +
          • +
          • 3 +
          • +
          • 4 +
          • +
          • » +
          • +
          +
          +
          +
            +
          • « +
          • +
          • 1 +
          • +
          • 2 +
          • +
          • 3 +
          • +
          • 4 +
          • +
          • » +
          • +
          +
          +
          +
          + +
          +
          + +
          +
          + +
          +
          +

          Pager

          +
          +
          +

          Alignment

          + + +

          Disabled state

          + +
          +
          + +
          +
          + +
          + + +
          © 2014 - Wintermin
          + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/refer_grid.html b/frontend/refer_grid.html new file mode 100644 index 0000000..9533e2d --- /dev/null +++ b/frontend/refer_grid.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + +
          + +
          +

          Grid

          + +
          +
          +
          +
          +

          Example: Stacked-to-horizontal

          +

          Using a single set of + .col-md-*grid classes, you can create a default grid system that starts out stacked on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium) devices. Place grid + columns in any + .row.

          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          .col-md-1
          +
          +
          +
          +
          +
          .col-md-8
          +
          +
          +
          .col-md-4
          +
          +
          +
          +
          +
          .col-md-4
          +
          +
          +
          .col-md-4
          +
          +
          +
          .col-md-4
          +
          +
          +
          +
          +
          .col-md-6
          +
          +
          +
          .col-md-6
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Example: Mobile and desktop

          +

          Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by adding + .col-xs-* + .col-md-*to your columns. See the example below for a better idea of how it all works.

          +
          +
          +
          .col-xs-12 .col-md-8
          +
          +
          +
          .col-xs-6 .col-md-4
          +
          +
          +
          +
          +
          .col-xs-6 .col-md-4
          +
          +
          +
          .col-xs-6 .col-md-4
          +
          +
          +
          .col-xs-6 .col-md-4
          +
          +
          +
          +
          +
          .col-xs-6
          +
          +
          +
          .col-xs-6
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Example: Mobile, tablet, desktops

          +

          Build on the previous example by creating even more dynamic and powerful layouts with tablet + .col-sm-*classes.

          +
          +
          +
          .col-xs-12 .col-sm-6 .col-md-8
          +
          +
          +
          .col-xs-6 .col-md-4
          +
          +
          +
          +
          +
          .col-xs-6 .col-sm-4
          +
          +
          +
          .col-xs-6 .col-sm-4
          +
          +
          +
          +
          +
          +
          .col-xs-6 .col-sm-4
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Responsive column resets

          +

          With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns don't clear quite right as one is taller than the other. To fix that, use a combination of a + .clearfixand ourresponsive utility classes.

          +
          +
          +
          .col-xs-6 .col-sm-3 +
          Resize your viewport or check it out on your phone for an example.
          +
          +
          +
          .col-xs-6 .col-sm-3
          +
          +
          +
          +
          .col-xs-6 .col-sm-3
          +
          +
          +
          .col-xs-6 .col-sm-3
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Offsetting columns

          +

          Move columns to the right using + .col-md-offset-*classes. These classes increase the left margin of a column by + *columns. For example, + .col-md-offset-4moves + .col-md-4over four columns.

          +
          +
          +
          .col-md-4
          +
          +
          +
          .col-md-4 .col-md-offset-4
          +
          +
          +
          +
          +
          .col-md-3 .col-md-offset-3
          +
          +
          +
          .col-md-3 .col-md-offset-3
          +
          +
          +
          +
          +
          .col-md-6 .col-md-offset-3
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Nesting columns

          +

          To nest your content with the default grid, add a new + .rowand set of + .col-md-*columns within an existing + .col-md-*column. Nested rows should include a set of columns that add up to 12.

          +
          +
          +
          Level 1: .col-md-9 +
          +
          +
          Level 2: .col-md-6
          +
          +
          +
          Level 2: .col-md-6
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Column ordering

          +

          Easily change the order of our built-in grid columns with + .col-md-push-*and + .col-md-pull-*modifier classes.

          +
          +
          +
          .col-md-9 .col-md-push-3
          +
          +
          +
          .col-md-3 .col-md-pull-9
          +
          +
          +
          +
          +
          +
          + +
          + + +
          © 2014 - Wintermin
          + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/refer_icons.html b/frontend/refer_icons.html new file mode 100644 index 0000000..d2f6e08 --- /dev/null +++ b/frontend/refer_icons.html @@ -0,0 +1,1909 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + +
          + +
          +

          Icons +
          + Font Awesome gives you scalable vector icons that can instantly be customized +

          +
          + +
          + +
          +
          + fa-adjust
          +
          + fa-anchor
          +
          + fa-archive
          +
          + fa-arrows
          +
          + fa-arrows-h
          +
          + fa-arrows-v
          +
          + fa-asterisk
          +
          + fa-ban
          +
          + fa-bar-chart-o
          +
          + fa-barcode
          +
          + fa-bars
          +
          + fa-beer
          +
          + fa-bell
          +
          + fa-bell-o
          +
          + fa-bolt
          +
          + fa-book
          +
          + fa-bookmark
          +
          + fa-bookmark-o
          +
          + fa-briefcase
          +
          + fa-bug
          +
          + fa-building-o
          +
          + fa-bullhorn
          +
          + fa-bullseye
          +
          + fa-calendar
          +
          + fa-calendar-o
          +
          + fa-camera
          +
          + fa-camera-retro
          +
          + fa-caret-square-o-down
          +
          + fa-caret-square-o-left
          +
          + fa-caret-square-o-right
          +
          + fa-caret-square-o-up
          +
          + fa-certificate
          +
          + fa-check
          +
          + fa-check-circle
          +
          + fa-check-circle-o
          +
          + fa-check-square
          +
          + fa-check-square-o
          +
          + fa-circle
          +
          + fa-circle-o
          +
          + fa-clock-o
          +
          + fa-cloud
          +
          + fa-cloud-download
          +
          + fa-cloud-upload
          +
          + fa-code
          +
          + fa-code-fork
          +
          + fa-coffee
          +
          + fa-cog
          +
          + fa-cogs
          +
          + fa-comment
          +
          + fa-comment-o
          +
          + fa-comments
          +
          + fa-comments-o
          +
          + fa-compass
          +
          + fa-credit-card
          +
          + fa-crop
          +
          + fa-crosshairs
          +
          + fa-cutlery
          +
          + fa-dashboard + (alias) +
          +
          + fa-desktop
          +
          + fa-dot-circle-o
          +
          + fa-download
          +
          + fa-edit + (alias) +
          +
          + fa-ellipsis-h
          +
          + fa-ellipsis-v
          +
          + fa-envelope
          +
          + fa-envelope-o
          +
          + fa-eraser
          +
          + fa-exchange
          +
          + fa-exclamation
          +
          + fa-exclamation-circle
          +
          + fa-exclamation-triangle
          +
          + fa-external-link
          +
          + fa-external-link-square
          +
          + fa-eye
          +
          + fa-eye-slash
          +
          + fa-female
          +
          + fa-fighter-jet
          +
          + fa-film
          +
          + fa-filter
          +
          + fa-fire
          +
          + fa-fire-extinguisher
          +
          + fa-flag
          +
          + fa-flag-checkered
          +
          + fa-flag-o
          +
          + fa-flash + (alias) +
          +
          + fa-flask
          +
          + fa-folder
          +
          + fa-folder-o
          +
          + fa-folder-open
          +
          + fa-folder-open-o
          +
          + fa-frown-o
          +
          + fa-gamepad
          +
          + fa-gavel
          +
          + fa-gear + (alias) +
          +
          + fa-gears + (alias) +
          +
          + fa-gift
          +
          + fa-glass
          +
          + fa-globe
          +
          + fa-group + (alias) +
          +
          + fa-hdd-o
          +
          + fa-headphones
          +
          + fa-heart
          +
          + fa-heart-o
          +
          + fa-home
          +
          + fa-inbox
          +
          + fa-info
          +
          + fa-info-circle
          +
          + fa-key
          +
          + fa-keyboard-o
          +
          + fa-laptop
          +
          + fa-leaf
          +
          + fa-legal + (alias) +
          +
          + fa-lemon-o
          +
          + fa-level-down
          +
          + fa-level-up
          +
          + fa-lightbulb-o
          +
          + fa-location-arrow
          +
          + fa-lock
          +
          + fa-magic
          +
          + fa-magnet
          +
          + fa-mail-forward + (alias) +
          +
          + fa-mail-reply + (alias) +
          +
          + fa-mail-reply-all
          +
          + fa-male
          +
          + fa-map-marker
          +
          + fa-meh-o
          +
          + fa-microphone
          +
          + fa-microphone-slash
          +
          + fa-minus
          +
          + fa-minus-circle
          +
          + fa-minus-square
          +
          + fa-minus-square-o
          +
          + fa-mobile
          +
          + fa-mobile-phone + (alias) +
          +
          + fa-money
          +
          + fa-moon-o
          +
          + fa-music
          +
          + fa-pencil
          +
          + fa-pencil-square
          +
          + fa-pencil-square-o
          +
          + fa-phone
          +
          + fa-phone-square
          +
          + fa-picture-o
          +
          + fa-plane
          +
          + fa-plus
          +
          + fa-plus-circle
          +
          + fa-plus-square
          +
          + fa-plus-square-o
          +
          + fa-power-off
          +
          + fa-print
          +
          + fa-puzzle-piece
          +
          + fa-qrcode
          +
          + fa-question
          +
          + fa-question-circle
          +
          + fa-quote-left
          +
          + fa-quote-right
          +
          + fa-random
          +
          + fa-refresh
          +
          + fa-reply
          +
          + fa-reply-all
          +
          + fa-retweet
          +
          + fa-road
          +
          + fa-rocket
          +
          + fa-rss
          +
          + fa-rss-square
          +
          + fa-search
          +
          + fa-search-minus
          +
          + fa-search-plus
          +
          + fa-share
          +
          + fa-share-square
          +
          + fa-share-square-o
          +
          + fa-shield
          +
          + fa-shopping-cart
          +
          + fa-sign-in
          +
          + fa-sign-out
          +
          + fa-signal
          +
          + fa-sitemap
          +
          + fa-smile-o
          +
          + fa-sort
          +
          + fa-sort-alpha-asc
          +
          + fa-sort-alpha-desc
          +
          + fa-sort-amount-asc
          +
          + fa-sort-amount-desc
          +
          + fa-sort-asc
          +
          + fa-sort-desc
          +
          + fa-sort-down + (alias) +
          +
          + fa-sort-numeric-asc
          +
          + fa-sort-numeric-desc
          +
          + fa-sort-up + (alias) +
          +
          + fa-spinner
          +
          + fa-square
          +
          + fa-square-o
          +
          + fa-star
          +
          + fa-star-half
          +
          + fa-star-half-empty + (alias) +
          +
          + fa-star-half-full + (alias) +
          +
          + fa-star-half-o
          +
          + fa-star-o
          +
          + fa-subscript
          +
          + fa-suitcase
          +
          + fa-sun-o
          +
          + fa-superscript
          +
          + fa-tablet
          +
          + fa-tachometer
          +
          + fa-tag
          +
          + fa-tags
          +
          + fa-tasks
          +
          + fa-terminal
          +
          + fa-thumb-tack
          +
          + fa-thumbs-down
          +
          + fa-thumbs-o-down
          +
          + fa-thumbs-o-up
          +
          + fa-thumbs-up
          +
          + fa-ticket
          +
          + fa-times
          +
          + fa-times-circle
          +
          + fa-times-circle-o
          +
          + fa-tint
          +
          + fa-toggle-down + (alias) +
          +
          + fa-toggle-left + (alias) +
          +
          + fa-toggle-right + (alias) +
          +
          + fa-toggle-up + (alias) +
          +
          + fa-trash-o
          +
          + fa-trophy
          +
          + fa-truck
          +
          + fa-umbrella
          +
          + fa-unlock
          +
          + fa-unlock-alt
          +
          + fa-unsorted + (alias) +
          +
          + fa-upload
          +
          + fa-user
          +
          + fa-users
          +
          + fa-video-camera
          +
          + fa-volume-down
          +
          + fa-volume-off
          +
          + fa-volume-up
          +
          + fa-warning + (alias) +
          +
          + fa-wheelchair
          +
          + fa-wrench
          +
          +
          + + +
          + +
          +
          + fa-check-square
          +
          + fa-check-square-o
          +
          + fa-circle
          +
          + fa-circle-o
          +
          + fa-dot-circle-o
          +
          + fa-minus-square
          +
          + fa-minus-square-o
          +
          + fa-plus-square
          +
          + fa-plus-square-o
          +
          + fa-square
          +
          + fa-square-o
          +
          +
          + + +
          + +
          +
          + fa-bitcoin + (alias) +
          +
          + fa-btc
          +
          + fa-cny + (alias) +
          +
          + fa-dollar + (alias) +
          +
          + fa-eur
          +
          + fa-euro + (alias) +
          +
          + fa-gbp
          +
          + fa-inr
          +
          + fa-jpy
          +
          + fa-krw
          +
          + fa-money
          +
          + fa-rmb + (alias) +
          +
          + fa-rouble + (alias) +
          +
          + fa-rub
          +
          + fa-ruble + (alias) +
          +
          + fa-rupee + (alias) +
          +
          + fa-try
          +
          + fa-turkish-lira + (alias) +
          +
          + fa-usd
          +
          + fa-won + (alias) +
          +
          + fa-yen + (alias) +
          +
          +
          + + +
          + +
          +
          + fa-align-center
          +
          + fa-align-justify
          +
          + fa-align-left
          +
          + fa-align-right
          +
          + fa-bold
          +
          + fa-chain + (alias) +
          +
          + fa-chain-broken
          +
          + fa-clipboard
          +
          + fa-columns
          +
          + fa-copy + (alias) +
          +
          + fa-cut + (alias) +
          +
          + fa-dedent + (alias) +
          +
          + fa-eraser
          +
          + fa-file
          +
          + fa-file-o
          +
          + fa-file-text
          +
          + fa-file-text-o
          +
          + fa-files-o
          +
          + fa-floppy-o
          +
          + fa-font
          +
          + fa-indent
          +
          + fa-italic
          +
          + fa-link
          +
          + fa-list
          +
          + fa-list-alt
          +
          + fa-list-ol
          +
          + fa-list-ul
          +
          + fa-outdent
          +
          + fa-paperclip
          +
          + fa-paste + (alias) +
          +
          + fa-repeat
          +
          + fa-rotate-left + (alias) +
          +
          + fa-rotate-right + (alias) +
          +
          + fa-save + (alias) +
          +
          + fa-scissors
          +
          + fa-strikethrough
          +
          + fa-table
          +
          + fa-text-height
          +
          + fa-text-width
          +
          + fa-th
          +
          + fa-th-large
          +
          + fa-th-list
          +
          + fa-underline
          +
          + fa-undo
          +
          + fa-unlink + (alias) +
          +
          +
          + + +
          + +
          +
          + fa-angle-double-down
          +
          + fa-angle-double-left
          +
          + fa-angle-double-right
          +
          + fa-angle-double-up
          +
          + fa-angle-down
          +
          + fa-angle-left
          +
          + fa-angle-right
          +
          + fa-angle-up
          +
          + fa-arrow-circle-down
          +
          + fa-arrow-circle-left
          +
          + fa-arrow-circle-o-down
          +
          + fa-arrow-circle-o-left
          +
          + fa-arrow-circle-o-right
          +
          + fa-arrow-circle-o-up
          +
          + fa-arrow-circle-right
          +
          + fa-arrow-circle-up
          +
          + fa-arrow-down
          +
          + fa-arrow-left
          +
          + fa-arrow-right
          +
          + fa-arrow-up
          +
          + fa-arrows
          +
          + fa-arrows-alt
          +
          + fa-arrows-h
          +
          + fa-arrows-v
          +
          + fa-caret-down
          +
          + fa-caret-left
          +
          + fa-caret-right
          +
          + fa-caret-square-o-down
          +
          + fa-caret-square-o-left
          +
          + fa-caret-square-o-right
          +
          + fa-caret-square-o-up
          +
          + fa-caret-up
          +
          + fa-chevron-circle-down
          +
          + fa-chevron-circle-left
          +
          + fa-chevron-circle-right
          +
          + fa-chevron-circle-up
          +
          + fa-chevron-down
          +
          + fa-chevron-left
          +
          + fa-chevron-right
          +
          + fa-chevron-up
          +
          + fa-hand-o-down
          +
          + fa-hand-o-left
          +
          + fa-hand-o-right
          +
          + fa-hand-o-up
          +
          + fa-long-arrow-down
          +
          + fa-long-arrow-left
          +
          + fa-long-arrow-right
          +
          + fa-long-arrow-up
          +
          + fa-toggle-down + (alias) +
          +
          + fa-toggle-left + (alias) +
          +
          + fa-toggle-right + (alias) +
          +
          + fa-toggle-up + (alias) +
          +
          +
          + + +
          + +
          +
          + fa-arrows-alt
          +
          + fa-backward
          +
          + fa-compress
          +
          + fa-eject
          +
          + fa-expand
          +
          + fa-fast-backward
          +
          + fa-fast-forward
          +
          + fa-forward
          +
          + fa-pause
          +
          + fa-play
          +
          + fa-play-circle
          +
          + fa-play-circle-o
          +
          + fa-step-backward
          +
          + fa-step-forward
          +
          + fa-stop
          +
          + fa-youtube-play
          +
          +
          + + +
          + +
          +
            +
          • All brand icons are trademarks of their respective owners.
          • +
          • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
          • +
          +
          +
          +
          + fa-adn
          +
          + fa-android
          +
          + fa-apple
          +
          + fa-bitbucket
          +
          + fa-bitbucket-square
          +
          + fa-bitcoin + (alias) +
          +
          + fa-btc
          +
          + fa-css3
          +
          + fa-dribbble
          +
          + fa-dropbox
          +
          + fa-facebook
          +
          + fa-facebook-square
          +
          + fa-flickr
          +
          + fa-foursquare
          +
          + fa-github
          +
          + fa-github-alt
          +
          + fa-github-square
          +
          + fa-gittip
          +
          + fa-google-plus
          +
          + fa-google-plus-square
          +
          + fa-html5
          +
          + fa-instagram
          +
          + fa-linkedin
          +
          + fa-linkedin-square
          +
          + fa-linux
          +
          + fa-maxcdn
          +
          + fa-pagelines
          +
          + fa-pinterest
          +
          + fa-pinterest-square
          +
          + fa-renren
          +
          + fa-skype
          +
          + fa-stack-exchange
          +
          + fa-stack-overflow
          +
          + fa-trello
          +
          + fa-tumblr
          +
          + fa-tumblr-square
          +
          + fa-twitter
          +
          + fa-twitter-square
          +
          + fa-vimeo-square
          +
          + fa-vk
          +
          + fa-weibo
          +
          + fa-windows
          +
          + fa-xing
          +
          + fa-xing-square
          +
          + fa-youtube
          +
          + fa-youtube-play
          +
          + fa-youtube-square
          +
          +
          + + +
          + +
          +
          + fa-ambulance
          +
          + fa-h-square
          +
          + fa-hospital-o
          +
          + fa-medkit
          +
          + fa-plus-square
          +
          + fa-stethoscope
          +
          + fa-user-md
          +
          + fa-wheelchair
          +
          +
          + +
          +
          + + +
          © 2014 - Wintermin
          + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/refer_invoice.html b/frontend/refer_invoice.html new file mode 100644 index 0000000..2ff09ad --- /dev/null +++ b/frontend/refer_invoice.html @@ -0,0 +1,991 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + + + + + + + + + + + + + + + + +
          + + + + + + + + + + +
          + +
          + +

          Invoice

          +
          +
          + +

          Invoice 00004879

          +
          +
          +
          +
          +
          + +
          +
          +

          John Doe

          +
          Nowhere 1024 +
          Happy St., 50487 +
          Neverland
          +
          +
          +
          +
          +
          + +
          +
          +

          Dohn Joe

          +
          Basilisa 2145 +
          Mate, Cliff., 20145 +
          Moon
          +
          +
          + +
          +
          +

          INVOICE NO.

          +

          00004879

          +
          +
          +

          Date

          +

          25/08/2014

          +
          +
          +

          Due Date

          +

          30/08/2014

          +
          +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          Item #DescriptionQuantityUnit PriceTotal
          1001Iphone 5s - 64Gb3$ 200$ 600
          2002Iphone 6s - 128Gb5$ 500$ 2500
          3010Ipad 11z - 512Gb1$ 650$ 650
          3009iMac ProRetina 176$ 1100$ 6600
          +
          +
          +
          +
          +

          Subtotal

          +

          $ 10300

          +
          +
          +

          Tax (21%)

          +

          $ 2700

          +
          +
          +

          GRAND TOTAL

          +

          $ 13000

          +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          + + +
          © 2014 - Wintermin
          + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/templates/_content-area.html b/frontend/templates/_content-area.html new file mode 100644 index 0000000..3a65c55 --- /dev/null +++ b/frontend/templates/_content-area.html @@ -0,0 +1,3 @@ +
          + +
          \ No newline at end of file diff --git a/frontend/templates/_footer.html b/frontend/templates/_footer.html new file mode 100644 index 0000000..152017a --- /dev/null +++ b/frontend/templates/_footer.html @@ -0,0 +1 @@ +
          © 2014 - Wintermin
          \ No newline at end of file diff --git a/frontend/templates/_head.html b/frontend/templates/_head.html new file mode 100644 index 0000000..a75a055 --- /dev/null +++ b/frontend/templates/_head.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/templates/_left-side.html b/frontend/templates/_left-side.html new file mode 100644 index 0000000..7b9a04f --- /dev/null +++ b/frontend/templates/_left-side.html @@ -0,0 +1,50 @@ +
      + + + \ No newline at end of file diff --git a/frontend/templates/_menu.html b/frontend/templates/_menu.html new file mode 100644 index 0000000..c357ee7 --- /dev/null +++ b/frontend/templates/_menu.html @@ -0,0 +1,62 @@ + + \ No newline at end of file diff --git a/frontend/templates/_right-side.html b/frontend/templates/_right-side.html new file mode 100644 index 0000000..49baa2c --- /dev/null +++ b/frontend/templates/_right-side.html @@ -0,0 +1,167 @@ + + \ No newline at end of file diff --git a/frontend/vendor/animo/LICENSE b/frontend/vendor/animo/LICENSE new file mode 100644 index 0000000..46633d7 --- /dev/null +++ b/frontend/vendor/animo/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Daniel Raftery + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend/vendor/animo/animate+animo.css b/frontend/vendor/animo/animate+animo.css new file mode 100644 index 0000000..64a41e7 --- /dev/null +++ b/frontend/vendor/animo/animate+animo.css @@ -0,0 +1,4003 @@ +@charset "UTF-8"; + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2014 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; +} + +@-webkit-keyframes bounce { + 0%, 20%, 53%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-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-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + -ms-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + -ms-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + -ms-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + -ms-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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + -ms-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + -ms-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + -ms-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + -ms-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + -ms-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + -ms-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-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); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-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); + -ms-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + -ms-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + -ms-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + -ms-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + -ms-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + 0% { + -webkit-transform: 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); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + -ms-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); + -ms-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); + -ms-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); + -ms-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; + -ms-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes bounceIn { + 0%, 20%, 40%, 60%, 80%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + -ms-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + -ms-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounceInDown { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + -ms-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + -ms-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + -ms-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + -ms-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + -ms-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + -ms-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + -ms-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + -ms-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + -ms-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + 0%, 60%, 75%, 90%, 100% { + -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-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-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + -ms-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + -ms-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + -ms-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); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-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); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-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); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + -ms-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); + -ms-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + -ms-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); + -ms-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + -ms-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); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + -ms-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + -ms-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); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + -ms-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-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-transition-timing-function: ease-in; + transition-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); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-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-transition-timing-function: ease-in; + transition-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + 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); + -ms-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-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); + -ms-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-animation-duration: .75s; + animation-duration: .75s; + -webkit-backface-visibility: visible !important; + -ms-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); + -ms-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + -ms-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); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + -ms-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-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); + -ms-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + -ms-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + -ms-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + -ms-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); + -ms-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; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + -ms-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + -ms-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-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; + -ms-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + -ms-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: rotate(0, 0, 1, 45deg); + transform: rotate(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0, 0, 1, 45deg); + -ms-transform: rotate(0, 0, 1, 45deg); + transform: rotate(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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-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; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-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; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + -ms-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; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + -ms-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + -ms-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + -ms-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); + -ms-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; + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-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); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + -ms-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); + -ms-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); + -ms-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + -ms-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); + -ms-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); + -ms-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + -ms-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); + -ms-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); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + -ms-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; +} + +.slideExpandUp { + animation-name: slideExpandUp; + -webkit-animation-name: slideExpandUp; + animation-duration: 1.6s; + -webkit-animation-duration: 1.6s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease -out;visibility:visible!important}@keyframes slideExpandUp{0%{transform:translateY(100%) scaleX(0.5)}30%{transform:translateY(-8%) scaleX(0.5) +} + +40% { + transform: translateY(2%) scaleX(0.5) +} + +50% { + transform: translateY(0%) scaleX(1.1) +} + +60% { + transform: translateY(0%) scaleX(0.9) +} + +70% { + transform: translateY(0%) scaleX(1.05) +} + +80% { + transform: translateY(0%) scaleX(0.95) +} + +90% { + transform: translateY(0%) scaleX(1.02) +} + +100% { + transform: translateY(0%) scaleX(1) +} +} + +@-webkit-keyframes slideExpandUp { + 0% { + -webkit-transform: translateY(100%) scaleX(0.5) + } + + 30% { + -webkit-transform: translateY(-8%) scaleX(0.5) + } + + 40% { + -webkit-transform: translateY(2%) scaleX(0.5) + } + + 50% { + -webkit-transform: translateY(0%) scaleX(1.1) + } + + 60% { + -webkit-transform: translateY(0%) scaleX(0.9) + } + + 70% { + -webkit-transform: translateY(0%) scaleX(1.05) + } + + 80% { + -webkit-transform: translateY(0%) scaleX(0.95) + } + + 90% { + -webkit-transform: translateY(0%) scaleX(1.02) + } + + 100% { + -webkit-transform: translateY(0%) scaleX(1) + } +} + +.expandUp { + animation-name: expandUp; + -webkit-animation-name: expandUp; + animation-duration: .7s; + -webkit-animation-duration: .7s; + animation-timing-function: ease; + -webkit-animation-timing-function: ease; + visibility: visible!important +} + +@keyframes expandUp { + 0% { + transform: translateY(100%) scale(0.6) scaleY(0.5) + } + + 60% { + transform: translateY(-7%) scaleY(1.12) + } + + 75% { + transform: translateY(3%) + } + + 100% { + transform: translateY(0%) scale(1) scaleY(1) + } +} + +@-webkit-keyframes expandUp { + 0% { + -webkit-transform: translateY(100%) scale(0.6) scaleY(0.5) + } + + 60% { + -webkit-transform: translateY(-7%) scaleY(1.12) + } + + 75% { + -webkit-transform: translateY(3%) + } + + 100% { + -webkit-transform: translateY(0%) scale(1) scaleY(1) + } +} + +.expandOpen { + animation-name: expandOpen; + -webkit-animation-name: expandOpen; + animation-duration: 1.2s; + -webkit-animation-duration: 1.2s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes expandOpen { + 0% { + transform: scale(1.8) + } + + 50% { + transform: scale(0.95) + } + + 80% { + transform: scale(1.05) + } + + 90% { + transform: scale(0.98) + } + + 100% { + transform: scale(1) + } +} + +@-webkit-keyframes expandOpen { + 0% { + -webkit-transform: scale(1.8) + } + + 50% { + -webkit-transform: scale(0.95) + } + + 80% { + -webkit-transform: scale(1.05) + } + + 90% { + -webkit-transform: scale(0.98) + } + + 100% { + -webkit-transform: scale(1) + } +} + +.bigEntrance { + animation-name: bigEntrance; + -webkit-animation-name: bigEntrance; + animation-duration: 1.6s; + -webkit-animation-duration: 1.6s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes bigEntrance { + 0% { + transform: scale(0.3) rotate(6deg) translateX(-30%) translateY(30%); + opacity: .2 + } + + 30% { + transform: scale(1.03) rotate(-2deg) translateX(2%) translateY(-2%); + opacity: 1 + } + + 45% { + transform: scale(0.98) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 60% { + transform: scale(1.01) rotate(-1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 75% { + transform: scale(0.99) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 90% { + transform: scale(1.01) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 100% { + transform: scale(1) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } +} + +@-webkit-keyframes bigEntrance { + 0% { + -webkit-transform: scale(0.3) rotate(6deg) translateX(-30%) translateY(30%); + opacity: .2 + } + + 30% { + -webkit-transform: scale(1.03) rotate(-2deg) translateX(2%) translateY(-2%); + opacity: 1 + } + + 45% { + -webkit-transform: scale(0.98) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 60% { + -webkit-transform: scale(1.01) rotate(-1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 75% { + -webkit-transform: scale(0.99) rotate(1deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 90% { + -webkit-transform: scale(1.01) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } + + 100% { + -webkit-transform: scale(1) rotate(0deg) translateX(0%) translateY(0%); + opacity: 1 + } +} + +.hatch { + animation-name: hatch; + -webkit-animation-name: hatch; + animation-duration: 2s; + -webkit-animation-duration: 2s; + animation-timing-function: ease-in-out; + -webkit-animation-timing-function: ease-in-out; + transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -webkit-transform-origin: 50% 100%; + visibility: visible!important +} + +@keyframes hatch { + 0% { + transform: rotate(0deg) scaleY(0.6) + } + + 20% { + transform: rotate(-2deg) scaleY(1.05) + } + + 35% { + transform: rotate(2deg) scaleY(1) + } + + 50% { + transform: rotate(-2deg) + } + + 65% { + transform: rotate(1deg) + } + + 80% { + transform: rotate(-1deg) + } + + 100% { + transform: rotate(0deg) + } +} + +@-webkit-keyframes hatch { + 0% { + -webkit-transform: rotate(0deg) scaleY(0.6) + } + + 20% { + -webkit-transform: rotate(-2deg) scaleY(1.05) + } + + 35% { + -webkit-transform: rotate(2deg) scaleY(1) + } + + 50% { + -webkit-transform: rotate(-2deg) + } + + 65% { + -webkit-transform: rotate(1deg) + } + + 80% { + -webkit-transform: rotate(-1deg) + } + + 100% { + -webkit-transform: rotate(0deg) + } +} + +.floating { + animation-name: floating; + -webkit-animation-name: floating; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes floating { + 0% { + transform: translateY(0%) + } + + 50% { + transform: translateY(8%) + } + + 100% { + transform: translateY(0%) + } +} + +@-webkit-keyframes floating { + 0% { + -webkit-transform: translateY(0%) + } + + 50% { + -webkit-transform: translateY(8%) + } + + 100% { + -webkit-transform: translateY(0%) + } +} + +.tossing { + animation-name: tossing; + -webkit-animation-name: tossing; + animation-duration: 2.5s; + -webkit-animation-duration: 2.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes tossing { + 0% { + transform: rotate(-4deg) + } + + 50% { + transform: rotate(4deg) + } + + 100% { + transform: rotate(-4deg) + } +} + +@-webkit-keyframes tossing { + 0% { + -webkit-transform: rotate(-4deg) + } + + 50% { + -webkit-transform: rotate(4deg) + } + + 100% { + -webkit-transform: rotate(-4deg) + } +} + +.pullUp { + animation-name: pullUp; + -webkit-animation-name: pullUp; + animation-duration: 1.1s; + -webkit-animation-duration: 1.1s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -webkit-transform-origin: 50% 100% +} + +@keyframes pullUp { + 0% { + transform: scaleY(0.1) + } + + 40% { + transform: scaleY(1.02) + } + + 100%,60% { + transform: scaleY(0.98) + } + + 80% { + transform: scaleY(1.01) + } + + 100% { + transform: scaleY(1) + } +} + +@-webkit-keyframes pullUp { + 0% { + -webkit-transform: scaleY(0.1) + } + + 40% { + -webkit-transform: scaleY(1.02) + } + + 100%,60% { + -webkit-transform: scaleY(0.98) + } + + 80% { + -webkit-transform: scaleY(1.01) + } + + 100% { + -webkit-transform: scaleY(1) + } +} + +.pullDown { + animation-name: pullDown; + -webkit-animation-name: pullDown; + animation-duration: 1.1s; + -webkit-animation-duration: 1.1s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + -webkit-transform-origin: 50% 0 +} + +@keyframes pullDown { + 0% { + transform: scaleY(0.1) + } + + 40% { + transform: scaleY(1.02) + } + + 100%,60% { + transform: scaleY(0.98) + } + + 80% { + transform: scaleY(1.01) + } + + 100% { + transform: scaleY(1) + } +} + +@-webkit-keyframes pullDown { + 0% { + -webkit-transform: scaleY(0.1) + } + + 40% { + -webkit-transform: scaleY(1.02) + } + + 100%,60% { + -webkit-transform: scaleY(0.98) + } + + 80% { + -webkit-transform: scaleY(1.01) + } + + 100% { + -webkit-transform: scaleY(1) + } +} + +.stretchLeft { + animation-name: stretchLeft; + -webkit-animation-name: stretchLeft; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + -webkit-transform-origin: 100% 0 +} + +@keyframes stretchLeft { + 0% { + transform: scaleX(0.3) + } + + 40% { + transform: scaleX(1.02) + } + + 100%,60% { + transform: scaleX(0.98) + } + + 80% { + transform: scaleX(1.01) + } + + 100% { + transform: scaleX(1) + } +} + +@-webkit-keyframes stretchLeft { + 0% { + -webkit-transform: scaleX(0.3) + } + + 40% { + -webkit-transform: scaleX(1.02) + } + + 100%,60% { + -webkit-transform: scaleX(0.98) + } + + 80% { + -webkit-transform: scaleX(1.01) + } + + 100% { + -webkit-transform: scaleX(1) + } +} + +.stretchRight { + animation-name: stretchRight; + -webkit-animation-name: stretchRight; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + transform-origin: 0 0; + -ms-transform-origin: 0 0; + -webkit-transform-origin: 0 0 +} + +@keyframes stretchRight { + 0% { + transform: scaleX(0.3) + } + + 40% { + transform: scaleX(1.02) + } + + 100%,60% { + transform: scaleX(0.98) + } + + 80% { + transform: scaleX(1.01) + } + + 100% { + transform: scaleX(1) + } +} + +@-webkit-keyframes stretchRight { + 0% { + -webkit-transform: scaleX(0.3) + } + + 40% { + -webkit-transform: scaleX(1.02) + } + + 100%,60% { + -webkit-transform: scaleX(0.98) + } + + 80% { + -webkit-transform: scaleX(1.01) + } + + 100% { + -webkit-transform: scaleX(1) + } +} + +.pulseSlow { + animation-name: pulseSlow; + -webkit-animation-name: pulseSlow; + animation-duration: 30s; + -webkit-animation-duration: 30s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-animation-timing-function: linear +} + +@keyframes pulseSlow { + 0% { + transform: scale(1.1) + } + + 50% { + transform: scale(1) + } + + 100% { + transform: scale(1.1) + } +} + +@-webkit-keyframes pulseSlow { + 0% { + -webkit-transform: scale(1.1) + } + + 50% { + -webkit-transform: scale(1) + } + + 100% { + -webkit-transform: scale(1.1) + } +} + +.floatingHor { + animation-name: floatingHor; + -webkit-animation-name: floatingHor; + animation-duration: 1.5s; + -webkit-animation-duration: 1.5s; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite +} + +@keyframes floatingHor { + 0% { + transform: translateX(0%) + } + + 50% { + transform: translateX(8%) + } + + 100% { + transform: translateX(0%) + } +} + +@-webkit-keyframes floatingHor { + 0% { + -webkit-transform: translateX(0%) + } + + 50% { + -webkit-transform: translateX(8%) + } + + 100% { + -webkit-transform: translateX(0%) + } +} + +.fadeInQuick { + animation-name: fadeInQuick; + -webkit-animation-name: fadeInQuick; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick { + 0% { + transform: scale(0.9); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick { + 0% { + -webkit-transform: scale(0.9); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuickInv { + animation-name: fadeInQuickInv; + -webkit-animation-name: fadeInQuickInv; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuickInv { + 0% { + transform: scale(1.1); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuickInv { + 0% { + -webkit-transform: scale(1.1); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuick2 { + animation-name: fadeInQuick2; + -webkit-animation-name: fadeInQuick2; + animation-duration: .25s; + -webkit-animation-duration: .25s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick2 { + 0% { + transform: scale(.75); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick2 { + 0% { + -webkit-transform: scale(.75); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeInQuick2Inv { + animation-name: fadeInQuick2Inv; + -webkit-animation-name: fadeInQuick2Inv; + animation-duration: .25s; + -webkit-animation-duration: .25s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeInQuick2Inv { + 0% { + transform: scale(1.25); + opacity: 0 + } + + 100% { + transform: scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeInQuick2Inv { + 0% { + -webkit-transform: scale(1.25); + opacity: 0 + } + + 100% { + -webkit-transform: scale(1); + opacity: 1 + } +} + +.fadeIn360 { + animation-name: fadeIn360; + -webkit-animation-name: fadeIn360; + animation-duration: .5s; + -webkit-animation-duration: .5s; + animation-timing-function: ease-out; + -webkit-animation-timing-function: ease-out; + visibility: visible!important +} + +@keyframes fadeIn360 { + 0% { + transform: rotate(0deg) scale(1.3); + opacity: 0 + } + + 100% { + transform: rotate(360deg) scale(1); + opacity: 1 + } +} + +@-webkit-keyframes fadeIn360 { + 0% { + -webkit-transform: rotate(0deg) scale(1.3); + opacity: 0 + } + + 100% { + -webkit-transform: rotate(360deg) scale(1); + opacity: 1 + } +} + diff --git a/frontend/vendor/animo/animo.js b/frontend/vendor/animo/animo.js new file mode 100644 index 0000000..4e96502 --- /dev/null +++ b/frontend/vendor/animo/animo.js @@ -0,0 +1,323 @@ +;(function ( $, window, document, undefined ) { + + /*! + * animo is a powerful little tool that makes managing CSS animations extremely easy. Stack animations, set callbacks, make magic. + * Modern browsers and almost all mobile browsers support CSS animations (http://caniuse.com/css-animation). + * + * @author Daniel Raftery : twitter/ThrivingKings + * @version 1.0.2 + */ + function animo( element, options, callback, other_cb ) { + + // Default configuration + var defaults = { + duration: 1, + animation: null, + iterate: 1, + timing: "linear", + keep: false + }; + + // Browser prefixes for CSS + this.prefixes = ["", "-moz-", "-o-animation-", "-webkit-"]; + + // Cache the element + this.element = $(element); + + this.bare = element; + + // For stacking of animations + this.queue = []; + + // Hacky + this.listening = false; + + // Figure out where the callback is + var cb = (typeof callback == "function" ? callback : other_cb); + + // Options can sometimes be a command + switch(options) { + + case "blur": + + defaults = { + amount: 3, + duration: 0.5, + focusAfter: null + }; + + this.options = $.extend( defaults, callback ); + + this._blur(cb); + + break; + + case "focus": + + this._focus(); + + break; + + case "rotate": + + defaults = { + degrees: 15, + duration: 0.5 + }; + + this.options = $.extend( defaults, callback ); + + this._rotate(cb); + + break; + + case "cleanse": + + this.cleanse(); + + break; + + default: + + this.options = $.extend( defaults, options ); + + this.init(cb); + + break; + } + } + + animo.prototype = { + + // A standard CSS animation + init: function(callback) { + + var $me = this; + + // Are we stacking animations? + if(Object.prototype.toString.call( $me.options.animation ) === '[object Array]') { + $.merge($me.queue, $me.options.animation); + } else { + $me.queue.push($me.options.animation); + } + + $me.cleanse(); + + $me.animate(callback); + + }, + + // The actual adding of the class and listening for completion + animate: function(callback) { + + this.element.addClass('animated'); + + this.element.addClass(this.queue[0]); + + this.element.data("animo", this.queue[0]); + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"animation-duration", this.options.duration+"s"); + + this.element.css(this.prefixes[ai]+"animation-iteration-count", this.options.iterate); + + this.element.css(this.prefixes[ai]+"animation-timing-function", this.options.timing); + + } + + var $me = this, _cb = callback; + + if($me.queue.length>1) { + _cb = null; + } + + // Listen for the end of the animation + this._end("AnimationEnd", function() { + + // If there are more, clean it up and move on + if($me.element.hasClass($me.queue[0])) { + + if(!$me.options.keep) { + $me.cleanse(); + } + + $me.queue.shift(); + + if($me.queue.length) { + + $me.animate(callback); + } + } + }, _cb); + }, + + cleanse: function() { + + this.element.removeClass('animated'); + + this.element.removeClass(this.queue[0]); + + this.element.removeClass(this.element.data("animo")); + + var ai = this.prefixes.length; + + while(ai--) { + + this.element.css(this.prefixes[ai]+"animation-duration", ""); + + this.element.css(this.prefixes[ai]+"animation-iteration-count", ""); + + this.element.css(this.prefixes[ai]+"animation-timing-function", ""); + + this.element.css(this.prefixes[ai]+"transition", ""); + + this.element.css(this.prefixes[ai]+"transform", ""); + + this.element.css(this.prefixes[ai]+"filter", ""); + + } + }, + + _blur: function(callback) { + + if(this.element.is("img")) { + + var svg_id = "svg_" + (((1 + Math.random()) * 0x1000000) | 0).toString(16).substring(1); + var filter_id = "filter_" + (((1 + Math.random()) * 0x1000000) | 0).toString(16).substring(1); + + $('body').append(''); + + var ai = this.prefixes.length; + + while(ai--) { + + this.element.css(this.prefixes[ai]+"filter", "blur("+this.options.amount+"px)"); + + this.element.css(this.prefixes[ai]+"transition", this.options.duration+"s all linear"); + + } + + this.element.css("filter", "url(#"+filter_id+")"); + + this.element.data("svgid", svg_id); + + } else { + + var color = this.element.css('color'); + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", "all "+this.options.duration+"s linear"); + + } + + this.element.css("text-shadow", "0 0 "+this.options.amount+"px "+color); + this.element.css("color", "transparent"); + } + + this._end("TransitionEnd", null, callback); + + var $me = this; + + if(this.options.focusAfter) { + + var focus_wait = window.setTimeout(function() { + + $me._focus(); + + focus_wait = window.clearTimeout(focus_wait); + + }, (this.options.focusAfter*1000)); + } + + }, + + _focus: function() { + + var ai = this.prefixes.length; + + if(this.element.is("img")) { + + while(ai--) { + + this.element.css(this.prefixes[ai]+"filter", ""); + + this.element.css(this.prefixes[ai]+"transition", ""); + + } + + var $svg = $('#'+this.element.data('svgid')); + + $svg.remove(); + } else { + + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", ""); + + } + + this.element.css("text-shadow", ""); + this.element.css("color", ""); + } + }, + + _rotate: function(callback) { + + var ai = this.prefixes.length; + + // Add the options for each prefix + while(ai--) { + + this.element.css(this.prefixes[ai]+"transition", "all "+this.options.duration+"s linear"); + + this.element.css(this.prefixes[ai]+"transform", "rotate("+this.options.degrees+"deg)"); + + } + + this._end("TransitionEnd", null, callback); + + }, + + _end: function(type, todo, callback) { + + var $me = this; + + var binding = type.toLowerCase()+" webkit"+type+" o"+type+" MS"+type; + + this.element.bind(binding, function() { + + $me.element.unbind(binding); + + if(typeof todo == "function") { + + todo(); + } + + if(typeof callback == "function") { + + callback($me); + } + }); + + } + }; + + $.fn.animo = function ( options, callback, other_cb ) { + + return this.each(function() { + + new animo( this, options, callback, other_cb ); + + }); + + }; + +})( jQuery, window, document ); diff --git a/frontend/vendor/animo/animo.min.js b/frontend/vendor/animo/animo.min.js new file mode 100644 index 0000000..0b62324 --- /dev/null +++ b/frontend/vendor/animo/animo.min.js @@ -0,0 +1,9 @@ +(function(d,c,a,e){ +/*! + * animo is a powerful little tool that makes managing CSS animations extremely easy. Stack animations, set callbacks, make magic. + * Modern browsers and almost all mobile browsers support CSS animations (http://caniuse.com/css-animation). + * + * @author Daniel Raftery : twitter/ThrivingKings + * @version 1.0.2 + */ +;function b(i,h,k,g){var j={duration:1,animation:null,iterate:1,timing:"linear",keep:false};this.prefixes=["","-moz-","-o-animation-","-webkit-"];this.element=d(i);this.bare=i;this.queue=[];this.listening=false;var f=(typeof k=="function"?k:g);switch(h){case"blur":j={amount:3,duration:0.5,focusAfter:null};this.options=d.extend(j,k);this._blur(f);break;case"focus":this._focus();break;case"rotate":j={degrees:15,duration:0.5};this.options=d.extend(j,k);this._rotate(f);break;case"cleanse":this.cleanse();break;default:this.options=d.extend(j,h);this.init(f);break}}b.prototype={init:function(g){var f=this;if(Object.prototype.toString.call(f.options.animation)==="[object Array]"){d.merge(f.queue,f.options.animation)}else{f.queue.push(f.options.animation)}f.cleanse();f.animate(g)},animate:function(i){this.element.addClass("animated");this.element.addClass(this.queue[0]);this.element.data("animo",this.queue[0]);var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"animation-duration",this.options.duration+"s");this.element.css(this.prefixes[f]+"animation-iteration-count",this.options.iterate);this.element.css(this.prefixes[f]+"animation-timing-function",this.options.timing)}var h=this,g=i;if(h.queue.length>1){g=null}this._end("AnimationEnd",function(){if(h.element.hasClass(h.queue[0])){if(!h.options.keep){h.cleanse()}h.queue.shift();if(h.queue.length){h.animate(i)}}},g)},cleanse:function(){this.element.removeClass("animated");this.element.removeClass(this.queue[0]);this.element.removeClass(this.element.data("animo"));var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"animation-duration","");this.element.css(this.prefixes[f]+"animation-iteration-count","");this.element.css(this.prefixes[f]+"animation-timing-function","");this.element.css(this.prefixes[f]+"transition","");this.element.css(this.prefixes[f]+"transform","");this.element.css(this.prefixes[f]+"filter","")}},_blur:function(l){if(this.element.is("img")){var h="svg_"+(((1+Math.random())*16777216)|0).toString(16).substring(1);var k="filter_"+(((1+Math.random())*16777216)|0).toString(16).substring(1);d("body").append('');var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"filter","blur("+this.options.amount+"px)");this.element.css(this.prefixes[f]+"transition",this.options.duration+"s all linear")}this.element.css("filter","url(#"+k+")");this.element.data("svgid",h)}else{var g=this.element.css("color");var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"transition","all "+this.options.duration+"s linear")}this.element.css("text-shadow","0 0 "+this.options.amount+"px "+g);this.element.css("color","transparent")}this._end("TransitionEnd",null,l);var i=this;if(this.options.focusAfter){var j=c.setTimeout(function(){i._focus();j=c.clearTimeout(j)},(this.options.focusAfter*1000))}},_focus:function(){var f=this.prefixes.length;if(this.element.is("img")){while(f--){this.element.css(this.prefixes[f]+"filter","");this.element.css(this.prefixes[f]+"transition","")}var g=d("#"+this.element.data("svgid"));g.remove()}else{while(f--){this.element.css(this.prefixes[f]+"transition","")}this.element.css("text-shadow","");this.element.css("color","")}},_rotate:function(g){var f=this.prefixes.length;while(f--){this.element.css(this.prefixes[f]+"transition","all "+this.options.duration+"s linear");this.element.css(this.prefixes[f]+"transform","rotate("+this.options.degrees+"deg)")}this._end("TransitionEnd",null,g)},_end:function(h,f,j){var g=this;var i=h.toLowerCase()+" webkit"+h+" o"+h+" MS"+h;this.element.bind(i,function(){g.element.unbind(i);if(typeof f=="function"){f()}if(typeof j=="function"){j(g)}})}};d.fn.animo=function(g,h,f){return this.each(function(){new b(this,g,h,f)})}})(jQuery,window,document); \ No newline at end of file diff --git a/frontend/vendor/bootstrap/css/bootstrap-theme.css b/frontend/vendor/bootstrap/css/bootstrap-theme.css new file mode 100644 index 0000000..a031303 --- /dev/null +++ b/frontend/vendor/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,347 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 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: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: 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-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.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: 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: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + 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 { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', 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: 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 { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', 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; +} +.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: 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: 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: 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: 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: 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, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + 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: 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: 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: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.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 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.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: 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, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + 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: 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: 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: 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: 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/frontend/vendor/bootstrap/css/bootstrap-theme.css.map b/frontend/vendor/bootstrap/css/bootstrap-theme.css.map new file mode 100644 index 0000000..b36fc9a --- /dev/null +++ b/frontend/vendor/bootstrap/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"AAeA;AACA;AACA;AACA;AACA;AACA;EACE,wCAAA;ECoGA,2FAAA;EACQ,mFAAA;;ADhGR,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;AACD,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;EC8FD,wDAAA;EACQ,gDAAA;;ADnER,IAAC;AACD,IAAC;EACC,sBAAA;;AAKJ;EC4PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;EAyB2C,yBAAA;EAA2B,kBAAA;;AAvBtE,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAeJ;EC2PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAgBJ;EC0PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAiBJ;ECyPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,SAAC;AACD,SAAC;EACC,yBAAA;EACA,qBAAA;;AAkBJ;ECwPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAmBJ;ECuPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,WAAC;AACD,WAAC;EACC,yBAAA;EACA,qBAAA;;AA2BJ;AACA;EC6CE,kDAAA;EACQ,0CAAA;;ADpCV,cAAe,KAAK,IAAG;AACvB,cAAe,KAAK,IAAG;ECmOnB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDpOF,yBAAA;;AAEF,cAAe,UAAU;AACzB,cAAe,UAAU,IAAG;AAC5B,cAAe,UAAU,IAAG;EC6NxB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9NF,yBAAA;;AAUF;ECiNI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;EDrPA,kBAAA;ECaA,2FAAA;EACQ,mFAAA;;ADjBV,eAOE,YAAY,UAAU;EC0MpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,wDAAA;EACQ,gDAAA;;ADLV;AACA,WAAY,KAAK;EACf,8CAAA;;AAIF;EC+LI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;;ADtOF,eAIE,YAAY,UAAU;EC2LpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,uDAAA;EACQ,+CAAA;;ADCV,eASE;AATF,eAUE,YAAY,KAAK;EACf,yCAAA;;AAKJ;AACA;AACA;EACE,gBAAA;;AAUF;EACE,6CAAA;EChCA,0FAAA;EACQ,kFAAA;;AD2CV;ECqJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAKF;ECoJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAMF;ECmJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAOF;ECkJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAgBF;ECyII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADlIJ;EC+HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADjIJ;EC8HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADhIJ;EC6HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD/HJ;EC4HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD9HJ;EC2HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtHJ;EACE,kBAAA;EC/EA,kDAAA;EACQ,0CAAA;;ADiFV,gBAAgB;AAChB,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;EACrB,6BAAA;EC4GE,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED7GF,qBAAA;;AAUF;ECjGE,iDAAA;EACQ,yCAAA;;AD0GV,cAAe;ECsFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxFJ,cAAe;ECqFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADvFJ,cAAe;ECoFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtFJ,WAAY;ECmFR,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADrFJ,cAAe;ECkFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADpFJ,aAAc;ECiFV,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD5EJ;ECyEI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED1EF,qBAAA;EC1HA,yFAAA;EACQ,iFAAA","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\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\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\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\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//\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//\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//\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 > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-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\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-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\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//\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\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\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//\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","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\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\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\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 the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-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-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// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\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// Animations\n.animation(@animation) {\n -webkit-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\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.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\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// User select\n// For selecting text on the page\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\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\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// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\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, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\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: 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: 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: 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: 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: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\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.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\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\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\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// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\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 &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\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\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 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 @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\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\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\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\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) when (@index = 1) { // 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) when (@index = 1) { // 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) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\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// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
      `.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\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  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\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  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\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: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\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: 200;\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: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\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\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@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\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-transform: 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// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\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  white-space: nowrap;\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\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","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  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-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\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    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\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/10 (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/10 (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@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\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","//\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: -webkit-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  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;\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    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\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 date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\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: 15px;\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  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\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  float: left;\n  margin-left: -20px;\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  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//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\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 {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\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\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\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) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\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}.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                   { &: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","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\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-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-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\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; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .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      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\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: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
        ,
          , or
          .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\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","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\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 > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} \ No newline at end of file diff --git a/frontend/vendor/bootstrap/css/bootstrap.min.css b/frontend/vendor/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..0ed4ee2 --- /dev/null +++ b/frontend/vendor/bootstrap/css/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]: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}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-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:62.5%;-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:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;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{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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:400;line-height:1;color:#999}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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.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:#428bca}a.bg-primary:hover{background-color:#3071a9}.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;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.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.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.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.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.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}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,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{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .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;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;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: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:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.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: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:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;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: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:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;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: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:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;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: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:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;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: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{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;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%;padding-left:0;padding-right:0}.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;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:400;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{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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.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-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-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.33;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:400;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-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#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:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.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);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .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;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.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:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;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;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.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-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#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:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.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:#428bca;-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;transition:width .6s ease}.progress-striped .progress-bar{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:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}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{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{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}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child 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 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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.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;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix: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{content:" ";display:table}.clearfix: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-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{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 (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: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: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 (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}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..4a4ca86 Binary files /dev/null and b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..3e09a1c --- /dev/null +++ b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/frontend/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/frontend/vendor/bootstrap/js/bootstrap.js b/frontend/vendor/bootstrap/js/bootstrap.js new file mode 100644 index 0000000..721101b --- /dev/null +++ b/frontend/vendor/bootstrap/js/bootstrap.js @@ -0,0 +1,1951 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } + +/* ======================================================================== + * Bootstrap: transition.js v3.1.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd', + 'MozTransition' : 'transitionend', + 'OTransition' : 'oTransitionEnd otransitionend', + 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.1.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.1.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.1.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return this.sliding = false + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid.bs.carousel', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid.bs.carousel') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.1.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.1.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(' + +
          + + + + +
      + +
      + + + + \ No newline at end of file diff --git a/frontend/views/dashboard.html b/frontend/views/dashboard.html new file mode 100644 index 0000000..5acd64b --- /dev/null +++ b/frontend/views/dashboard.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
      +
      +
      +
      +

      DASHBOARD +
      + Server Status +

      +
      + +
      +
      +
      + + + + + + + + + + + + + +
      Server NameLast ChangedStatus
      No Server
      +
      +
      +
      + + + add cloud +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/priceview.html b/frontend/views/priceview.html new file mode 100644 index 0000000..5641ae0 --- /dev/null +++ b/frontend/views/priceview.html @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
      +
      + + +
      +
      +

      BILLING +
      + Make Payment +

      +
      + +
      +
      + + +
      + +
      +
      +
      +
      + +
      +

      0

      +

      KRW

      +
      +
      +
      +
      + +
      +
      +
      + +
      + +
      +
      +
      +
      + +
      + +
      +
      + +
      + +
      +
      +
      +
      + +
      +
      +
      + +
      + +
      +
      +
      +
      + + + + + + + + +
      +
      + +
      +
      +
      + + +
      +
      +

      이번달 사용 비용

      +

      0원

      +
      +
      +

      총 비용

      +

      0원

      +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      InfoDatePriceServers QtySummaryStatus
      Mark2021-02-06 12:33$20.00/month1$20.00/monthOK
      Otto45분전$30.00/month1$30.00/monthNOPE
      @mdo28 days 8 hours$20.00/month2$40.00/monthOk
      +
      +
      +
      + + + + + + +
      + +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/security_detail.html b/frontend/views/security_detail.html new file mode 100644 index 0000000..e1c134b --- /dev/null +++ b/frontend/views/security_detail.html @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
      +
      + +
      +
      +

      SECURITY +
      + Security Detail +

      +
      + +
      +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      ProtocolFromPortToportCidrDetailActions
      TCP22220.0.0.0/0SSH 접속 + +
      TCP22220.0.0.0/0SSH 접속 + +
      TCP80800.0.0.0/0WEB Port + + +
      TCP443800.0.0.0/0Web HTTPS port + +
      UDP4414410.0.0.0/0UDP + +
      +
      +
      +
      +
      + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/security_edit.html b/frontend/views/security_edit.html new file mode 100644 index 0000000..75d1918 --- /dev/null +++ b/frontend/views/security_edit.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
      +
      + +
      +
      +
      +
      Security Rule Detail
      +
      + +
      +
      +
      + +
      + + +
      +
      +
      + +
      + +
      + +
      +
      +
      + +
      + +
      +
      + + +
      + +
      + +
      +
      + +
      + +
      + +
      +
      + + + + +
      +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/security_group.html b/frontend/views/security_group.html new file mode 100644 index 0000000..2fa6204 --- /dev/null +++ b/frontend/views/security_group.html @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + +
      +
      +
      +
      +

      SECURITY +
      + Security Group +

      +
      +
      +
      +
      +
      + + + + + + + + + + + + + + + + +
      SecurityGroup NameGroup IDStatus
      Group 1hj-23None
      +
      +
      +
      +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/setting.html b/frontend/views/setting.html new file mode 100644 index 0000000..a5055c2 --- /dev/null +++ b/frontend/views/setting.html @@ -0,0 +1,67 @@ + + + + + Account Settings + + + + + + + + + + + + + + + +
      + +
      +
      +
      + +
      +
      Account Settings
      +
      +
      +
      + + +
      + +
      + + +
      +
      + + +
      + +
      + + +
      + + +
      +
      +
      + +
      +
      + + +
      +
      + + + + + + + \ No newline at end of file diff --git a/frontend/views/support.html b/frontend/views/support.html new file mode 100644 index 0000000..951e2ce --- /dev/null +++ b/frontend/views/support.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + +
      +
      +
      +
      +

      SUPPORT +
      + Support Page +

      +
      +
      +
      +
      +
      + + + + + + + + + + + + + + + + + +
      ID제목날짜상태
      1서버 재부팅 에러 문제03월 11일 (목)대기 중
      +
      +
      +
      + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/supportAdd.html b/frontend/views/supportAdd.html new file mode 100644 index 0000000..787e4de --- /dev/null +++ b/frontend/views/supportAdd.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + +
      +
      +
      +
      +

      SUPPORT +
      + Support Add +

      +
      +
      +
      +
      +
      + +
      + +
      +
      +
      +
      +
      + +
      + +
      +
      + +
      + +
      +
      +
      +
      + +
      + +
      + +
      + +
      +
      + +
      +
      + +
      +
      + + + +
      +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/supportDetail.html b/frontend/views/supportDetail.html new file mode 100644 index 0000000..d793c48 --- /dev/null +++ b/frontend/views/supportDetail.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + + +
      +
      +
      +
      +

      SUPPORT +
      + Support Detail +

      +
      +
      +
      +
      +
      + +
      + +
      +
      +
      + + +
      +
      +
      + +
      +
      +
      +
      +
      + +
      +
      +
      + +
      +
      + +
      +
      +
      + + + + +
      +
      +
      + +
      +
      +
      + + +
      +
      +
      + +
      +
      +
      +
      2021/03/14 19:05:44
      +

      기술 엔지니어

      +

      + 서버관련질문 +

      +
      +
      + 안녕하세요 JENNY 님. 대시보드 - Cloud list 에서 CentOS 로 재설치해야 할 것 같습니다. +
      +
      +
      + + +
      +
      +
      + +
      +
      +
      +
      2021/03/14 10:35:14
      +

      JENNY

      +

      + 서버관련질문 +

      +
      +
      + 리눅스 ls - al 을 입력하는 도중에 command not found 라는 오류가 나타났습니다. 리눅스에 파일이 손상된 거 같습니다. 수정 부탁드립니다. +
      +
      +
      + + +
      +
      +
      + + + + \ No newline at end of file diff --git a/frontend/views/viewtemplate.html b/frontend/views/viewtemplate.html new file mode 100644 index 0000000..449fe4b --- /dev/null +++ b/frontend/views/viewtemplate.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + Wintermin - Bootstrap Admin Theme + + + + +
      +
      + +
      +
      + + + + \ No newline at end of file diff --git "a/\354\244\221\352\260\204\353\260\234\355\221\234 (1).pdf" "b/\354\244\221\352\260\204\353\260\234\355\221\234 (1).pdf" new file mode 100644 index 0000000..f9708ad Binary files /dev/null and "b/\354\244\221\352\260\204\353\260\234\355\221\234 (1).pdf" differ