diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..82405b9 --- /dev/null +++ b/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": ["es2015", "stage-0"], + "plugins": [ + ["transform-runtime", { + "polyfill": false, + "regenerator": true + }] + ] +} diff --git a/.gitignore b/.gitignore index 62117b1..4782dfb 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,9 @@ calls.json # Ignore research files. research/ + +# Ignore lib file. +lib/ + +# Ignore Jekyll site folder. +_site/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..8eba6c8 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +src/ diff --git a/DOCS.md b/DOCS.md index 42480b6..c744b2c 100644 --- a/DOCS.md +++ b/DOCS.md @@ -1,5 +1,7 @@ # Documentation +**Documentation is outdated and still a work in progress. This is expected to be finished by release v2.1.0** + Every call to any `fritz` function should include the `options` object. The domain (or IP address) can differ with your local network setup. If your Fritz!Box does not require a username while logging in, you can simply leave that field blank. ```js { @@ -10,15 +12,21 @@ Every call to any `fritz` function should include the `options` object. The doma } ``` -All functions of the FritzBox.js API are [Promise](http://www.datchley.name/es6-promises)-based. +All functions of the FritzBox.js API are ES7 [async/await](https://davidwalsh.name/async-generators#es7-async) Promise-based. + ```js -fritz.functionName(parameter1, parameter2, ...) -.then((result) => { - // do something with the result. -}) -.catch((error) => { - // do something with the error. -}) +async function main() { + const result = await fritz.functionName(parameter1, parameter2, ...) + + if (result.error) { + // deal with the error object. + return console.log(result.error.message) + } + + // deal with the result object. + // ... +} +main() ``` ## Available functions diff --git a/LICENSE b/LICENSE index 9c02d00..d64820d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,5 @@ +FritzBox.js + MIT License Copyright (c) 2017 Sander Laarhoven @@ -19,3 +21,28 @@ 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. + +-------------------------------------------------------------------------------- + +fritzbox-callmonitor + +The MIT License (MIT) + +Copyright (c) 2013 Thorsten Basse + +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/README.md b/README.md index 1fcaaf4..f628d28 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,30 @@ # FritzBox.js [![GitHub release](https://img.shields.io/github/release/lesander/fritzbox.js.svg?maxAge=1)]() -[![Completion Status](https://img.shields.io/badge/completion-45%25-yellowgreen.svg)]() +[![Completion Status](https://img.shields.io/badge/completion-70%25-green.svg)]() [![Build Status](https://travis-ci.org/lesander/fritzbox.js.svg?branch=master&cache=pls)](https://travis-ci.org/lesander/fritzbox.js) - [![npm](https://img.shields.io/npm/dt/fritzbox.js.svg?maxAge=1)]() - [![Code Climate](https://codeclimate.com/github/lesander/fritzbox.js/badges/gpa.svg)](https://codeclimate.com/github/lesander/fritzbox.js) [![BCH compliance](https://bettercodehub.com/edge/badge/lesander/fritzbox.js?maxAge=-1)](https://bettercodehub.com) +The most powerful, simple and complete [AVM](https://avm.de) Fritz!Box [API](https://avm.de/Schnittstellen). - -The most powerful, simple and complete AVM Fritz!Box API. **This project is still a work in progress.** Written in Node.js +**This project is still a work in progress. [See issue #1 for the current status.](https://github.com/lesander/fritzbox.js/issues/1)** ## Getting Started -This module is written in ECMAscript 2015 [ES6](https://github.com/mjavascript/practical-es6) and is promise-based. You should use the latest version (`^7.0.0`) of NodeJS. +This module is future-proof and uses async/await promises. + +This means that you need to run NodeJS version `7.6.0` or newer. If your NodeJS version is between `7.0.0` and `7.5.0` you can use the harmony flag `--harmony-async-await` to make use of the async/await promises. + +This package was tested on Fritz!Box 7390 and 7490, with firmware versions `6.53`, `6.51` and `6.83`. + +## Installing -This package was tested on Fritz!Box 7390 and 7490 with firmware versions `6.53` and `6.51`. ``` npm install fritzbox.js ``` +## Usage + A simple example showing how to get the history of calls made with a [Fritz!Fon](https://en.avm.de/products/fritzfon) can be seen below. ```js @@ -30,6 +35,32 @@ const options = { server: 'fritz.box', protocol: 'https' } +;(async () => { + + const calls = await fritz.getCalls(options) + if (calls.error) return console.log('Error: ' + calls.error.message) + console.log('Got ' + calls.length + 'calls.') + +})() +``` + +To minimize overhead and limit login requests made to the Fritz!Box it is recommended to store the SID once one has been obtained using [`fritz.getSessionId`](http://localhost:9000/api/#fritzLogin.getSessionId). + +## Documentation +Want to get started with FritzBox.js? Cool! The API is +[documented and available here](https://lesander.github.io/fritzbox.js/api), and you can +[see some examples](/test) in the `test/` folder. + +## Contributing +If you'd like to contribute to FritzBox.js, or file a bug or feature request, +please head over to [the issue tracker](/issues) or [open a pull request](/pulls). + +## Migrating from 1.x.x to 2.x.x +FritzBox.js v2.x is not backwards compatible with v1.x. +One of the mayor changes includes the switch to `async/await` Promises. +In v1.x, Promises were implemented with a `then`, `catch`: + +```js fritz.getCalls(options) .then((callHistory) => { console.log(callHistory) @@ -37,24 +68,33 @@ fritz.getCalls(options) .catch((error) => { console.log(error) }) +``` + +With v2.x, the `catch` will no longer catch any errors, since the module is now +built to provide support for `await`. Any errors will be passed along like this: +```js +fritz.getCalls(options) +.then((callHistory) => { + if (callHistory.error) return console.log(error) + console.log(callHistory) +}) ``` -## Documentation -Want to get started with FritzBox.js? Cool! The API is -[documented and available here](/DOCS.md), and you can -[see some examples](/test) in the `test/` folder. +Of course, this can be simplified using `await`: -## Contributing -If you'd like to contribute to FritzBox.js, or file a bug or feature request, -please head over to [the issue tracker](/issues) or [open a pull request](/pulls). +```js +let callHistory = await fritz.getCalls(options) +if (callHistory.error) return console.log(error) +console.log(callHistory) +``` + +Note that any Promise waiting to be fulfilled using `await` should be put inside an `async` function. +For more changes, please see the [roadmap](https://github.com/lesander/fritzbox.js/issues/1). ## License This software is open-sourced under the MIT License ([see the LICENSE file for -the full license](/LICENSE)). So within some limits, you can do with the code whatever -you want. However, if you like and/or want to re-use it, I'd really appreciate -a reference to this project page. +the full license](/LICENSE)). -The software is provided as is. It might work as expected - or not. -Just don't blame me. +You are required to include a copy of this project's license and copyright notice in your modified or distributed version of FritzBox.js diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..2ed8471 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,4 @@ +version: '2.0.0' +collections: + - examples +highlighter: pygments diff --git a/docs/_includes/head.html b/docs/_includes/head.html new file mode 100644 index 0000000..e1f98f1 --- /dev/null +++ b/docs/_includes/head.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/_includes/scripts.html b/docs/_includes/scripts.html new file mode 100644 index 0000000..e3c0988 --- /dev/null +++ b/docs/_includes/scripts.html @@ -0,0 +1,2 @@ + + diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..a7c8dc6 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,11 @@ + + + + {{ page.title }} + {% include head.html %} + + + {{ content }} + + {% include scripts.html %} + diff --git a/docs/api/assets/anchor.js b/docs/api/assets/anchor.js new file mode 100644 index 0000000..47d871a --- /dev/null +++ b/docs/api/assets/anchor.js @@ -0,0 +1,197 @@ +/*! + * AnchorJS - v1.2.1 - 2015-07-02 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2015 Bryan Braun; Licensed MIT + */ + +function AnchorJS(options) { + 'use strict'; + + this.options = options || {}; + + this._applyRemainingDefaultOptions = function(opts) { + this.options.icon = this.options.hasOwnProperty('icon') ? opts.icon : '\ue9cb'; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. + this.options.visible = this.options.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always' + this.options.placement = this.options.hasOwnProperty('placement') ? opts.placement : 'right'; // Also accepts 'left' + this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. + }; + + this._applyRemainingDefaultOptions(options); + + this.add = function(selector) { + var elements, + elsWithIds, + idList, + elementID, + i, + roughText, + tidyText, + index, + count, + newTidyText, + readableID, + anchor; + + this._applyRemainingDefaultOptions(this.options); + + // Provide a sensible default selector, if none is given. + if (!selector) { + selector = 'h1, h2, h3, h4, h5, h6'; + } else if (typeof selector !== 'string') { + throw new Error('The selector provided to AnchorJS was invalid.'); + } + + elements = document.querySelectorAll(selector); + if (elements.length === 0) { + return false; + } + + this._addBaselineStyles(); + + // We produce a list of existing IDs so we don't generate a duplicate. + elsWithIds = document.querySelectorAll('[id]'); + idList = [].map.call(elsWithIds, function assign(el) { + return el.id; + }); + + for (i = 0; i < elements.length; i++) { + + if (elements[i].hasAttribute('id')) { + elementID = elements[i].getAttribute('id'); + } else { + roughText = elements[i].textContent; + + // Refine it so it makes a good ID. Strip out non-safe characters, replace + // spaces with hyphens, truncate to 32 characters, and make toLowerCase. + // + // Example string: // '⚡⚡⚡ Unicode icons are cool--but they definitely don't belong in a URL fragment.' + tidyText = roughText.replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but they definitely dont belong in a URL fragment' + .replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-they-definitely-dont-belong-in-a-URL-fragment' + .replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL-fragment' + .substring(0, 64) // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' + .replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' + .toLowerCase(); // 'unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-url' + + // Compare our generated ID to existing IDs (and increment it if needed) + // before we add it to the page. + newTidyText = tidyText; + count = 0; + do { + if (index !== undefined) { + newTidyText = tidyText + '-' + count; + } + // .indexOf is supported in IE9+. + index = idList.indexOf(newTidyText); + count += 1; + } while (index !== -1); + index = undefined; + idList.push(newTidyText); + + // Assign it to our element. + // Currently the setAttribute element is only supported in IE9 and above. + elements[i].setAttribute('id', newTidyText); + + elementID = newTidyText; + } + + readableID = elementID.replace(/-/g, ' '); + + // The following code builds the following DOM structure in a more effiecient (albeit opaque) way. + // ''; + anchor = document.createElement('a'); + anchor.className = 'anchorjs-link ' + this.options.class; + anchor.href = '#' + elementID; + anchor.setAttribute('aria-label', 'Anchor link for: ' + readableID); + anchor.setAttribute('data-anchorjs-icon', this.options.icon); + + if (this.options.visible === 'always') { + anchor.style.opacity = '1'; + } + + if (this.options.icon === '\ue9cb') { + anchor.style.fontFamily = 'anchorjs-icons'; + anchor.style.fontStyle = 'normal'; + anchor.style.fontVariant = 'normal'; + anchor.style.fontWeight = 'normal'; + anchor.style.lineHeight = 1; + } + + if (this.options.placement === 'left') { + anchor.style.position = 'absolute'; + anchor.style.marginLeft = '-1em'; + anchor.style.paddingRight = '0.5em'; + elements[i].insertBefore(anchor, elements[i].firstChild); + } else { // if the option provided is `right` (or anything else). + anchor.style.paddingLeft = '0.375em'; + elements[i].appendChild(anchor); + } + } + + return this; + }; + + this.remove = function(selector) { + var domAnchor, + elements = document.querySelectorAll(selector); + for (var i = 0; i < elements.length; i++) { + domAnchor = elements[i].querySelector('.anchorjs-link'); + if (domAnchor) { + elements[i].removeChild(domAnchor); + } + } + return this; + }; + + this._addBaselineStyles = function() { + // We don't want to add global baseline styles if they've been added before. + if (document.head.querySelector('style.anchorjs') !== null) { + return; + } + + var style = document.createElement('style'), + linkRule = + ' .anchorjs-link {' + + ' opacity: 0;' + + ' text-decoration: none;' + + ' -webkit-font-smoothing: antialiased;' + + ' -moz-osx-font-smoothing: grayscale;' + + ' }', + hoverRule = + ' *:hover > .anchorjs-link,' + + ' .anchorjs-link:focus {' + + ' opacity: 1;' + + ' }', + anchorjsLinkFontFace = + ' @font-face {' + + ' font-family: "anchorjs-icons";' + + ' font-style: normal;' + + ' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above + ' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' + + ' }', + pseudoElContent = + ' [data-anchorjs-icon]::after {' + + ' content: attr(data-anchorjs-icon);' + + ' }', + firstStyleEl; + + style.className = 'anchorjs'; + style.appendChild(document.createTextNode('')); // Necessary for Webkit. + + // We place it in the head with the other style tags, if possible, so as to + // not look out of place. We insert before the others so these styles can be + // overridden if necessary. + firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); + if (firstStyleEl === undefined) { + document.head.appendChild(style); + } else { + document.head.insertBefore(style, firstStyleEl); + } + + style.sheet.insertRule(linkRule, style.sheet.cssRules.length); + style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); + style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); + style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); + }; +} + +var anchors = new AnchorJS(); diff --git a/docs/api/assets/bass-addons.css b/docs/api/assets/bass-addons.css new file mode 100644 index 0000000..c27e96d --- /dev/null +++ b/docs/api/assets/bass-addons.css @@ -0,0 +1,12 @@ +.input { + font-family: inherit; + display: block; + width: 100%; + height: 2rem; + padding: .5rem; + margin-bottom: 1rem; + border: 1px solid #ccc; + font-size: .875rem; + border-radius: 3px; + box-sizing: border-box; +} diff --git a/docs/api/assets/bass.css b/docs/api/assets/bass.css new file mode 100644 index 0000000..15e0dc9 --- /dev/null +++ b/docs/api/assets/bass.css @@ -0,0 +1,543 @@ +/*! Basscss | http://basscss.com | MIT License */ + +.h1{ font-size: 2rem } +.h2{ font-size: 1.5rem } +.h3{ font-size: 1.25rem } +.h4{ font-size: 1rem } +.h5{ font-size: .875rem } +.h6{ font-size: .75rem } + +.font-family-inherit{ font-family:inherit } +.font-size-inherit{ font-size:inherit } +.text-decoration-none{ text-decoration:none } + +.bold{ font-weight: bold; font-weight: bold } +.regular{ font-weight:normal } +.italic{ font-style:italic } +.caps{ text-transform:uppercase; letter-spacing: .2em; } + +.left-align{ text-align:left } +.center{ text-align:center } +.right-align{ text-align:right } +.justify{ text-align:justify } + +.nowrap{ white-space:nowrap } +.break-word{ word-wrap:break-word } + +.line-height-1{ line-height: 1 } +.line-height-2{ line-height: 1.125 } +.line-height-3{ line-height: 1.25 } +.line-height-4{ line-height: 1.5 } + +.list-style-none{ list-style:none } +.underline{ text-decoration:underline } + +.truncate{ + max-width:100%; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; +} + +.list-reset{ + list-style:none; + padding-left:0; +} + +.inline{ display:inline } +.block{ display:block } +.inline-block{ display:inline-block } +.table{ display:table } +.table-cell{ display:table-cell } + +.overflow-hidden{ overflow:hidden } +.overflow-scroll{ overflow:scroll } +.overflow-auto{ overflow:auto } + +.clearfix:before, +.clearfix:after{ + content:" "; + display:table +} +.clearfix:after{ clear:both } + +.left{ float:left } +.right{ float:right } + +.fit{ max-width:100% } + +.max-width-1{ max-width: 24rem } +.max-width-2{ max-width: 32rem } +.max-width-3{ max-width: 48rem } +.max-width-4{ max-width: 64rem } + +.border-box{ box-sizing:border-box } + +.align-baseline{ vertical-align:baseline } +.align-top{ vertical-align:top } +.align-middle{ vertical-align:middle } +.align-bottom{ vertical-align:bottom } + +.m0{ margin:0 } +.mt0{ margin-top:0 } +.mr0{ margin-right:0 } +.mb0{ margin-bottom:0 } +.ml0{ margin-left:0 } +.mx0{ margin-left:0; margin-right:0 } +.my0{ margin-top:0; margin-bottom:0 } + +.m1{ margin: .5rem } +.mt1{ margin-top: .5rem } +.mr1{ margin-right: .5rem } +.mb1{ margin-bottom: .5rem } +.ml1{ margin-left: .5rem } +.mx1{ margin-left: .5rem; margin-right: .5rem } +.my1{ margin-top: .5rem; margin-bottom: .5rem } + +.m2{ margin: 1rem } +.mt2{ margin-top: 1rem } +.mr2{ margin-right: 1rem } +.mb2{ margin-bottom: 1rem } +.ml2{ margin-left: 1rem } +.mx2{ margin-left: 1rem; margin-right: 1rem } +.my2{ margin-top: 1rem; margin-bottom: 1rem } + +.m3{ margin: 2rem } +.mt3{ margin-top: 2rem } +.mr3{ margin-right: 2rem } +.mb3{ margin-bottom: 2rem } +.ml3{ margin-left: 2rem } +.mx3{ margin-left: 2rem; margin-right: 2rem } +.my3{ margin-top: 2rem; margin-bottom: 2rem } + +.m4{ margin: 4rem } +.mt4{ margin-top: 4rem } +.mr4{ margin-right: 4rem } +.mb4{ margin-bottom: 4rem } +.ml4{ margin-left: 4rem } +.mx4{ margin-left: 4rem; margin-right: 4rem } +.my4{ margin-top: 4rem; margin-bottom: 4rem } + +.mxn1{ margin-left: -.5rem; margin-right: -.5rem; } +.mxn2{ margin-left: -1rem; margin-right: -1rem; } +.mxn3{ margin-left: -2rem; margin-right: -2rem; } +.mxn4{ margin-left: -4rem; margin-right: -4rem; } + +.ml-auto{ margin-left:auto } +.mr-auto{ margin-right:auto } +.mx-auto{ margin-left:auto; margin-right:auto; } + +.p0{ padding:0 } +.pt0{ padding-top:0 } +.pr0{ padding-right:0 } +.pb0{ padding-bottom:0 } +.pl0{ padding-left:0 } +.px0{ padding-left:0; padding-right:0 } +.py0{ padding-top:0; padding-bottom:0 } + +.p1{ padding: .5rem } +.pt1{ padding-top: .5rem } +.pr1{ padding-right: .5rem } +.pb1{ padding-bottom: .5rem } +.pl1{ padding-left: .5rem } +.py1{ padding-top: .5rem; padding-bottom: .5rem } +.px1{ padding-left: .5rem; padding-right: .5rem } + +.p2{ padding: 1rem } +.pt2{ padding-top: 1rem } +.pr2{ padding-right: 1rem } +.pb2{ padding-bottom: 1rem } +.pl2{ padding-left: 1rem } +.py2{ padding-top: 1rem; padding-bottom: 1rem } +.px2{ padding-left: 1rem; padding-right: 1rem } + +.p3{ padding: 2rem } +.pt3{ padding-top: 2rem } +.pr3{ padding-right: 2rem } +.pb3{ padding-bottom: 2rem } +.pl3{ padding-left: 2rem } +.py3{ padding-top: 2rem; padding-bottom: 2rem } +.px3{ padding-left: 2rem; padding-right: 2rem } + +.p4{ padding: 4rem } +.pt4{ padding-top: 4rem } +.pr4{ padding-right: 4rem } +.pb4{ padding-bottom: 4rem } +.pl4{ padding-left: 4rem } +.py4{ padding-top: 4rem; padding-bottom: 4rem } +.px4{ padding-left: 4rem; padding-right: 4rem } + +.col{ + float:left; + box-sizing:border-box; +} + +.col-right{ + float:right; + box-sizing:border-box; +} + +.col-1{ + width:8.33333%; +} + +.col-2{ + width:16.66667%; +} + +.col-3{ + width:25%; +} + +.col-4{ + width:33.33333%; +} + +.col-5{ + width:41.66667%; +} + +.col-6{ + width:50%; +} + +.col-7{ + width:58.33333%; +} + +.col-8{ + width:66.66667%; +} + +.col-9{ + width:75%; +} + +.col-10{ + width:83.33333%; +} + +.col-11{ + width:91.66667%; +} + +.col-12{ + width:100%; +} +@media (min-width: 40em){ + + .sm-col{ + float:left; + box-sizing:border-box; + } + + .sm-col-right{ + float:right; + box-sizing:border-box; + } + + .sm-col-1{ + width:8.33333%; + } + + .sm-col-2{ + width:16.66667%; + } + + .sm-col-3{ + width:25%; + } + + .sm-col-4{ + width:33.33333%; + } + + .sm-col-5{ + width:41.66667%; + } + + .sm-col-6{ + width:50%; + } + + .sm-col-7{ + width:58.33333%; + } + + .sm-col-8{ + width:66.66667%; + } + + .sm-col-9{ + width:75%; + } + + .sm-col-10{ + width:83.33333%; + } + + .sm-col-11{ + width:91.66667%; + } + + .sm-col-12{ + width:100%; + } + +} +@media (min-width: 52em){ + + .md-col{ + float:left; + box-sizing:border-box; + } + + .md-col-right{ + float:right; + box-sizing:border-box; + } + + .md-col-1{ + width:8.33333%; + } + + .md-col-2{ + width:16.66667%; + } + + .md-col-3{ + width:25%; + } + + .md-col-4{ + width:33.33333%; + } + + .md-col-5{ + width:41.66667%; + } + + .md-col-6{ + width:50%; + } + + .md-col-7{ + width:58.33333%; + } + + .md-col-8{ + width:66.66667%; + } + + .md-col-9{ + width:75%; + } + + .md-col-10{ + width:83.33333%; + } + + .md-col-11{ + width:91.66667%; + } + + .md-col-12{ + width:100%; + } + +} +@media (min-width: 64em){ + + .lg-col{ + float:left; + box-sizing:border-box; + } + + .lg-col-right{ + float:right; + box-sizing:border-box; + } + + .lg-col-1{ + width:8.33333%; + } + + .lg-col-2{ + width:16.66667%; + } + + .lg-col-3{ + width:25%; + } + + .lg-col-4{ + width:33.33333%; + } + + .lg-col-5{ + width:41.66667%; + } + + .lg-col-6{ + width:50%; + } + + .lg-col-7{ + width:58.33333%; + } + + .lg-col-8{ + width:66.66667%; + } + + .lg-col-9{ + width:75%; + } + + .lg-col-10{ + width:83.33333%; + } + + .lg-col-11{ + width:91.66667%; + } + + .lg-col-12{ + width:100%; + } + +} +.flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } + +@media (min-width: 40em){ + .sm-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } +} + +@media (min-width: 52em){ + .md-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } +} + +@media (min-width: 64em){ + .lg-flex{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex } +} + +.flex-column{ -webkit-box-orient:vertical; -webkit-box-direction:normal; -webkit-flex-direction:column; -ms-flex-direction:column; flex-direction:column } +.flex-wrap{ -webkit-flex-wrap:wrap; -ms-flex-wrap:wrap; flex-wrap:wrap } + +.items-start{ -webkit-box-align:start; -webkit-align-items:flex-start; -ms-flex-align:start; -ms-grid-row-align:flex-start; align-items:flex-start } +.items-end{ -webkit-box-align:end; -webkit-align-items:flex-end; -ms-flex-align:end; -ms-grid-row-align:flex-end; align-items:flex-end } +.items-center{ -webkit-box-align:center; -webkit-align-items:center; -ms-flex-align:center; -ms-grid-row-align:center; align-items:center } +.items-baseline{ -webkit-box-align:baseline; -webkit-align-items:baseline; -ms-flex-align:baseline; -ms-grid-row-align:baseline; align-items:baseline } +.items-stretch{ -webkit-box-align:stretch; -webkit-align-items:stretch; -ms-flex-align:stretch; -ms-grid-row-align:stretch; align-items:stretch } + +.self-start{ -webkit-align-self:flex-start; -ms-flex-item-align:start; align-self:flex-start } +.self-end{ -webkit-align-self:flex-end; -ms-flex-item-align:end; align-self:flex-end } +.self-center{ -webkit-align-self:center; -ms-flex-item-align:center; align-self:center } +.self-baseline{ -webkit-align-self:baseline; -ms-flex-item-align:baseline; align-self:baseline } +.self-stretch{ -webkit-align-self:stretch; -ms-flex-item-align:stretch; align-self:stretch } + +.justify-start{ -webkit-box-pack:start; -webkit-justify-content:flex-start; -ms-flex-pack:start; justify-content:flex-start } +.justify-end{ -webkit-box-pack:end; -webkit-justify-content:flex-end; -ms-flex-pack:end; justify-content:flex-end } +.justify-center{ -webkit-box-pack:center; -webkit-justify-content:center; -ms-flex-pack:center; justify-content:center } +.justify-between{ -webkit-box-pack:justify; -webkit-justify-content:space-between; -ms-flex-pack:justify; justify-content:space-between } +.justify-around{ -webkit-justify-content:space-around; -ms-flex-pack:distribute; justify-content:space-around } + +.content-start{ -webkit-align-content:flex-start; -ms-flex-line-pack:start; align-content:flex-start } +.content-end{ -webkit-align-content:flex-end; -ms-flex-line-pack:end; align-content:flex-end } +.content-center{ -webkit-align-content:center; -ms-flex-line-pack:center; align-content:center } +.content-between{ -webkit-align-content:space-between; -ms-flex-line-pack:justify; align-content:space-between } +.content-around{ -webkit-align-content:space-around; -ms-flex-line-pack:distribute; align-content:space-around } +.content-stretch{ -webkit-align-content:stretch; -ms-flex-line-pack:stretch; align-content:stretch } +.flex-auto{ + -webkit-box-flex:1; + -webkit-flex:1 1 auto; + -ms-flex:1 1 auto; + flex:1 1 auto; + min-width:0; + min-height:0; +} +.flex-none{ -webkit-box-flex:0; -webkit-flex:none; -ms-flex:none; flex:none } + +.order-0{ -webkit-box-ordinal-group:1; -webkit-order:0; -ms-flex-order:0; order:0 } +.order-1{ -webkit-box-ordinal-group:2; -webkit-order:1; -ms-flex-order:1; order:1 } +.order-2{ -webkit-box-ordinal-group:3; -webkit-order:2; -ms-flex-order:2; order:2 } +.order-3{ -webkit-box-ordinal-group:4; -webkit-order:3; -ms-flex-order:3; order:3 } +.order-last{ -webkit-box-ordinal-group:100000; -webkit-order:99999; -ms-flex-order:99999; order:99999 } + +.relative{ position:relative } +.absolute{ position:absolute } +.fixed{ position:fixed } + +.top-0{ top:0 } +.right-0{ right:0 } +.bottom-0{ bottom:0 } +.left-0{ left:0 } + +.z1{ z-index: 1 } +.z2{ z-index: 2 } +.z3{ z-index: 3 } +.z4{ z-index: 4 } + +.border{ + border-style:solid; + border-width: 1px; +} + +.border-top{ + border-top-style:solid; + border-top-width: 1px; +} + +.border-right{ + border-right-style:solid; + border-right-width: 1px; +} + +.border-bottom{ + border-bottom-style:solid; + border-bottom-width: 1px; +} + +.border-left{ + border-left-style:solid; + border-left-width: 1px; +} + +.border-none{ border:0 } + +.rounded{ border-radius: 3px } +.circle{ border-radius:50% } + +.rounded-top{ border-radius: 3px 3px 0 0 } +.rounded-right{ border-radius: 0 3px 3px 0 } +.rounded-bottom{ border-radius: 0 0 3px 3px } +.rounded-left{ border-radius: 3px 0 0 3px } + +.not-rounded{ border-radius:0 } + +.hide{ + position:absolute !important; + height:1px; + width:1px; + overflow:hidden; + clip:rect(1px, 1px, 1px, 1px); +} + +@media (max-width: 40em){ + .xs-hide{ display:none !important } +} + +@media (min-width: 40em) and (max-width: 52em){ + .sm-hide{ display:none !important } +} + +@media (min-width: 52em) and (max-width: 64em){ + .md-hide{ display:none !important } +} + +@media (min-width: 64em){ + .lg-hide{ display:none !important } +} + +.display-none{ display:none !important } + diff --git a/docs/api/assets/fonts/EOT/SourceCodePro-Bold.eot b/docs/api/assets/fonts/EOT/SourceCodePro-Bold.eot new file mode 100755 index 0000000..d24cc39 Binary files /dev/null and b/docs/api/assets/fonts/EOT/SourceCodePro-Bold.eot differ diff --git a/docs/api/assets/fonts/EOT/SourceCodePro-Regular.eot b/docs/api/assets/fonts/EOT/SourceCodePro-Regular.eot new file mode 100755 index 0000000..09e9473 Binary files /dev/null and b/docs/api/assets/fonts/EOT/SourceCodePro-Regular.eot differ diff --git a/docs/api/assets/fonts/LICENSE.txt b/docs/api/assets/fonts/LICENSE.txt new file mode 100755 index 0000000..d154618 --- /dev/null +++ b/docs/api/assets/fonts/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/api/assets/fonts/OTF/SourceCodePro-Bold.otf b/docs/api/assets/fonts/OTF/SourceCodePro-Bold.otf new file mode 100755 index 0000000..f4e576c Binary files /dev/null and b/docs/api/assets/fonts/OTF/SourceCodePro-Bold.otf differ diff --git a/docs/api/assets/fonts/OTF/SourceCodePro-Regular.otf b/docs/api/assets/fonts/OTF/SourceCodePro-Regular.otf new file mode 100755 index 0000000..4e3b9d0 Binary files /dev/null and b/docs/api/assets/fonts/OTF/SourceCodePro-Regular.otf differ diff --git a/docs/api/assets/fonts/TTF/SourceCodePro-Bold.ttf b/docs/api/assets/fonts/TTF/SourceCodePro-Bold.ttf new file mode 100755 index 0000000..e0c576f Binary files /dev/null and b/docs/api/assets/fonts/TTF/SourceCodePro-Bold.ttf differ diff --git a/docs/api/assets/fonts/TTF/SourceCodePro-Regular.ttf b/docs/api/assets/fonts/TTF/SourceCodePro-Regular.ttf new file mode 100755 index 0000000..437f472 Binary files /dev/null and b/docs/api/assets/fonts/TTF/SourceCodePro-Regular.ttf differ diff --git a/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff b/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff new file mode 100755 index 0000000..cf96099 Binary files /dev/null and b/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff differ diff --git a/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff b/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff new file mode 100755 index 0000000..395436e Binary files /dev/null and b/docs/api/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff differ diff --git a/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff b/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff new file mode 100755 index 0000000..c65ba84 Binary files /dev/null and b/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff differ diff --git a/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff b/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff new file mode 100755 index 0000000..0af792a Binary files /dev/null and b/docs/api/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff differ diff --git a/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 b/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 new file mode 100755 index 0000000..cbe3835 Binary files /dev/null and b/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 differ diff --git a/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 b/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 new file mode 100755 index 0000000..65cd591 Binary files /dev/null and b/docs/api/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 differ diff --git a/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 b/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 new file mode 100755 index 0000000..b78d523 Binary files /dev/null and b/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 differ diff --git a/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 b/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 new file mode 100755 index 0000000..18d2199 Binary files /dev/null and b/docs/api/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 differ diff --git a/docs/api/assets/fonts/source-code-pro.css b/docs/api/assets/fonts/source-code-pro.css new file mode 100755 index 0000000..3abb4f0 --- /dev/null +++ b/docs/api/assets/fonts/source-code-pro.css @@ -0,0 +1,23 @@ +@font-face{ + font-family: 'Source Code Pro'; + font-weight: 400; + font-style: normal; + font-stretch: normal; + src: url('EOT/SourceCodePro-Regular.eot') format('embedded-opentype'), + url('WOFF2/TTF/SourceCodePro-Regular.ttf.woff2') format('woff2'), + url('WOFF/OTF/SourceCodePro-Regular.otf.woff') format('woff'), + url('OTF/SourceCodePro-Regular.otf') format('opentype'), + url('TTF/SourceCodePro-Regular.ttf') format('truetype'); +} + +@font-face{ + font-family: 'Source Code Pro'; + font-weight: 700; + font-style: normal; + font-stretch: normal; + src: url('EOT/SourceCodePro-Bold.eot') format('embedded-opentype'), + url('WOFF2/TTF/SourceCodePro-Bold.ttf.woff2') format('woff2'), + url('WOFF/OTF/SourceCodePro-Bold.otf.woff') format('woff'), + url('OTF/SourceCodePro-Bold.otf') format('opentype'), + url('TTF/SourceCodePro-Bold.ttf') format('truetype'); +} diff --git a/docs/api/assets/github.css b/docs/api/assets/github.css new file mode 100644 index 0000000..8852abb --- /dev/null +++ b/docs/api/assets/github.css @@ -0,0 +1,123 @@ +/* + +github.com style (c) Vasily Polovnyov + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + color: #333; + background: #f8f8f8; + -webkit-text-size-adjust: none; +} + +.hljs-comment, +.diff .hljs-header, +.hljs-javadoc { + color: #998; + font-style: italic; +} + +.hljs-keyword, +.css .rule .hljs-keyword, +.hljs-winutils, +.nginx .hljs-title, +.hljs-subst, +.hljs-request, +.hljs-status { + color: #1184CE; +} + +.hljs-number, +.hljs-hexcolor, +.ruby .hljs-constant { + color: #ed225d; +} + +.hljs-string, +.hljs-tag .hljs-value, +.hljs-phpdoc, +.hljs-dartdoc, +.tex .hljs-formula { + color: #ed225d; +} + +.hljs-title, +.hljs-id, +.scss .hljs-preprocessor { + color: #900; + font-weight: bold; +} + +.hljs-list .hljs-keyword, +.hljs-subst { + font-weight: normal; +} + +.hljs-class .hljs-title, +.hljs-type, +.vhdl .hljs-literal, +.tex .hljs-command { + color: #458; + font-weight: bold; +} + +.hljs-tag, +.hljs-tag .hljs-title, +.hljs-rules .hljs-property, +.django .hljs-tag .hljs-keyword { + color: #000080; + font-weight: normal; +} + +.hljs-attribute, +.hljs-variable, +.lisp .hljs-body { + color: #008080; +} + +.hljs-regexp { + color: #009926; +} + +.hljs-symbol, +.ruby .hljs-symbol .hljs-string, +.lisp .hljs-keyword, +.clojure .hljs-keyword, +.scheme .hljs-keyword, +.tex .hljs-special, +.hljs-prompt { + color: #990073; +} + +.hljs-built_in { + color: #0086b3; +} + +.hljs-preprocessor, +.hljs-pragma, +.hljs-pi, +.hljs-doctype, +.hljs-shebang, +.hljs-cdata { + color: #999; + font-weight: bold; +} + +.hljs-deletion { + background: #fdd; +} + +.hljs-addition { + background: #dfd; +} + +.diff .hljs-change { + background: #0086b3; +} + +.hljs-chunk { + color: #aaa; +} diff --git a/docs/api/assets/site.js b/docs/api/assets/site.js new file mode 100644 index 0000000..559c65e --- /dev/null +++ b/docs/api/assets/site.js @@ -0,0 +1,108 @@ +/* global anchors */ + +// add anchor links to headers +anchors.options.placement = 'left'; +anchors.add('h3'); + +// Filter UI +var tocElements = document.getElementById('toc') + .getElementsByTagName('li'); + +document.getElementById('filter-input') + .addEventListener('keyup', function (e) { + + var i, element, children; + + // enter key + if (e.keyCode === 13) { + // go to the first displayed item in the toc + for (i = 0; i < tocElements.length; i++) { + element = tocElements[i]; + if (!element.classList.contains('display-none')) { + location.replace(element.firstChild.href); + return e.preventDefault(); + } + } + } + + var match = function () { + return true; + }; + + var value = this.value.toLowerCase(); + + if (!value.match(/^\s*$/)) { + match = function (element) { + return element.firstChild.innerHTML.toLowerCase().indexOf(value) !== -1; + }; + } + + for (i = 0; i < tocElements.length; i++) { + element = tocElements[i]; + children = Array.from(element.getElementsByTagName('li')); + if (match(element) || children.some(match)) { + element.classList.remove('display-none'); + } else { + element.classList.add('display-none'); + } + } + }); + +var toggles = document.getElementsByClassName('toggle-step-sibling'); +for (var i = 0; i < toggles.length; i++) { + toggles[i].addEventListener('click', toggleStepSibling); +} + +function toggleStepSibling() { + var stepSibling = this.parentNode.parentNode.parentNode.getElementsByClassName('toggle-target')[0]; + var klass = 'display-none'; + if (stepSibling.classList.contains(klass)) { + stepSibling.classList.remove(klass); + stepSibling.innerHTML = '▾'; + } else { + stepSibling.classList.add(klass); + stepSibling.innerHTML = '▸'; + } +} + +var items = document.getElementsByClassName('toggle-sibling'); +for (var j = 0; j < items.length; j++) { + items[j].addEventListener('click', toggleSibling); +} + +function toggleSibling() { + var stepSibling = this.parentNode.getElementsByClassName('toggle-target')[0]; + var icon = this.getElementsByClassName('icon')[0]; + var klass = 'display-none'; + if (stepSibling.classList.contains(klass)) { + stepSibling.classList.remove(klass); + icon.innerHTML = '▾'; + } else { + stepSibling.classList.add(klass); + icon.innerHTML = '▸'; + } +} + +function showHashTarget(targetId) { + var hashTarget = document.getElementById(targetId); + // new target is hidden + if (hashTarget && hashTarget.offsetHeight === 0 && + hashTarget.parentNode.parentNode.classList.contains('display-none')) { + hashTarget.parentNode.parentNode.classList.remove('display-none'); + } +} + +window.addEventListener('hashchange', function() { + showHashTarget(location.hash.substring(1)); +}); + +showHashTarget(location.hash.substring(1)); + +var toclinks = document.getElementsByClassName('pre-open'); +for (var k = 0; k < toclinks.length; k++) { + toclinks[k].addEventListener('mousedown', preOpen, false); +} + +function preOpen() { + showHashTarget(this.hash.substring(1)); +} diff --git a/docs/api/assets/style.css b/docs/api/assets/style.css new file mode 100644 index 0000000..d7e56e0 --- /dev/null +++ b/docs/api/assets/style.css @@ -0,0 +1,136 @@ +.documentation { + font-family: Helvetica, sans-serif; + color: #666; + line-height: 1.5; + background: #f5f5f5; +} + +.black { + color: #666; +} + +.bg-white { + background-color: #fff; +} + +h4 { + margin: 20px 0 10px 0; +} + +.documentation h3 { + color: #000; +} + +.border-bottom { + border-color: #ddd; +} + +a { + color: #1184CE; + text-decoration: none; +} + +.documentation a[href]:hover { + text-decoration: underline; +} + +a:hover { + cursor: pointer; +} + +.py1-ul li { + padding: 5px 0; +} + +.max-height-100 { + max-height: 100%; +} + +section:target h3 { + font-weight:700; +} + +.documentation td, +.documentation th { + padding: .25rem .25rem; +} + +h1:hover .anchorjs-link, +h2:hover .anchorjs-link, +h3:hover .anchorjs-link, +h4:hover .anchorjs-link { + opacity: 1; +} + +.fix-3 { + width: 25%; + max-width: 244px; +} + +.fix-3 { + width: 25%; + max-width: 244px; +} + +@media (min-width: 52em) { + .fix-margin-3 { + margin-left: 25%; + } +} + +.pre, pre, code, .code { + font-family: Source Code Pro,Menlo,Consolas,Liberation Mono,monospace; + font-size: 14px; +} + +.fill-light { + background: #F9F9F9; +} + +.width2 { + width: 1rem; +} + +.input { + font-family: inherit; + display: block; + width: 100%; + height: 2rem; + padding: .5rem; + margin-bottom: 1rem; + border: 1px solid #ccc; + font-size: .875rem; + border-radius: 3px; + box-sizing: border-box; +} + +table { + border-collapse: collapse; +} + +.prose table th, +.prose table td { + text-align: left; + padding:8px; + border:1px solid #ddd; +} + +.prose table th:nth-child(1) { border-right: none; } +.prose table th:nth-child(2) { border-left: none; } + +.prose table { + border:1px solid #ddd; +} + +.prose-big { + font-size: 18px; + line-height: 30px; +} + +.quiet { + opacity: 0.7; +} + +.minishadow { + box-shadow: 2px 2px 10px #f3f3f3; +} diff --git a/docs/api/index.html b/docs/api/index.html new file mode 100644 index 0000000..c32c2ce --- /dev/null +++ b/docs/api/index.html @@ -0,0 +1,1573 @@ + + + + + fritzbox.js 2.0.0 | Documentation + + + + + + +
+
+
+
+

fritzbox.js

+
2.0.0
+ +
+ +
+ +
+
+
+ + +
+ + +
+ +

+ fritzDect +

+ + + + + + +
+ + +

Fritz!Box DECT and Smart Home functions.

+ + +
fritzDect
+ + + + + + + + + + + + + + + + + + + + + +
Static Members
+
+ +
+
+
+ + toggleSwitch(deviceId, value, options) +
+
+ +
+ +
+
+
+ + getSmartDevices(options) +
+
+ +
+ +
+ + + + + + +
+ + + + +
+ + +
+ +

+ fritzFon +

+ + + + + + +
+ + +

Fritz!Fon functions.

+ + +
fritzFon
+ + + + + + + + + + + + + + + + + + + + + +
Static Members
+
+ +
+
+
+ + markTamMessageAsRead(messageId, options, tamId = 0) +
+
+ +
+ +
+
+
+ + getActiveCalls(options) +
+
+ +
+ +
+
+
+ + CallMonitor(options) +
+
+ +
+ +
+
+
+ + getPhonebook(phonebookId?, options) +
+
+ +
+ +
+
+
+ + dialNumber(phoneNumber, options) +
+
+ +
+ +
+
+
+ + getCalls(options) +
+
+ +
+ +
+
+
+ + getTamMessages(options) +
+
+ +
+ +
+
+
+ + downloadTamMessage(messagePath, localPath, options) +
+
+ +
+ +
+ + + + + + +
+ + + + +
+ + +
+ +

+ fritzLogin +

+ + + + + + +
+ + + + +
fritzLogin
+ + + + + + + + + + + + + + + + + + + + + +
Static Members
+
+ +
+
+
+ + getSessionId(options) +
+
+ +
+ +
+ + + + + + +
+ + + + +
+ + +
+ +

+ fritzSystem +

+ + + + + + +
+ + + + +
fritzSystem
+ + + + + + + + + + + + + + + + + + + + + +
Static Members
+
+ +
+
+
+ + getVersionNumber(options) +
+
+ +
+ +
+
+
+ + getVersion(options) +
+
+ +
+ +
+ + + + + + +
+ + + + +
+ + +
+ +

+ fritzWlan +

+ + + + + + +
+ + + + +
fritzWlan
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+ + + + diff --git a/docs/assets/css/prism.scss b/docs/assets/css/prism.scss new file mode 100644 index 0000000..61e4574 --- /dev/null +++ b/docs/assets/css/prism.scss @@ -0,0 +1,118 @@ +--- +--- +/** + * Syntax highlighting styles + */ + +.highlighttable, +.highlight { + background: #282C34; + border-radius: 6px; + font-size: 0.675em; + -webkit-font-smoothing: subpixel-antialiased; + width: 100%; +} + +.highlight { + + .c { color: #5B6370; font-style: italic } // Comment + .err { color: #960050; background-color: #1e0010; } // Error + .k { color: #C776DF; font-weight: bold; } // Keyword + .o { font-weight: bold } // Operator + .cm { color: #5B6370; font-style: italic } // Comment.Multiline + .cp { color: #5B6370; font-weight: bold } // Comment.Preproc + .c1 { color: #5B6370; font-style: italic } // Comment.Single + .cs { color: #5B6370; font-weight: bold; font-style: italic } // Comment.Special + .gd { color: #000; background-color: #fdd } // Generic.Deleted + .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific + .ge { font-style: italic } // Generic.Emph + .gr { color: #a00 } // Generic.Error + .gh { color: #5B6370 } // Generic.Heading + .gi { color: #a6e22e; background-color: #dfd } // Generic.Inserted + .gi .x { color: #a6e22e; background-color: #afa } // Generic.Inserted.Specific + .go { color: #888 } // Generic.Output + .gp { color: #555 } // Generic.Prompt + .gs { font-weight: bold } // Generic.Strong + .gu { color: #aaa } // Generic.Subheading + .gt { color: #a00 } // Generic.Traceback + .kc { font-weight: bold } // Keyword.Constant + .kd { color: #C776DF; font-weight: bold } // Keyword.Declaration + .kp { font-weight: bold } // Keyword.Pseudo + .kr { font-weight: bold } // Keyword.Reserved + .kt { color: #458; font-weight: bold } // Keyword.Type + .m { color: #4FB6C3 } // Literal.Number + .s { color: #A2BD40 } // Literal.String + .na { color: #E2964A } // Name.Attribute + .nb { color: #4FB6C3 } // Name.Builtin + .nc { color: #E2964A; font-weight: bold } // Name.Class + .nd { color: #4FB6BE; } // Name.Decorator + .no { color: #4FB6BE } // Name.Constant + .ni { color: #E2964A } // Name.Entity + .ne { color: #900; font-weight: bold } // Name.Exception + .nf { color: #52A5EB; font-weight: bold } // Name.Function + .nn { color: #555 } // Name.Namespace + .nt { color: #DE5442 } // Name.Tag + .nv { color: #DE5442 } // Name.Variable + .ow { font-weight: bold } // Operator.Word + .w { color: #bbb } // Text.Whitespace + .mf { color: #4FB6C3 } // Literal.Number.Float + .mh { color: #4FB6C3 } // Literal.Number.Hex + .mi { color: #4FB6C3 } // Literal.Number.Integer + .mo { color: #4FB6C3 } // Literal.Number.Oct + .sb { color: #A2BD40 } // Literal.String.Backtick + .sc { color: #A2BD40 } // Literal.String.Char + .sd { color: #5B6370 } // Literal.String.Doc + .s2 { color: #A2BD40 } // Literal.String.Double + .se { color: #A2BD40 } // Literal.String.Escape + .sh { color: #A2BD40 } // Literal.String.Heredoc + .si { color: #A2BD40 } // Literal.String.Interpol + .sx { color: #A2BD40 } // Literal.String.Other + .sr { color: #009926 } // Literal.String.Regex + .s1 { color: #A2BD40 } // Literal.String.Single + .ss { color: #990073 } // Literal.String.Symbol + .bp { color: #999 } // Name.Builtin.Pseudo + .vc { color: #008080 } // Name.Variable.Class + .vg { color: #008080 } // Name.Variable.Global + .vi { color: #008080 } // Name.Variable.Instance + .il { color: #4FB6C3 } // Literal.Number.Integer.Long +} + +.highlight { + line-height: 1; + overflow-x: scroll; + padding: 10px; + + pre { + margin: 0; + white-space: pre; + } + + .lineno{ + border-right: solid 1px #3C4049; + padding-left: 10px; + padding-right: 10px; + text-align: right; + } + + span { + display: inline-block; + padding: 0.3em 0; + } +} + +.highlighttable { + + .linenos { + border-right: solid 1px #3C4049; + padding-left:10px; + padding-right: 10px; + text-align: right; + width: 3em; + } + + .code .highlight { + padding-left: 10px; + + pre { white-space: pre; } + } +} diff --git a/docs/assets/css/stars.css b/docs/assets/css/stars.css new file mode 100644 index 0000000..a12dce3 --- /dev/null +++ b/docs/assets/css/stars.css @@ -0,0 +1,85 @@ +.block-background { + height: 100%; + background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%); + overflow: hidden; +} + +#stars { + width: 1px; + height: 1px; + background: transparent; + box-shadow: 1451px 434px #FFF , 798px 1059px #FFF , 1826px 1509px #FFF , 331px 1299px #FFF , 650px 1168px #FFF , 846px 282px #FFF , 1286px 41px #FFF , 1368px 1093px #FFF , 491px 757px #FFF , 539px 1488px #FFF , 1870px 424px #FFF , 1662px 1216px #FFF , 1349px 1454px #FFF , 1998px 734px #FFF , 833px 661px #FFF , 1774px 238px #FFF , 1388px 1243px #FFF , 801px 615px #FFF , 128px 76px #FFF , 1531px 1861px #FFF , 1977px 1824px #FFF , 108px 482px #FFF , 1875px 1076px #FFF , 71px 963px #FFF , 737px 549px #FFF , 642px 1723px #FFF , 194px 468px #FFF , 1817px 1480px #FFF , 170px 1435px #FFF , 1461px 738px #FFF , 529px 324px #FFF , 724px 1353px #FFF , 708px 668px #FFF , 1181px 561px #FFF , 397px 1953px #FFF , 39px 1632px #FFF , 1634px 1580px #FFF , 1983px 1121px #FFF , 935px 1713px #FFF , 948px 411px #FFF , 1734px 1995px #FFF , 1424px 1911px #FFF , 1868px 154px #FFF , 1401px 888px #FFF , 1313px 112px #FFF , 467px 451px #FFF , 76px 1564px #FFF , 132px 1085px #FFF , 1939px 939px #FFF , 1627px 989px #FFF , 99px 36px #FFF , 430px 1074px #FFF , 751px 1240px #FFF , 451px 924px #FFF , 1645px 1325px #FFF , 178px 422px #FFF , 1995px 1911px #FFF , 54px 1489px #FFF , 1021px 1094px #FFF , 1288px 118px #FFF , 837px 68px #FFF , 936px 1073px #FFF , 420px 1207px #FFF , 244px 546px #FFF , 287px 168px #FFF , 1209px 939px #FFF , 1512px 320px #FFF , 1407px 384px #FFF , 1101px 1592px #FFF , 840px 866px #FFF , 153px 466px #FFF , 805px 975px #FFF , 606px 627px #FFF , 79px 1713px #FFF , 1850px 1562px #FFF , 1231px 613px #FFF , 309px 1231px #FFF , 663px 1458px #FFF , 1042px 1726px #FFF , 828px 1110px #FFF , 1024px 502px #FFF , 1809px 1342px #FFF , 880px 86px #FFF , 1314px 72px #FFF , 1142px 984px #FFF , 60px 372px #FFF , 864px 1938px #FFF , 480px 124px #FFF , 1891px 366px #FFF , 704px 991px #FFF , 362px 1845px #FFF , 418px 1488px #FFF , 1881px 1379px #FFF , 1544px 1515px #FFF , 220px 13px #FFF , 651px 500px #FFF , 1456px 65px #FFF , 824px 1196px #FFF , 292px 236px #FFF , 389px 1519px #FFF , 1983px 375px #FFF , 781px 58px #FFF , 1691px 665px #FFF , 1520px 1519px #FFF , 798px 1797px #FFF , 1085px 1633px #FFF , 1218px 578px #FFF , 180px 290px #FFF , 1414px 351px #FFF , 1782px 419px #FFF , 114px 96px #FFF , 692px 406px #FFF , 1143px 767px #FFF , 355px 1349px #FFF , 1742px 1322px #FFF , 1557px 151px #FFF , 674px 1215px #FFF , 420px 1667px #FFF , 889px 1301px #FFF , 51px 932px #FFF , 298px 1202px #FFF , 1700px 1413px #FFF , 341px 450px #FFF , 969px 808px #FFF , 1195px 443px #FFF , 1316px 478px #FFF , 801px 1385px #FFF , 168px 1482px #FFF , 994px 487px #FFF , 185px 1505px #FFF , 1004px 568px #FFF , 1490px 1285px #FFF , 687px 763px #FFF , 1631px 1078px #FFF , 69px 275px #FFF , 1739px 1738px #FFF , 1580px 1308px #FFF , 1388px 1977px #FFF , 1093px 1488px #FFF , 28px 295px #FFF , 135px 1024px #FFF , 119px 1826px #FFF , 411px 1697px #FFF , 746px 649px #FFF , 1249px 1409px #FFF , 936px 1499px #FFF , 1634px 1580px #FFF , 523px 1592px #FFF , 1895px 1322px #FFF , 982px 1856px #FFF , 1286px 1530px #FFF , 1883px 1348px #FFF , 381px 963px #FFF , 652px 1202px #FFF , 105px 1073px #FFF , 1834px 1167px #FFF , 1503px 628px #FFF , 2000px 1476px #FFF , 877px 1040px #FFF , 1115px 220px #FFF , 1360px 1710px #FFF , 1340px 24px #FFF , 414px 706px #FFF , 1835px 991px #FFF , 1838px 258px #FFF , 1424px 318px #FFF , 1342px 39px #FFF , 652px 1006px #FFF , 1458px 147px #FFF , 678px 1742px #FFF , 376px 1753px #FFF , 1903px 626px #FFF , 936px 1315px #FFF , 1928px 941px #FFF , 1128px 1291px #FFF , 915px 474px #FFF , 1765px 1037px #FFF , 522px 1748px #FFF , 718px 203px #FFF , 1396px 1580px #FFF , 1604px 1244px #FFF , 1336px 813px #FFF , 928px 750px #FFF , 1374px 409px #FFF , 1755px 301px #FFF , 848px 932px #FFF , 313px 592px #FFF , 973px 865px #FFF , 1520px 101px #FFF , 672px 1540px #FFF , 716px 1416px #FFF , 16px 1444px #FFF , 58px 554px #FFF , 1243px 84px #FFF , 649px 1092px #FFF , 233px 720px #FFF , 963px 1998px #FFF , 640px 1614px #FFF , 1855px 1057px #FFF , 1161px 1371px #FFF , 906px 786px #FFF , 1041px 573px #FFF , 178px 1906px #FFF , 667px 803px #FFF , 909px 1581px #FFF , 1497px 847px #FFF , 924px 907px #FFF , 1780px 304px #FFF , 142px 482px #FFF , 1461px 1346px #FFF , 845px 1354px #FFF , 709px 380px #FFF , 1810px 286px #FFF , 920px 1762px #FFF , 1168px 561px #FFF , 1833px 843px #FFF , 246px 1154px #FFF , 914px 784px #FFF , 420px 1015px #FFF , 1570px 475px #FFF , 698px 13px #FFF , 1320px 1163px #FFF , 1380px 91px #FFF , 295px 539px #FFF , 128px 1394px #FFF , 1847px 1669px #FFF , 1977px 1831px #FFF , 961px 218px #FFF , 93px 1935px #FFF , 1072px 400px #FFF , 1482px 1954px #FFF , 776px 50px #FFF , 1723px 1505px #FFF , 645px 272px #FFF , 824px 1381px #FFF , 453px 1720px #FFF , 976px 1866px #FFF , 843px 1343px #FFF , 1477px 1601px #FFF , 1235px 1419px #FFF , 8px 836px #FFF , 1968px 257px #FFF , 981px 218px #FFF , 547px 1252px #FFF , 1991px 378px #FFF , 1405px 734px #FFF , 869px 627px #FFF , 1068px 1886px #FFF , 1147px 28px #FFF , 172px 649px #FFF , 229px 411px #FFF , 1448px 717px #FFF , 1958px 1993px #FFF , 1069px 346px #FFF , 539px 167px #FFF , 463px 1555px #FFF , 1731px 1256px #FFF , 1234px 44px #FFF , 1563px 1772px #FFF , 778px 1104px #FFF , 1023px 575px #FFF , 945px 1865px #FFF , 447px 1107px #FFF , 1770px 731px #FFF , 1478px 432px #FFF , 610px 657px #FFF , 1598px 286px #FFF , 393px 1608px #FFF , 1205px 1979px #FFF , 752px 645px #FFF , 1452px 1974px #FFF , 763px 659px #FFF , 178px 1626px #FFF , 1222px 1215px #FFF , 87px 1251px #FFF , 1928px 805px #FFF , 465px 143px #FFF , 795px 676px #FFF , 1720px 353px #FFF , 556px 1714px #FFF , 718px 298px #FFF , 987px 135px #FFF , 510px 1624px #FFF , 973px 920px #FFF , 1949px 1611px #FFF , 1243px 1388px #FFF , 1040px 1321px #FFF , 1952px 1417px #FFF , 685px 1628px #FFF , 1653px 1302px #FFF , 986px 1948px #FFF , 1617px 1551px #FFF , 738px 1234px #FFF , 1285px 22px #FFF , 1816px 384px #FFF , 1033px 425px #FFF , 155px 1122px #FFF , 747px 210px #FFF , 1145px 132px #FFF , 1388px 412px #FFF , 315px 932px #FFF , 1054px 854px #FFF , 1764px 1532px #FFF , 481px 1853px #FFF , 1866px 87px #FFF , 420px 1530px #FFF , 824px 1547px #FFF , 1859px 1226px #FFF , 975px 441px #FFF , 985px 1227px #FFF , 775px 1621px #FFF , 652px 895px #FFF , 1703px 1887px #FFF , 1740px 811px #FFF , 755px 274px #FFF , 124px 1078px #FFF , 1006px 1078px #FFF , 1013px 1195px #FFF , 1433px 1644px #FFF , 1922px 164px #FFF , 912px 278px #FFF , 566px 917px #FFF , 204px 993px #FFF , 332px 585px #FFF , 226px 1682px #FFF , 200px 382px #FFF , 1844px 799px #FFF , 1121px 243px #FFF , 831px 1731px #FFF , 379px 442px #FFF , 324px 1023px #FFF , 531px 1543px #FFF , 854px 1227px #FFF , 131px 1918px #FFF , 258px 1761px #FFF , 1045px 1617px #FFF , 1914px 347px #FFF , 545px 67px #FFF , 309px 1028px #FFF , 1678px 1985px #FFF , 430px 536px #FFF , 744px 1680px #FFF , 1376px 340px #FFF , 1010px 617px #FFF , 850px 875px #FFF , 489px 1243px #FFF , 1093px 1965px #FFF , 1792px 1279px #FFF , 950px 424px #FFF , 572px 1019px #FFF , 427px 275px #FFF , 892px 194px #FFF , 1809px 1585px #FFF , 1557px 659px #FFF , 248px 244px #FFF , 1581px 1991px #FFF , 1283px 1528px #FFF , 840px 603px #FFF , 1681px 1448px #FFF , 942px 351px #FFF , 98px 1800px #FFF , 759px 119px #FFF , 228px 1584px #FFF , 1588px 1377px #FFF , 950px 525px #FFF , 1096px 1253px #FFF , 568px 1644px #FFF , 649px 749px #FFF , 1482px 1510px #FFF , 1732px 1855px #FFF , 1050px 1893px #FFF , 956px 1893px #FFF , 1536px 141px #FFF , 444px 1892px #FFF , 399px 935px #FFF , 525px 1640px #FFF , 114px 733px #FFF , 516px 748px #FFF , 1541px 94px #FFF , 979px 91px #FFF , 1540px 762px #FFF , 1210px 1505px #FFF , 162px 885px #FFF , 455px 1753px #FFF , 1050px 845px #FFF , 1840px 163px #FFF , 1607px 842px #FFF , 1029px 1170px #FFF , 1113px 881px #FFF , 1777px 1568px #FFF , 747px 1461px #FFF , 46px 1707px #FFF , 832px 1782px #FFF , 639px 1360px #FFF , 1952px 432px #FFF , 1725px 225px #FFF , 761px 711px #FFF , 175px 755px #FFF , 1422px 60px #FFF , 342px 1489px #FFF , 1435px 1032px #FFF , 1442px 486px #FFF , 966px 1070px #FFF , 950px 1016px #FFF , 232px 1958px #FFF , 787px 1454px #FFF , 218px 323px #FFF , 1556px 833px #FFF , 1914px 451px #FFF , 61px 1169px #FFF , 427px 1696px #FFF , 1522px 1983px #FFF , 1489px 650px #FFF , 1357px 801px #FFF , 994px 1304px #FFF , 1750px 1655px #FFF , 1769px 1541px #FFF , 1898px 1079px #FFF , 1183px 1485px #FFF , 1856px 1984px #FFF , 919px 784px #FFF , 192px 1897px #FFF , 1426px 1042px #FFF , 651px 1305px #FFF , 5px 428px #FFF , 1753px 1017px #FFF , 1853px 1411px #FFF , 1656px 218px #FFF , 726px 310px #FFF , 14px 1797px #FFF , 687px 1709px #FFF , 1717px 1640px #FFF , 1333px 721px #FFF , 1625px 1159px #FFF , 1127px 201px #FFF , 1069px 507px #FFF , 1639px 147px #FFF , 914px 1804px #FFF , 886px 1133px #FFF , 1247px 1875px #FFF , 1664px 1512px #FFF , 449px 112px #FFF , 1351px 603px #FFF , 1240px 1454px #FFF , 514px 1161px #FFF , 593px 1923px #FFF , 1973px 879px #FFF , 248px 480px #FFF , 415px 1540px #FFF , 268px 674px #FFF , 794px 1077px #FFF , 429px 239px #FFF , 1629px 7px #FFF , 807px 1543px #FFF , 1433px 1951px #FFF , 1953px 1691px #FFF , 176px 29px #FFF , 957px 788px #FFF , 65px 590px #FFF , 1332px 1449px #FFF , 1000px 1814px #FFF , 1018px 743px #FFF , 178px 1569px #FFF , 280px 1441px #FFF , 1057px 1112px #FFF , 608px 1789px #FFF , 1393px 1407px #FFF , 203px 1905px #FFF , 1844px 567px #FFF , 1383px 73px #FFF , 229px 1977px #FFF , 1290px 167px #FFF , 1241px 96px #FFF , 1712px 1008px #FFF , 920px 205px #FFF , 1653px 795px #FFF , 565px 528px #FFF , 893px 340px #FFF , 1709px 1152px #FFF , 464px 802px #FFF , 1920px 1872px #FFF , 983px 946px #FFF , 1941px 868px #FFF , 1409px 896px #FFF , 1963px 1613px #FFF , 597px 1042px #FFF , 1346px 835px #FFF , 1179px 1895px #FFF , 1754px 763px #FFF , 384px 1508px #FFF , 1114px 1430px #FFF , 1716px 148px #FFF , 925px 1611px #FFF , 1118px 348px #FFF , 1004px 257px #FFF , 1967px 567px #FFF , 1737px 1891px #FFF , 1422px 666px #FFF , 397px 1776px #FFF , 1673px 788px #FFF , 738px 647px #FFF , 1101px 67px #FFF , 556px 426px #FFF , 1685px 663px #FFF , 1538px 1643px #FFF , 358px 641px #FFF , 1471px 847px #FFF , 163px 1360px #FFF , 572px 1895px #FFF , 1051px 437px #FFF , 221px 1157px #FFF , 1206px 1748px #FFF , 476px 745px #FFF , 520px 1331px #FFF , 540px 424px #FFF , 1901px 285px #FFF , 1731px 1115px #FFF , 1190px 1248px #FFF , 1369px 493px #FFF , 456px 353px #FFF , 1857px 1116px #FFF , 1397px 855px #FFF , 1949px 46px #FFF , 663px 560px #FFF , 860px 580px #FFF , 1531px 5px #FFF , 550px 555px #FFF , 559px 953px #FFF , 286px 1728px #FFF , 421px 217px #FFF , 1216px 1260px #FFF , 479px 1642px #FFF , 1414px 1082px #FFF , 1953px 889px #FFF , 606px 707px #FFF , 1504px 1316px #FFF , 1670px 1348px #FFF , 466px 726px #FFF , 400px 657px #FFF , 1420px 861px #FFF , 1931px 1403px #FFF , 1930px 355px #FFF , 1635px 284px #FFF , 1642px 1979px #FFF , 675px 1522px #FFF , 593px 1431px #FFF , 1020px 1255px #FFF , 390px 1319px #FFF , 1971px 1388px #FFF , 1360px 1133px #FFF , 331px 556px #FFF , 1210px 720px #FFF , 770px 1452px #FFF , 1847px 29px #FFF , 1931px 358px #FFF , 1362px 810px #FFF , 1366px 1159px #FFF , 709px 561px #FFF , 1641px 1445px #FFF , 1699px 213px #FFF , 97px 82px #FFF , 153px 1850px #FFF , 1024px 1445px #FFF , 1387px 306px #FFF , 181px 633px #FFF , 1089px 1692px #FFF , 585px 581px #FFF , 1720px 1552px #FFF , 1721px 846px #FFF , 1431px 325px #FFF , 1016px 592px #FFF , 1160px 980px #FFF , 17px 1473px #FFF , 271px 323px #FFF , 1053px 696px #FFF , 1989px 1331px #FFF , 1632px 1699px #FFF , 769px 1358px #FFF , 969px 1414px #FFF , 1729px 1847px #FFF , 1079px 1615px #FFF , 1498px 373px #FFF , 890px 118px #FFF , 1505px 1459px #FFF , 1799px 61px #FFF , 245px 830px #FFF , 1768px 1399px #FFF , 871px 360px #FFF , 1305px 1731px #FFF , 1815px 1762px #FFF , 1055px 1932px #FFF , 744px 494px #FFF , 833px 367px #FFF , 273px 1629px #FFF , 1769px 1556px #FFF , 1709px 837px #FFF , 1525px 1998px #FFF , 1025px 712px #FFF , 963px 1653px #FFF , 1044px 860px #FFF , 690px 900px #FFF , 1257px 946px #FFF , 1017px 1169px #FFF , 485px 316px #FFF , 61px 1084px #FFF , 612px 934px #FFF , 787px 1381px #FFF , 1568px 68px #FFF , 481px 1624px #FFF , 281px 1943px #FFF , 1945px 1624px #FFF , 1247px 1073px #FFF , 1340px 1941px #FFF , 363px 1840px #FFF , 1299px 54px #FFF , 57px 1310px #FFF , 659px 797px #FFF , 578px 622px #FFF , 1624px 1824px #FFF , 634px 937px #FFF , 1059px 399px #FFF , 570px 150px #FFF , 1591px 467px #FFF , 1024px 1579px #FFF , 502px 1110px #FFF , 696px 1234px #FFF , 187px 1476px #FFF , 376px 380px #FFF , 538px 111px #FFF , 761px 259px #FFF , 1208px 218px #FFF , 1803px 1991px #FFF , 1949px 908px #FFF , 526px 336px #FFF , 1211px 613px #FFF , 194px 1738px #FFF , 1476px 1574px #FFF , 179px 1970px #FFF , 1384px 890px #FFF , 677px 902px #FFF , 130px 1635px #FFF , 1259px 640px #FFF , 927px 1995px #FFF , 1656px 607px #FFF , 510px 1725px #FFF , 1021px 1402px #FFF , 71px 1356px #FFF , 847px 1713px #FFF , 4px 95px #FFF , 626px 1451px #FFF , 703px 451px #FFF , 798px 1810px #FFF , 1083px 1167px #FFF , 920px 1737px #FFF , 791px 1938px #FFF , 446px 1114px #FFF , 1435px 51px #FFF , 282px 1054px #FFF , 859px 1144px #FFF , 39px 446px #FFF , 1048px 1212px #FFF , 1523px 405px #FFF , 1412px 983px #FFF , 1513px 201px #FFF , 1350px 120px #FFF , 1946px 1504px #FFF , 1356px 1895px #FFF , 106px 1304px #FFF , 1691px 910px #FFF , 432px 75px #FFF , 1253px 414px #FFF , 293px 1324px #FFF , 1882px 1545px #FFF , 1104px 210px #FFF , 1922px 1325px #FFF , 1159px 910px #FFF , 516px 548px #FFF , 1409px 1140px #FFF , 1774px 1012px #FFF , 424px 1273px #FFF , 1764px 501px #FFF , 480px 902px #FFF , 332px 1803px #FFF , 1111px 1302px #FFF , 1095px 643px #FFF , 123px 1827px #FFF , 942px 810px #FFF , 1082px 739px #FFF , 1694px 1723px #FFF , 503px 231px #FFF , 667px 1245px #FFF , 1304px 580px #FFF , 880px 1097px #FFF , 1354px 787px #FFF , 653px 1171px #FFF , 720px 670px #FFF , 76px 748px #FFF , 438px 286px #FFF , 459px 1889px #FFF , 1929px 1608px #FFF; + animation: animStar 50s linear infinite; +} +#stars:after { + content: " "; + position: absolute; + top: 2000px; + width: 1px; + height: 1px; + background: transparent; + box-shadow: 1451px 434px #FFF , 798px 1059px #FFF , 1826px 1509px #FFF , 331px 1299px #FFF , 650px 1168px #FFF , 846px 282px #FFF , 1286px 41px #FFF , 1368px 1093px #FFF , 491px 757px #FFF , 539px 1488px #FFF , 1870px 424px #FFF , 1662px 1216px #FFF , 1349px 1454px #FFF , 1998px 734px #FFF , 833px 661px #FFF , 1774px 238px #FFF , 1388px 1243px #FFF , 801px 615px #FFF , 128px 76px #FFF , 1531px 1861px #FFF , 1977px 1824px #FFF , 108px 482px #FFF , 1875px 1076px #FFF , 71px 963px #FFF , 737px 549px #FFF , 642px 1723px #FFF , 194px 468px #FFF , 1817px 1480px #FFF , 170px 1435px #FFF , 1461px 738px #FFF , 529px 324px #FFF , 724px 1353px #FFF , 708px 668px #FFF , 1181px 561px #FFF , 397px 1953px #FFF , 39px 1632px #FFF , 1634px 1580px #FFF , 1983px 1121px #FFF , 935px 1713px #FFF , 948px 411px #FFF , 1734px 1995px #FFF , 1424px 1911px #FFF , 1868px 154px #FFF , 1401px 888px #FFF , 1313px 112px #FFF , 467px 451px #FFF , 76px 1564px #FFF , 132px 1085px #FFF , 1939px 939px #FFF , 1627px 989px #FFF , 99px 36px #FFF , 430px 1074px #FFF , 751px 1240px #FFF , 451px 924px #FFF , 1645px 1325px #FFF , 178px 422px #FFF , 1995px 1911px #FFF , 54px 1489px #FFF , 1021px 1094px #FFF , 1288px 118px #FFF , 837px 68px #FFF , 936px 1073px #FFF , 420px 1207px #FFF , 244px 546px #FFF , 287px 168px #FFF , 1209px 939px #FFF , 1512px 320px #FFF , 1407px 384px #FFF , 1101px 1592px #FFF , 840px 866px #FFF , 153px 466px #FFF , 805px 975px #FFF , 606px 627px #FFF , 79px 1713px #FFF , 1850px 1562px #FFF , 1231px 613px #FFF , 309px 1231px #FFF , 663px 1458px #FFF , 1042px 1726px #FFF , 828px 1110px #FFF , 1024px 502px #FFF , 1809px 1342px #FFF , 880px 86px #FFF , 1314px 72px #FFF , 1142px 984px #FFF , 60px 372px #FFF , 864px 1938px #FFF , 480px 124px #FFF , 1891px 366px #FFF , 704px 991px #FFF , 362px 1845px #FFF , 418px 1488px #FFF , 1881px 1379px #FFF , 1544px 1515px #FFF , 220px 13px #FFF , 651px 500px #FFF , 1456px 65px #FFF , 824px 1196px #FFF , 292px 236px #FFF , 389px 1519px #FFF , 1983px 375px #FFF , 781px 58px #FFF , 1691px 665px #FFF , 1520px 1519px #FFF , 798px 1797px #FFF , 1085px 1633px #FFF , 1218px 578px #FFF , 180px 290px #FFF , 1414px 351px #FFF , 1782px 419px #FFF , 114px 96px #FFF , 692px 406px #FFF , 1143px 767px #FFF , 355px 1349px #FFF , 1742px 1322px #FFF , 1557px 151px #FFF , 674px 1215px #FFF , 420px 1667px #FFF , 889px 1301px #FFF , 51px 932px #FFF , 298px 1202px #FFF , 1700px 1413px #FFF , 341px 450px #FFF , 969px 808px #FFF , 1195px 443px #FFF , 1316px 478px #FFF , 801px 1385px #FFF , 168px 1482px #FFF , 994px 487px #FFF , 185px 1505px #FFF , 1004px 568px #FFF , 1490px 1285px #FFF , 687px 763px #FFF , 1631px 1078px #FFF , 69px 275px #FFF , 1739px 1738px #FFF , 1580px 1308px #FFF , 1388px 1977px #FFF , 1093px 1488px #FFF , 28px 295px #FFF , 135px 1024px #FFF , 119px 1826px #FFF , 411px 1697px #FFF , 746px 649px #FFF , 1249px 1409px #FFF , 936px 1499px #FFF , 1634px 1580px #FFF , 523px 1592px #FFF , 1895px 1322px #FFF , 982px 1856px #FFF , 1286px 1530px #FFF , 1883px 1348px #FFF , 381px 963px #FFF , 652px 1202px #FFF , 105px 1073px #FFF , 1834px 1167px #FFF , 1503px 628px #FFF , 2000px 1476px #FFF , 877px 1040px #FFF , 1115px 220px #FFF , 1360px 1710px #FFF , 1340px 24px #FFF , 414px 706px #FFF , 1835px 991px #FFF , 1838px 258px #FFF , 1424px 318px #FFF , 1342px 39px #FFF , 652px 1006px #FFF , 1458px 147px #FFF , 678px 1742px #FFF , 376px 1753px #FFF , 1903px 626px #FFF , 936px 1315px #FFF , 1928px 941px #FFF , 1128px 1291px #FFF , 915px 474px #FFF , 1765px 1037px #FFF , 522px 1748px #FFF , 718px 203px #FFF , 1396px 1580px #FFF , 1604px 1244px #FFF , 1336px 813px #FFF , 928px 750px #FFF , 1374px 409px #FFF , 1755px 301px #FFF , 848px 932px #FFF , 313px 592px #FFF , 973px 865px #FFF , 1520px 101px #FFF , 672px 1540px #FFF , 716px 1416px #FFF , 16px 1444px #FFF , 58px 554px #FFF , 1243px 84px #FFF , 649px 1092px #FFF , 233px 720px #FFF , 963px 1998px #FFF , 640px 1614px #FFF , 1855px 1057px #FFF , 1161px 1371px #FFF , 906px 786px #FFF , 1041px 573px #FFF , 178px 1906px #FFF , 667px 803px #FFF , 909px 1581px #FFF , 1497px 847px #FFF , 924px 907px #FFF , 1780px 304px #FFF , 142px 482px #FFF , 1461px 1346px #FFF , 845px 1354px #FFF , 709px 380px #FFF , 1810px 286px #FFF , 920px 1762px #FFF , 1168px 561px #FFF , 1833px 843px #FFF , 246px 1154px #FFF , 914px 784px #FFF , 420px 1015px #FFF , 1570px 475px #FFF , 698px 13px #FFF , 1320px 1163px #FFF , 1380px 91px #FFF , 295px 539px #FFF , 128px 1394px #FFF , 1847px 1669px #FFF , 1977px 1831px #FFF , 961px 218px #FFF , 93px 1935px #FFF , 1072px 400px #FFF , 1482px 1954px #FFF , 776px 50px #FFF , 1723px 1505px #FFF , 645px 272px #FFF , 824px 1381px #FFF , 453px 1720px #FFF , 976px 1866px #FFF , 843px 1343px #FFF , 1477px 1601px #FFF , 1235px 1419px #FFF , 8px 836px #FFF , 1968px 257px #FFF , 981px 218px #FFF , 547px 1252px #FFF , 1991px 378px #FFF , 1405px 734px #FFF , 869px 627px #FFF , 1068px 1886px #FFF , 1147px 28px #FFF , 172px 649px #FFF , 229px 411px #FFF , 1448px 717px #FFF , 1958px 1993px #FFF , 1069px 346px #FFF , 539px 167px #FFF , 463px 1555px #FFF , 1731px 1256px #FFF , 1234px 44px #FFF , 1563px 1772px #FFF , 778px 1104px #FFF , 1023px 575px #FFF , 945px 1865px #FFF , 447px 1107px #FFF , 1770px 731px #FFF , 1478px 432px #FFF , 610px 657px #FFF , 1598px 286px #FFF , 393px 1608px #FFF , 1205px 1979px #FFF , 752px 645px #FFF , 1452px 1974px #FFF , 763px 659px #FFF , 178px 1626px #FFF , 1222px 1215px #FFF , 87px 1251px #FFF , 1928px 805px #FFF , 465px 143px #FFF , 795px 676px #FFF , 1720px 353px #FFF , 556px 1714px #FFF , 718px 298px #FFF , 987px 135px #FFF , 510px 1624px #FFF , 973px 920px #FFF , 1949px 1611px #FFF , 1243px 1388px #FFF , 1040px 1321px #FFF , 1952px 1417px #FFF , 685px 1628px #FFF , 1653px 1302px #FFF , 986px 1948px #FFF , 1617px 1551px #FFF , 738px 1234px #FFF , 1285px 22px #FFF , 1816px 384px #FFF , 1033px 425px #FFF , 155px 1122px #FFF , 747px 210px #FFF , 1145px 132px #FFF , 1388px 412px #FFF , 315px 932px #FFF , 1054px 854px #FFF , 1764px 1532px #FFF , 481px 1853px #FFF , 1866px 87px #FFF , 420px 1530px #FFF , 824px 1547px #FFF , 1859px 1226px #FFF , 975px 441px #FFF , 985px 1227px #FFF , 775px 1621px #FFF , 652px 895px #FFF , 1703px 1887px #FFF , 1740px 811px #FFF , 755px 274px #FFF , 124px 1078px #FFF , 1006px 1078px #FFF , 1013px 1195px #FFF , 1433px 1644px #FFF , 1922px 164px #FFF , 912px 278px #FFF , 566px 917px #FFF , 204px 993px #FFF , 332px 585px #FFF , 226px 1682px #FFF , 200px 382px #FFF , 1844px 799px #FFF , 1121px 243px #FFF , 831px 1731px #FFF , 379px 442px #FFF , 324px 1023px #FFF , 531px 1543px #FFF , 854px 1227px #FFF , 131px 1918px #FFF , 258px 1761px #FFF , 1045px 1617px #FFF , 1914px 347px #FFF , 545px 67px #FFF , 309px 1028px #FFF , 1678px 1985px #FFF , 430px 536px #FFF , 744px 1680px #FFF , 1376px 340px #FFF , 1010px 617px #FFF , 850px 875px #FFF , 489px 1243px #FFF , 1093px 1965px #FFF , 1792px 1279px #FFF , 950px 424px #FFF , 572px 1019px #FFF , 427px 275px #FFF , 892px 194px #FFF , 1809px 1585px #FFF , 1557px 659px #FFF , 248px 244px #FFF , 1581px 1991px #FFF , 1283px 1528px #FFF , 840px 603px #FFF , 1681px 1448px #FFF , 942px 351px #FFF , 98px 1800px #FFF , 759px 119px #FFF , 228px 1584px #FFF , 1588px 1377px #FFF , 950px 525px #FFF , 1096px 1253px #FFF , 568px 1644px #FFF , 649px 749px #FFF , 1482px 1510px #FFF , 1732px 1855px #FFF , 1050px 1893px #FFF , 956px 1893px #FFF , 1536px 141px #FFF , 444px 1892px #FFF , 399px 935px #FFF , 525px 1640px #FFF , 114px 733px #FFF , 516px 748px #FFF , 1541px 94px #FFF , 979px 91px #FFF , 1540px 762px #FFF , 1210px 1505px #FFF , 162px 885px #FFF , 455px 1753px #FFF , 1050px 845px #FFF , 1840px 163px #FFF , 1607px 842px #FFF , 1029px 1170px #FFF , 1113px 881px #FFF , 1777px 1568px #FFF , 747px 1461px #FFF , 46px 1707px #FFF , 832px 1782px #FFF , 639px 1360px #FFF , 1952px 432px #FFF , 1725px 225px #FFF , 761px 711px #FFF , 175px 755px #FFF , 1422px 60px #FFF , 342px 1489px #FFF , 1435px 1032px #FFF , 1442px 486px #FFF , 966px 1070px #FFF , 950px 1016px #FFF , 232px 1958px #FFF , 787px 1454px #FFF , 218px 323px #FFF , 1556px 833px #FFF , 1914px 451px #FFF , 61px 1169px #FFF , 427px 1696px #FFF , 1522px 1983px #FFF , 1489px 650px #FFF , 1357px 801px #FFF , 994px 1304px #FFF , 1750px 1655px #FFF , 1769px 1541px #FFF , 1898px 1079px #FFF , 1183px 1485px #FFF , 1856px 1984px #FFF , 919px 784px #FFF , 192px 1897px #FFF , 1426px 1042px #FFF , 651px 1305px #FFF , 5px 428px #FFF , 1753px 1017px #FFF , 1853px 1411px #FFF , 1656px 218px #FFF , 726px 310px #FFF , 14px 1797px #FFF , 687px 1709px #FFF , 1717px 1640px #FFF , 1333px 721px #FFF , 1625px 1159px #FFF , 1127px 201px #FFF , 1069px 507px #FFF , 1639px 147px #FFF , 914px 1804px #FFF , 886px 1133px #FFF , 1247px 1875px #FFF , 1664px 1512px #FFF , 449px 112px #FFF , 1351px 603px #FFF , 1240px 1454px #FFF , 514px 1161px #FFF , 593px 1923px #FFF , 1973px 879px #FFF , 248px 480px #FFF , 415px 1540px #FFF , 268px 674px #FFF , 794px 1077px #FFF , 429px 239px #FFF , 1629px 7px #FFF , 807px 1543px #FFF , 1433px 1951px #FFF , 1953px 1691px #FFF , 176px 29px #FFF , 957px 788px #FFF , 65px 590px #FFF , 1332px 1449px #FFF , 1000px 1814px #FFF , 1018px 743px #FFF , 178px 1569px #FFF , 280px 1441px #FFF , 1057px 1112px #FFF , 608px 1789px #FFF , 1393px 1407px #FFF , 203px 1905px #FFF , 1844px 567px #FFF , 1383px 73px #FFF , 229px 1977px #FFF , 1290px 167px #FFF , 1241px 96px #FFF , 1712px 1008px #FFF , 920px 205px #FFF , 1653px 795px #FFF , 565px 528px #FFF , 893px 340px #FFF , 1709px 1152px #FFF , 464px 802px #FFF , 1920px 1872px #FFF , 983px 946px #FFF , 1941px 868px #FFF , 1409px 896px #FFF , 1963px 1613px #FFF , 597px 1042px #FFF , 1346px 835px #FFF , 1179px 1895px #FFF , 1754px 763px #FFF , 384px 1508px #FFF , 1114px 1430px #FFF , 1716px 148px #FFF , 925px 1611px #FFF , 1118px 348px #FFF , 1004px 257px #FFF , 1967px 567px #FFF , 1737px 1891px #FFF , 1422px 666px #FFF , 397px 1776px #FFF , 1673px 788px #FFF , 738px 647px #FFF , 1101px 67px #FFF , 556px 426px #FFF , 1685px 663px #FFF , 1538px 1643px #FFF , 358px 641px #FFF , 1471px 847px #FFF , 163px 1360px #FFF , 572px 1895px #FFF , 1051px 437px #FFF , 221px 1157px #FFF , 1206px 1748px #FFF , 476px 745px #FFF , 520px 1331px #FFF , 540px 424px #FFF , 1901px 285px #FFF , 1731px 1115px #FFF , 1190px 1248px #FFF , 1369px 493px #FFF , 456px 353px #FFF , 1857px 1116px #FFF , 1397px 855px #FFF , 1949px 46px #FFF , 663px 560px #FFF , 860px 580px #FFF , 1531px 5px #FFF , 550px 555px #FFF , 559px 953px #FFF , 286px 1728px #FFF , 421px 217px #FFF , 1216px 1260px #FFF , 479px 1642px #FFF , 1414px 1082px #FFF , 1953px 889px #FFF , 606px 707px #FFF , 1504px 1316px #FFF , 1670px 1348px #FFF , 466px 726px #FFF , 400px 657px #FFF , 1420px 861px #FFF , 1931px 1403px #FFF , 1930px 355px #FFF , 1635px 284px #FFF , 1642px 1979px #FFF , 675px 1522px #FFF , 593px 1431px #FFF , 1020px 1255px #FFF , 390px 1319px #FFF , 1971px 1388px #FFF , 1360px 1133px #FFF , 331px 556px #FFF , 1210px 720px #FFF , 770px 1452px #FFF , 1847px 29px #FFF , 1931px 358px #FFF , 1362px 810px #FFF , 1366px 1159px #FFF , 709px 561px #FFF , 1641px 1445px #FFF , 1699px 213px #FFF , 97px 82px #FFF , 153px 1850px #FFF , 1024px 1445px #FFF , 1387px 306px #FFF , 181px 633px #FFF , 1089px 1692px #FFF , 585px 581px #FFF , 1720px 1552px #FFF , 1721px 846px #FFF , 1431px 325px #FFF , 1016px 592px #FFF , 1160px 980px #FFF , 17px 1473px #FFF , 271px 323px #FFF , 1053px 696px #FFF , 1989px 1331px #FFF , 1632px 1699px #FFF , 769px 1358px #FFF , 969px 1414px #FFF , 1729px 1847px #FFF , 1079px 1615px #FFF , 1498px 373px #FFF , 890px 118px #FFF , 1505px 1459px #FFF , 1799px 61px #FFF , 245px 830px #FFF , 1768px 1399px #FFF , 871px 360px #FFF , 1305px 1731px #FFF , 1815px 1762px #FFF , 1055px 1932px #FFF , 744px 494px #FFF , 833px 367px #FFF , 273px 1629px #FFF , 1769px 1556px #FFF , 1709px 837px #FFF , 1525px 1998px #FFF , 1025px 712px #FFF , 963px 1653px #FFF , 1044px 860px #FFF , 690px 900px #FFF , 1257px 946px #FFF , 1017px 1169px #FFF , 485px 316px #FFF , 61px 1084px #FFF , 612px 934px #FFF , 787px 1381px #FFF , 1568px 68px #FFF , 481px 1624px #FFF , 281px 1943px #FFF , 1945px 1624px #FFF , 1247px 1073px #FFF , 1340px 1941px #FFF , 363px 1840px #FFF , 1299px 54px #FFF , 57px 1310px #FFF , 659px 797px #FFF , 578px 622px #FFF , 1624px 1824px #FFF , 634px 937px #FFF , 1059px 399px #FFF , 570px 150px #FFF , 1591px 467px #FFF , 1024px 1579px #FFF , 502px 1110px #FFF , 696px 1234px #FFF , 187px 1476px #FFF , 376px 380px #FFF , 538px 111px #FFF , 761px 259px #FFF , 1208px 218px #FFF , 1803px 1991px #FFF , 1949px 908px #FFF , 526px 336px #FFF , 1211px 613px #FFF , 194px 1738px #FFF , 1476px 1574px #FFF , 179px 1970px #FFF , 1384px 890px #FFF , 677px 902px #FFF , 130px 1635px #FFF , 1259px 640px #FFF , 927px 1995px #FFF , 1656px 607px #FFF , 510px 1725px #FFF , 1021px 1402px #FFF , 71px 1356px #FFF , 847px 1713px #FFF , 4px 95px #FFF , 626px 1451px #FFF , 703px 451px #FFF , 798px 1810px #FFF , 1083px 1167px #FFF , 920px 1737px #FFF , 791px 1938px #FFF , 446px 1114px #FFF , 1435px 51px #FFF , 282px 1054px #FFF , 859px 1144px #FFF , 39px 446px #FFF , 1048px 1212px #FFF , 1523px 405px #FFF , 1412px 983px #FFF , 1513px 201px #FFF , 1350px 120px #FFF , 1946px 1504px #FFF , 1356px 1895px #FFF , 106px 1304px #FFF , 1691px 910px #FFF , 432px 75px #FFF , 1253px 414px #FFF , 293px 1324px #FFF , 1882px 1545px #FFF , 1104px 210px #FFF , 1922px 1325px #FFF , 1159px 910px #FFF , 516px 548px #FFF , 1409px 1140px #FFF , 1774px 1012px #FFF , 424px 1273px #FFF , 1764px 501px #FFF , 480px 902px #FFF , 332px 1803px #FFF , 1111px 1302px #FFF , 1095px 643px #FFF , 123px 1827px #FFF , 942px 810px #FFF , 1082px 739px #FFF , 1694px 1723px #FFF , 503px 231px #FFF , 667px 1245px #FFF , 1304px 580px #FFF , 880px 1097px #FFF , 1354px 787px #FFF , 653px 1171px #FFF , 720px 670px #FFF , 76px 748px #FFF , 438px 286px #FFF , 459px 1889px #FFF , 1929px 1608px #FFF; +} + +#stars2 { + width: 2px; + height: 2px; + background: transparent; + box-shadow: 1268px 1782px #FFF , 1170px 1662px #FFF , 1607px 1239px #FFF , 812px 853px #FFF , 1862px 1850px #FFF , 1440px 778px #FFF , 1570px 455px #FFF , 627px 219px #FFF , 48px 88px #FFF , 1785px 648px #FFF , 1467px 31px #FFF , 1272px 1437px #FFF , 1312px 693px #FFF , 1355px 702px #FFF , 1640px 196px #FFF , 374px 1443px #FFF , 1837px 1734px #FFF , 1694px 656px #FFF , 590px 716px #FFF , 1304px 769px #FFF , 435px 1695px #FFF , 144px 1667px #FFF , 1672px 517px #FFF , 1925px 1639px #FFF , 1231px 726px #FFF , 1724px 1934px #FFF , 606px 1850px #FFF , 271px 447px #FFF , 4px 1142px #FFF , 1329px 498px #FFF , 113px 1284px #FFF , 93px 440px #FFF , 926px 1905px #FFF , 1270px 1689px #FFF , 1545px 1792px #FFF , 1693px 1625px #FFF , 433px 463px #FFF , 462px 305px #FFF , 1801px 888px #FFF , 381px 537px #FFF , 148px 264px #FFF , 1903px 1962px #FFF , 907px 864px #FFF , 379px 1833px #FFF , 655px 1449px #FFF , 1996px 751px #FFF , 1241px 567px #FFF , 1471px 417px #FFF , 1533px 289px #FFF , 461px 1679px #FFF , 1386px 1640px #FFF , 390px 1306px #FFF , 348px 297px #FFF , 1321px 1477px #FFF , 294px 1870px #FFF , 1484px 1426px #FFF , 9px 630px #FFF , 552px 1797px #FFF , 1023px 581px #FFF , 823px 1291px #FFF , 1630px 357px #FFF , 424px 1014px #FFF , 279px 641px #FFF , 1041px 251px #FFF , 620px 1921px #FFF , 1765px 1395px #FFF , 1049px 1638px #FFF , 1271px 935px #FFF , 1598px 146px #FFF , 1835px 1658px #FFF , 1125px 481px #FFF , 1974px 966px #FFF , 1203px 1703px #FFF , 607px 1305px #FFF , 453px 495px #FFF , 473px 356px #FFF , 871px 1571px #FFF , 1443px 1782px #FFF , 226px 1288px #FFF , 1911px 235px #FFF , 666px 1788px #FFF , 126px 1838px #FFF , 82px 707px #FFF , 1008px 1369px #FFF , 1738px 447px #FFF , 847px 979px #FFF , 1212px 1509px #FFF , 1189px 1865px #FFF , 1811px 1678px #FFF , 175px 1352px #FFF , 579px 375px #FFF , 1169px 652px #FFF , 1290px 337px #FFF , 911px 1218px #FFF , 494px 824px #FFF , 1324px 357px #FFF , 912px 1822px #FFF , 539px 1429px #FFF , 1215px 462px #FFF , 1887px 1689px #FFF , 486px 131px #FFF , 737px 1142px #FFF , 866px 1259px #FFF , 340px 978px #FFF , 1533px 1914px #FFF , 243px 1578px #FFF , 1011px 1229px #FFF , 543px 1601px #FFF , 1511px 379px #FFF , 1073px 275px #FFF , 884px 1721px #FFF , 1587px 1085px #FFF , 7px 421px #FFF , 1869px 48px #FFF , 288px 638px #FFF , 1836px 1219px #FFF , 187px 1997px #FFF , 1524px 248px #FFF , 614px 51px #FFF , 222px 450px #FFF , 1422px 131px #FFF , 412px 1110px #FFF , 298px 1134px #FFF , 1343px 343px #FFF , 705px 326px #FFF , 294px 151px #FFF , 1222px 1292px #FFF , 1358px 1229px #FFF , 368px 1300px #FFF , 551px 1621px #FFF , 164px 1863px #FFF , 278px 1990px #FFF , 393px 1067px #FFF , 1017px 864px #FFF , 2px 138px #FFF , 1839px 699px #FFF , 1573px 724px #FFF , 380px 1668px #FFF , 1032px 504px #FFF , 589px 1882px #FFF , 1772px 524px #FFF , 1525px 1414px #FFF , 821px 1357px #FFF , 774px 484px #FFF , 809px 96px #FFF , 270px 1682px #FFF , 460px 1618px #FFF , 163px 743px #FFF , 895px 903px #FFF , 1999px 1135px #FFF , 819px 28px #FFF , 986px 1056px #FFF , 240px 1103px #FFF , 1437px 100px #FFF , 1743px 528px #FFF , 1744px 674px #FFF , 442px 1907px #FFF , 98px 137px #FFF , 1707px 1788px #FFF , 1999px 263px #FFF , 830px 1859px #FFF , 1616px 1392px #FFF , 1326px 24px #FFF , 1368px 522px #FFF , 369px 1830px #FFF , 1522px 1385px #FFF , 1056px 1236px #FFF , 1088px 292px #FFF , 1206px 1804px #FFF , 125px 1516px #FFF , 1923px 1781px #FFF , 1652px 1170px #FFF , 1476px 415px #FFF , 199px 233px #FFF , 1062px 963px #FFF , 53px 1407px #FFF , 1246px 17px #FFF , 1932px 214px #FFF , 183px 647px #FFF , 423px 1009px #FFF , 1467px 97px #FFF , 591px 1159px #FFF , 41px 1886px #FFF , 781px 27px #FFF , 137px 742px #FFF , 726px 903px #FFF , 394px 914px #FFF , 778px 126px #FFF , 695px 70px #FFF , 1972px 1723px #FFF , 1210px 1036px #FFF , 1048px 1824px #FFF , 1102px 1646px #FFF , 1690px 928px #FFF , 984px 1171px #FFF , 1158px 518px #FFF , 1195px 106px #FFF , 1233px 643px #FFF , 694px 1671px #FFF , 1977px 1119px #FFF; + animation: animStar 100s linear infinite; +} +#stars2:after { + content: " "; + position: absolute; + top: 2000px; + width: 2px; + height: 2px; + background: transparent; + box-shadow: 1268px 1782px #FFF , 1170px 1662px #FFF , 1607px 1239px #FFF , 812px 853px #FFF , 1862px 1850px #FFF , 1440px 778px #FFF , 1570px 455px #FFF , 627px 219px #FFF , 48px 88px #FFF , 1785px 648px #FFF , 1467px 31px #FFF , 1272px 1437px #FFF , 1312px 693px #FFF , 1355px 702px #FFF , 1640px 196px #FFF , 374px 1443px #FFF , 1837px 1734px #FFF , 1694px 656px #FFF , 590px 716px #FFF , 1304px 769px #FFF , 435px 1695px #FFF , 144px 1667px #FFF , 1672px 517px #FFF , 1925px 1639px #FFF , 1231px 726px #FFF , 1724px 1934px #FFF , 606px 1850px #FFF , 271px 447px #FFF , 4px 1142px #FFF , 1329px 498px #FFF , 113px 1284px #FFF , 93px 440px #FFF , 926px 1905px #FFF , 1270px 1689px #FFF , 1545px 1792px #FFF , 1693px 1625px #FFF , 433px 463px #FFF , 462px 305px #FFF , 1801px 888px #FFF , 381px 537px #FFF , 148px 264px #FFF , 1903px 1962px #FFF , 907px 864px #FFF , 379px 1833px #FFF , 655px 1449px #FFF , 1996px 751px #FFF , 1241px 567px #FFF , 1471px 417px #FFF , 1533px 289px #FFF , 461px 1679px #FFF , 1386px 1640px #FFF , 390px 1306px #FFF , 348px 297px #FFF , 1321px 1477px #FFF , 294px 1870px #FFF , 1484px 1426px #FFF , 9px 630px #FFF , 552px 1797px #FFF , 1023px 581px #FFF , 823px 1291px #FFF , 1630px 357px #FFF , 424px 1014px #FFF , 279px 641px #FFF , 1041px 251px #FFF , 620px 1921px #FFF , 1765px 1395px #FFF , 1049px 1638px #FFF , 1271px 935px #FFF , 1598px 146px #FFF , 1835px 1658px #FFF , 1125px 481px #FFF , 1974px 966px #FFF , 1203px 1703px #FFF , 607px 1305px #FFF , 453px 495px #FFF , 473px 356px #FFF , 871px 1571px #FFF , 1443px 1782px #FFF , 226px 1288px #FFF , 1911px 235px #FFF , 666px 1788px #FFF , 126px 1838px #FFF , 82px 707px #FFF , 1008px 1369px #FFF , 1738px 447px #FFF , 847px 979px #FFF , 1212px 1509px #FFF , 1189px 1865px #FFF , 1811px 1678px #FFF , 175px 1352px #FFF , 579px 375px #FFF , 1169px 652px #FFF , 1290px 337px #FFF , 911px 1218px #FFF , 494px 824px #FFF , 1324px 357px #FFF , 912px 1822px #FFF , 539px 1429px #FFF , 1215px 462px #FFF , 1887px 1689px #FFF , 486px 131px #FFF , 737px 1142px #FFF , 866px 1259px #FFF , 340px 978px #FFF , 1533px 1914px #FFF , 243px 1578px #FFF , 1011px 1229px #FFF , 543px 1601px #FFF , 1511px 379px #FFF , 1073px 275px #FFF , 884px 1721px #FFF , 1587px 1085px #FFF , 7px 421px #FFF , 1869px 48px #FFF , 288px 638px #FFF , 1836px 1219px #FFF , 187px 1997px #FFF , 1524px 248px #FFF , 614px 51px #FFF , 222px 450px #FFF , 1422px 131px #FFF , 412px 1110px #FFF , 298px 1134px #FFF , 1343px 343px #FFF , 705px 326px #FFF , 294px 151px #FFF , 1222px 1292px #FFF , 1358px 1229px #FFF , 368px 1300px #FFF , 551px 1621px #FFF , 164px 1863px #FFF , 278px 1990px #FFF , 393px 1067px #FFF , 1017px 864px #FFF , 2px 138px #FFF , 1839px 699px #FFF , 1573px 724px #FFF , 380px 1668px #FFF , 1032px 504px #FFF , 589px 1882px #FFF , 1772px 524px #FFF , 1525px 1414px #FFF , 821px 1357px #FFF , 774px 484px #FFF , 809px 96px #FFF , 270px 1682px #FFF , 460px 1618px #FFF , 163px 743px #FFF , 895px 903px #FFF , 1999px 1135px #FFF , 819px 28px #FFF , 986px 1056px #FFF , 240px 1103px #FFF , 1437px 100px #FFF , 1743px 528px #FFF , 1744px 674px #FFF , 442px 1907px #FFF , 98px 137px #FFF , 1707px 1788px #FFF , 1999px 263px #FFF , 830px 1859px #FFF , 1616px 1392px #FFF , 1326px 24px #FFF , 1368px 522px #FFF , 369px 1830px #FFF , 1522px 1385px #FFF , 1056px 1236px #FFF , 1088px 292px #FFF , 1206px 1804px #FFF , 125px 1516px #FFF , 1923px 1781px #FFF , 1652px 1170px #FFF , 1476px 415px #FFF , 199px 233px #FFF , 1062px 963px #FFF , 53px 1407px #FFF , 1246px 17px #FFF , 1932px 214px #FFF , 183px 647px #FFF , 423px 1009px #FFF , 1467px 97px #FFF , 591px 1159px #FFF , 41px 1886px #FFF , 781px 27px #FFF , 137px 742px #FFF , 726px 903px #FFF , 394px 914px #FFF , 778px 126px #FFF , 695px 70px #FFF , 1972px 1723px #FFF , 1210px 1036px #FFF , 1048px 1824px #FFF , 1102px 1646px #FFF , 1690px 928px #FFF , 984px 1171px #FFF , 1158px 518px #FFF , 1195px 106px #FFF , 1233px 643px #FFF , 694px 1671px #FFF , 1977px 1119px #FFF; +} + +#stars3 { + width: 3px; + height: 3px; + background: transparent; + box-shadow: 47px 1408px #FFF , 1612px 1120px #FFF , 1461px 311px #FFF , 1902px 562px #FFF , 223px 1800px #FFF , 453px 522px #FFF , 1667px 760px #FFF , 1473px 6px #FFF , 619px 1125px #FFF , 1767px 185px #FFF , 1499px 281px #FFF , 1299px 617px #FFF , 187px 1463px #FFF , 1060px 1831px #FFF , 791px 1351px #FFF , 116px 890px #FFF , 1389px 1337px #FFF , 1516px 715px #FFF , 1034px 1169px #FFF , 1465px 677px #FFF , 280px 1524px #FFF , 522px 1299px #FFF , 284px 679px #FFF , 1790px 1845px #FFF , 1177px 1478px #FFF , 1958px 912px #FFF , 1789px 1935px #FFF , 569px 63px #FFF , 736px 1008px #FFF , 248px 677px #FFF , 968px 1475px #FFF , 1676px 125px #FFF , 654px 1779px #FFF , 185px 140px #FFF , 213px 1060px #FFF , 1711px 1961px #FFF , 48px 1403px #FFF , 1932px 1457px #FFF , 827px 351px #FFF , 329px 916px #FFF , 1181px 1120px #FFF , 188px 717px #FFF , 1415px 1127px #FFF , 1314px 1015px #FFF , 320px 1737px #FFF , 28px 1402px #FFF , 347px 1323px #FFF , 1850px 1835px #FFF , 1858px 331px #FFF , 1799px 1228px #FFF , 1448px 1513px #FFF , 291px 254px #FFF , 1376px 1929px #FFF , 1267px 1174px #FFF , 639px 491px #FFF , 1174px 792px #FFF , 102px 405px #FFF , 431px 1359px #FFF , 595px 1718px #FFF , 61px 306px #FFF , 41px 1269px #FFF , 1190px 848px #FFF , 857px 1406px #FFF , 1604px 933px #FFF , 1097px 1251px #FFF , 1475px 365px #FFF , 1087px 1972px #FFF , 867px 1293px #FFF , 1819px 1758px #FFF , 1004px 284px #FFF , 1116px 959px #FFF , 370px 263px #FFF , 602px 764px #FFF , 1621px 728px #FFF , 39px 1419px #FFF , 1565px 1241px #FFF , 753px 1096px #FFF , 541px 437px #FFF , 1745px 1383px #FFF , 485px 523px #FFF , 76px 1422px #FFF , 1558px 1406px #FFF , 1102px 1659px #FFF , 510px 930px #FFF , 693px 1651px #FFF , 1335px 1738px #FFF , 1605px 451px #FFF , 792px 1495px #FFF , 1899px 62px #FFF , 942px 617px #FFF , 792px 20px #FFF , 514px 478px #FFF , 274px 311px #FFF , 765px 929px #FFF , 946px 797px #FFF , 61px 1275px #FFF , 1550px 262px #FFF , 1441px 372px #FFF , 1465px 302px #FFF , 872px 332px #FFF; + animation: animStar 150s linear infinite; +} +#stars3:after { + content: " "; + position: absolute; + top: 2000px; + width: 3px; + height: 3px; + background: transparent; + box-shadow: 47px 1408px #FFF , 1612px 1120px #FFF , 1461px 311px #FFF , 1902px 562px #FFF , 223px 1800px #FFF , 453px 522px #FFF , 1667px 760px #FFF , 1473px 6px #FFF , 619px 1125px #FFF , 1767px 185px #FFF , 1499px 281px #FFF , 1299px 617px #FFF , 187px 1463px #FFF , 1060px 1831px #FFF , 791px 1351px #FFF , 116px 890px #FFF , 1389px 1337px #FFF , 1516px 715px #FFF , 1034px 1169px #FFF , 1465px 677px #FFF , 280px 1524px #FFF , 522px 1299px #FFF , 284px 679px #FFF , 1790px 1845px #FFF , 1177px 1478px #FFF , 1958px 912px #FFF , 1789px 1935px #FFF , 569px 63px #FFF , 736px 1008px #FFF , 248px 677px #FFF , 968px 1475px #FFF , 1676px 125px #FFF , 654px 1779px #FFF , 185px 140px #FFF , 213px 1060px #FFF , 1711px 1961px #FFF , 48px 1403px #FFF , 1932px 1457px #FFF , 827px 351px #FFF , 329px 916px #FFF , 1181px 1120px #FFF , 188px 717px #FFF , 1415px 1127px #FFF , 1314px 1015px #FFF , 320px 1737px #FFF , 28px 1402px #FFF , 347px 1323px #FFF , 1850px 1835px #FFF , 1858px 331px #FFF , 1799px 1228px #FFF , 1448px 1513px #FFF , 291px 254px #FFF , 1376px 1929px #FFF , 1267px 1174px #FFF , 639px 491px #FFF , 1174px 792px #FFF , 102px 405px #FFF , 431px 1359px #FFF , 595px 1718px #FFF , 61px 306px #FFF , 41px 1269px #FFF , 1190px 848px #FFF , 857px 1406px #FFF , 1604px 933px #FFF , 1097px 1251px #FFF , 1475px 365px #FFF , 1087px 1972px #FFF , 867px 1293px #FFF , 1819px 1758px #FFF , 1004px 284px #FFF , 1116px 959px #FFF , 370px 263px #FFF , 602px 764px #FFF , 1621px 728px #FFF , 39px 1419px #FFF , 1565px 1241px #FFF , 753px 1096px #FFF , 541px 437px #FFF , 1745px 1383px #FFF , 485px 523px #FFF , 76px 1422px #FFF , 1558px 1406px #FFF , 1102px 1659px #FFF , 510px 930px #FFF , 693px 1651px #FFF , 1335px 1738px #FFF , 1605px 451px #FFF , 792px 1495px #FFF , 1899px 62px #FFF , 942px 617px #FFF , 792px 20px #FFF , 514px 478px #FFF , 274px 311px #FFF , 765px 929px #FFF , 946px 797px #FFF , 61px 1275px #FFF , 1550px 262px #FFF , 1441px 372px #FFF , 1465px 302px #FFF , 872px 332px #FFF; +} + +#title { + position: absolute; + top: 50%; + left: 0; + right: 0; + color: #FFF; + text-align: center; + font-family: "Roboto", sans-serif; + font-weight: 300; + font-size: 50px; + letter-spacing: 10px; + margin-top: -60px; + padding-left: 10px; +} +#title span { + background: -webkit-linear-gradient(white, #38495a); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +@keyframes animStar { + from { + transform: translateY(0px); + } + to { + transform: translateY(-2000px); + } +} diff --git a/docs/assets/css/theme.css b/docs/assets/css/theme.css new file mode 100644 index 0000000..76b4963 --- /dev/null +++ b/docs/assets/css/theme.css @@ -0,0 +1,63 @@ +#header h3 { + margin: 2em; + max-width: 500px; +} + +#header a { + border-radius: 3px; + background-color: transparent; + border-color: #32a8ce; +} + +#header a:hover { + border-color: #32a8ce; + background-color: #32a8ce; +} + +#header .frameworks { + display: inline-block; + width: 130px; +} + +#header img { + width: 100%; +} + +#header { + margin-top: -24px; +} + +#header .text-muted { + margin-top: 20px; +} + +#intro, #installing { + padding-top: 2em; + font-size: 18px; +} + +#installing { + padding-bottom: 2em; +} + +#footer .app-block-footer { + background-color: rgb(27, 28, 29); + color: #99979c; + /*color: rgba(116, 119, 123, .5);*/ +} + +#footer a { + color: #fff; + font-weight: bolder; +} + +#footer li { + display: inline-block; +} +#footer li+li { + margin-left: 15px; +} + +h2, code, pre, .description { + text-align: left; +} diff --git a/docs/assets/css/toolkit.css b/docs/assets/css/toolkit.css new file mode 100644 index 0000000..5b18947 --- /dev/null +++ b/docs/assets/css/toolkit.css @@ -0,0 +1,8940 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +* { + box-sizing: border-box; +} +*:before, +*:after { + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.6; + color: #000; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #2527c7; + text-decoration: none; +} +a:hover, +a:focus { + color: #48416f; + 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.6; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 22px; + margin-bottom: 22px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 100; + line-height: 1.2; + 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: inherit; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 22px; + margin-bottom: 11px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 11px; + margin-bottom: 11px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 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 11px; +} +.lead { + margin-bottom: 22px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #aaaaaa; +} +.text-primary { + color: #685D9F; +} +a.text-primary:hover, +a.text-primary:focus { + color: #534a7f; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #685D9F; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #534a7f; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 10px; + margin: 44px 0 22px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 11px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 22px; +} +dt, +dd { + line-height: 1.6; +} +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 #aaaaaa; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 11px 22px; + margin: 0 0 22px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.6; + color: #aaaaaa; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 22px; + font-style: normal; + line-height: 1.6; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #2527c7; + background-color: #f4f2f9; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; +} +pre { + display: block; + padding: 10.5px; + margin: 0 0 11px; + font-size: 13px; + line-height: 1.6; + word-break: break-all; + word-wrap: break-word; + color: #fff; + /*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: 10px; + padding-right: 10px; +} +@media (min-width: 768px) { + .container { + width: 740px; + } +} +@media (min-width: 992px) { + .container { + width: 880px; + } +} +@media (min-width: 1200px) { + .container { + width: 1020px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 10px; + padding-right: 10px; +} +.row { + margin-left: -10px; + margin-right: -10px; +} +.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: 10px; + padding-right: 10px; +} +.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: #aaaaaa; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 22px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.6; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 16.5px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 22px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + 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.6; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 39px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.6; + color: #555555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + 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; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + border: 0; + background-color: transparent; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eeeeee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 39px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 22px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 36px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 34px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 40px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 48.75px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 39px; + height: 39px; + line-height: 39px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 27px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #404040; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 29px; +} +.form-horizontal .form-group { + margin-left: -10px; + margin-right: -10px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 10px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: 300; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.6; + 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: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #685D9F; + border-color: #5d548f; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #534a7f; + border-color: #29253e; +} +.btn-primary:hover { + color: #fff; + background-color: #534a7f; + border-color: #443d68; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #534a7f; + border-color: #443d68; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #443d68; + border-color: #29253e; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #685D9F; + border-color: #5d548f; +} +.btn-primary .badge { + color: #685D9F; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #FF3167; + border-color: #ff1854; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #fd0042; + border-color: #970028; +} +.btn-danger:hover { + color: #fff; + background-color: #fd0042; + border-color: #d90039; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #fd0042; + border-color: #d90039; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #d90039; + border-color: #970028; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #FF3167; + border-color: #ff1854; +} +.btn-danger .badge { + color: #FF3167; + background-color: #fff; +} +.btn-link { + color: #685D9F; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #48416f; + 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: #aaaaaa; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000; + 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; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.6; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #685D9F; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #aaaaaa; +} +.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.6; + color: #aaaaaa; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #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 { + z-index: 2; + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #aaaaaa; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #aaaaaa; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #685D9F; +} +.nav .nav-divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.6; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + 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: #685D9F; +} +.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: 22px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 10px; + padding-left: 10px; + 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: -10px; + margin-left: -10px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 14px 10px; + font-size: 18px; + line-height: 22px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -10px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 10px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7px -10px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 22px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 14px; + padding-bottom: 14px; + } +} +.navbar-form { + margin-left: -10px; + margin-right: -10px; + padding: 10px 10px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 5.5px; + margin-bottom: 5.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; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 5.5px; + margin-bottom: 5.5px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 14px; + margin-bottom: 14px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 10px; + margin-right: 10px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -10px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #fff; + border-color: transparent; +} +.navbar-default .navbar-brand { + color: #333333; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #1a1a1a; + 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: #333; + background-color: transparent; +} +.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: transparent; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: transparent; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: transparent; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: transparent; + color: #333; +} +@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: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #d0d0d0; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #d0d0d0; +} +.navbar-inverse .navbar-nav > li > a { + color: #d0d0d0; +} +.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: #d0d0d0; + } + .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: #d0d0d0; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #d0d0d0; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 22px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc; +} +.breadcrumb > .active { + color: #aaaaaa; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 22px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.6; + text-decoration: none; + color: #685D9F; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #48416f; + background-color: #eeeeee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + background-color: #685D9F; + border-color: #685D9F; + 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: #aaaaaa; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed; + pointer-events: none; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 22px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #aaaaaa; + background-color: #fff; + cursor: not-allowed; + pointer-events: none; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #aaaaaa; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #919191; +} +.label-primary { + background-color: #685D9F; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #534a7f; +} +.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: #FF3167; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #fd0042; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #aaaaaa; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #685D9F; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; + padding-left: 10px; + padding-right: 10px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 22px; + line-height: 1.6; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #685D9F; +} +.thumbnail .caption { + padding: 9px; + color: #000; +} +.alert { + padding: 15px; + margin-bottom: 22px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 22px; + margin-bottom: 22px; + background-color: #f5f5f5; + border-radius: 4px; + 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: 22px; + color: #fff; + text-align: center; + background-color: #685D9F; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-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: 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; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: 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: #FF3167; +} +.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: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + zoom: 1; + overflow: hidden; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #aaaaaa; + 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: #aaaaaa; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #685D9F; + border-color: #685D9F; +} +.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: #dfddeb; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 22px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 22px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #685D9F; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #685D9F; + border-color: #685D9F; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #685D9F; +} +.panel-primary > .panel-heading .badge { + color: #685D9F; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #685D9F; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + 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; +} +body { + font-weight: 300; + letter-spacing: -0.02em; +} +.lead { + font-size: 21px; + font-weight: 300; + line-height: 1.6; + letter-spacing: -0.02em; +} +@media (min-width: 768px) { + .lead { + font-size: 17px; + } +} +.list-spaced li { + margin-bottom: 3px; +} +.list-bordered li { + border-top: 1px solid #aaaaaa; +} +.list-bordered li:last-child { + border-bottom: 1px solid #aaaaaa; +} +.text-serif { + font-family: "Lora", Georgia, "Times New Roman", Times, serif; +} +.text-xs-left { + text-align: left; +} +.text-xs-right { + text-align: right; +} +.text-xs-center { + text-align: center; +} +@media (min-width: 768px) { + .text-sm-left { + text-align: left; + } + .text-sm-right { + text-align: right; + } + .text-sm-center { + text-align: center; + } +} +@media (min-width: 992px) { + .text-md-left { + text-align: left; + } + .text-md-right { + text-align: right; + } + .text-md-center { + text-align: center; + } +} +@media (min-width: 1200px) { + .text-lg-left { + text-align: left; + } + .text-lg-right { + text-align: right; + } + .text-lg-center { + text-align: center; + } +} +.alert-dark { + background-color: rgba(0, 0, 0, 0.9); + border-color: rgba(0, 0, 0, 0.8); + color: #fff; +} +.alert-dark hr { + border-top-color: rgba(0, 0, 0, 0.8); +} +.alert-dark .alert-link { + color: #e6e6e6; +} +.alert-dark .close { + text-shadow: 0 1px 0 #000; +} +.alert-dark .close:hover, +.alert-dark .close:focus { + color: #fff; +} +.alert-full { + border-radius: 0; +} +.btn { + font-size: 16px; + text-transform: none; + letter-spacing: normal; +} +.btn-borderless { + border: 0; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-more:after { + position: relative; + top: 1px; + content: '〉'; + display: inline-block; + padding-left: .3em; + color: inherit; +} +.btn-toolbar .btn-toolbar-item { + float: left; +} +.btn-toolbar > .btn-toolbar-item { + margin-left: 5px; +} +.btn-toolbar-divider { + float: left; + width: 1px; + height: 34px; + margin-left: 10px; + margin-right: 5px; + background-color: #eeeeee; +} +.btn-group-justified.btn-group-justified-spaced { + width: calc(110%); + margin-left: -5px; + border-spacing: 5px; +} +.nav > .nav-header { + padding-left: 15px; + padding-right: 15px; + margin-bottom: 5px; + font-size: 85%; + font-weight: normal; + letter-spacing: 1px; + color: #afafaf; + text-transform: uppercase; +} +.nav > li + .nav-header { + margin-top: 20px; +} +.with-top-navbar { + padding-top: 50px; +} +.navbar-nav > li > a > .badge { + margin-left: 5px; +} +.navbar-brand-icon { + float: left; + margin-right: 5px; +} +.navbar-default .navbar-brand-emphasized, +.navbar-default .navbar-brand-emphasized:hover, +.navbar-default .navbar-brand-emphasized:focus { + background-color: transparent; +} +.navbar-inverse .navbar-brand-emphasized, +.navbar-inverse .navbar-brand-emphasized:hover, +.navbar-inverse .navbar-brand-emphasized:focus { + color: #fff; + background-color: #080808; +} +.navbar-padded .navbar-header { + padding-left: 5px; + padding-right: 5px; +} +@media (min-width: 768px) { + .navbar-padded { + padding-top: 20px; + padding-bottom: 20px; + } +} +.navbar-form-control { + border: 0; + box-shadow: none; +} +.navbar-inverse .navbar-form-control { + background-color: #343434; +} +.navbar-inverse .navbar-form-control:focus { + color: #222; + background-color: #fff; + box-shadow: 0 0 6px rgba(255, 255, 255, 0.5); +} +.navbar-nav > .active > a, +.navbar-nav > .active > a:hover, +.navbar-nav > .active > a:focus { + font-weight: inherit; +} +.navbar-btn-avitar, +.navbar-btn-avitar:active, +.navbar-btn-avitar:hover, +.navbar-btn-avitar:focus, +.navbar-btn-avitar:hover:active, +.navbar-btn-avitar:active:focus { + padding: 0; + border: 0; + background: transparent; + outline: none !important; + box-shadow: none !important; +} +.navbar-btn-avitar img { + height: 35px; + width: 35px; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.6; +} +.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 { + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.6; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 14px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + 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: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: 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: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +@font-face { + font-family: "toolkit-entypo"; + src: url('../fonts/toolkit-entypo.eot'); + src: url('../fonts/toolkit-entypo.eot?#iefix') format('eot'), url('../fonts/toolkit-entypo.woff2') format('woff2'), url('../fonts/toolkit-entypo.woff') format('woff'), url('../fonts/toolkit-entypo.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +.icon:before { + position: relative; + top: 2px; + display: inline-block; + font-family: "toolkit-entypo"; + speak: none; + font-size: 100%; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.carousel .icon-chevron-thin-left, +.carousel .icon-chevron-thin-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel .icon-chevron-thin-left { + left: 50%; + margin-left: -10px; +} +.carousel .icon-chevron-thin-right { + right: 50%; + margin-right: -10px; +} +.icon-500px-with-circle:before { + content: "\EA01"; +} +.icon-500px:before { + content: "\EA02"; +} +.icon-add-to-list:before { + content: "\EA03"; +} +.icon-add-user:before { + content: "\EA04"; +} +.icon-address:before { + content: "\EA05"; +} +.icon-adjust:before { + content: "\EA06"; +} +.icon-air:before { + content: "\EA07"; +} +.icon-aircraft-landing:before { + content: "\EA08"; +} +.icon-aircraft-take-off:before { + content: "\EA09"; +} +.icon-aircraft:before { + content: "\EA0A"; +} +.icon-align-bottom:before { + content: "\EA0B"; +} +.icon-align-horizontal-middle:before { + content: "\EA0C"; +} +.icon-align-left:before { + content: "\EA0D"; +} +.icon-align-right:before { + content: "\EA0E"; +} +.icon-align-top:before { + content: "\EA0F"; +} +.icon-align-vertical-middle:before { + content: "\EA10"; +} +.icon-app-store:before { + content: "\EA11"; +} +.icon-archive:before { + content: "\EA12"; +} +.icon-area-graph:before { + content: "\EA13"; +} +.icon-arrow-bold-down:before { + content: "\EA14"; +} +.icon-arrow-bold-left:before { + content: "\EA15"; +} +.icon-arrow-bold-right:before { + content: "\EA16"; +} +.icon-arrow-bold-up:before { + content: "\EA17"; +} +.icon-arrow-down:before { + content: "\EA18"; +} +.icon-arrow-left:before { + content: "\EA19"; +} +.icon-arrow-long-down:before { + content: "\EA1A"; +} +.icon-arrow-long-left:before { + content: "\EA1B"; +} +.icon-arrow-long-right:before { + content: "\EA1C"; +} +.icon-arrow-long-up:before { + content: "\EA1D"; +} +.icon-arrow-right:before { + content: "\EA1E"; +} +.icon-arrow-up:before { + content: "\EA1F"; +} +.icon-arrow-with-circle-down:before { + content: "\EA20"; +} +.icon-arrow-with-circle-left:before { + content: "\EA21"; +} +.icon-arrow-with-circle-right:before { + content: "\EA22"; +} +.icon-arrow-with-circle-up:before { + content: "\EA23"; +} +.icon-attachment:before { + content: "\EA24"; +} +.icon-awareness-ribbon:before { + content: "\EA25"; +} +.icon-back-in-time:before { + content: "\EA26"; +} +.icon-back:before { + content: "\EA27"; +} +.icon-baidu:before { + content: "\EA28"; +} +.icon-bar-graph:before { + content: "\EA29"; +} +.icon-basecamp:before { + content: "\EA2A"; +} +.icon-battery:before { + content: "\EA2B"; +} +.icon-beamed-note:before { + content: "\EA2C"; +} +.icon-behance:before { + content: "\EA2D"; +} +.icon-bell:before { + content: "\EA2E"; +} +.icon-blackboard:before { + content: "\EA2F"; +} +.icon-block:before { + content: "\EA30"; +} +.icon-book:before { + content: "\EA31"; +} +.icon-bookmark:before { + content: "\EA32"; +} +.icon-bookmarks:before { + content: "\EA33"; +} +.icon-bowl:before { + content: "\EA34"; +} +.icon-box:before { + content: "\EA35"; +} +.icon-briefcase:before { + content: "\EA36"; +} +.icon-browser:before { + content: "\EA37"; +} +.icon-brush:before { + content: "\EA38"; +} +.icon-bucket:before { + content: "\EA39"; +} +.icon-bug:before { + content: "\EA3A"; +} +.icon-cake:before { + content: "\EA3B"; +} +.icon-calculator:before { + content: "\EA3C"; +} +.icon-calendar:before { + content: "\EA3D"; +} +.icon-camera:before { + content: "\EA3E"; +} +.icon-ccw:before { + content: "\EA3F"; +} +.icon-chat:before { + content: "\EA40"; +} +.icon-check:before { + content: "\EA41"; +} +.icon-chevron-down:before { + content: "\EA42"; +} +.icon-chevron-left:before { + content: "\EA43"; +} +.icon-chevron-right:before { + content: "\EA44"; +} +.icon-chevron-small-down:before { + content: "\EA45"; +} +.icon-chevron-small-left:before { + content: "\EA46"; +} +.icon-chevron-small-right:before { + content: "\EA47"; +} +.icon-chevron-small-up:before { + content: "\EA48"; +} +.icon-chevron-thin-down:before { + content: "\EA49"; +} +.icon-chevron-thin-left:before { + content: "\EA4A"; +} +.icon-chevron-thin-right:before { + content: "\EA4B"; +} +.icon-chevron-thin-up:before { + content: "\EA4C"; +} +.icon-chevron-up:before { + content: "\EA4D"; +} +.icon-chevron-with-circle-down:before { + content: "\EA4E"; +} +.icon-chevron-with-circle-left:before { + content: "\EA4F"; +} +.icon-chevron-with-circle-right:before { + content: "\EA50"; +} +.icon-chevron-with-circle-up:before { + content: "\EA51"; +} +.icon-circle-with-cross:before { + content: "\EA52"; +} +.icon-circle-with-minus:before { + content: "\EA53"; +} +.icon-circle-with-plus:before { + content: "\EA54"; +} +.icon-circle:before { + content: "\EA55"; +} +.icon-circular-graph:before { + content: "\EA56"; +} +.icon-clapperboard:before { + content: "\EA57"; +} +.icon-classic-computer:before { + content: "\EA58"; +} +.icon-clipboard:before { + content: "\EA59"; +} +.icon-clock:before { + content: "\EA5A"; +} +.icon-cloud:before { + content: "\EA5B"; +} +.icon-code:before { + content: "\EA5C"; +} +.icon-cog:before { + content: "\EA5D"; +} +.icon-colours:before { + content: "\EA5E"; +} +.icon-compass:before { + content: "\EA5F"; +} +.icon-controller-fast-backward:before { + content: "\EA60"; +} +.icon-controller-fast-forward:before { + content: "\EA61"; +} +.icon-controller-jump-to-start:before { + content: "\EA62"; +} +.icon-controller-next:before { + content: "\EA63"; +} +.icon-controller-paus:before { + content: "\EA64"; +} +.icon-controller-play:before { + content: "\EA65"; +} +.icon-controller-record:before { + content: "\EA66"; +} +.icon-controller-stop:before { + content: "\EA67"; +} +.icon-controller-volume:before { + content: "\EA68"; +} +.icon-copy:before { + content: "\EA69"; +} +.icon-creative-cloud:before { + content: "\EA6A"; +} +.icon-creative-commons-attribution:before { + content: "\EA6B"; +} +.icon-creative-commons-noderivs:before { + content: "\EA6C"; +} +.icon-creative-commons-noncommercial-eu:before { + content: "\EA6D"; +} +.icon-creative-commons-noncommercial-us:before { + content: "\EA6E"; +} +.icon-creative-commons-public-domain:before { + content: "\EA6F"; +} +.icon-creative-commons-remix:before { + content: "\EA70"; +} +.icon-creative-commons-share:before { + content: "\EA71"; +} +.icon-creative-commons-sharealike:before { + content: "\EA72"; +} +.icon-creative-commons:before { + content: "\EA73"; +} +.icon-credit-card:before { + content: "\EA74"; +} +.icon-credit:before { + content: "\EA75"; +} +.icon-crop:before { + content: "\EA76"; +} +.icon-cross:before { + content: "\EA77"; +} +.icon-cup:before { + content: "\EA78"; +} +.icon-cw:before { + content: "\EA79"; +} +.icon-cycle:before { + content: "\EA7A"; +} +.icon-database:before { + content: "\EA7B"; +} +.icon-dial-pad:before { + content: "\EA7C"; +} +.icon-direction:before { + content: "\EA7D"; +} +.icon-document-landscape:before { + content: "\EA7E"; +} +.icon-document:before { + content: "\EA7F"; +} +.icon-documents:before { + content: "\EA80"; +} +.icon-dot-single:before { + content: "\EA81"; +} +.icon-dots-three-horizontal:before { + content: "\EA82"; +} +.icon-dots-three-vertical:before { + content: "\EA83"; +} +.icon-dots-two-horizontal:before { + content: "\EA84"; +} +.icon-dots-two-vertical:before { + content: "\EA85"; +} +.icon-download:before { + content: "\EA86"; +} +.icon-dribbble-with-circle:before { + content: "\EA87"; +} +.icon-dribbble:before { + content: "\EA88"; +} +.icon-drink:before { + content: "\EA89"; +} +.icon-drive:before { + content: "\EA8A"; +} +.icon-drop:before { + content: "\EA8B"; +} +.icon-dropbox:before { + content: "\EA8C"; +} +.icon-edit:before { + content: "\EA8D"; +} +.icon-email:before { + content: "\EA8E"; +} +.icon-emoji-flirt:before { + content: "\EA8F"; +} +.icon-emoji-happy:before { + content: "\EA90"; +} +.icon-emoji-neutral:before { + content: "\EA91"; +} +.icon-emoji-sad:before { + content: "\EA92"; +} +.icon-erase:before { + content: "\EA93"; +} +.icon-eraser:before { + content: "\EA94"; +} +.icon-evernote:before { + content: "\EA95"; +} +.icon-export:before { + content: "\EA96"; +} +.icon-eye-with-line:before { + content: "\EA97"; +} +.icon-eye:before { + content: "\EA98"; +} +.icon-facebook-with-circle:before { + content: "\EA99"; +} +.icon-facebook:before { + content: "\EA9A"; +} +.icon-feather:before { + content: "\EA9B"; +} +.icon-fingerprint:before { + content: "\EA9C"; +} +.icon-flag:before { + content: "\EA9D"; +} +.icon-flash:before { + content: "\EA9E"; +} +.icon-flashlight:before { + content: "\EA9F"; +} +.icon-flat-brush:before { + content: "\EAA0"; +} +.icon-flattr:before { + content: "\EAA1"; +} +.icon-flickr-with-circle:before { + content: "\EAA2"; +} +.icon-flickr:before { + content: "\EAA3"; +} +.icon-flow-branch:before { + content: "\EAA4"; +} +.icon-flow-cascade:before { + content: "\EAA5"; +} +.icon-flow-line:before { + content: "\EAA6"; +} +.icon-flow-parallel:before { + content: "\EAA7"; +} +.icon-flow-tree:before { + content: "\EAA8"; +} +.icon-flower:before { + content: "\EAA9"; +} +.icon-folder-images:before { + content: "\EAAA"; +} +.icon-folder-music:before { + content: "\EAAB"; +} +.icon-folder-video:before { + content: "\EAAC"; +} +.icon-folder:before { + content: "\EAAD"; +} +.icon-forward:before { + content: "\EAAE"; +} +.icon-foursquare:before { + content: "\EAAF"; +} +.icon-funnel:before { + content: "\EAB0"; +} +.icon-game-controller:before { + content: "\EAB1"; +} +.icon-gauge:before { + content: "\EAB2"; +} +.icon-github-with-circle:before { + content: "\EAB3"; +} +.icon-github:before { + content: "\EAB4"; +} +.icon-globe:before { + content: "\EAB5"; +} +.icon-google-plus-with-circle:before { + content: "\EAB6"; +} +.icon-google-plus:before { + content: "\EAB7"; +} +.icon-google-drive:before { + content: "\EAB8"; +} +.icon-google-hangouts:before { + content: "\EAB9"; +} +.icon-google-play:before { + content: "\EABA"; +} +.icon-graduation-cap:before { + content: "\EABB"; +} +.icon-grid:before { + content: "\EABC"; +} +.icon-grooveshark:before { + content: "\EABD"; +} +.icon-hair-cross:before { + content: "\EABE"; +} +.icon-hand:before { + content: "\EABF"; +} +.icon-heart-outlined:before { + content: "\EAC0"; +} +.icon-heart:before { + content: "\EAC1"; +} +.icon-help-with-circle:before { + content: "\EAC2"; +} +.icon-help:before { + content: "\EAC3"; +} +.icon-home:before { + content: "\EAC4"; +} +.icon-hour-glass:before { + content: "\EAC5"; +} +.icon-houzz:before { + content: "\EAC6"; +} +.icon-icloud:before { + content: "\EAC7"; +} +.icon-image-inverted:before { + content: "\EAC8"; +} +.icon-image:before { + content: "\EAC9"; +} +.icon-images:before { + content: "\EACA"; +} +.icon-inbox:before { + content: "\EACB"; +} +.icon-infinity:before { + content: "\EACC"; +} +.icon-info-with-circle:before { + content: "\EACD"; +} +.icon-info:before { + content: "\EACE"; +} +.icon-instagram-with-circle:before { + content: "\EACF"; +} +.icon-instagram:before { + content: "\EAD0"; +} +.icon-install:before { + content: "\EAD1"; +} +.icon-key:before { + content: "\EAD2"; +} +.icon-keyboard:before { + content: "\EAD3"; +} +.icon-lab-flask:before { + content: "\EAD4"; +} +.icon-landline:before { + content: "\EAD5"; +} +.icon-language:before { + content: "\EAD6"; +} +.icon-laptop:before { + content: "\EAD7"; +} +.icon-lastfm-with-circle:before { + content: "\EAD8"; +} +.icon-lastfm:before { + content: "\EAD9"; +} +.icon-layers:before { + content: "\EADA"; +} +.icon-leaf:before { + content: "\EADB"; +} +.icon-level-down:before { + content: "\EADC"; +} +.icon-level-up:before { + content: "\EADD"; +} +.icon-lifebuoy:before { + content: "\EADE"; +} +.icon-light-bulb:before { + content: "\EADF"; +} +.icon-light-down:before { + content: "\EAE0"; +} +.icon-light-up:before { + content: "\EAE1"; +} +.icon-line-graph:before { + content: "\EAE2"; +} +.icon-link:before { + content: "\EAE3"; +} +.icon-linkedin-with-circle:before { + content: "\EAE4"; +} +.icon-linkedin:before { + content: "\EAE5"; +} +.icon-list:before { + content: "\EAE6"; +} +.icon-location-pin:before { + content: "\EAE7"; +} +.icon-location:before { + content: "\EAE8"; +} +.icon-lock-open:before { + content: "\EAE9"; +} +.icon-lock:before { + content: "\EAEA"; +} +.icon-log-out:before { + content: "\EAEB"; +} +.icon-login:before { + content: "\EAEC"; +} +.icon-loop:before { + content: "\EAED"; +} +.icon-magnet:before { + content: "\EAEE"; +} +.icon-magnifying-glass:before { + content: "\EAEF"; +} +.icon-mail-with-circle:before { + content: "\EAF0"; +} +.icon-mail:before { + content: "\EAF1"; +} +.icon-man:before { + content: "\EAF2"; +} +.icon-map:before { + content: "\EAF3"; +} +.icon-mask:before { + content: "\EAF4"; +} +.icon-medal:before { + content: "\EAF5"; +} +.icon-medium-with-circle:before { + content: "\EAF6"; +} +.icon-medium:before { + content: "\EAF7"; +} +.icon-megaphone:before { + content: "\EAF8"; +} +.icon-menu-white:before { + content: "\EAF9"; +} +.icon-menu:before { + content: "\EAFA"; +} +.icon-merge:before { + content: "\EAFB"; +} +.icon-message:before { + content: "\EAFC"; +} +.icon-mic:before { + content: "\EAFD"; +} +.icon-minus:before { + content: "\EAFE"; +} +.icon-mixi:before { + content: "\EAFF"; +} +.icon-mobile:before { + content: "\EB00"; +} +.icon-modern-mic:before { + content: "\EB01"; +} +.icon-moon:before { + content: "\EB02"; +} +.icon-mouse-pointer:before { + content: "\EB03"; +} +.icon-mouse:before { + content: "\EB04"; +} +.icon-music:before { + content: "\EB05"; +} +.icon-network:before { + content: "\EB06"; +} +.icon-new-message:before { + content: "\EB07"; +} +.icon-new:before { + content: "\EB08"; +} +.icon-news:before { + content: "\EB09"; +} +.icon-newsletter:before { + content: "\EB0A"; +} +.icon-note:before { + content: "\EB0B"; +} +.icon-notification:before { + content: "\EB0C"; +} +.icon-notifications-off:before { + content: "\EB0D"; +} +.icon-old-mobile:before { + content: "\EB0E"; +} +.icon-old-phone:before { + content: "\EB0F"; +} +.icon-onedrive:before { + content: "\EB10"; +} +.icon-open-book:before { + content: "\EB11"; +} +.icon-palette:before { + content: "\EB12"; +} +.icon-paper-plane:before { + content: "\EB13"; +} +.icon-paypal:before { + content: "\EB14"; +} +.icon-pencil:before { + content: "\EB15"; +} +.icon-phone:before { + content: "\EB16"; +} +.icon-picasa:before { + content: "\EB17"; +} +.icon-pie-chart:before { + content: "\EB18"; +} +.icon-pin:before { + content: "\EB19"; +} +.icon-pinterest-with-circle:before { + content: "\EB1A"; +} +.icon-pinterest:before { + content: "\EB1B"; +} +.icon-plus:before { + content: "\EB1C"; +} +.icon-popup:before { + content: "\EB1D"; +} +.icon-power-plug:before { + content: "\EB1E"; +} +.icon-price-ribbon:before { + content: "\EB1F"; +} +.icon-price-tag:before { + content: "\EB20"; +} +.icon-print:before { + content: "\EB21"; +} +.icon-progress-empty:before { + content: "\EB22"; +} +.icon-progress-full:before { + content: "\EB23"; +} +.icon-progress-one:before { + content: "\EB24"; +} +.icon-progress-two:before { + content: "\EB25"; +} +.icon-publish:before { + content: "\EB26"; +} +.icon-qq-with-circle:before { + content: "\EB27"; +} +.icon-qq:before { + content: "\EB28"; +} +.icon-quote:before { + content: "\EB29"; +} +.icon-radio:before { + content: "\EB2A"; +} +.icon-raft-with-circle:before { + content: "\EB2B"; +} +.icon-raft:before { + content: "\EB2C"; +} +.icon-rainbow:before { + content: "\EB2D"; +} +.icon-rdio-with-circle:before { + content: "\EB2E"; +} +.icon-rdio:before { + content: "\EB2F"; +} +.icon-remove-user:before { + content: "\EB30"; +} +.icon-renren:before { + content: "\EB31"; +} +.icon-reply-all:before { + content: "\EB32"; +} +.icon-reply:before { + content: "\EB33"; +} +.icon-resize-100:before { + content: "\EB34"; +} +.icon-resize-full-screen:before { + content: "\EB35"; +} +.icon-retweet:before { + content: "\EB36"; +} +.icon-rocket:before { + content: "\EB37"; +} +.icon-round-brush:before { + content: "\EB38"; +} +.icon-rss:before { + content: "\EB39"; +} +.icon-ruler:before { + content: "\EB3A"; +} +.icon-save:before { + content: "\EB3B"; +} +.icon-scissors:before { + content: "\EB3C"; +} +.icon-scribd:before { + content: "\EB3D"; +} +.icon-select-arrows:before { + content: "\EB3E"; +} +.icon-share-alternative:before { + content: "\EB3F"; +} +.icon-share-alternitive:before { + content: "\EB40"; +} +.icon-share:before { + content: "\EB41"; +} +.icon-shareable:before { + content: "\EB42"; +} +.icon-shield:before { + content: "\EB43"; +} +.icon-shop:before { + content: "\EB44"; +} +.icon-shopping-bag:before { + content: "\EB45"; +} +.icon-shopping-basket:before { + content: "\EB46"; +} +.icon-shopping-cart:before { + content: "\EB47"; +} +.icon-shuffle:before { + content: "\EB48"; +} +.icon-signal:before { + content: "\EB49"; +} +.icon-sina-weibo:before { + content: "\EB4A"; +} +.icon-skype-with-circle:before { + content: "\EB4B"; +} +.icon-skype:before { + content: "\EB4C"; +} +.icon-slideshare:before { + content: "\EB4D"; +} +.icon-smashing:before { + content: "\EB4E"; +} +.icon-sound-mix:before { + content: "\EB4F"; +} +.icon-sound-mute:before { + content: "\EB50"; +} +.icon-sound:before { + content: "\EB51"; +} +.icon-soundcloud:before { + content: "\EB52"; +} +.icon-sports-club:before { + content: "\EB53"; +} +.icon-spotify-with-circle:before { + content: "\EB54"; +} +.icon-spotify:before { + content: "\EB55"; +} +.icon-spreadsheet:before { + content: "\EB56"; +} +.icon-squared-cross:before { + content: "\EB57"; +} +.icon-squared-minus:before { + content: "\EB58"; +} +.icon-squared-plus:before { + content: "\EB59"; +} +.icon-star-outlined:before { + content: "\EB5A"; +} +.icon-star:before { + content: "\EB5B"; +} +.icon-stopwatch:before { + content: "\EB5C"; +} +.icon-stumbleupon-with-circle:before { + content: "\EB5D"; +} +.icon-stumbleupon:before { + content: "\EB5E"; +} +.icon-suitcase:before { + content: "\EB5F"; +} +.icon-swap:before { + content: "\EB60"; +} +.icon-swarm:before { + content: "\EB61"; +} +.icon-sweden:before { + content: "\EB62"; +} +.icon-switch:before { + content: "\EB63"; +} +.icon-tablet-mobile-combo:before { + content: "\EB64"; +} +.icon-tablet:before { + content: "\EB65"; +} +.icon-tag:before { + content: "\EB66"; +} +.icon-text-document-inverted:before { + content: "\EB67"; +} +.icon-text-document:before { + content: "\EB68"; +} +.icon-text:before { + content: "\EB69"; +} +.icon-thermometer:before { + content: "\EB6A"; +} +.icon-thumbs-down:before { + content: "\EB6B"; +} +.icon-thumbs-up:before { + content: "\EB6C"; +} +.icon-thunder-cloud:before { + content: "\EB6D"; +} +.icon-ticket:before { + content: "\EB6E"; +} +.icon-time-slot:before { + content: "\EB6F"; +} +.icon-tools:before { + content: "\EB70"; +} +.icon-traffic-cone:before { + content: "\EB71"; +} +.icon-trash:before { + content: "\EB72"; +} +.icon-tree:before { + content: "\EB73"; +} +.icon-triangle-down:before { + content: "\EB74"; +} +.icon-triangle-left:before { + content: "\EB75"; +} +.icon-triangle-right:before { + content: "\EB76"; +} +.icon-triangle-up:before { + content: "\EB77"; +} +.icon-tripadvisor:before { + content: "\EB78"; +} +.icon-trophy:before { + content: "\EB79"; +} +.icon-tumblr-with-circle:before { + content: "\EB7A"; +} +.icon-tumblr:before { + content: "\EB7B"; +} +.icon-tv:before { + content: "\EB7C"; +} +.icon-twitter-with-circle:before { + content: "\EB7D"; +} +.icon-twitter:before { + content: "\EB7E"; +} +.icon-typing:before { + content: "\EB7F"; +} +.icon-uninstall:before { + content: "\EB80"; +} +.icon-unread:before { + content: "\EB81"; +} +.icon-untag:before { + content: "\EB82"; +} +.icon-upload-to-cloud:before { + content: "\EB83"; +} +.icon-upload:before { + content: "\EB84"; +} +.icon-user:before { + content: "\EB85"; +} +.icon-users:before { + content: "\EB86"; +} +.icon-v-card:before { + content: "\EB87"; +} +.icon-video-camera:before { + content: "\EB88"; +} +.icon-video:before { + content: "\EB89"; +} +.icon-vimeo-with-circle:before { + content: "\EB8A"; +} +.icon-vimeo:before { + content: "\EB8B"; +} +.icon-vine-with-circle:before { + content: "\EB8C"; +} +.icon-vine:before { + content: "\EB8D"; +} +.icon-vinyl:before { + content: "\EB8E"; +} +.icon-vk-alternitive:before { + content: "\EB8F"; +} +.icon-vk-with-circle:before { + content: "\EB90"; +} +.icon-vk:before { + content: "\EB91"; +} +.icon-voicemail:before { + content: "\EB92"; +} +.icon-wallet:before { + content: "\EB93"; +} +.icon-warning:before { + content: "\EB94"; +} +.icon-water:before { + content: "\EB95"; +} +.icon-windows-store:before { + content: "\EB96"; +} +.icon-xing-with-circle:before { + content: "\EB97"; +} +.icon-xing:before { + content: "\EB98"; +} +.icon-yelp:before { + content: "\EB99"; +} +.icon-youko-with-circle:before { + content: "\EB9A"; +} +.icon-youko:before { + content: "\EB9B"; +} +.icon-youtube-with-circle:before { + content: "\EB9C"; +} +.icon-youtube:before { + content: "\EB9D"; +} +.pos-r { + position: relative !important; +} +.pos-a { + position: absolute !important; +} +.pos-f { + position: fixed !important; +} +.w-sm { + width: 25% !important; +} +.w-md { + width: 50% !important; +} +.w-lg { + width: 75% !important; +} +.w-full { + width: 100% !important; +} +.m-a-0 { + margin: 0 !important; +} +.m-t-0 { + margin-top: 0 !important; +} +.m-r-0 { + margin-right: 0 !important; +} +.m-b-0 { + margin-bottom: 0 !important; +} +.m-l-0 { + margin-left: 0 !important; +} +.m-x-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} +.m-y-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.m-a { + margin: 20px !important; +} +.m-t { + margin-top: 20px !important; +} +.m-r { + margin-right: 20px !important; +} +.m-b { + margin-bottom: 20px !important; +} +.m-l { + margin-left: 20px !important; +} +.m-x { + margin-right: 20px !important; + margin-left: 20px !important; +} +.m-y { + margin-top: 20px !important; + margin-bottom: 20px !important; +} +.m-x-auto { + margin-right: auto !important; + margin-left: auto !important; +} +.m-a-md { + margin: 30px !important; +} +.m-t-md { + margin-top: 30px !important; +} +.m-r-md { + margin-right: 30px !important; +} +.m-b-md { + margin-bottom: 30px !important; +} +.m-l-md { + margin-left: 30px !important; +} +.m-x-md { + margin-right: 30px !important; + margin-left: 30px !important; +} +.m-y-md { + margin-top: 30px !important; + margin-bottom: 30px !important; +} +.m-a-lg { + margin: 60px !important; +} +.m-t-lg { + margin-top: 60px !important; +} +.m-r-lg { + margin-right: 60px !important; +} +.m-b-lg { + margin-bottom: 60px !important; +} +.m-l-lg { + margin-left: 60px !important; +} +.m-x-lg { + margin-right: 60px !important; + margin-left: 60px !important; +} +.m-y-lg { + margin-top: 60px !important; + margin-bottom: 60px !important; +} +.p-a-0 { + padding: 0 !important; +} +.p-t-0 { + padding-top: 0 !important; +} +.p-r-0 { + padding-right: 0 !important; +} +.p-b-0 { + padding-bottom: 0 !important; +} +.p-l-0 { + padding-left: 0 !important; +} +.p-x-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} +.p-y-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.p-a { + padding: 20px !important; +} +.p-t { + padding-top: 20px !important; +} +.p-r { + padding-right: 20px !important; +} +.p-b { + padding-bottom: 20px !important; +} +.p-l { + padding-left: 20px !important; +} +.p-x { + padding-right: 20px !important; + padding-left: 20px !important; +} +.p-y { + padding-top: 20px !important; + padding-bottom: 20px !important; +} +.p-a-md { + padding: 30px !important; +} +.p-t-md { + padding-top: 30px !important; +} +.p-r-md { + padding-right: 30px !important; +} +.p-b-md { + padding-bottom: 30px !important; +} +.p-l-md { + padding-left: 30px !important; +} +.p-x-md { + padding-right: 30px !important; + padding-left: 30px !important; +} +.p-y-md { + padding-top: 30px !important; + padding-bottom: 30px !important; +} +.p-a-lg { + padding: 60px !important; +} +.p-t-lg { + padding-top: 60px !important; +} +.p-r-lg { + padding-right: 60px !important; +} +.p-b-lg { + padding-bottom: 60px !important; +} +.p-l-lg { + padding-left: 60px !important; +} +.p-x-lg { + padding-right: 60px !important; + padding-left: 60px !important; +} +.p-y-lg { + padding-top: 60px !important; + padding-bottom: 60px !important; +} +.text-inherit, +.text-inherit:hover, +.text-inherit:focus { + color: inherit; + text-decoration: inherit; +} +.nav-bordered > li { + float: left; +} +.nav-bordered > li > a { + display: inline-block; + padding: 10px 0; + font-weight: 300; + color: #000; + border-bottom: 4px solid transparent; +} +.nav-bordered > li > a:hover, +.nav-bordered > li > a:focus { + color: #685D9F; + background-color: transparent; +} +.nav-bordered > li + li { + margin-left: 30px; +} +.nav-bordered > li.active > a, +.nav-bordered > li.active > a:hover, +.nav-bordered > li.active > a:focus { + font-weight: 700; + color: #685D9F; + border-bottom-color: #685D9F; +} +.nav-bordered.nav-justified > li + li { + margin-left: 0; +} +.nav-bordered.nav-justified > li > a { + margin-bottom: 0; +} +.nav-bordered.nav-stacked > li { + float: none; + margin-left: 0; +} +.nav-bordered.nav-stacked > li + li { + margin-top: 0; +} +.nav-bordered.nav-stacked > li.active > a, +.nav-bordered.nav-stacked > li.active > a:hover, +.nav-bordered.nav-stacked > li.active > a:focus { + border-left-color: #685D9F; +} +.nav-bordered.nav-stacked > li > a { + display: block; + padding: 5px 10px 5px 30px; + border-bottom: 0; + border-left: 4px solid transparent; +} +.nav-bordered.nav-stacked > li > a:hover, +.nav-bordered.nav-stacked > li > a:focus { + border-left: 4px solid; +} +.nav-bordered.nav-stacked .nav-header { + padding-left: 34px; +} +.nav-bordered.nav-stacked .nav-divider { + height: 1px; + margin: 10px 0; + overflow: hidden; + background-color: rgba(255, 255, 255, 0.2); + margin-left: 34px; + margin-top: 20px; + margin-bottom: 25px; +} +.btn-default-outline { + color: #333; + background-color: transparent; + border-color: #333; +} +.btn-default-outline:focus, +.btn-default-outline.focus, +.btn-default-outline:hover, +.btn-default-outline:active, +.btn-default-outline.active, +.open > .dropdown-toggle.btn-default-outline { + color: #fff; + background-color: #333; + box-shadow: none; +} +.btn-default-outline.disabled, +.btn-default-outline[disabled], +fieldset[disabled] .btn-default-outline, +.btn-default-outline.disabled:hover, +.btn-default-outline[disabled]:hover, +fieldset[disabled] .btn-default-outline:hover, +.btn-default-outline.disabled:focus, +.btn-default-outline[disabled]:focus, +fieldset[disabled] .btn-default-outline:focus, +.btn-default-outline.disabled.focus, +.btn-default-outline[disabled].focus, +fieldset[disabled] .btn-default-outline.focus, +.btn-default-outline.disabled:active, +.btn-default-outline[disabled]:active, +fieldset[disabled] .btn-default-outline:active, +.btn-default-outline.disabled.active, +.btn-default-outline[disabled].active, +fieldset[disabled] .btn-default-outline.active { + border-color: #333; +} +.btn-default-outline .badge { + color: #fff; + background-color: #333; +} +.btn-primary-outline { + color: #5d548f; + background-color: transparent; + border-color: #5d548f; +} +.btn-primary-outline:focus, +.btn-primary-outline.focus, +.btn-primary-outline:hover, +.btn-primary-outline:active, +.btn-primary-outline.active, +.open > .dropdown-toggle.btn-primary-outline { + color: #fff; + background-color: #5d548f; + box-shadow: none; +} +.btn-primary-outline.disabled, +.btn-primary-outline[disabled], +fieldset[disabled] .btn-primary-outline, +.btn-primary-outline.disabled:hover, +.btn-primary-outline[disabled]:hover, +fieldset[disabled] .btn-primary-outline:hover, +.btn-primary-outline.disabled:focus, +.btn-primary-outline[disabled]:focus, +fieldset[disabled] .btn-primary-outline:focus, +.btn-primary-outline.disabled.focus, +.btn-primary-outline[disabled].focus, +fieldset[disabled] .btn-primary-outline.focus, +.btn-primary-outline.disabled:active, +.btn-primary-outline[disabled]:active, +fieldset[disabled] .btn-primary-outline:active, +.btn-primary-outline.disabled.active, +.btn-primary-outline[disabled].active, +fieldset[disabled] .btn-primary-outline.active { + border-color: #5d548f; +} +.btn-primary-outline .badge { + color: #fff; + background-color: #5d548f; +} +.btn-success-outline { + color: #4cae4c; + background-color: transparent; + border-color: #4cae4c; +} +.btn-success-outline:focus, +.btn-success-outline.focus, +.btn-success-outline:hover, +.btn-success-outline:active, +.btn-success-outline.active, +.open > .dropdown-toggle.btn-success-outline { + color: #fff; + background-color: #4cae4c; + box-shadow: none; +} +.btn-success-outline.disabled, +.btn-success-outline[disabled], +fieldset[disabled] .btn-success-outline, +.btn-success-outline.disabled:hover, +.btn-success-outline[disabled]:hover, +fieldset[disabled] .btn-success-outline:hover, +.btn-success-outline.disabled:focus, +.btn-success-outline[disabled]:focus, +fieldset[disabled] .btn-success-outline:focus, +.btn-success-outline.disabled.focus, +.btn-success-outline[disabled].focus, +fieldset[disabled] .btn-success-outline.focus, +.btn-success-outline.disabled:active, +.btn-success-outline[disabled]:active, +fieldset[disabled] .btn-success-outline:active, +.btn-success-outline.disabled.active, +.btn-success-outline[disabled].active, +fieldset[disabled] .btn-success-outline.active { + border-color: #4cae4c; +} +.btn-success-outline .badge { + color: #fff; + background-color: #4cae4c; +} +.btn-info-outline { + color: #46b8da; + background-color: transparent; + border-color: #46b8da; +} +.btn-info-outline:focus, +.btn-info-outline.focus, +.btn-info-outline:hover, +.btn-info-outline:active, +.btn-info-outline.active, +.open > .dropdown-toggle.btn-info-outline { + color: #fff; + background-color: #46b8da; + box-shadow: none; +} +.btn-info-outline.disabled, +.btn-info-outline[disabled], +fieldset[disabled] .btn-info-outline, +.btn-info-outline.disabled:hover, +.btn-info-outline[disabled]:hover, +fieldset[disabled] .btn-info-outline:hover, +.btn-info-outline.disabled:focus, +.btn-info-outline[disabled]:focus, +fieldset[disabled] .btn-info-outline:focus, +.btn-info-outline.disabled.focus, +.btn-info-outline[disabled].focus, +fieldset[disabled] .btn-info-outline.focus, +.btn-info-outline.disabled:active, +.btn-info-outline[disabled]:active, +fieldset[disabled] .btn-info-outline:active, +.btn-info-outline.disabled.active, +.btn-info-outline[disabled].active, +fieldset[disabled] .btn-info-outline.active { + border-color: #46b8da; +} +.btn-info-outline .badge { + color: #fff; + background-color: #46b8da; +} +.btn-warning-outline { + color: #eea236; + background-color: transparent; + border-color: #eea236; +} +.btn-warning-outline:focus, +.btn-warning-outline.focus, +.btn-warning-outline:hover, +.btn-warning-outline:active, +.btn-warning-outline.active, +.open > .dropdown-toggle.btn-warning-outline { + color: #fff; + background-color: #eea236; + box-shadow: none; +} +.btn-warning-outline.disabled, +.btn-warning-outline[disabled], +fieldset[disabled] .btn-warning-outline, +.btn-warning-outline.disabled:hover, +.btn-warning-outline[disabled]:hover, +fieldset[disabled] .btn-warning-outline:hover, +.btn-warning-outline.disabled:focus, +.btn-warning-outline[disabled]:focus, +fieldset[disabled] .btn-warning-outline:focus, +.btn-warning-outline.disabled.focus, +.btn-warning-outline[disabled].focus, +fieldset[disabled] .btn-warning-outline.focus, +.btn-warning-outline.disabled:active, +.btn-warning-outline[disabled]:active, +fieldset[disabled] .btn-warning-outline:active, +.btn-warning-outline.disabled.active, +.btn-warning-outline[disabled].active, +fieldset[disabled] .btn-warning-outline.active { + border-color: #eea236; +} +.btn-warning-outline .badge { + color: #fff; + background-color: #eea236; +} +.btn-danger-outline { + color: #ff1854; + background-color: transparent; + border-color: #ff1854; +} +.btn-danger-outline:focus, +.btn-danger-outline.focus, +.btn-danger-outline:hover, +.btn-danger-outline:active, +.btn-danger-outline.active, +.open > .dropdown-toggle.btn-danger-outline { + color: #fff; + background-color: #ff1854; + box-shadow: none; +} +.btn-danger-outline.disabled, +.btn-danger-outline[disabled], +fieldset[disabled] .btn-danger-outline, +.btn-danger-outline.disabled:hover, +.btn-danger-outline[disabled]:hover, +fieldset[disabled] .btn-danger-outline:hover, +.btn-danger-outline.disabled:focus, +.btn-danger-outline[disabled]:focus, +fieldset[disabled] .btn-danger-outline:focus, +.btn-danger-outline.disabled.focus, +.btn-danger-outline[disabled].focus, +fieldset[disabled] .btn-danger-outline.focus, +.btn-danger-outline.disabled:active, +.btn-danger-outline[disabled]:active, +fieldset[disabled] .btn-danger-outline:active, +.btn-danger-outline.disabled.active, +.btn-danger-outline[disabled].active, +fieldset[disabled] .btn-danger-outline.active { + border-color: #ff1854; +} +.btn-danger-outline .badge { + color: #fff; + background-color: #ff1854; +} +.btn-pill { + padding-left: 1.25em; + padding-right: 1.25em; + border-radius: 1000em; +} +.btn-square { + border-radius: 0; +} +.custom-select { + display: inline-block; + padding: 6px 36px 6px 12px; + font-size: 14px; + line-height: 1.6; + color: #555555; + vertical-align: middle; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) no-repeat right 12px center; + background-color: #fff; + background-clip: padding-box; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: none \9; + padding-right: 12px \9; +} +.custom-select:focus { + border-color: #66afe9; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.custom-select:disabled { + background-color: #eeeeee; + cursor: not-allowed; +} +.custom-select-sm { + padding-top: 3px; + padding-bottom: 3px; +} +.custom-control > label { + padding-left: 25px; + font-weight: normal; +} +.custom-control.radio-inline, +.custom-control.checkbox-inline { + padding-left: 25px; +} +.custom-control.radio-inline > label, +.custom-control.checkbox-inline > label { + padding-left: 0; +} +.custom-control input { + position: absolute; + opacity: 0; + z-index: -1; + /* Put the input behind the label so it doesn't overlay text */ +} +.custom-control-indicator { + position: absolute; + top: 1px; + left: 0; + display: block; + width: 18px; + height: 18px; + text-align: center; + background-color: #fff; + background-clip: padding-box; + background-size: 75% 75%; + background-position: center; + background-repeat: no-repeat; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/* Hover state */ +/* Uncomment if you need it, but be aware of the sticky iOS states. +.control:hover .control-indicator { + background-color: #ccc; +} +*/ +/* Focus */ +.custom-control input:focus ~ .custom-control-indicator { + box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; +} +/* Checked state */ +.custom-control input:checked ~ .custom-control-indicator { + background-color: #685D9F; + border-color: #685D9F; + box-shadow: none; +} +/* Active */ +.custom-control input:active ~ .custom-control-indicator { + background-color: #948cbc; + border-color: #948cbc; + box-shadow: none; +} +.custom-control input:disabled ~ .custom-control-indicator { + background-color: #f2f2f2; + border-color: rgba(0, 0, 0, 0.15); + box-shadow: none; + cursor: not-allowed; +} +/* Checkbox modifiers */ +.form-horizontal .custom-control-indicator { + margin-top: 6px; +} +.custom-checkbox .custom-control-indicator { + border-radius: .33rem; +} +.custom-checkbox input:checked ~ .custom-control-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=); +} +/* Radio modifiers */ +.custom-radio .custom-control-indicator { + border-radius: 50%; +} +.custom-radio input:checked ~ .custom-control-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==); +} +/* Alternately, use another character */ +.custom-control-x input:checked ~ .custom-control-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xLjQsMEwwLDEuNGwwLjcsMC43bDEuOCwxLjhMMC43LDUuN0wwLDYuNGwxLjQsMS40bDAuNy0wLjdsMS44LTEuOGwxLjgsMS44bDAuNywwLjdsMS40LTEuNEw3LjEsNS43DQoJTDUuMywzLjlsMS44LTEuOGwwLjctMC43TDYuNCwwTDUuNywwLjdMMy45LDIuNUwyLjEsMC43QzIuMSwwLjcsMS40LDAsMS40LDB6Ii8+DQo8L3N2Zz4NCg==); +} +.custom-control-dash input:checked ~ .custom-control-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K); +} +.custom-controls-inline .custom-control + .custom-control { + margin-left: 20px; +} +.custom-control-stacked .custom-control:after { + display: block; + content: ""; +} +.radio-inline, +.checkbox-inline { + position: relative; +} +.radio-inline label, +.checkbox-inline label { + margin-bottom: 0; + cursor: pointer; +} +.form-control { + -webkit-transition: none; + transition: none; +} +.form-control:focus { + color: #000; + background-color: #fff; + box-shadow: none; +} +.container-fill-height { + display: table; + width: 100%; + height: 100vh; +} +.container-fill-height .container-content-bottom, +.container-fill-height .container-content-middle { + display: table-cell; + vertical-align: middle; +} +.container-fill-height .container-content-bottom { + vertical-align: bottom; +} +@media (min-width: 768px) { + .container-fluid-spacious { + padding-right: 40px; + padding-left: 40px; + } +} +.block { + position: relative; + width: 100%; + padding: 60px 30px; + color: inherit; + background-color: #fff; + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} +.block-overflow-hidden { + overflow: hidden; +} +.block-bg-clip { + position: absolute; + top: -25px; + right: 0; + bottom: -25px; + left: 0; + overflow: hidden; +} +.block-bg { + position: absolute; + top: 25px; + right: -50px; + bottom: 25px; + left: -50px; + overflow: hidden; + -webkit-transform: rotate(-2deg); + transform: rotate(-2deg); +} +.block-bg-img { + position: absolute; + top: -25px; + bottom: -25px; + right: 0; + left: 0; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + -webkit-transform: rotate(2deg); + transform: rotate(2deg); +} +.block-inverse .block-bg-img { + background-color: #000000; +} +.block-bg-img-top { + background-position: top; +} +.block-bg-img-bottom { + background-position: bottom; +} +.block-bordered-lg:before, +.block-bordered:before { + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 10; + content: ''; + width: 33%; + margin: 0 auto; + border-top: 1px solid; + border-top-color: #ccc; + border-top-color: rgba(0, 0, 0, 0.1); +} +.block-bordered-lg:before { + width: 80%; +} +.block-paralax { + background-attachment: fixed; +} +.block-inverse { + color: #fff; + background-color: #000; +} +.block-inverse.block-bordered:before, +.block-inverse hr { + border-color: rgba(255, 255, 255, 0.2); +} +.block-inverse h1, +.block-inverse h2, +.block-inverse h3, +.block-inverse h4, +.block-inverse h5, +.block-inverse h6, +.block-inverse .h1, +.block-inverse .h2, +.block-inverse .h3, +.block-inverse .h4, +.block-inverse .h5, +.block-inverse .h6 { + color: inherit; +} +.block-inverse .btn-outline.btn-default { + color: #fff; + background-color: transparent; + border-color: #fff; +} +.block-inverse .btn-outline.btn-default:focus, +.block-inverse .btn-outline.btn-default.focus, +.block-inverse .btn-outline.btn-default:hover, +.block-inverse .btn-outline.btn-default:active, +.block-inverse .btn-outline.btn-default.active, +.open > .dropdown-toggle.block-inverse .btn-outline.btn-default { + color: #fff; + background-color: #fff; + box-shadow: none; +} +.block-inverse .btn-outline.btn-default.disabled, +.block-inverse .btn-outline.btn-default[disabled], +fieldset[disabled] .block-inverse .btn-outline.btn-default, +.block-inverse .btn-outline.btn-default.disabled:hover, +.block-inverse .btn-outline.btn-default[disabled]:hover, +fieldset[disabled] .block-inverse .btn-outline.btn-default:hover, +.block-inverse .btn-outline.btn-default.disabled:focus, +.block-inverse .btn-outline.btn-default[disabled]:focus, +fieldset[disabled] .block-inverse .btn-outline.btn-default:focus, +.block-inverse .btn-outline.btn-default.disabled.focus, +.block-inverse .btn-outline.btn-default[disabled].focus, +fieldset[disabled] .block-inverse .btn-outline.btn-default.focus, +.block-inverse .btn-outline.btn-default.disabled:active, +.block-inverse .btn-outline.btn-default[disabled]:active, +fieldset[disabled] .block-inverse .btn-outline.btn-default:active, +.block-inverse .btn-outline.btn-default.disabled.active, +.block-inverse .btn-outline.btn-default[disabled].active, +fieldset[disabled] .block-inverse .btn-outline.btn-default.active { + border-color: #fff; +} +.block-inverse .btn-outline.btn-default .badge { + color: #fff; + background-color: #fff; +} +.block-inverse .btn-outline.btn-default:focus, +.block-inverse .btn-outline:focus, +.block-inverse .btn-outline.btn-default.focus, +.block-inverse .btn-outline.focus, +.block-inverse .btn-outline.btn-default:hover, +.block-inverse .btn-outline:hover, +.block-inverse .btn-outline.btn-default:active, +.block-inverse .btn-outline:active, +.block-inverse .btn-outline.btn-default.active, +.block-inverse .btn-outline.active, +.open > .dropdown-toggle.block-inverse .btn-outline.btn-default, +.open > .dropdown-toggle.block-inverse .btn-outline { + color: #000; +} +.block-inverse .btn-outline.btn-default:focus:hover, +.block-inverse .btn-outline:focus:hover, +.block-inverse .btn-outline.btn-default.focus:hover, +.block-inverse .btn-outline.focus:hover, +.block-inverse .btn-outline.btn-default:hover:hover, +.block-inverse .btn-outline:hover:hover, +.block-inverse .btn-outline.btn-default:active:hover, +.block-inverse .btn-outline:active:hover, +.block-inverse .btn-outline.btn-default.active:hover, +.block-inverse .btn-outline.active:hover, +.open > .dropdown-toggle.block-inverse .btn-outline.btn-default:hover, +.open > .dropdown-toggle.block-inverse .btn-outline:hover, +.block-inverse .btn-outline.btn-default:focus:focus, +.block-inverse .btn-outline:focus:focus, +.block-inverse .btn-outline.btn-default.focus:focus, +.block-inverse .btn-outline.focus:focus, +.block-inverse .btn-outline.btn-default:hover:focus, +.block-inverse .btn-outline:hover:focus, +.block-inverse .btn-outline.btn-default:active:focus, +.block-inverse .btn-outline:active:focus, +.block-inverse .btn-outline.btn-default.active:focus, +.block-inverse .btn-outline.active:focus, +.open > .dropdown-toggle.block-inverse .btn-outline.btn-default:focus, +.open > .dropdown-toggle.block-inverse .btn-outline:focus, +.block-inverse .btn-outline.btn-default:focus.focus, +.block-inverse .btn-outline:focus.focus, +.block-inverse .btn-outline.btn-default.focus.focus, +.block-inverse .btn-outline.focus.focus, +.block-inverse .btn-outline.btn-default:hover.focus, +.block-inverse .btn-outline:hover.focus, +.block-inverse .btn-outline.btn-default:active.focus, +.block-inverse .btn-outline:active.focus, +.block-inverse .btn-outline.btn-default.active.focus, +.block-inverse .btn-outline.active.focus, +.open > .dropdown-toggle.block-inverse .btn-outline.btn-default.focus, +.open > .dropdown-toggle.block-inverse .btn-outline.focus { + color: #000; +} +.block-transparent { + background-color: transparent; +} +.block-background { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.block-background > iframe { + display: block; + width: 100%; + height: 100%; +} +.block-foreground { + position: relative; + z-index: 2; + display: inline-block; +} +.block-fill-height { + display: table; + width: 100%; + height: 110vh; +} +.block-label { + margin-bottom: 20px; + font-weight: 400; + letter-spacing: 4px; + color: #685D9F; + text-transform: uppercase; +} +.h1.block-title, +h1.block-title { + font-size: 56px; + line-height: 1; +} +.block .lead { + font-size: 18px; +} +.block-angle { + margin-bottom: -25px; +} +.block-xs-top, +.block-xs-bottom, +.block-xs-middle { + display: table-cell; + vertical-align: middle; +} +.block-xs-bottom { + vertical-align: bottom; +} +.block-xs-top { + vertical-align: top; +} +@media (min-width: 768px) { + .block-sm-top, + .block-sm-bottom, + .block-sm-middle { + display: table-cell; + vertical-align: middle; + } + .block-sm-bottom { + vertical-align: bottom; + } + .block-sm-top { + vertical-align: top; + } +} +@media (min-width: 992px) { + .block-md-top, + .block-md-bottom, + .block-md-middle { + display: table-cell; + vertical-align: middle; + } + .block-md-bottom { + vertical-align: bottom; + } + .block-md-top { + vertical-align: top; + } +} +@media (min-width: 1200px) { + .block-lg-top, + .block-lg-bottom, + .block-lg-middle { + display: table-cell; + vertical-align: middle; + } + .block-lg-bottom { + vertical-align: bottom; + } + .block-lg-top { + vertical-align: top; + } +} +@media screen and (min-width: 768px) { + .block { + padding: 120px 0; + } + .block:not(.block-secondary) .lead { + font-size: 21px; + } + .h1.block-title, + h1.block-title { + font-size: 72px; + } +} +.navbar-transparent { + background-color: transparent; + border-color: transparent; +} +.navbar-transparent .navbar-brand { + color: #fff; +} +.navbar-transparent .navbar-brand:hover, +.navbar-transparent .navbar-brand:focus { + color: #e6e6e6; + background-color: transparent; +} +.navbar-transparent .navbar-text { + color: #fff; +} +.navbar-transparent .navbar-nav > li > a { + color: #fff; +} +.navbar-transparent .navbar-nav > li > a:hover, +.navbar-transparent .navbar-nav > li > a:focus { + color: #e6e6e6; + background-color: transparent; +} +.navbar-transparent .navbar-nav > .active > a, +.navbar-transparent .navbar-nav > .active > a:hover, +.navbar-transparent .navbar-nav > .active > a:focus { + color: #e6e6e6; + background-color: transparent; +} +.navbar-transparent .navbar-nav > .disabled > a, +.navbar-transparent .navbar-nav > .disabled > a:hover, +.navbar-transparent .navbar-nav > .disabled > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-transparent .navbar-toggle { + border-color: #fff; +} +.navbar-transparent .navbar-toggle:hover, +.navbar-transparent .navbar-toggle:focus { + background-color: rgba(255, 255, 255, 0.1); +} +.navbar-transparent .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-transparent .navbar-collapse, +.navbar-transparent .navbar-form { + border-color: transparent; +} +.navbar-transparent .navbar-nav > .open > a, +.navbar-transparent .navbar-nav > .open > a:hover, +.navbar-transparent .navbar-nav > .open > a:focus { + background-color: transparent; + color: #e6e6e6; +} +@media (max-width: 767px) { + .navbar-transparent .navbar-nav .open .dropdown-menu > li > a { + color: #fff; + } + .navbar-transparent .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-transparent .navbar-nav .open .dropdown-menu > li > a:focus { + color: #e6e6e6; + background-color: transparent; + } + .navbar-transparent .navbar-nav .open .dropdown-menu > .active > a, + .navbar-transparent .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-transparent .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #e6e6e6; + background-color: transparent; + } + .navbar-transparent .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-transparent .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-transparent .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ffffff; + background-color: transparent; + } +} +.navbar-transparent .navbar-link { + color: #fff; +} +.navbar-transparent .navbar-link:hover { + color: #e6e6e6; +} +.navbar-transparent .btn-link { + color: #fff; +} +.navbar-transparent .btn-link:hover, +.navbar-transparent .btn-link:focus { + color: #e6e6e6; +} +.navbar-transparent .btn-link[disabled]:hover, +fieldset[disabled] .navbar-transparent .btn-link:hover, +.navbar-transparent .btn-link[disabled]:focus, +fieldset[disabled] .navbar-transparent .btn-link:focus { + color: #ffffff; +} +.carousel-light .carousel-control { + text-shadow: none; + color: rgba(0, 0, 0, 0.3); + background-image: none; +} +.carousel-light .carousel-indicators li { + background-color: rgba(0, 0, 0, 0.3); + border: 0; +} +.carousel-light .carousel-indicators .active { + background-color: #fff; + border: 1px solid #685D9F; +} +.callout { + position: relative; + display: table; + width: 100%; + margin-bottom: 22px; + color: #000; + background-color: #fff; + border-radius: 4px; + border: 1px solid #eeeeee; +} +.callout-content > p, +.callout-content > ul { + margin-bottom: 0; +} +.callout-content > p + p { + margin-top: 5px; +} +.callout-content, +.callout-secondary { + display: table-cell; + padding: 15px 20px; + vertical-align: middle; +} +.callout-secondary { + width: 1%; + background-color: #f5f7f9; + border-left: 1px solid #eeeeee; +} +.featured-list { + list-style: none; + padding: 0; +} +.featured-list .featured-list-icon-text { + font-size: 16px; +} +.featured-list li { + position: relative; + padding-left: 80px; +} +.featured-list-icon { + position: absolute; + top: 0; + left: 10px; + display: inline-block; + font-size: 36px; + text-align: center; + line-height: 0; + width: 60px; +} +.featured-list-bordered li { + position: relative; + padding-left: 110px; +} +.featured-list-bordered .featured-list-icon { + border: 1px solid #eeeeee; + border-radius: 50%; + height: 80px; + width: 80px; + line-height: 89px; +} +img[data-action="zoom"] { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; +} +.zoom-img, +.zoom-img-wrap { + position: relative; + z-index: 1080; + -webkit-transition: all 300ms; + transition: all 300ms; +} +img.zoom-img { + cursor: pointer; + cursor: -webkit-zoom-out; + cursor: -moz-zoom-out; +} +.zoom-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1079; + background: #000; + pointer-events: none; + opacity: 0; + -webkit-transition: opacity 300ms; + transition: opacity 300ms; +} +.zoom-overlay-open .zoom-overlay { + filter: "alpha(opacity=100)"; + opacity: 1; +} +.zoom-overlay-open, +.zoom-overlay-transitioning { + cursor: default; +} +.media, +.media-body { + overflow: visible; +} +.text-ribbon { + position: relative; + left: 20px; + padding-top: 10px; + padding-bottom: 10px; + background-color: #000; + overflow: hidden; +} +.text-ribbon:before { + position: absolute; + top: 0; + right: 100%; + content: ''; + width: 20px; + height: 100%; + bottom: 0; + background-color: inherit; +} +.text-ribbon span { + position: relative; + left: -10px; +} +@-moz-document url-prefix() { + .text-ribbon { + box-decoration-break: clone; + left: 0; + padding-left: 10px; + padding-right: 10px; + } + .text-ribbon span { + left: auto; + } + .text-ribbon:before { + display: none; + } +} +.text-ribbon-input { + display: block; + width: 100%; + margin: 0 0 10px; + padding: 10px; + font-weight: normal; + color: inherit; + background-color: #000; + border: 0; + -webkit-appearance: none; + border-radius: 0; +} +.text-ribbon-input::-moz-placeholder { + color: inherit; + opacity: 1; +} +.text-ribbon-input:-ms-input-placeholder { + color: inherit; +} +.text-ribbon-input::-webkit-input-placeholder { + color: inherit; +} +.text-ribbon-input:focus { + outline: none; +} +.text-ribbon-inputs-split:before, +.text-ribbon-inputs-split:after { + content: " "; + display: table; +} +.text-ribbon-inputs-split:after { + clear: both; +} +.text-ribbon-inputs-split:before, +.text-ribbon-inputs-split:after { + content: " "; + display: table; +} +.text-ribbon-inputs-split:after { + clear: both; +} +.text-ribbon-inputs-split .text-ribbon-input { + float: left; + width: 49%; +} +.text-ribbon-inputs-split .text-ribbon-input + .text-ribbon-input { + margin-left: 2%; +} +.text-ribbon-primary { + background-color: #685D9F; +} +.text-ribbon-success { + background-color: #5cb85c; +} +.text-ribbon-warning { + background-color: #f0ad4e; +} +.text-ribbon-danger { + background-color: #FF3167; +} +.text-ribbon-info { + background-color: #5bc0de; +} +.iconlist { + list-style: none; + padding-left: 0; +} +.iconlist > li { + padding: 5px 0 5px 25px; +} +.iconlist > li > .icon { + float: left; + margin-left: -25px; + opacity: .5; +} +.iconlist > .active { + color: #685D9F; +} +.iconlist > .active .icon { + opacity: 1; +} +.panel-bold { + background-color: #ddd; + border: 0; +} +.panel-bold hr { + background: #fff; +} +.panel-bold p { + color: rgba(255, 255, 255, 0.7); +} +.panel-bold.panel-default { + background-color: #ddd; +} +.panel-bold.panel-primary { + background-color: #685D9F; +} +.panel-bold.panel-success { + background-color: #5cb85c; +} +.panel-bold.panel-info { + background-color: #5bc0de; +} +.panel-bold.panel-warning { + background-color: #f0ad4e; +} +.panel-bold.panel-danger { + background-color: #FF3167; +} +.statcard-number { + margin-top: 0; + margin-bottom: 0; +} +.statcard-number .label { + padding: .125em .5em; + font-size: 50%; + vertical-align: middle; +} +.statcard-desc { + font-size: 85%; + letter-spacing: .15em; + color: #888888; + text-transform: uppercase; +} +.delta-indicator { + display: inline-block; + padding: .4em; + font-size: 12px; + vertical-align: middle; +} +.delta-positive { + color: #5cb85c; +} +.delta-positive:after { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.delta-negative { + color: #FF3167; +} +.delta-negative:after { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} +.statcard-primary, +.statcard-success, +.statcard-info, +.statcard-warning, +.statcard-danger { + color: #fff; + border-radius: 3px; +} +.statcard-primary .delta-negative, +.statcard-success .delta-negative, +.statcard-info .delta-negative, +.statcard-warning .delta-negative, +.statcard-danger .delta-negative, +.statcard-primary .delta-positive, +.statcard-success .delta-positive, +.statcard-info .delta-positive, +.statcard-warning .delta-positive, +.statcard-danger .delta-positive, +.statcard-primary .statcard-number, +.statcard-success .statcard-number, +.statcard-info .statcard-number, +.statcard-warning .statcard-number, +.statcard-danger .statcard-number { + font-weight: normal; + color: inherit; +} +.statcard-primary .statcard-desc, +.statcard-success .statcard-desc, +.statcard-info .statcard-desc, +.statcard-warning .statcard-desc, +.statcard-danger .statcard-desc { + font-weight: normal; + color: rgba(255, 255, 255, 0.65); +} +.statcard-primary .statcard-hr, +.statcard-success .statcard-hr, +.statcard-info .statcard-hr, +.statcard-warning .statcard-hr, +.statcard-danger .statcard-hr { + margin-left: -20px; + margin-right: -20px; + border-top-color: rgba(255, 255, 255, 0.2); +} +.statcard-primary { + background-color: #685D9F; +} +.statcard-success { + background-color: #5cb85c; +} +.statcard-info { + background-color: #5bc0de; +} +.statcard-warning { + background-color: #f0ad4e; +} +.statcard-danger { + background-color: #FF3167; +} +.pull-quote { + padding: 0; + margin: 0 auto; + border-left: 0; + text-align: center; +} +.pull-quote > p { + font-size: 18px; + margin-top: 30px; +} +.pull-quote > img { + width: 75px; + height: 75px; +} +.pull-quote > cite { + display: block; + margin-top: 30px; + font-size: 12px; + font-style: normal; + letter-spacing: .15em; + color: #aaaaaa; + text-transform: uppercase; +} +@media (min-width: 768px) { + .pull-quote { + max-width: 75%; + } + .pull-quote > cite { + font-size: 14px; + } + .pull-quote > img { + width: 100px; + height: 100px; + } + .pull-quote > p { + font-size: 20px; + } +} +.stage { + background-color: #fff; +} +.stage-shelf { + position: absolute; + top: 0; + bottom: 0; + left: 0; + z-index: 0; + width: 250px; + padding-top: 30px; + background-color: #f2f2f2; +} +.stage-shelf-right { + left: auto; + right: 0; +} +.stage-toggle { + position: absolute; + top: 20px; + left: 20px; + z-index: 100; + padding: 4px 12px; + color: #fff; + background-color: rgba(0, 0, 0, 0.1); + border-radius: 4px; +} +.stage-toggle:hover, +.stage-toggle:focus { + color: #fff; + text-decoration: none; + background-color: #685D9F; +} +.stage-toggle-right { + left: auto; + right: 20px; +} +h1.text-uppercase, +h2.text-uppercase, +h3.text-uppercase, +h4.text-uppercase, +h5.text-uppercase, +h6.text-uppercase, +.h1.text-uppercase, +.h2.text-uppercase, +.h3.text-uppercase, +.h4.text-uppercase, +.h5.text-uppercase, +.h6.text-uppercase { + letter-spacing: .15em; +} +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: inherit; +} +h6, +.h6 { + margin-bottom: 5px; + color: #bbbbbb; + text-transform: uppercase; +} + +/*# sourceMappingURL=toolkit-minimal.css.map */ diff --git a/docs/assets/js/toolkit.min.js b/docs/assets/js/toolkit.min.js new file mode 100644 index 0000000..f4adc3a --- /dev/null +++ b/docs/assets/js/toolkit.min.js @@ -0,0 +1,2 @@ ++function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.6",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.6",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>n?"top":!1;if("bottom"==this.affixed)return null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.6",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),t(i.target).is('input[type="radio"]')||t(i.target).is('input[type="checkbox"]')||i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.6",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(s)]);c&&c.addClass("active")}var p=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(p)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(p)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.6",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.6",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=" li:not(.disabled):visible a",l=n.find(".dropdown-menu"+r);if(l.length){var h=l.index(i.target);38==i.which&&h>0&&h--,40==i.which&&hdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),i.isInStateTrue()?void 0:(clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide())},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),c=s[0].offsetWidth,p=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+p>u.bottom?"top":"top"==r&&d.top-pu.width?"left":"left"==r&&d.left-ca.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.6",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){ +return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=this.options.selector||(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.6",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.enter"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);n||i.data("bs.enter",n=new o(this,s)),"string"==typeof e&&n[e]()})}var i='[data-transition="entrance"]',o=function(e,i){t.support.transition&&(this.element=e,this.options=i,this.handler=null,this.addEventListeners())};o.VERSION="3.3.5",o.DEFAULTS={easing:"cubic-bezier(.2,.7,.5,1)",duration:1200,delay:0},o.prototype.addEventListeners=function(){var e=t.proxy(this.checkForEnter,this);this.listener=t(window).on("scroll.enter",this.handler=function(){window.requestAnimationFrame(e)}),this.checkForEnter()},o.prototype.removeEventListeners=function(){t(window).off("scroll.enter",this.handler)},o.prototype.checkForEnter=function(){var e=window.innerHeight,i=this.element.getBoundingClientRect();e-i.top>=0&&setTimeout(t.proxy(this.triggerEntrance,this),this.options.delay)},o.prototype.triggerEntrance=function(){this.removeEventListeners(),t(this.element).css({"-webkit-transition":"-webkit-transform "+this.options.duration+"ms "+this.options.easing,"-ms-transition":"-ms-transform "+this.options.duration+"ms "+this.options.easing,transition:"transform "+this.options.duration+"ms "+this.options.easing}).css({"-webkit-transform":"none","-ms-transform":"none",transform:"none"}).trigger("enter.bs.enter")};var n=t.fn.enter;t.fn.enter=e,t.fn.enter.Constructor=o,t.fn.enter.noConflict=function(){return t.fn.enter=n,this},t(function(){t(i).enter()})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.image-grid"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e);n||o.data("bs.image-grid",n=new i(this,s)),"string"==typeof e&&n[e].call(o)})}var i=function(e,o){this.cleanWhitespace(e),this.row=0,this.rownum=1,this.elements=[],this.element=e,this.albumWidth=t(e).width(),this.images=t(e).children(),this.options=t.extend({},i.DEFAULTS,o),t(window).on("resize",t.proxy(this.handleResize,this)),this.processImages()};i.VERSION="3.3.1",i.TRANSITION_DURATION=350,i.DEFAULTS={padding:10,targetHeight:300,display:"inline-block"},i.prototype.handleResize=function(){this.row=0,this.rownum=1,this.elements=[],this.albumWidth=t(this.element).width(),this.images=t(this.element).children(),this.processImages()},i.prototype.processImages=function(){var e=this;this.images.each(function(i){var o=t(this),n=o.is("img")?o:o.find("img"),s="undefined"!=typeof n.data("width")?n.data("width"):n.width(),a="undefined"!=typeof n.data("height")?n.data("height"):n.height();n.data("width",s),n.data("height",a);var r=Math.ceil(s/a*e.options.targetHeight),l=Math.ceil(e.options.targetHeight);e.elements.push([this,r,l]),e.row+=r+e.options.padding,e.row>e.albumWidth&&e.elements.length&&(e.resizeRow(e.row-e.options.padding),e.row=0,e.elements=[],e.rownum+=1),e.images.length-1==i&&e.elements.length&&(e.resizeRow(e.row),e.row=0,e.elements=[],e.rownum+=1)})},i.prototype.resizeRow=function(e){for(var i=this.options.padding*(this.elements.length-1),o=this.albumWidth-i,n=o/(e-i),s=i,a=(e=t(window).width()-i.OFFSET||(this._activeZoomClose(!0),this._activeZoom=new i(o),this._activeZoom.zoomImage(),this._$window.on("scroll.zoom",t.proxy(this._scrollHandler,this)),this._$document.on("keyup.zoom",t.proxy(this._keyHandler,this)),this._$document.on("touchstart.zoom",t.proxy(this._touchStart,this)),document.addEventListener?document.addEventListener("click",this._boundClick,!0):document.attachEvent("onclick",this._boundClick,!0),"bubbles"in e?e.bubbles&&e.stopPropagation():e.cancelBubble=!0))},e.prototype._activeZoomClose=function(t){this._activeZoom&&(t?this._activeZoom.dispose():this._activeZoom.close(),this._$window.off(".zoom"),this._$document.off(".zoom"),document.removeEventListener("click",this._boundClick,!0),this._activeZoom=null)},e.prototype._scrollHandler=function(e){null===this._initialScrollPosition&&(this._initialScrollPosition=t(window).scrollTop());var i=this._initialScrollPosition-t(window).scrollTop();Math.abs(i)>=40&&this._activeZoomClose()},e.prototype._keyHandler=function(t){27==t.keyCode&&this._activeZoomClose()},e.prototype._clickHandler=function(t){t.preventDefault?t.preventDefault():event.returnValue=!1,"bubbles"in t?t.bubbles&&t.stopPropagation():t.cancelBubble=!0,this._activeZoomClose()},e.prototype._touchStart=function(e){this._initialTouchPosition=e.touches[0].pageY,t(e.target).on("touchmove.zoom",t.proxy(this._touchMove,this))},e.prototype._touchMove=function(e){Math.abs(e.touches[0].pageY-this._initialTouchPosition)>10&&(this._activeZoomClose(),t(e.target).off("touchmove.zoom"))},i.OFFSET=80,i._MAX_WIDTH=2560,i._MAX_HEIGHT=4096,i.prototype.zoomImage=function(){var e=document.createElement("img");e.onload=t.proxy(function(){this._fullHeight=Number(e.height),this._fullWidth=Number(e.width),this._zoomOriginal()},this),e.src=this._targetImage.src},i.prototype._zoomOriginal=function(){this._targetImageWrap=document.createElement("div"),this._targetImageWrap.className="zoom-img-wrap",this._targetImage.parentNode.insertBefore(this._targetImageWrap,this._targetImage),this._targetImageWrap.appendChild(this._targetImage),t(this._targetImage).addClass("zoom-img").attr("data-action","zoom-out"),this._overlay=document.createElement("div"),this._overlay.className="zoom-overlay",document.body.appendChild(this._overlay),this._calculateZoom(),this._triggerAnimation()},i.prototype._calculateZoom=function(){this._targetImage.offsetWidth;var e=this._fullWidth,o=this._fullHeight,n=(t(window).scrollTop(),e/this._targetImage.width),s=t(window).height()-i.OFFSET,a=t(window).width()-i.OFFSET,r=e/o,l=a/s;a>e&&s>o?this._imgScaleFactor=n:l>r?this._imgScaleFactor=s/o*n:this._imgScaleFactor=a/e*n},i.prototype._triggerAnimation=function(){this._targetImage.offsetWidth;var e=t(this._targetImage).offset(),i=t(window).scrollTop(),o=i+t(window).height()/2,n=t(window).width()/2,s=e.top+this._targetImage.height/2,a=e.left+this._targetImage.width/2;this._translateY=o-s,this._translateX=n-a;var r="scale("+this._imgScaleFactor+")",l="translate("+this._translateX+"px, "+this._translateY+"px)";t.support.transition&&(l+=" translateZ(0)"),t(this._targetImage).css({"-webkit-transform":r,"-ms-transform":r,transform:r}),t(this._targetImageWrap).css({"-webkit-transform":l,"-ms-transform":l,transform:l}),this._$body.addClass("zoom-overlay-open")},i.prototype.close=function(){return this._$body.removeClass("zoom-overlay-open").addClass("zoom-overlay-transitioning"),t(this._targetImage).css({"-webkit-transform":"","-ms-transform":"",transform:""}),t(this._targetImageWrap).css({"-webkit-transform":"","-ms-transform":"",transform:""}),t.support.transition?void t(this._targetImage).one(t.support.transition.end,t.proxy(this.dispose,this)).emulateTransitionEnd(300):this.dispose()},i.prototype.dispose=function(){this._targetImageWrap&&this._targetImageWrap.parentNode&&(t(this._targetImage).removeClass("zoom-img").attr("data-action","zoom"),this._targetImageWrap.parentNode.replaceChild(this._targetImage,this._targetImageWrap),this._overlay.parentNode.removeChild(this._overlay),this._$body.removeClass("zoom-overlay-transitioning"))},t(function(){(new e).listen()})}(jQuery); \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..4e23b5f --- /dev/null +++ b/docs/index.html @@ -0,0 +1,109 @@ +--- +# FritzBox.js Project Website +layout: default +title: FritzBox.js +--- + + +
+
+

+ FritzBox.js is an opensource asynchronous JavaScript implementation of + the non-public API of AVM's Fritz!Box, built by + Sander Laarhoven and + contributors. +

+

+ The goal of this project is to create an easy to use and open way to communicate with Fritz!Box. + Help by making pull requests and opening issues on + GitHub. + All code is documented with Documentation.js +

+
+
+
+ +
+

Getting Started

+

+ FritzBox.js is future-proof and uses async/await promises. This means that you need to run NodeJS version + 7.6.0 or newer. + If your NodeJS version is between 7.0.0 and 7.5.0 you can use the harmony + flag --harmony-async-await to make use of the async/await promises. +

+

{% highlight javascript %}npm install fritzbox.js{% endhighlight %}

+ +

+ This package was tested on Fritz!Box 7390 and 7490, with firmware versions 6.53, 6.51 and 6.83. +

+

+ Take a look at the test files for some examples. +

+
+ +
+ diff --git a/index.js b/index.js index a1d6147..8ed5fd1 100644 --- a/index.js +++ b/index.js @@ -1,8 +1,10 @@ /** * FritzBox.js - * https://git.io/fritzbox * Licensed under the MIT License. * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. + * + * Source-code available on GitHub. + * https://git.io/fritzbox */ const fritzConfig = { @@ -10,15 +12,25 @@ const fritzConfig = { debug: require('./package.json').options.debug } -const fritzRequest = require('./src/request.js') -const fritzLogin = require('./src/login.js') -const fritzFon = require('./src/fon.js') -const fritzDect = require('./src/dect.js') -const fritzWlan = require('./src/wlan.js') +const dir = 'src' +const fritzLogin = require('./' + dir + '/login.js') +const fritzSystem = require('./' + dir + '/system.js') +const fritzFon = require('./' + dir + '/fon.js') +const fritzDect = require('./' + dir + '/dect.js') +const fritzWlan = require('./' + dir + '/wlan.js') const fritz = Object.assign( - {}, fritzConfig, fritzRequest, fritzLogin, + {}, fritzConfig, fritzSystem, fritzLogin, fritzFon, fritzDect, fritzWlan ) +process.on('unhandledRejection', function (reason, r) { + console.log('\x1b[31m[FritzBox.js] Encountered unhandled Promise rejection.\n' + + 'The script has been stopped. See the full stack trace below for more information.\n' + + 'If you think this has to do with FritzBox.js directly,\n' + + 'please do no hesitate to open an issue on GitHub.\n') + console.log(reason, r) + process.exit(1) +}) + module.exports = fritz diff --git a/package.json b/package.json index e57a9d1..83a0edd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fritzbox.js", - "version": "1.3.1", + "version": "2.0.0", "author": "Sander Laarhoven ", "description": "The most powerful Fritz!Box API for NodeJS.", "homepage": "https://git.io/fritzbox", @@ -29,23 +29,33 @@ }, "main": "index.js", "scripts": { - "test": "standard" + "test": "standard", + "local-test": "test/ci.sh", + "build-docs": "documentation build --github --sort-order=alpha --output=docs/api --format=html src/**", + "watch-docs": "documentation serve --watch --sort-order=alpha src/**" }, "dependencies": { + "crypto": "^0.0.3", + "csvjson": "^3.0.0", "request": "^2.79.0", "request-promise": "^4.1.1", - "csvjson": "^3.0.0", - "crypto": "^0.0.3", + "xml-to-json-promise": "^0.0.3", "xml2js": "^0.4.17" }, "devDependencies": { "standard": "^8.6.0" }, + "standard": { + "ignore": [ + "/docs/**" + ] + }, "options": { "protocol": "https", "server": "fritz.box", "username": "xxx", "password": "xxx", + "callmonitorport": "1012", "debug": false } } diff --git a/src/dect.js b/src/dect.js index bf89217..c97ef76 100644 --- a/src/dect.js +++ b/src/dect.js @@ -1,88 +1,79 @@ /** - * FritzBox.js - * https://git.io/fritzbox - * Licensed under the MIT License. - * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. + * Fritz!Box DECT and Smart Home functions. + * @module fritzDect */ let fritzDect = {} const fritzLogin = require('./login.js') const fritzRequest = require('./request.js') +const fritzSystem = require('./system.js') /** * Get all smart devices and groups. - * @param {object} options - * @return {Promise} + * + * @param {Object} options - FritzBox.js options object. + * @return {Array} An array of all found smart devices. */ -fritzDect.getSmartDevices = (options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - - // Use the session id to obtain the list of registered smart devices. - .then((sid) => { - options.sid = sid - return fritzRequest.request('/myfritz/areas/homeauto.lua?ajax_id=1&cmd=getData', 'GET', options) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) - - .then((response) => { - return resolve(JSON.parse(response.body).devices) - }) - - .catch((error) => { - console.log('[FritzDect] getSmartDevices failed.') - return reject(error) - }) - }) +fritzDect.getSmartDevices = async (options) => { + const path = '/myfritz/areas/homeauto.lua?ajax_id=1&cmd=getData' + const response = await fritzRequest.request(path, 'GET', options) + + if (response.error) return response + + return JSON.parse(response.body).devices } /** * Toggle a Fritz DECT switch on or off. - * @param {integer} deviceId - * @param {integer} value 1 (on) or 0 (off) - * @param {object} options - * @return {Promise} + * @param {integer} deviceId - The Id of the smart home device. + * @param {integer} value - Turn on (1) or off (0). + * @param {Object} options - FritzBox.js options object. + * @return {Object} An object with message and deviceId. */ -fritzDect.toggleSwitch = (deviceId, value, options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - - .then((sid) => { - options.sid = sid - let path = '/myfritz/areas/homeauto.lua?ajax_id=' + - Math.floor(Math.random() * 1000, 2) + - '&cmd=switchChange&cmdValue=' + - value + '&deviceId=' + deviceId - return fritzRequest.request(path, 'GET', options) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) - - .then((response) => { - return resolve(response.body) - }) - - .catch((error) => { - console.log('[FritzDect] toggleSwitch failed.') - return reject(error) - }) - }) +fritzDect.toggleSwitch = async (deviceId, value, options) => { + const version = await fritzSystem.getVersionNumber(options) + if (version.error) return version + + let response + + if (version >= 683) { + // Post 06.83 uses a POST request. + + if (!options.sid) { + options.sid = await fritzLogin.getSessionId(options) + if (options.sid.error) return options.sid + } + + const path = '/myfritz/areas/homeauto.lua' + const form = { + sid: options.sid, + ajax_id: Math.floor(Math.random() * 10000, 2), + cmd: 'switchChange', + cmdValue: value, + deviceId: deviceId + } + response = await fritzRequest.request(path, 'POST', options, false, false, form) + } else { + // Pre 06.83 used a GET request. + const path = '/myfritz/areas/homeauto.lua?ajax_id=' + + Math.floor(Math.random() * 10000, 2) + + '&cmd=switchChange&cmdValue=' + + value + '&deviceId=' + deviceId + response = await fritzRequest.request(path, 'GET', options) + } + + if (response.error) return response + + const responseObject = JSON.parse(response.body) + + if (responseObject.status !== 'switchStateChangedSend') { + return { error: { message: 'Switch state not changed.' } } + } + + return { message: 'Set switch to given state.', deviceId: responseObject.deviceId } } -/** - * Export fritzDect. - */ +// Export fritzDect. module.exports = fritzDect diff --git a/src/fon.js b/src/fon.js index 3e58701..f6104bf 100644 --- a/src/fon.js +++ b/src/fon.js @@ -1,8 +1,6 @@ /** - * FritzBox.js - * https://git.io/fritzbox - * Licensed under the MIT License. - * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. + * Fritz!Fon functions. + * @module fritzFon */ let fritzFon = {} @@ -10,252 +8,346 @@ let fritzFon = {} const fritzLogin = require('./login.js') const fritzRequest = require('./request.js') const fritzFormat = require('./format.js') +const fritzSystem = require('./system.js') + +const net = require('net') +const events = require('events') /** * Get the history of telephone calls. - * @param {object} options Options object - * @return {Promise} Object with telephony calls. + * @param {Object} options - FritzBox.js options object. + * @return {Array} Array of telephone call history. */ -fritzFon.getCalls = (options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - - .then((sid) => { - options.sid = sid - return fritzRequest.request('/fon_num/foncalls_list.lua?csv=', 'GET', options) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) +fritzFon.getCalls = async (options) => { + const path = '/fon_num/foncalls_list.lua?csv=' + const response = await fritzRequest.request(path, 'GET', options) - .then((response) => { - return fritzFormat.callsCsvToJson(response.body) - }) + if (response.error) return response - .then((calls) => { - return resolve(fritzFormat.calls(calls)) - }) + const csvCalls = response.body + const jsonCalls = await fritzFormat.callsCsvToJson(csvCalls) - .catch((error) => { - console.log('[FritzFon] getCalls failed.') - return reject(error) - }) - }) + const formattedCalls = fritzFormat.calls(jsonCalls) + + return formattedCalls } /** * Get Telephone Answering Machine (TAM) Messages. - * @param {object} options Options object - * @return {Promise} Object with messages + * @param {Object} options - FritzBox.js options object. + * @return {Array} Array with TAM messages. */ -fritzFon.getTamMessages = (options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - - // Use the session id to get a list of the last TAM messages. - .then((sid) => { - options.sid = sid - return fritzRequest.request('/myfritz/areas/answer.lua?ajax_id=1', 'GET', options) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) +fritzFon.getTamMessages = async (options) => { + const version = await fritzSystem.getVersionNumber(options) + + if (version.error) return version + + let tamMessages + + if (version >= 683) { + /* The following works with Fritz!Box OS 6.83 and newer. */ + + // Get a session ID for the POST request first. + if (!options.sid) { + options.sid = await fritzLogin.getSessionId(options) + if (options.sid.error) return options.sid + } + + // Prepare request options + options.removeSidFromUri = true + const path = '/myfritz/areas/calls.lua' + const form = { + sid: options.sid, + ajax_id: 1234 + } + + const response = await fritzRequest.request(path, 'POST', options, false, false, form) + if (response.error) return response + let calls = JSON.parse(response.body).calls + + // Filter only TAM messages. + tamMessages = [] + for (var call in calls) { + if (calls[call].tam_data) { + tamMessages.push(calls[call].tam_data) } - return response - }) + } + } else { + /* The following works with Fritz!Box OS 6.53 and lower. */ - .then((response) => { - return fritzFormat.tamMessages(JSON.parse(response.body).tamcalls) - }) + const path = '/myfritz/areas/answer.lua?ajax_id=1' + const response = await fritzRequest.request(path, 'GET', options) + if (response.error) return response - .then((messages) => { - return resolve(messages) - }) + tamMessages = JSON.parse(response.body).tamcalls + } - .catch((error) => { - console.log('[FritzFon] getTamMessages failed.') - return reject(error) - }) - }) + // Fortunately, the returned objects remain somewhat the same. + const formtattedTamMessages = fritzFormat.tamMessages(tamMessages) + + return formtattedTamMessages } /** * Download a message from the Telephone Answering Machine (TAM). - * @param {string} messagePath - * @param {string} localPath - * @param {object} options - * @return {Promise} + * @param {string} messagePath - The remote file path of the message. + * @param {string} localPath - The local file path to save the message to. + * @param {Object} options - FritzBox.js options object. + * @return {Object} Returns an object with a message. */ -fritzFon.downloadTamMessage = (messagePath, localPath, options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - .then((sid) => { - options.sid = sid - const path = '/myfritz/cgi-bin/luacgi_notimeout' + - '?cmd=tam&script=/http_file_download.lua' + - '&cmd_files=' + messagePath - return fritzRequest.request(path, 'GET', options, localPath) - }) - - .then((response) => { - return resolve(response) - }) - - .catch((error) => { - console.log('[FritzFon] getTamMessages failed.') - return reject(error) - }) - }) +fritzFon.downloadTamMessage = async (messagePath, localPath, options) => { + const path = '/myfritz/cgi-bin/luacgi_notimeout' + + '?cmd=tam&script=/http_file_download.lua' + + '&cmd_files=' + messagePath + const response = await fritzRequest.request(path, 'GET', options, localPath) + + if (response.error) return response + + if (response.headers['content-type'] !== 'audio/x-wav') { + return { error: { message: 'Did not receive wav audio file', raw: response } } + } + + return { message: 'Saved tam message to ' + localPath } } /** * Mark a message as read. - * @param {number} messageId - * @param {object} options - * @param {number} [tamId=0] - * @return {promise} + * @param {number} messageId - The Id of the message to mark as read. + * @param {Object} options - FritzBox.js options object. + * @param {number} [tamId=0] - The Telephone Answering Machine Id + * @return {boolean} Returns true when the message was marked as read. */ -fritzFon.markTamMessageAsRead = (messageId, options, tamId = 0) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - .then((sid) => { - options.sid = sid - const path = '/fon_devices/tam_list.lua?useajax=1' + - '&TamNr=' + tamId + - '&idx=' + messageId - return fritzRequest.request(path, 'GET', options) - }) - - .then((response) => { - if (response.body === '{"state":1,"cur_idx":1}') { - return resolve(true) - } else { - return reject(false) - } - }) +fritzFon.markTamMessageAsRead = async (messageId, options, tamId = 0) => { + const path = '/fon_devices/tam_list.lua?useajax=1' + + '&TamNr=' + tamId + + '&idx=' + messageId + const response = await fritzRequest.request(path, 'GET', options) - .catch((error) => { - console.log('[FritzFon] markTamMessageAsRead failed.') - return reject(error) - }) - }) + if (response.error) return response + + if (response.body !== '{"state":1,"cur_idx":1}') { + return { error: { message: 'Message not marked as read.', raw: response.body } } + } + + return true } /** * Dial the given number. - * @param {number} phoneNumber - * @return {promise} + * @param {number} phoneNumber - The phonenumber to dial, including any extension. + * @return {Object} Returns an object with a message. */ -fritzFon.dialNumber = (phoneNumber, options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - .then((sid) => { - options.sid = sid - const path = '/fon_num/foncalls_list.lua?xhr=1' + - '&dial=' + phoneNumber - return fritzRequest.request(path, 'GET', options) - }) - - .then((response) => { - if (JSON.parse(response.body).err === 0) { - return resolve('Ringing.. Please pick up your designated handset now.') - } - return reject('An error occured while ringing the number.') - }) +fritzFon.dialNumber = async (phoneNumber, options) => { + if (typeof phoneNumber !== 'string' && typeof phoneNumber !== 'number') { + return { error: { message: 'Invalid phone number given.' } } + } - .catch((error) => { - console.log('[FritzFon] dialNumber failed.') - return reject(error) - }) - }) + const path = '/fon_num/foncalls_list.lua?xhr=1' + + '&dial=' + phoneNumber + const response = await fritzRequest.request(path, 'GET', options) + + if (response.error) return response + + if (JSON.parse(response.body).err !== 0) { + return { error: { message: 'An error occured while ringing the number.' } } + } + + return { message: 'Ringing. Please pick up your designated handset now.' } } /** * Get any active calls. - * @param {object} options - * @return {prototype} + * @param {Object} options - FritzBox.js options object. + * @return {Array} Returns an array of active calls. */ -fritzFon.getActiveCalls = (options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - .then((sid) => { - options.sid = sid - options.removeSidFromUri = true - const form = { - page: 'overview', - sid: options.sid - } - return fritzRequest.request('/data.lua', 'POST', options, false, false, form) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) - - .then((response) => { - return resolve(JSON.parse(response.body).data.foncalls.activecalls) - }) - - .catch((error) => { - console.log('[FritzFon] activeCalls') - return reject(error) - }) - }) +fritzFon.getActiveCalls = async (options) => { + if (!options.sid) { + options.sid = await fritzLogin.getSessionId(options) + if (options.sid.error) return options.sid + } + + options.removeSidFromUri = true + const form = { + page: 'overview', + sid: options.sid + } + const response = await fritzRequest.request('/data.lua', 'POST', options, false, false, form) + if (response.error) return response + + const activeCalls = JSON.parse(response.body).data.foncalls.activecalls + + return activeCalls } /** * Download the given telephone book. - * @param {number} phonebookId - * @param {object} options - * @return {promise} + * @param {number} phonebookId - Id of the phonebook to use. + * @param {Object} options - FritzBox.js options object. + * @return {Array} Returns an array of contact objects. */ -fritzFon.getPhonebook = (phonebookId = 0, options) => { - return new Promise(function (resolve, reject) { - fritzLogin.getSessionId(options) - .then((sid) => { - options.sid = sid - options.removeSidFromUri = true - const formData = { - sid: options.sid, - PhonebookId: phonebookId, - PhonebookExportName: 'Phonebook', - PhonebookExport: '' - } - return fritzRequest.request('/cgi-bin/firmwarecfg', 'POST', options, false, formData) - }) - - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) +fritzFon.getPhonebook = async (phonebookId = 0, options) => { + if (!options.sid) { + options.sid = await fritzLogin.getSessionId(options) + if (options.sid.error) return options.sid + } + + options.removeSidFromUri = true + const formData = { + sid: options.sid, + PhonebookId: phonebookId, + PhonebookExportName: 'Phonebook', + PhonebookExport: '' + } + const path = '/cgi-bin/firmwarecfg' + const response = await fritzRequest.request(path, 'POST', options, false, formData) + + if (response.error) return response + + const contacts = response.body + const contactsJson = await fritzFormat.xmlToObject(contacts) + + const contactsObject = contactsJson.phonebooks.phonebook[0].contact + const formattedContacts = fritzFormat.phonebook(contactsObject) + + return formattedContacts +} - .then((response) => { - return fritzFormat.xmlToJson(response.body) - }) +/** + * Receive events for incoming and outgoing calls. + * + * Enable the callmonitor on your Fritz!Box by dialing `#96*5*` and disable with `#96*4*` + * Set `options.callmonitorport` to `1012` or a custom port. + * + * This is an implementation of Thorsten Basse's Fritz!Box Call Monitor + * + * @memberof fritzFon + * @param {Object} options - FritzBox.js options object. + * @return {EventEmitter} Returns an event emitter for you to catch events with. + */ +var CallMonitor = function (options) { + let self = this + this.call = {} + + /** + * Convert a Fritz!Box date to Epoch time string. + * @private + * @param {string} string + * @return {number} + */ + const convertDate = (string) => { + let d = string.match(/[0-9]{2}/g) + let result = '' + result += '20' + d[2] + '-' + d[1] + '-' + d[0] + result += ' ' + d[3] + ':' + d[4] + ':' + d[5] + return Math.floor(new Date(result).getTime() / 1000) + } + + /** + * Parse a data buffer to a readable message. + * @private + * @param {Buffer} buffer + * @return {string} + */ + const parseMessage = (buffer) => { + let message = buffer.toString() + .toLowerCase() + .replace(/[\n\r]$/, '') + .replace(/;$/, '') + .split(';') + message[0] = convertDate(message[0]) + return message + } + + // Open a connection to the Fritz!Box call monitor. + const port = options.callmonitorport || 1012 + const client = net.createConnection(port, options.server) + + client.addListener('error', (error) => { + let errorMessage + + switch (error.code) { + case 'ENETUNREACH': + errorMessage = `Cannot reach ${error.address}:${error.port}` + break + case 'ECONNREFUSED': + errorMessage = `Connection refused on ${error.address}:${error.port}` + break + default: + errorMessage = `Unknown error` + break + } + + self.emit('error', { message: errorMessage, code: error.errno, raw: error }) + }) - .then((object) => { - return resolve(fritzFormat.phonebook(object.phonebooks.phonebook[0].contact)) - }) + // Listen for data on the opened connection. + client.addListener('data', (chunk) => { + const data = parseMessage(chunk) + + switch (data[1]) { + // Handle an incoming call + case 'ring': + self.call[data[2]] = { + type: 'inbound', + start: data[0], + caller: data[3], + called: data[4] + } + self.emit('inbound', { + time: data[0], + caller: data[3], + called: data[4] + }) + break + + // Handle an outbound call + case 'call': + self.call[data[2]] = { + type: 'outbound', + start: data[0], + extension: data[3], + caller: data[4], + called: data[5] + } + self.emit('outbound', { + time: data[0], + extension: data[3], + caller: data[4], + called: data[5] + }) + break + + // Handle a pick-up event + case 'connect': + self.call[data[2]]['connect'] = data[0] + self.emit('connected', { + time: data[0], + extension: self.call[data[2]]['extension'], + caller: self.call[data[2]]['caller'], + called: self.call[data[2]]['called'] + }) + break + + // Handle the end of a call + case 'disconnect': + self.call[data[2]].disconnect = data[0] + self.call[data[2]].duration = parseInt(data[3], 10) + let call = self.call[data[2]] + delete (self.call[data[2]]) + self.emit('disconnected', call) + break + } + }) - .catch((error) => { - console.log('[FritzFon] getPhonebook failed.') - return reject(error) - }) + // Listen for the end signal on the opened connections. + client.addListener('end', () => { + client.end() }) } -/** - * Export fritzFon. - */ +CallMonitor.prototype = new events.EventEmitter() +fritzFon.CallMonitor = CallMonitor + +// Export fritzFon. module.exports = fritzFon diff --git a/src/format.js b/src/format.js index 201c8d6..f55e616 100644 --- a/src/format.js +++ b/src/format.js @@ -1,19 +1,18 @@ /** - * FritzBox.js - * https://git.io/fritzbox - * Licensed under the MIT License. - * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. + * @module fritzFormat + * @ignore */ let fritzFormat = {} const csvjson = require('csvjson') -const parseString = require('xml2js').parseString +const convert = require('xml-to-json-promise') /** * Format a raw calls array to a more readable array. - * @param {array} calls - * @return {array} + * @private + * @param {Array} calls + * @return {Array} */ fritzFormat.calls = (calls) => { let formattedCalls = [] @@ -33,26 +32,38 @@ fritzFormat.calls = (calls) => { /** * Format calls CSV to object. + * @private * @param {string} csvData - * @return {object} + * @return {Object} */ fritzFormat.callsCsvToJson = (csvData) => { + // Replace the CSV column titles with the English format. + let lines = csvData.split('\n') + lines[1] = 'Type;Date;Name;Telephone number;Extension;Telephone Number;Duration' + csvData = lines.join('\n') + + // We remove the separator definition and shorten some column titles, so that + // the csv to json module can parse them correctly. let parsableCsvData = csvData .replace('sep=;', '') .replace('Extension;Telephone number', 'Extension;NumberSelf') .replace('Telephone number', 'Number') .trim() + + // Format the CSV to a json object and return the result. const formattedBody = csvjson.toObject(parsableCsvData, {delimiter: ';'}) return formattedBody } /** - * [tamMessages description] - * @param {[type]} messages [description] - * @return {[type]} [description] + * Format tam messages. + * @private + * @param {Object} messages + * @return {Object} */ fritzFormat.tamMessages = (messages) => { let formattedMessages = [] + for (var i in messages) { formattedMessages[i] = { tamId: messages[i].tam, @@ -67,11 +78,13 @@ fritzFormat.tamMessages = (messages) => { isNewMessage: messages[i].new } } + return formattedMessages } /** * Get the human-understandable type of a call. + * @private * @param {string} type 1-4 * @return {string} */ @@ -85,6 +98,7 @@ fritzFormat.callType = (type) => { /** * Format dd.mm.yy hh:mm to a Date string. + * @private * @param {string} rawDate * @return {string} */ @@ -109,6 +123,7 @@ fritzFormat.date = (rawDate) => { /** * Convert 1's and 0's to booleans. + * @private * @param {number} number * @return {boolean} */ @@ -119,22 +134,20 @@ fritzFormat.boolean = (number) => { /** * Convert XML to JSON object. - * @param {string} tmpPath - * @return {promise} + * @private + * @param {string} xml + * @return {Object} */ -fritzFormat.xmlToJson = (xml) => { - return new Promise(function (resolve, reject) { - parseString(xml, (error, result) => { - if (error) return reject(error) - return resolve(result) - }) - }) +fritzFormat.xmlToObject = async (xml) => { + const object = await convert.xmlDataToJSON(xml) + return object } /** * Format an ugly phonebook object to a sane object. - * @param {object} object - * @return {object} + * @private + * @param {Object} object + * @return {Object} */ fritzFormat.phonebook = (phonebook) => { let formattedPhonebook = [] @@ -171,8 +184,6 @@ fritzFormat.phonebook = (phonebook) => { return formattedPhonebook } -/** - * Export fritzFon. - */ +// Export fritzFon. module.exports = fritzFormat diff --git a/src/login.js b/src/login.js index 4301b1e..e64cb50 100644 --- a/src/login.js +++ b/src/login.js @@ -1,70 +1,46 @@ -/** - * FritzBox.js - * https://git.io/fritzbox - * Licensed under the MIT License. - * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. - */ -const fritzRequest = require('./request.js') +/** @module fritzLogin */ let fritzLogin = {} +module.exports = fritzLogin /** * Login to the Fritz!Box and obtain a sessionId. - * @param {object} options Options object - * @return {string} sessionId + * @param {Object} options - FritzBox.js options object. + * @return {string} Returns a sessionId if successful. */ -fritzLogin.getSessionId = (options) => { - return new Promise(function (resolve, reject) { - // Do we have a options.sid value? - if (options.sid) { - // SIDs _do_ expire! - return resolve(options.sid) - } - - // Request a challenge. - fritzRequest.request('/login_sid.lua', 'GET', options) +fritzLogin.getSessionId = async (options) => { + // If a session ID is already set, we return that value! + if (options.sid) return options.sid - // Solve the presented challenge. - .then((response) => { - const challenge = response.body.match('(.*?)')[1] + // Request a challenge for us to solve. + const response = await fritzRequest.request('/login_sid.lua', 'GET', options) - const buffer = Buffer(challenge + '-' + options.password, 'UTF-16LE') - const challengeResponse = challenge + '-' + require('crypto').createHash('md5').update(buffer).digest('hex') - const path = '/login_sid.lua?username=' + options.username + '&response=' + challengeResponse + // Return the response error if one has presented itself. + if (response.error) return response - return fritzRequest.request(path, 'GET', options) - }) + // Solve the challenge. + const challenge = response.body.match('(.*?)')[1] + const buffer = Buffer.from(challenge + '-' + options.password, 'UTF-16LE') + const challengeAnswer = challenge + '-' + require('crypto').createHash('md5').update(buffer).digest('hex') - // Check the response. - .then((response) => { - if (response.statusCode !== 200) { - return reject(fritzRequest.findFailCause(response)) - } - return response - }) + // Send our answer to the Fritz!Box. + const path = '/login_sid.lua?username=' + options.username + '&response=' + challengeAnswer + const challengeResponse = await fritzRequest.request(path, 'GET', options) - // Obtain the SID. - .then((response) => { - const sessionId = response.body.match('(.*?)')[1] + if (challengeResponse.error) return challengeResponse - if (sessionId === '0000000000000000') { - return reject('Could not login to Fritz!Box. Invalid login?') - } + // Extract the session ID. + const sessionId = challengeResponse.body.match('(.*?)')[1] - return resolve(sessionId) - }) + // Determine if the login worked. + if (sessionId === '0000000000000000') { + return { error: 'Could not login to Fritz!Box. Invalid login?' } + } - // Catch errors. - .catch((error) => { - console.log('[FritzLogin] getSessionId failed.') - return reject(error) - }) - }) + return sessionId } -/** - * Export fritzLogin. - */ - -module.exports = fritzLogin +// <3 Circular dependencies... +// https://stackoverflow.com/a/32428290/1878974 +const fritzRequest = require('./request.js') diff --git a/src/request.js b/src/request.js index d1c3707..06cbb45 100644 --- a/src/request.js +++ b/src/request.js @@ -1,8 +1,6 @@ /** - * FritzBox.js - * https://git.io/fritzbox - * Licensed under the MIT License. - * Copyright (c) 2017 Sander Laarhoven All Rights Reserved. + * @module fritzRequest + * @ignore */ const request = require('request-promise') @@ -10,94 +8,112 @@ const requestNoPromise = require('request') const fs = require('fs') let fritzRequest = {} +module.exports = fritzRequest /** * Send a request to the Fritz!Box. - * @param {string} path Path to request - * @param {string} method Request method - * @param {object} options Options object - * @return {promise} Body of response + * + * @private + * @param {string} path Path to request + * @param {string} method Request method + * @param {Object} options Options object + * @param {string} pipe + * @param {Object} formData + * @param {boolean} formUrlEncoded + * @return {Object} Request response object */ -fritzRequest.request = (path, method, options, pipe = false, formData = false, formUrlEncoded = false) => { - return new Promise(function (resolve, reject) { - options.protocol = options.protocol || 'GET' - - // Make sure we have the required options. - if (!options.server || options.server === '') { - // We should probably check for more config settings.. - return reject('Missing login config.') - } - - if (typeof options.removeSidFromUri === 'undefined') { - options.removeSidFromUri = false - } - - // Add SID to path if one has been given to us. - if (options.sid && !options.removeSidFromUri) { - path += '&sid=' + options.sid - } - - // Set the options for the request. - let requestOptions = { - uri: options.protocol + '://' + options.server + path, - method: method || 'GET', - resolveWithFullResponse: true, - rejectUnauthorized: false - } - - if (formData) { - requestOptions.formData = formData - } - - if (formUrlEncoded) { - requestOptions.form = formUrlEncoded - } - - // Pipe a file to disk. - if (pipe) { - let stream = requestNoPromise(requestOptions).pipe(fs.createWriteStream(pipe)) - stream.on('finish', () => { - return resolve('File has been saved to ' + pipe) - }) - } - - // Execute HTTP(S) request. - request(requestOptions) - .then((response) => { - return resolve(response) - }) - .catch((error) => { - console.log('[FritzRequest] Request failed.') - return reject(error) - }) - }) -} +fritzRequest.request = async (path, method, options, pipe = false, formData = false, formUrlEncoded = false) => { + options.protocol = options.protocol || 'https' -/** - * Find the cause of a failed request. - * @param {object} response HTTP request response - * @return {string} Detailed error message - */ -fritzRequest.findFailCause = (response) => { - console.log('[FritzRequest] HTTP response code was ' + response.statusCode) + // Make sure we have the required options. + if (!options.server || options.server === '') { + // We should probably check for more config settings.. + return { error: 'Missing login config.' } + } + + // Obtain a session id if none was given to us. + if (!options.sid && !path.includes('/login_sid.lua') && options.noAuth !== true) { + const sessionId = await fritzLogin.getSessionId(options) + if (sessionId.error) return sessionId + options.sid = sessionId + } - if (response.statusCode === 403) { - return 'Not authenticated correctly for communication with Fritz!Box.' + if (typeof options.removeSidFromUri === 'undefined') { + options.removeSidFromUri = false } - if (response.statusCode === 500) { - return 'The Fritz!Box encountered an internal server error.' + // Add SID to path if one has been given to us. + if (options.sid && options.removeSidFromUri !== true && options.noAuth !== true) { + path += '&sid=' + options.sid } - if (response.statusCode === 404) { - return 'Requested page does not exist on the Fritz!Box.' + // Set the options for the request. + let requestOptions = { + uri: options.protocol + '://' + options.server + path, + method: method || 'GET', + resolveWithFullResponse: true, + rejectUnauthorized: false } - return 'Encountered an unexpected error.' + if (formData) { + requestOptions.formData = formData + } + + if (formUrlEncoded) { + requestOptions.form = formUrlEncoded + } + + // Pipe a file to disk. + if (pipe) { + let stream = requestNoPromise(requestOptions).pipe(fs.createWriteStream(pipe)) + stream.on('finish', () => { + return { message: 'File has been saved to ' + pipe } + }) + } + + // Execute HTTP(S) request. + let response = null + try { + response = await request(requestOptions) + } catch (error) { + return fritzRequest.findFailCause(error) + } + + /* + if (response.statusCode !== 200) { + console.log('is not 200') + return fritzRequest.findFailCause(response) + } + */ + + return response } /** - * Export fritzRequest. + * Find the cause of a failed request. + * + * @private + * @param {Object} response HTTP request response + * @return {string} Detailed error message */ +fritzRequest.findFailCause = (response) => { + switch (response.statusCode) { + case 403: + return { error: { message: 'Not authenticated correctly for communication with Fritz!Box.' } } + case 404: + return { error: { message: 'Requested page does not exist on the Fritz!Box.' } } + case 500: + return { error: { message: 'The Fritz!Box encountered an internal server error.' } } + default: + + if (response.message) { + return { error: { message: response.message } } + } + + return { error: { message: 'Encountered an unexpected error.', raw: response } } + } +} -module.exports = fritzRequest +// <3 Circular dependencies... +// https://stackoverflow.com/a/32428290/1878974 +const fritzLogin = require('./login.js') diff --git a/src/system.js b/src/system.js new file mode 100644 index 0000000..f8608ab --- /dev/null +++ b/src/system.js @@ -0,0 +1,38 @@ + +/** @module fritzSystem */ + +let fritzSystem = {} +module.exports = fritzSystem + +const fritzRequest = require('./request.js') +const fritzFormat = require('./format.js') + +/** + * Get the version of a Fritz!Box without authentication. + * @param {Object} options - FritzBox.js options object. + * @return {string} The Fritz!OS version as a string (e.g. `'06.83'`) + */ +fritzSystem.getVersion = async (options) => { + options.noAuth = true + const rawXml = await fritzRequest.request('/jason_boxinfo.xml', 'GET', options) + if (rawXml.error) return rawXml + + const object = await fritzFormat.xmlToObject(rawXml.body) + const fullVersion = object['j:BoxInfo']['j:Version'][0] + + let parts = fullVersion.split('.') + const OSVersion = parts[1] + '.' + parts[2] + return OSVersion +} + +/** + * Get the version of a Fritz!Box without authentication. + * @param {Object} options server protocol + * @return {number} The Fritz!OS version cast as an integer (e.g. `683`) + */ +fritzSystem.getVersionNumber = async (options) => { + const version = await fritzSystem.getVersion(options) + if (version.error) return version + const versionNumber = parseInt(version.replace('.', '')) + return versionNumber +} diff --git a/src/wlan.js b/src/wlan.js index e69de29..4706084 100644 --- a/src/wlan.js +++ b/src/wlan.js @@ -0,0 +1,3 @@ +/** + * @module fritzWlan + */ diff --git a/test/activecalls.js b/test/activecalls.js index 0f2adf6..fb8f59d 100644 --- a/test/activecalls.js +++ b/test/activecalls.js @@ -1,9 +1,14 @@ const fritz = require('../index.js') const options = require('../package.json').options -fritz.getActiveCalls(options) -.then((calls) => { - console.log(calls) -}) -.catch((error) => { - console.log('Error:', error) -}) + +async function activecalls () { + const calls = await fritz.getActiveCalls(options) + + if (calls.error) { + console.log('Error:', calls.error.message) + process.exit(1) + } + + console.log('Currently there are/is ' + calls.length + ' active call(s).') +} +activecalls() diff --git a/test/calls.js b/test/calls.js index b871933..55e61cf 100644 --- a/test/calls.js +++ b/test/calls.js @@ -1,11 +1,16 @@ const fritz = require('../index.js') const options = require('../package.json').options const fs = require('fs') -fritz.getCalls(options) -.then((calls) => { - console.log('Got array of ', calls.length, ' calls.') - fs.writeFileSync('calls.json', JSON.stringify(calls, null, 2)) -}) -.catch((error) => { - console.log('Error:', error) -}) + +async function calls () { + const calls = await fritz.getCalls(options) + if (calls.error) { + console.log('Error:', calls.error.message) + process.exit(1) + } else { + console.log('Got array of ', calls.length, ' calls.') + fs.writeFileSync('calls.json', JSON.stringify(calls, null, 2)) + } +} + +calls() diff --git a/test/ci.sh b/test/ci.sh index 123c640..383a507 100755 --- a/test/ci.sh +++ b/test/ci.sh @@ -2,17 +2,33 @@ set -e pwd +echo ' FritzBox.js CI Test' + # Check for runtime errors. -echo ' Checking index.js for runtime errors..' -node index.js +node --harmony-async-await index.js echo ' ✓ No syntax errors found.' +# Run StandardJS linter +standard +echo ' ✓ Code is complaint with StandardJS.' + +# Run documentation.js linter +documentation lint src/** +echo ' ✓ Code documentation is complaint with JSDoc.' + # Test some features. echo ' Running test scripts..' -node test/login.js -node test/calls.js -node test/smartdevices.js -node test/tam.js -node test/phonebook.js +node --harmony-async-await test/version.js # async ready +node --harmony-async-await test/login.js # async ready +node --harmony-async-await test/calls.js # async ready +node --harmony-async-await test/smartdevices.js # async ready +node --harmony-async-await test/tam.js # async ready +node --harmony-async-await test/phonebook.js # async ready + +node --harmony-async-await test/activecalls.js # async ready +#node --harmony-async-await test/dial.js # async ready +node --harmony-async-await test/markread.js # async ready +node --harmony-async-await test/tamdownload.js # async ready +node --harmony-async-await test/toggleswitch.js # async ready echo " ✓ Finished with tests." diff --git a/test/dial.js b/test/dial.js new file mode 100644 index 0000000..9b5d6f8 --- /dev/null +++ b/test/dial.js @@ -0,0 +1,16 @@ +const fritz = require('../index.js') +const options = require('../package.json').options + +const number = process.argv[2] + +async function dial () { + const status = await fritz.dialNumber(number, options) + if (status.error) { + console.log('Error: ' + status.error.message) + process.exit(1) + } else { + console.log(status.message) + } +} + +dial() diff --git a/test/login.js b/test/login.js index 34f21ea..a8d9cab 100644 --- a/test/login.js +++ b/test/login.js @@ -1,9 +1,13 @@ const fritz = require('../index.js') const options = require('../package.json').options -fritz.getSessionId(options) -.then((sid) => { - console.log('SID:', sid) -}) -.catch((error) => { - console.log('Error:', error) -}) + +async function login () { + const sessionId = await fritz.getSessionId(options) + if (sessionId.error) { + console.log('Error:', sessionId.error.message) + process.exit(1) + } else { + console.log('SID:', sessionId) + } +} +login() diff --git a/test/markread.js b/test/markread.js index 28c646f..1ff772f 100644 --- a/test/markread.js +++ b/test/markread.js @@ -1,10 +1,15 @@ const fritz = require('../index.js') const options = require('../package.json').options -fritz.markTamMessageAsRead(15, options) -.then((messages) => { - console.log('Marked message as read.') - console.log(messages) -}) -.catch((error) => { - console.log('Error:', error) -}) +const messageId = 20 + +async function markasread () { + const status = await fritz.markTamMessageAsRead(messageId, options) + if (status.error) { + console.log('Error:', status.error.message) + process.exit(1) + } + + console.log('Marked message as read', status) +} + +markasread() diff --git a/test/monitor.js b/test/monitor.js new file mode 100644 index 0000000..4f1a740 --- /dev/null +++ b/test/monitor.js @@ -0,0 +1,29 @@ +const fritz = require('../index.js') +const options = require('../package.json').options + +let monitor = new fritz.CallMonitor(options) + +function handler (type, call) { + console.log(type, '\n', call) +} + +monitor.on('inbound', (call) => { + handler('incoming', call) +}) + +monitor.on('outbound', (call) => { + handler('outgoing', call) +}) + +monitor.on('connected', (call) => { + handler('connected', call) +}) + +monitor.on('disconnected', (call) => { + handler('connection ended', call) +}) + +monitor.on('error', (error) => { + handler('error', error) + process.exit(1) +}) diff --git a/test/phonebook.js b/test/phonebook.js index a804ee9..af0cb1e 100644 --- a/test/phonebook.js +++ b/test/phonebook.js @@ -1,10 +1,16 @@ const fritz = require('../index.js') const options = require('../package.json').options const phonebookId = 0 -fritz.getPhonebook(phonebookId, options) -.then((phonebook) => { + +async function getPhonebook () { + const phonebook = await fritz.getPhonebook(phonebookId, options) + + if (phonebook.error) { + console.log('Error: ', phonebook.error.message) + process.exit(1) + } + console.log('Got ', phonebook.length, ' contacts.') -}) -.catch((error) => { - console.log('Error:', error) -}) +} + +getPhonebook() diff --git a/test/smartdevices.js b/test/smartdevices.js index ae53c7a..206b13c 100644 --- a/test/smartdevices.js +++ b/test/smartdevices.js @@ -1,9 +1,13 @@ const fritz = require('../index.js') const options = require('../package.json').options -fritz.getSmartDevices(options) -.then((devices) => { - console.log('Got ', devices.length, ' DECT Smart Home devices.') -}) -.catch((error) => { - console.log('Error:', error) -}) + +async function devices () { + const devices = await fritz.getSmartDevices(options) + if (devices.error) { + console.log('Error:', devices.error.message) + process.exit(1) + } + console.log('Got ' + devices.length + ' DECT Smart Home devices.') +} + +devices() diff --git a/test/tam.js b/test/tam.js index 4ad0579..757b573 100644 --- a/test/tam.js +++ b/test/tam.js @@ -1,11 +1,29 @@ const fritz = require('../index.js') const options = require('../package.json').options const fs = require('fs') -fritz.getTamMessages(options) -.then((messages) => { + +async function tam () { + const messages = await fritz.getTamMessages(options) + + if (messages.error) { + console.log('Error:', messages.error.message) + process.exit(1) + } + console.log('Got ', messages.length, ' TAM messages.') + + let newTam = 0 + + for (var tam in messages) { + if (messages[tam].isNewMessage) { + newTam++ + console.log(messages[tam]) + } + } + + console.log('There are/is ', newTam, ' new TAM message(s).') + fs.writeFileSync('tam.json', JSON.stringify(messages, null, 2)) -}) -.catch((error) => { - console.log('Error:', error) -}) +} + +tam() diff --git a/test/tamdownload.js b/test/tamdownload.js index ecefbf5..21ca304 100644 --- a/test/tamdownload.js +++ b/test/tamdownload.js @@ -1,11 +1,16 @@ const fritz = require('../index.js') const options = require('../package.json').options -const messagePath = '/data/tam/rec/rec.0.005' -const localPath = './test/rec05.wav' -fritz.downloadTamMessage(messagePath, localPath, options) -.then((message) => { - console.log(message) -}) -.catch((error) => { - console.log('Error:', error) -}) +const messagePath = '/data/tam/rec/rec.0.020' +const localPath = './test/rec20.wav' + +async function download () { + const status = await fritz.downloadTamMessage(messagePath, localPath, options) + + if (status.error) { + console.log('Error:', status.error.message) + process.exit(1) + } + + console.log(status.message) +} +download() diff --git a/test/toggleswitch.js b/test/toggleswitch.js index 50bed3f..40e5bdb 100644 --- a/test/toggleswitch.js +++ b/test/toggleswitch.js @@ -1,16 +1,16 @@ const fritz = require('../index.js') const options = require('../package.json').options -const id = process.argv[2] -const state = process.argv[3] +const id = 17 +const state = 1 -function toggle (id, value) { - fritz.toggleSwitch(id, value, options) - .then((result) => { - console.log('Switch toggle:', result) - }) - .catch((error) => { - console.log('Error:', error) - }) +async function toggle () { + const result = await fritz.toggleSwitch(id, state, options) + if (result.error) { + console.log('Error:', result.error.message) + process.exit(1) + } + + console.log('Toggled switch:', result) } -toggle(id, state) +toggle() diff --git a/test/version.js b/test/version.js new file mode 100644 index 0000000..55f75c4 --- /dev/null +++ b/test/version.js @@ -0,0 +1,14 @@ +const fritz = require('../index.js') +const options = require('../package.json').options + +async function version () { + const version = await fritz.getVersion(options) + if (version.error) { + console.log('Error:', version.error.message) + process.exit(1) + } else { + console.log('FritzBox runs on version', version) + } +} + +version()