diff --git a/.github/workflows/build-chorus2.yml b/.github/workflows/build-chorus2.yml index 82bea883..41790c9b 100644 --- a/.github/workflows/build-chorus2.yml +++ b/.github/workflows/build-chorus2.yml @@ -8,22 +8,20 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 8 + node-version: 21 - name: Install dependencies run: | - sudo gem install bundler && bundle config path vendor/bundle - npm install - bundle install + npm clean-install - name: Build run: | - grunt build --force + npx grunt build --force - name: Prepare for uploading run: | diff --git a/.gitignore b/.gitignore index 5bff2b9e..3ea2bc49 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ dist/js/build/* *.mo .vscode webinterface.default*.zip +.env diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 13ae9ecd..00000000 --- a/Gemfile +++ /dev/null @@ -1,22 +0,0 @@ -source 'https://rubygems.org' - -group :development do - - # Sass, Compass and extensions. - gem 'sass', '~> 3.4' # Sass. - gem 'sass-globbing' # Import Sass files based on globbing pattern. - gem 'compass', '>= 1.0.3' # Framework built on Sass. - gem 'compass-validator' # So you can `compass validate`. - gem 'compass-normalize' # Compass version of normalize.css. - gem 'compass-rgbapng' # Turns rgba() into .png's for backwards compatibility. - gem 'susy', '~> 2.2' # Susy grid framework. - gem 'toolkit' # Compass utility from the fabulous Snugug. - gem 'breakpoint' # Manages CSS media queries. - gem 'oily_png' # Faster Compass sprite generation. - gem 'css_parser' # Helps `compass stats` output statistics. - gem 'bootstrap-sass', '~> 3.3.1.0' # Twitter bootstrap theme. - - # Dependency to prevent polling. - gem 'rb-inotify', '~> 0.9', :require => false # Linux - -end diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 734079ad..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,69 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - bootstrap-sass (3.3.1.0) - sass (~> 3.2) - breakpoint (2.7.1) - sass (~> 3.3) - sassy-maps (< 1.0.0) - chunky_png (1.3.10) - compass (1.0.3) - chunky_png (~> 1.2) - compass-core (~> 1.0.2) - compass-import-once (~> 1.0.5) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - sass (>= 3.3.13, < 3.5) - compass-core (1.0.3) - multi_json (~> 1.0) - sass (>= 3.3.0, < 3.5) - compass-import-once (1.0.5) - sass (>= 3.2, < 3.5) - compass-normalize (1.5) - compass (>= 0.12.0) - compass-rgbapng (0.2.1) - chunky_png (>= 0.8.0) - compass (>= 0.10.0) - compass-validator (3.0.1) - css_parser (1.6.0) - addressable - ffi (1.9.25) - multi_json (1.13.1) - oily_png (1.2.1) - chunky_png (~> 1.3.7) - public_suffix (3.0.3) - rb-fsevent (0.10.3) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - sass (3.4.25) - sass-globbing (1.1.5) - sass (>= 3.1) - sassy-maps (0.4.0) - sass (~> 3.3) - susy (2.2.14) - sass (>= 3.3.0, < 3.5) - toolkit (2.10.2) - sass (~> 3.3) - -PLATFORMS - ruby - -DEPENDENCIES - bootstrap-sass (~> 3.3.1.0) - breakpoint - compass (>= 1.0.3) - compass-normalize - compass-rgbapng - compass-validator - css_parser - oily_png - rb-inotify (~> 0.9) - sass (~> 3.4) - sass-globbing - susy (~> 2.2) - toolkit - -BUNDLED WITH - 2.3.27 diff --git a/Gruntfile.js b/Gruntfile.js index 71f734a6..e37a6488 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,7 @@ 'use strict'; module.exports = function (grunt) { + require('dotenv').config(); var cwd = process.cwd(); @@ -43,20 +44,19 @@ module.exports = function (grunt) { }, - // Includes and order of compiling coffee. - coffeeStack: [ - '*.coffee', - 'helpers/{,**}/*.coffee', - 'config/{,**}/*.coffee', - 'entities/{,**}/*.coffee', - 'controllers/{,**}/*.coffee', - 'views/{,**}/*.coffee', - 'components/{,**}/*.coffee', - 'apps/{,**}/*.coffee' - ], - // Joins all libraries and complied app into a single js file. concatStack: { + // Includes and order of compiling the app. + app: [ + 'src/js/*.js', + 'src/js/helpers/{,**}/*.js', + 'src/js/config/{,**}/*.js', + 'src/js/entities/{,**}/*.js', + 'src/js/controllers/{,**}/*.js', + 'src/js/views/{,**}/*.js', + 'src/js/components/{,**}/*.js', + 'src/js/apps/{,**}/*.js' + ], src: [ // Core dependencies. 'src/lib/core/jquery.js', @@ -140,7 +140,7 @@ module.exports = function (grunt) { }, sass: { files: [ggp('themeSrc') + 'sass/{,**/}*.{scss,sass}'], - tasks: ['compass:dev'], + tasks: ['sass:dev'], options: {} }, images: { @@ -150,12 +150,12 @@ module.exports = function (grunt) { files: [ggp('themeDist') + 'css/{,**/}*.css'] }, eco: { - files: [ggp('jsSrc') + '/**/*.eco'], + files: [ggp('jsSrc') + '**/*.eco'], tasks: ['eco', 'concat:libs', 'uglify:libs', 'concat:dev'] }, - coffee: { - files: [ggp('jsSrc') + '{,**/}*.coffee'], - tasks: ['coffee', 'concat:dev'] + js: { + files: [ggp('jsSrc') + '{,**/}*.js'], + tasks: ['concat:app', 'concat:dev'] }, po2json: { files: [ggp('langSrcStrings')], @@ -175,44 +175,6 @@ module.exports = function (grunt) { } }, - // Compile compass. - compass: { - options: { - config: ggp('themeSrc') + 'config.rb', - bundleExec: true, - force: true - }, - dev: { - options: { - environment: 'development' - } - }, - dist: { - options: { - environment: 'production', - outputStyle: 'compressed' - } - } - }, - - // Compile coffee. - coffee: { - options: { - bare: true, - join: true - }, - files: { - expand: true, - flatten: true, - cwd: ggp('jsSrc'), - src: ggs('coffeeStack'), - dest: ggp('jsBuild'), - rename: function (dest, src) { - return dest + 'app.js'; - } - } - }, - // Compile all the *.eco templates into a single tpl.js eco: { app: { @@ -227,22 +189,40 @@ module.exports = function (grunt) { }, // Injects css changes automatically and sync interaction between browsers. - // TODO: Move proxy details to envvar file or similar. browserSync: { dev: { bsFiles: { - src: ggp('themeDist') + 'css/{,**/}*.css' + src: [ + ggp('dist') + '**/*', + ] }, options: { watchTask: true, injectChanges: true, - hostname: "192.168.0.5", - proxy: "192.168.0.10:8080", + proxy: process.env.PROXY_TARGET || '192.168.0.10:8080', open: false, ports: { min: 3102, max: 3103 - } + }, + serveStatic: [ + { + route: '/js', + dir: ggp('jsDist') + }, + { + route: '/lang', + dir: ggp('langDist') + }, + { + route: '/themes/base', + dir: ggp('themeDist') + }, + { + route: '/lib', + dir: './dist/lib' + } + ], } } }, @@ -268,6 +248,10 @@ module.exports = function (grunt) { options: { separator: ';' }, + app: { + src: ggs('concatStack', 'app'), + dest: ggp('jsBuild') + 'app.js' + }, libs: { src: ggs('concatStack', 'src'), dest: ggp('jsBuild') + 'libs.js' @@ -370,13 +354,14 @@ module.exports = function (grunt) { }); grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-compass'); + // grunt.loadNpmTasks('grunt-contrib-compass'); + // grunt.loadNpmTasks('grunt-dart-sass'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-shell'); grunt.loadNpmTasks('grunt-browser-sync'); - grunt.loadNpmTasks('grunt-contrib-coffee'); + // grunt.loadNpmTasks('grunt-contrib-coffee'); grunt.loadNpmTasks('grunt-eco'); grunt.loadNpmTasks('grunt-po2json'); grunt.loadNpmTasks('grunt-marked'); @@ -389,6 +374,30 @@ module.exports = function (grunt) { * Eg "grunt lang" will rebuild languages. */ + grunt.registerTask('sass', function() { + const done = this.async(); + const sass = require('sass'); + const globImporter = require('node-sass-glob-importer'); + const sassOptions = { + importer: globImporter(), + pkgImporter: new sass.NodePackageImporter(), + file: ggp('themeSrc') + 'sass/base.scss', + outFile: ggp('themeDist') + 'css/base.css', + outputStyle: this.args && this.args[0] === 'dist' ? 'compressed' : 'expanded', + }; + + sass.render(sassOptions, (err, result) => { + if (err) { + grunt.log.error(err); + done(false); + } else { + grunt.file.write(sassOptions.outFile, result.css); + grunt.log.ok(`Compiled ${sassOptions.file} to ${sassOptions.outFile}`); + done(true); + } + }); + }) + // Development watch task. grunt.registerTask('default', ['browserSync:dev', 'watch']); @@ -400,13 +409,13 @@ module.exports = function (grunt) { 'po2json', 'copy:lang', 'marked', + 'concat:app', 'eco', - 'coffee', 'concat:libs', 'uglify:libs', // 'uglify:app', // Uncomment if concat:dist is used. 'concat:dev', // App is not minified for in the wild debugging. Change to concat:dist to save ~200K - 'compass:dist' + 'sass:dist' ]); }; diff --git a/build.sh b/build.sh index 78d65cf3..049f7caf 100755 --- a/build.sh +++ b/build.sh @@ -2,12 +2,12 @@ if [ "$1" == "" ]; then echo "Missing version number. I did nothing" + exit 1 fi if [ "$1" == "install" ]; then echo "Installing dev dependencies" - npm install - bundle install + npm clean-install exit 1 fi @@ -33,7 +33,7 @@ cp src/xml/addon.release.xml dist/addon.xml echo "Running Grunt" echo "==============================================" -grunt build +npx grunt build echo "removing old zip and build files" echo "==============================================" diff --git a/dist/js/kodi-webinterface.js b/dist/js/kodi-webinterface.js index 2a584e7a..00ca5599 100644 --- a/dist/js/kodi-webinterface.js +++ b/dist/js/kodi-webinterface.js @@ -1,15 +1,17 @@ -/*! Chorus 2 - A web interface for Kodi. Created by Jeremy Graham - built on 23-03-2024 */ - -!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(p,t){function e(t,e){return e.toUpperCase()}var h=[],c=h.slice,g=h.concat,a=h.push,r=h.indexOf,n={},i=n.toString,v=n.hasOwnProperty,m={},o="1.11.1",S=function(t,e){return new S.fn.init(t,e)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,l=/^-ms-/,u=/-([\da-z])/gi;function d(t){var e=t.length,n=S.type(t);return"function"!==n&&!S.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===n||0===e||"number"==typeof e&&0>10|55296,1023&i|56320)}var t,p,w,o,i,g,d,v,_,u,c,m,x,r,y,b,s,a,S,T="sizzle"+-new Date,C=n.document,E=0,f=0,l=rt(),k=rt(),M=rt(),D=function(t,e){return t===e&&(c=!0),0},O="undefined",A={}.hasOwnProperty,e=[],N=e.pop,j=e.push,R=e.push,L=e.slice,I=e.indexOf||function(t){for(var e=0,n=this.length;e+~]|"+F+")"+F+"*"),W=new RegExp("="+F+"*([^\\]'\"]*?)"+F+"*\\]","g"),J=new RegExp(U),G=new RegExp("^"+q+"$"),X={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H.replace("w","w*")+")"),ATTR:new RegExp("^"+$),PSEUDO:new RegExp("^"+U),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+F+"*(even|odd|(([+-]|)(\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\d+)|))"+F+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+F+"*((?:-\\d)?\\d*)"+F+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=/'|\\/g,nt=new RegExp("\\\\([\\da-f]{1,6}"+F+"?|("+F+")|.)","ig");try{R.apply(e=L.call(C.childNodes),C.childNodes),e[C.childNodes.length].nodeType}catch(t){R={apply:e.length?function(t,e){j.apply(t,L.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}function it(t,e,n,i){var r,o,s,a,l,u,c,h,d,f;if((e?e.ownerDocument||e:C)!==x&&m(e),n=n||[],!t||"string"!=typeof t)return n;if(1!==(a=(e=e||x).nodeType)&&9!==a)return[];if(y&&!i){if(r=Z.exec(t))if(s=r[1]){if(9===a){if(!(o=e.getElementById(s))||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(e.ownerDocument&&(o=e.ownerDocument.getElementById(s))&&S(e,o)&&o.id===s)return n.push(o),n}else{if(r[2])return R.apply(n,e.getElementsByTagName(t)),n;if((s=r[3])&&p.getElementsByClassName&&e.getElementsByClassName)return R.apply(n,e.getElementsByClassName(s)),n}if(p.qsa&&(!b||!b.test(t))){if(h=c=T,d=e,f=9===a&&t,1===a&&"object"!==e.nodeName.toLowerCase()){for(u=g(t),(c=e.getAttribute("id"))?h=c.replace(et,"\\$&"):e.setAttribute("id",h),h="[id='"+h+"'] ",l=u.length;l--;)u[l]=h+pt(u[l]);d=tt.test(t)&&dt(e.parentNode)||e,f=u.join(",")}if(f)try{return R.apply(n,d.querySelectorAll(f)),n}catch(t){}finally{c||e.removeAttribute("id")}}}return v(t.replace(B,"$1"),e,n,i)}function rt(){var i=[];return function t(e,n){return i.push(e+" ")>w.cacheLength&&delete t[i.shift()],t[e+" "]=n}}function ot(t){return t[T]=!0,t}function st(t){var e=x.createElement("div");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function at(t,e){for(var n=t.split("|"),i=t.length;i--;)w.attrHandle[n[i]]=e}function lt(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||1<<31)-(~t.sourceIndex||1<<31);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ut(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function ct(n){return function(t){var e=t.nodeName.toLowerCase();return("input"===e||"button"===e)&&t.type===n}}function ht(s){return ot(function(o){return o=+o,ot(function(t,e){for(var n,i=s([],t.length,o),r=i.length;r--;)t[n=i[r]]&&(t[n]=!(e[n]=t[n]))})})}function dt(t){return t&&typeof t.getElementsByTagName!==O&&t}for(t in p=it.support={},i=it.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},m=it.setDocument=function(t){var e,l=t?t.ownerDocument||t:C,n=l.defaultView;return l!==x&&9===l.nodeType&&l.documentElement?(r=(x=l).documentElement,y=!i(l),n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",function(){m()},!1):n.attachEvent&&n.attachEvent("onunload",function(){m()})),p.attributes=st(function(t){return t.className="i",!t.getAttribute("className")}),p.getElementsByTagName=st(function(t){return t.appendChild(l.createComment("")),!t.getElementsByTagName("*").length}),p.getElementsByClassName=Q.test(l.getElementsByClassName)&&st(function(t){return t.innerHTML="
",t.firstChild.className="i",2===t.getElementsByClassName("i").length}),p.getById=st(function(t){return r.appendChild(t).id=T,!l.getElementsByName||!l.getElementsByName(T).length}),p.getById?(w.find.ID=function(t,e){if(typeof e.getElementById!==O&&y){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(t){var e=t.replace(nt,h);return function(t){return t.getAttribute("id")===e}}):(delete w.find.ID,w.filter.ID=function(t){var n=t.replace(nt,h);return function(t){var e=typeof t.getAttributeNode!==O&&t.getAttributeNode("id");return e&&e.value===n}}),w.find.TAG=p.getElementsByTagName?function(t,e){if(typeof e.getElementsByTagName!==O)return e.getElementsByTagName(t)}:function(t,e){var n,i=[],r=0,o=e.getElementsByTagName(t);if("*"!==t)return o;for(;n=o[r++];)1===n.nodeType&&i.push(n);return i},w.find.CLASS=p.getElementsByClassName&&function(t,e){if(typeof e.getElementsByClassName!==O&&y)return e.getElementsByClassName(t)},s=[],b=[],(p.qsa=Q.test(l.querySelectorAll))&&(st(function(t){t.innerHTML="",t.querySelectorAll("[msallowclip^='']").length&&b.push("[*^$]="+F+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||b.push("\\["+F+"*(?:value|"+P+")"),t.querySelectorAll(":checked").length||b.push(":checked")}),st(function(t){var e=l.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&b.push("name"+F+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||b.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),b.push(",.*:")})),(p.matchesSelector=Q.test(a=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.oMatchesSelector||r.msMatchesSelector))&&st(function(t){p.disconnectedMatch=a.call(t,"div"),a.call(t,"[s!='']:x"),s.push("!=",U)}),b=b.length&&new RegExp(b.join("|")),s=s.length&&new RegExp(s.join("|")),e=Q.test(r.compareDocumentPosition),S=e||Q.test(r.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},D=e?function(t,e){if(t===e)return c=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(1&(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!p.sortDetached&&e.compareDocumentPosition(t)===n?t===l||t.ownerDocument===C&&S(C,t)?-1:e===l||e.ownerDocument===C&&S(C,e)?1:u?I.call(u,t)-I.call(u,e):0:4&n?-1:1)}:function(t,e){if(t===e)return c=!0,0;var n,i=0,r=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!r||!o)return t===l?-1:e===l?1:r?-1:o?1:u?I.call(u,t)-I.call(u,e):0;if(r===o)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?lt(s[i],a[i]):s[i]===C?-1:a[i]===C?1:0},l):x},it.matches=function(t,e){return it(t,null,null,e)},it.matchesSelector=function(t,e){if((t.ownerDocument||t)!==x&&m(t),e=e.replace(W,"='$1']"),p.matchesSelector&&y&&(!s||!s.test(e))&&(!b||!b.test(e)))try{var n=a.call(t,e);if(n||p.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(nt,h),t[3]=(t[3]||t[4]||t[5]||"").replace(nt,h),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||it.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&it.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return X.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&J.test(n)&&(e=g(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(nt,h).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=l[t+" "];return e||(e=new RegExp("(^|"+F+")"+t+"("+F+"|$)"))&&l(t,function(t){return e.test("string"==typeof t.className&&t.className||typeof t.getAttribute!==O&&t.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(t){var e=it.attr(t,n);return null==e?"!="===i:!i||(e+="","="===i?e===r:"!="===i?e!==r:"^="===i?r&&0===e.indexOf(r):"*="===i?r&&-1(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function _(t,n,i){if(S.isFunction(n))return S.grep(t,function(t,e){return!!n.call(t,e,t)!==i});if(n.nodeType)return S.grep(t,function(t){return t===n!==i});if("string"==typeof n){if(w.test(n))return S.filter(n,t,i);n=S.filter(n,t)}return S.grep(t,function(t){return 0<=S.inArray(t,n)!==i})}S.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?S.find.matchesSelector(i,t)?[i]:[]:S.find.matches(t,S.grep(e,function(t){return 1===t.nodeType}))},S.fn.extend({find:function(t){var e,n=[],i=this,r=i.length;if("string"!=typeof t)return this.pushStack(S(t).filter(function(){for(e=0;e)[^>]*|#([\w-]*))$/;(S.fn.init=function(t,e){var n,i;if(!t)return this;if("string"!=typeof t)return t.nodeType?(this.context=this[0]=t,this.length=1,this):S.isFunction(t)?void 0!==x.ready?x.ready(t):t(S):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),S.makeArray(t,this));if(!(n="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&3<=t.length?[null,t,null]:C.exec(t))||!n[1]&&e)return!e||e.jquery?(e||x).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof S?e[0]:e,S.merge(this,S.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:T,!0)),b.test(n[1])&&S.isPlainObject(e))for(n in e)S.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}if((i=T.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return x.find(t);this.length=1,this[0]=i}return this.context=T,this.selector=t,this}).prototype=S.fn,x=S(T);var E=/^(?:parents|prev(?:Until|All))/,k={children:!0,contents:!0,next:!0,prev:!0};function M(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}S.extend({dir:function(t,e,n){for(var i=[],r=t[e];r&&9!==r.nodeType&&(void 0===n||1!==r.nodeType||!S(r).is(n));)1===r.nodeType&&i.push(r),r=r[e];return i},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),S.fn.extend({has:function(t){var e,n=S(t,this),i=n.length;return this.filter(function(){for(e=0;e
a",m.leadingWhitespace=3===e.firstChild.nodeType,m.tbody=!e.getElementsByTagName("tbody").length,m.htmlSerialize=!!e.getElementsByTagName("link").length,m.html5Clone="<:nav>"!==T.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,n.appendChild(t),m.appendChecked=t.checked,e.innerHTML="",m.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,n.appendChild(e),e.innerHTML="",m.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,m.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){m.noCloneEvent=!1}),e.cloneNode(!0).click()),null==m.deleteExpando){m.deleteExpando=!0;try{delete e.test}catch(t){m.deleteExpando=!1}}}(),function(){var t,e,n=T.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})e="on"+t,(m[t+"Bubbles"]=e in p)||(n.setAttribute(e,"t"),m[t+"Bubbles"]=!1===n.attributes[e].expando);n=null}();var J=/^(?:input|select|textarea)$/i,G=/^key/,X=/^(?:mouse|pointer|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,K=/^([^.]*)(?:\.(.+)|)$/;function Q(){return!0}function Z(){return!1}function tt(){try{return T.activeElement}catch(t){}}function et(t){var e=nt.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}S.event={global:{},add:function(t,e,n,i,r){var o,s,a,l,u,c,h,d,f,p,g,v=S._data(t);if(v){for(n.handler&&(n=(l=n).handler,r=l.selector),n.guid||(n.guid=S.guid++),(s=v.events)||(s=v.events={}),(c=v.handle)||((c=v.handle=function(t){return typeof S===L||t&&S.event.triggered===t.type?void 0:S.event.dispatch.apply(c.elem,arguments)}).elem=t),a=(e=(e||"").match(O)||[""]).length;a--;)f=g=(o=K.exec(e[a])||[])[1],p=(o[2]||"").split(".").sort(),f&&(u=S.event.special[f]||{},f=(r?u.delegateType:u.bindType)||f,u=S.event.special[f]||{},h=S.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&S.expr.match.needsContext.test(r),namespace:p.join(".")},l),(d=s[f])||((d=s[f]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,i,p,c)||(t.addEventListener?t.addEventListener(f,c,!1):t.attachEvent&&t.attachEvent("on"+f,c))),u.add&&(u.add.call(t,h),h.handler.guid||(h.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,h):d.push(h),S.event.global[f]=!0);t=null}},remove:function(t,e,n,i,r){var o,s,a,l,u,c,h,d,f,p,g,v=S.hasData(t)&&S._data(t);if(v&&(c=v.events)){for(u=(e=(e||"").match(O)||[""]).length;u--;)if(f=g=(a=K.exec(e[u])||[])[1],p=(a[2]||"").split(".").sort(),f){for(h=S.event.special[f]||{},d=c[f=(i?h.delegateType:h.bindType)||f]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=d.length;o--;)s=d[o],!r&&g!==s.origType||n&&n.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(d.splice(o,1),s.selector&&d.delegateCount--,h.remove&&h.remove.call(t,s));l&&!d.length&&(h.teardown&&!1!==h.teardown.call(t,p,v.handle)||S.removeEvent(t,f,v.handle),delete c[f])}else for(f in c)S.event.remove(t,f+e[u],n,i,!0);S.isEmptyObject(c)&&(delete v.handle,S._removeData(t,"events"))}},trigger:function(t,e,n,i){var r,o,s,a,l,u,c,h=[n||T],d=v.call(t,"type")?t.type:t,f=v.call(t,"namespace")?t.namespace.split("."):[];if(s=u=n=n||T,3!==n.nodeType&&8!==n.nodeType&&!Y.test(d+S.event.triggered)&&(0<=d.indexOf(".")&&(d=(f=d.split(".")).shift(),f.sort()),o=d.indexOf(":")<0&&"on"+d,(t=t[S.expando]?t:new S.Event(d,"object"==typeof t&&t)).isTrigger=i?2:3,t.namespace=f.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:S.makeArray(e,[t]),l=S.event.special[d]||{},i||!l.trigger||!1!==l.trigger.apply(n,e))){if(!i&&!l.noBubble&&!S.isWindow(n)){for(a=l.delegateType||d,Y.test(a+d)||(s=s.parentNode);s;s=s.parentNode)h.push(s),u=s;u===(n.ownerDocument||T)&&h.push(u.defaultView||u.parentWindow||p)}for(c=0;(s=h[c++])&&!t.isPropagationStopped();)t.type=1]","i"),ot=/^\s+/,st=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,at=/<([\w:]+)/,lt=/\s*$/g,gt={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:m.htmlSerialize?[0,"",""]:[1,"X
","
"]},vt=et(T).appendChild(T.createElement("div"));function mt(t,e){var n,i,r=0,o=typeof t.getElementsByTagName!==L?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==L?t.querySelectorAll(e||"*"):void 0;if(!o)for(o=[],n=t.childNodes||t;null!=(i=n[r]);r++)!e||S.nodeName(i,e)?o.push(i):S.merge(o,mt(i,e));return void 0===e||e&&S.nodeName(t,e)?S.merge([t],o):o}function yt(t){W.test(t.type)&&(t.defaultChecked=t.checked)}function bt(t,e){return S.nodeName(t,"table")&&S.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function wt(t){return t.type=(null!==S.find.attr(t,"type"))+"/"+t.type,t}function _t(t){var e=ft.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function xt(t,e){for(var n,i=0;null!=(n=t[i]);i++)S._data(n,"globalEval",!e||S._data(e[i],"globalEval"))}function St(t,e){if(1===e.nodeType&&S.hasData(t)){var n,i,r,o=S._data(t),s=S._data(e,o),a=o.events;if(a)for(n in delete s.handle,s.events={},a)for(i=0,r=a[n].length;i")?o=t.cloneNode(!0):(vt.innerHTML=t.outerHTML,vt.removeChild(o=vt.firstChild)),!(m.noCloneEvent&&m.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||S.isXMLDoc(t)))for(i=mt(o),a=mt(t),s=0;null!=(r=a[s]);++s)i[s]&&Tt(r,i[s]);if(e)if(n)for(a=a||mt(t),i=i||mt(o),s=0;null!=(r=a[s]);s++)St(r,i[s]);else St(t,o);return 0<(i=mt(o,"script")).length&&xt(i,!l&&mt(t,"script")),i=a=r=null,o},buildFragment:function(t,e,n,i){for(var r,o,s,a,l,u,c,h=t.length,d=et(e),f=[],p=0;p")+c[2],r=c[0];r--;)a=a.lastChild;if(!m.leadingWhitespace&&ot.test(o)&&f.push(e.createTextNode(ot.exec(o)[0])),!m.tbody)for(r=(o="table"!==l||lt.test(o)?""!==c[1]||lt.test(o)?0:a:a.firstChild)&&o.childNodes.length;r--;)S.nodeName(u=o.childNodes[r],"tbody")&&!u.childNodes.length&&o.removeChild(u);for(S.merge(f,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=d.lastChild}else f.push(e.createTextNode(o));for(a&&d.removeChild(a),m.appendChecked||S.grep(mt(f,"input"),yt),p=0;o=f[p++];)if((!i||-1===S.inArray(o,i))&&(s=S.contains(o.ownerDocument,o),a=mt(d.appendChild(o),"script"),s&&xt(a),n))for(r=0;o=a[r++];)dt.test(o.type||"")&&n.push(o);return a=null,d},cleanData:function(t,e){for(var n,i,r,o,s=0,a=S.expando,l=S.cache,u=m.deleteExpando,c=S.event.special;null!=(n=t[s]);s++)if((e||S.acceptData(n))&&(o=(r=n[a])&&l[r])){if(o.events)for(i in o.events)c[i]?S.event.remove(n,i):S.removeEvent(n,i,o.handle);l[r]&&(delete l[r],u?delete n[a]:typeof n.removeAttribute!==L?n.removeAttribute(a):n[a]=null,h.push(r))}}}),S.fn.extend({text:function(t){return z(this,function(t){return void 0===t?S.text(this):this.empty().append((this[0]&&this[0].ownerDocument||T).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||bt(this,t).appendChild(t)})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=bt(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=t?S.filter(t,this):this,r=0;null!=(n=i[r]);r++)e||1!==n.nodeType||S.cleanData(mt(n)),n.parentNode&&(e&&S.contains(n.ownerDocument,n)&&xt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&S.cleanData(mt(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&S.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return S.clone(this,t,e)})},html:function(t){return z(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(it,""):void 0;if("string"==typeof t&&!ct.test(t)&&(m.htmlSerialize||!rt.test(t))&&(m.leadingWhitespace||!ot.test(t))&&!gt[(at.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(st,"<$1>");try{for(;n")).appendTo(e.documentElement))[0].contentWindow||Ct[0].contentDocument).document).write(),e.close(),n=Mt(t,e),Ct.detach()),kt[t]=n),n}m.shrinkWrapBlocks=function(){return null!=Et?Et:(Et=!1,(e=T.getElementsByTagName("body")[0])&&e.style?(t=T.createElement("div"),(n=T.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",e.appendChild(n).appendChild(t),typeof t.style.zoom!==L&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",t.appendChild(T.createElement("div")).style.width="5px",Et=3!==t.offsetWidth),e.removeChild(n),Et):void 0);var t,e,n};var Ot,At,Nt,jt,Rt,Lt,It,Pt,Ft,Ht=/^margin/,qt=new RegExp("^("+B+")(?!px)[a-z%]+$","i"),$t=/^(top|right|bottom|left)$/;function Ut(e,n){return{get:function(){var t=e();if(null!=t){if(!t)return(this.get=n).apply(this,arguments);delete this.get}}}}function Bt(){var t,e,n,i;(e=T.getElementsByTagName("body")[0])&&e.style&&(t=T.createElement("div"),(n=T.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",e.appendChild(n).appendChild(t),t.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",Lt=It=!1,Ft=!0,p.getComputedStyle&&(Lt="1%"!==(p.getComputedStyle(t,null)||{}).top,It="4px"===(p.getComputedStyle(t,null)||{width:"4px"}).width,(i=t.appendChild(T.createElement("div"))).style.cssText=t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",t.style.width="1px",Ft=!parseFloat((p.getComputedStyle(i,null)||{}).marginRight)),t.innerHTML="
t
",(i=t.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(Pt=0===i[0].offsetHeight)&&(i[0].style.display="",i[1].style.display="none",Pt=0===i[0].offsetHeight),e.removeChild(n))}p.getComputedStyle?(Ot=function(t){return t.ownerDocument.defaultView.getComputedStyle(t,null)},At=function(t,e,n){var i,r,o,s,a=t.style;return s=(n=n||Ot(t))?n.getPropertyValue(e)||n[e]:void 0,n&&(""!==s||S.contains(t.ownerDocument,t)||(s=S.style(t,e)),qt.test(s)&&Ht.test(e)&&(i=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=r,a.maxWidth=o)),void 0===s?s:s+""}):T.documentElement.currentStyle&&(Ot=function(t){return t.currentStyle},At=function(t,e,n){var i,r,o,s,a=t.style;return null==(s=(n=n||Ot(t))?n[e]:void 0)&&a&&a[e]&&(s=a[e]),qt.test(s)&&!$t.test(e)&&(i=a.left,(o=(r=t.runtimeStyle)&&r.left)&&(r.left=t.currentStyle.left),a.left="fontSize"===e?"1em":s,s=a.pixelLeft+"px",a.left=i,o&&(r.left=o)),void 0===s?s:s+""||"auto"}),(Nt=T.createElement("div")).innerHTML="
a",(jt=(Rt=Nt.getElementsByTagName("a")[0])&&Rt.style)&&(jt.cssText="float:left;opacity:.5",m.opacity="0.5"===jt.opacity,m.cssFloat=!!jt.cssFloat,Nt.style.backgroundClip="content-box",Nt.cloneNode(!0).style.backgroundClip="",m.clearCloneStyle="content-box"===Nt.style.backgroundClip,m.boxSizing=""===jt.boxSizing||""===jt.MozBoxSizing||""===jt.WebkitBoxSizing,S.extend(m,{reliableHiddenOffsets:function(){return null==Pt&&Bt(),Pt},boxSizingReliable:function(){return null==It&&Bt(),It},pixelPosition:function(){return null==Lt&&Bt(),Lt},reliableMarginRight:function(){return null==Ft&&Bt(),Ft}})),S.swap=function(t,e,n,i){var r,o,s={};for(o in e)s[o]=t.style[o],t.style[o]=e[o];for(o in r=n.apply(t,i||[]),e)t.style[o]=s[o];return r};var Vt=/alpha\([^)]*\)/i,zt=/opacity\s*=\s*([^)]*)/,Wt=/^(none|table(?!-c[ea]).+)/,Jt=new RegExp("^("+B+")(.*)$","i"),Gt=new RegExp("^([+-])=("+B+")","i"),Xt={position:"absolute",visibility:"hidden",display:"block"},Yt={letterSpacing:"0",fontWeight:"400"},Kt=["Webkit","O","Moz","ms"];function Qt(t,e){if(e in t)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),i=e,r=Kt.length;r--;)if((e=Kt[r]+n)in t)return e;return i}function Zt(t,e){for(var n,i,r,o=[],s=0,a=t.length;s
a",ue=ae.getElementsByTagName("a")[0],ce=(le=T.createElement("select")).appendChild(T.createElement("option")),se=ae.getElementsByTagName("input")[0],ue.style.cssText="top:1px",m.getSetAttribute="t"!==ae.className,m.style=/top/.test(ue.getAttribute("style")),m.hrefNormalized="/a"===ue.getAttribute("href"),m.checkOn=!!se.value,m.optSelected=ce.selected,m.enctype=!!T.createElement("form").enctype,le.disabled=!0,m.optDisabled=!ce.disabled,(se=T.createElement("input")).setAttribute("value",""),m.input=""===se.getAttribute("value"),se.value="t",se.setAttribute("type","radio"),m.radioValue="t"===se.value;var we=/\r/g;S.fn.extend({val:function(n){var i,t,r,e=this[0];return arguments.length?(r=S.isFunction(n),this.each(function(t){var e;1===this.nodeType&&(null==(e=r?n.call(this,t,S(this).val()):n)?e="":"number"==typeof e?e+="":S.isArray(e)&&(e=S.map(e,function(t){return null==t?"":t+""})),(i=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in i&&void 0!==i.set(this,e,"value")||(this.value=e))})):e?(i=S.valHooks[e.type]||S.valHooks[e.nodeName.toLowerCase()])&&"get"in i&&void 0!==(t=i.get(e,"value"))?t:"string"==typeof(t=e.value)?t.replace(we,""):null==t?"":t:void 0}}),S.extend({valHooks:{option:{get:function(t){var e=S.find.attr(t,"value");return null!=e?e:S.trim(S.text(t))}},select:{get:function(t){for(var e,n,i=t.options,r=t.selectedIndex,o="select-one"===t.type||r<0,s=o?null:[],a=o?r+1:i.length,l=r<0?a:o?r:0;l").append(S.parseHTML(t)).find(i):t)}).complete(n&&function(t,e){s.each(n,r||[t.responseText,e,t])}),this},S.expr.filters.animated=function(e){return S.grep(S.timers,function(t){return e===t.elem}).length};var an=p.document.documentElement;function ln(t){return S.isWindow(t)?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}S.offset={setOffset:function(t,e,n){var i,r,o,s,a,l,u=S.css(t,"position"),c=S(t),h={};"static"===u&&(t.style.position="relative"),a=c.offset(),o=S.css(t,"top"),l=S.css(t,"left"),r=("absolute"===u||"fixed"===u)&&-1"'`]/g,qi=RegExp(Fi.source),$i=RegExp(Hi.source),Ui=/<%-([\s\S]+?)%>/g,Bi=/<%([\s\S]+?)%>/g,Vi=/<%=([\s\S]+?)%>/g,zi=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Wi=/\w*$/,Ji=/^\s*function[ \n\r\t]+\w/,Gi=/^0[xX]/,Xi=/^\[object .+?Constructor\]$/,Yi=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Ki=/($^)/,Qi=/[.*+?^${}()|[\]\/\\]/g,Zi=RegExp(Qi.source),tr=/\bthis\b/,er=/['\n\r\u2028\u2029\\]/g,nr=(t="[A-Z\\xc0-\\xd6\\xd8-\\xde]",e="[a-z\\xdf-\\xf6\\xf8-\\xff]+",RegExp(t+"{2,}(?="+t+e+")|"+t+"?"+e+"|"+t+"+|[0-9]+","g")),ir=" \t\v\f \ufeff\n\r\u2028\u2029 ᠎              ",rr=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","document","isFinite","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","window","WinRTError"],or=-1,sr={};sr[Ei]=sr[ki]=sr[Mi]=sr[Di]=sr[Oi]=sr[Ai]=sr[Ni]=sr[ji]=sr[Ri]=!0,sr[gi]=sr[vi]=sr[Ci]=sr[mi]=sr[yi]=sr[bi]=sr[wi]=sr[n]=sr[_i]=sr[xi]=sr[Si]=sr[i]=sr[Ti]=sr[r]=!1;var ar={};ar[gi]=ar[vi]=ar[Ci]=ar[mi]=ar[yi]=ar[Ei]=ar[ki]=ar[Mi]=ar[Di]=ar[Oi]=ar[_i]=ar[xi]=ar[Si]=ar[Ti]=ar[Ai]=ar[Ni]=ar[ji]=ar[Ri]=!0,ar[bi]=ar[wi]=ar[n]=ar[i]=ar[r]=!1;var lr={leading:!1,maxWait:0,trailing:!1},o={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},s={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},a={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},l={function:!0,object:!0},u={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ur=l[typeof window]&&window!==(this&&this.window)?window:this,c=l[typeof exports]&&exports&&!exports.nodeType&&exports,h=l[typeof module]&&module&&!module.nodeType&&module,d=c&&h&&"object"==typeof global&&global;!d||d.global!==d&&d.window!==d&&d.self!==d||(ur=d);var f=h&&h.exports===c&&c;function cr(t,e){if(t!==e){var n=t==t,i=e==e;if(e>>1,K=L?L.BYTES_PER_ELEMENT:0,Q=r.pow(2,53)-1,Z=R&&new R;function tt(t){if(Sr(t)&&!dn(t)){if(t instanceof et)return t;if(b.call(t,"__wrapped__"))return new et(t.__wrapped__,t.__chain__,at(t.__actions__))}return new et(t)}function et(t,e,n){this.__actions__=n||[],this.__chain__=!!e,this.__wrapped__=t}var nt=tt.support={};function it(t){this.actions=null,this.dir=1,this.dropCount=0,this.filtered=!1,this.iteratees=null,this.takeCount=J,this.views=null,this.wrapped=t}function rt(){this.__data__={}}function ot(t){var e=t?t.length:0;for(this.data={hash:P(null),set:new O};e--;)this.push(t[e])}function st(t,e){var n=t.data;return("string"==typeof e||mn(e)?n.set.has(e):n.hash[e])?0:-1}function at(t,e){var n=-1,i=t.length;for(e=e||M(i);++n>>1,s=t[o];(n?s<=e:s=li)return t}else Se=0;return Wt(t,e)});function Ee(t){var e,n;return!(!Sr(t)||w.call(t)!=xi||!(b.call(t,"constructor")||"function"!=typeof(e=t.constructor)||e instanceof e))&&(Lt(t,function(t,e){n=e}),void 0===n||b.call(t,n))}function ke(t){for(var e=Mn(t),n=e.length,i=n&&t.length,r=tt.support,o=i&&be(i)&&(dn(t)||r.nonEnumArgs&&hn(t)),s=-1,a=[];++s>>0,i=M(n);++e=(t=fr(t)).length)return t;var s=i-r.length;if(s<1)return r;var a=t.slice(0,s);if(null==o)return a+r;if(_n(o)){if(t.slice(s).search(o)){var l,u,c=t.slice(0,s);for(o.global||(o=m(o.source,(Wi.exec(o)||"")+"g")),o.lastIndex=0;l=o.exec(c);)u=l.index;a=a.slice(0,null==u?s:u)}}else if(t.indexOf(o,s)!=s){var h=a.lastIndexOf(o);-1").attr(t);this.setElement(e,!1)}}}),a.sync=function(t,e,n){var i=v[t];x.defaults(n=n||{},{emulateHTTP:a.emulateHTTP,emulateJSON:a.emulateJSON});var r={type:i,dataType:"json"};if(n.url||(r.url=x.result(e,"url")||A()),null!=n.data||!e||"create"!==t&&"update"!==t&&"patch"!==t||(r.contentType="application/json",r.data=JSON.stringify(n.attrs||e.toJSON(n))),n.emulateJSON&&(r.contentType="application/x-www-form-urlencoded",r.data=r.data?{model:r.data}:{}),n.emulateHTTP&&("PUT"===i||"DELETE"===i||"PATCH"===i)){r.type="POST",n.emulateJSON&&(r.data._method=i);var o=n.beforeSend;n.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",i),o)return o.apply(this,arguments)}}"GET"===r.type||n.emulateJSON||(r.processData=!1),"PATCH"===r.type&&g&&(r.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var s=n.xhr=a.ajax(x.extend(r,n));return e.trigger("request",e,s,n),s};var g=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),v={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};a.ajax=function(){return a.$.ajax.apply(a.$,arguments)};var m=a.Router=function(t){(t=t||{}).routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},y=/\((.*?)\)/g,b=/(\(\?)?:\w+/g,w=/\*\w+/g,_=/[\-{}\[\]+?.,\\\^$|#\s]/g;x.extend(m.prototype,o,{initialize:function(){},route:function(n,i,r){x.isRegExp(n)||(n=this._routeToRegExp(n)),x.isFunction(i)&&(r=i,i=""),r=r||this[i];var o=this;return a.history.route(n,function(t){var e=o._extractParameters(n,t);o.execute(r,e),o.trigger.apply(o,["route:"+i].concat(e)),o.trigger("route",i,e),a.history.trigger("route",o,i,e)}),this},execute:function(t,e){t&&t.apply(this,e)},navigate:function(t,e){return a.history.navigate(t,e),this},_bindRoutes:function(){if(this.routes){this.routes=x.result(this,"routes");for(var t,e=x.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(_,"\\$&").replace(y,"(?:$1)?").replace(b,function(t,e){return e?t:"([^/?]+)"}).replace(w,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return x.map(n,function(t,e){return e===n.length-1?t||null:t?decodeURIComponent(t):null})}});var C=a.History=function(){this.handlers=[],x.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},E=/^[#\/]|\s+$/g,k=/^\/+|\/+$/g,M=/msie [\w.]+/,D=/\/$/,O=/#.*$/;C.started=!1,x.extend(C.prototype,o,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(null==t)if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var n=this.root.replace(D,"");t.indexOf(n)||(t=t.slice(n.length))}else t=this.getHash();return t.replace(E,"")},start:function(t){if(C.started)throw new Error("Backbone.history has already been started");C.started=!0,this.options=x.extend({root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var e=this.getFragment(),n=document.documentMode,i=M.exec(navigator.userAgent.toLowerCase())&&(!n||n<=7);if(this.root=("/"+this.root+"/").replace(k,"/"),i&&this._wantsHashChange){var r=a.$(''; + const msgHtml = ''; return API.openModal(titleHtml, msgHtml, true, 'video'); }); + + //# Open an options modal App.commands.setHandler("ui:modal:options", function(titleHtml, items) { - var $options; - $options = API.buildOptions(items); + const $options = API.buildOptions(items); return API.openModal(titleHtml, $options, true, 'options'); }); - App.commands.setHandler("ui:playermenu", function(op) { - return API.playerMenu(op); - }); - App.commands.setHandler("ui:dropdown:bind:close", function($el) { - return $el.on("click", '.dropdown-menu li, .dropdown-menu a', function(e) { - return $(e.target).closest('.dropdown-menu').parent().removeClass('open').trigger('hide.bs.dropdown'); - }); + + //# Toggle player menu + App.commands.setHandler("ui:playermenu", op => API.playerMenu(op)); + + //# Bind closing the f#@kn dropdown on item click + App.commands.setHandler("ui:dropdown:bind:close", $el => $el.on("click", '.dropdown-menu li, .dropdown-menu a', e => $(e.target).closest('.dropdown-menu').parent().removeClass('open').trigger('hide.bs.dropdown'))); + + //# When shell ready. + return App.vent.on("shell:ready", options => { + //# Close player menu on anywhere click + return $('html').on('click', () => API.playerMenu('close')); }); - return App.vent.on("shell:ready", (function(_this) { - return function(options) { - return $('html').on('click', function() { - return API.playerMenu('close'); - }); - }; - })(this)); }); diff --git a/dist/themes/base/css/base.css b/dist/themes/base/css/base.css index 144ec44f..201ad41b 100644 --- a/dist/themes/base/css/base.css +++ b/dist/themes/base/css/base.css @@ -1 +1,30792 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! 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}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot?1711106462);src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot?&1711106462#iefix) format("embedded-opentype"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff?1711106462) format("woff"),url(../fonts/bootstrap/glyphicons-halflings-regular.ttf?1711106462) format("truetype"),url(../fonts/bootstrap/glyphicons-halflings-regular.svg?1711106462#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(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>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{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="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn,.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,.form-group-sm .form-control,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn,.form-group-sm .form-control{height:auto}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn,.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,.form-group-lg .form-control,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn,.form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline: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;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled].active,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}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 solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;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.428571429;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !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>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-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:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.428571429;text-decoration:none;color:#337ab7;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>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.media{margin-top:15px}.media:first-child{margin-top:0}.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{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;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:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.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-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:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.428571429px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;backface-visibility:hidden;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.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:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.shadow-z-1,.card,.snackbar,.landing-page .region-content h3,.landing-page h3.set-header,.landing-set .set__header{box-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24)}.shadow-z-2,.well,.jumbotron,.btn-raised,.btn-group,.btn-group-vertical,.btn-group.btn-group-raised,.btn-group-vertical.btn-group-raised,.modal-content{box-shadow:0 0px 14px -5px rgba(0,0,0,0.06),0 6px 12px -6px rgba(0,0,0,0.13)}.shadow-z-2-hover,.btn:hover:not(.btn-link){box-shadow:0 3px 6px rgba(0,0,0,0.2),0 3px 6px rgba(0,0,0,0.28)}.shadow-z-3,.btn:active:not(.btn-link),.btn-raised:active:not(.btn-link),.btn-group:active:not(.btn-link),.btn-group-vertical:active:not(.btn-link),.btn-group.btn-group-raised:active:not(.btn-link),.btn-group-vertical.btn-group-raised:active:not(.btn-link){box-shadow:0 10px 20px rgba(0,0,0,0.19),0 6px 6px rgba(0,0,0,0.23)}.shadow-z-4,.btn-raised:hover,.btn-group:hover,.btn-group-vertical:hover,.btn-group.btn-group-raised:hover,.btn-group-vertical.btn-group-raised:hover{box-shadow:0 14px 28px rgba(0,0,0,0.25),0 10px 10px rgba(0,0,0,0.22)}.shadow-z-5{box-shadow:0 19px 38px rgba(0,0,0,0.3),0 15px 12px rgba(0,0,0,0.22)}body{background-color:#EEEEEE}body.inverse{background:#333333}body.inverse,body.inverse .form-control{color:rgba(255,255,255,0.84)}.well,.well .form-control,.well:not([class^="well well-material-"]),.well:not([class^="well well-material-"]) .form-control{color:rgba(0,0,0,0.84)}.well .floating-label,.well:not([class^="well well-material-"]) .floating-label{color:#7e7e7e}.well .form-control,.well:not([class^="well well-material-"]) .form-control{border-bottom-color:#7e7e7e}.well .form-control::-webkit-input-placeholder,.well:not([class^="well well-material-"]) .form-control::-webkit-input-placeholder{color:#7e7e7e}.well .form-control::-moz-placeholder,.well:not([class^="well well-material-"]) .form-control::-moz-placeholder{color:#7e7e7e;opacity:1}.well .form-control:-ms-input-placeholder,.well:not([class^="well well-material-"]) .form-control:-ms-input-placeholder{color:#7e7e7e}.well .option,.well .create,.well:not([class^="well well-material-"]) .option,.well:not([class^="well well-material-"]) .create{color:rgba(0,0,0,0.84)}[class^="well well-material-"],[class^="well well-material-"] .form-control,[class^="well well-material-"] .floating-label{color:rgba(255,255,255,0.84)}[class^="well well-material-"] .form-control{border-bottom-color:rgba(255,255,255,0.84)}[class^="well well-material-"] .form-control::-webkit-input-placeholder{color:rgba(255,255,255,0.84)}[class^="well well-material-"] .form-control::-moz-placeholder{color:rgba(255,255,255,0.84);opacity:1}[class^="well well-material-"] .form-control:-ms-input-placeholder{color:rgba(255,255,255,0.84)}[class^="well well-material-"] .option,[class^="well well-material-"] .create{color:rgba(0,0,0,0.84)}.well,.jumbotron{background-color:#fff;padding:19px;margin-bottom:20px;border-radius:2px;border:0}.well p,.jumbotron p{font-weight:300}.btn{position:relative;padding:8px 30px;border:0;margin:10px 1px;cursor:pointer;border-radius:2px;text-transform:uppercase;text-decoration:none;color:rgba(255,255,255,0.84);transition:box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);outline:none !important}.btn:hover{color:rgba(255,255,255,0.84)}.btn-link,.btn:not([class^="btn btn-"]),.btn-default{color:rgba(0,0,0,0.84)}.btn-link:hover,.btn:not([class^="btn btn-"]):hover,.btn-default:hover{color:rgba(0,0,0,0.84)}.btn:not([class^="btn btn-"]):hover,.btn-default:hover{background-color:rgba(255,255,255,0.5)}.btn-raised{transition:box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1)}.btn-flat{box-shadow:none !important}.btn-flat.btn-default:hover{background:none}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus{background:#10a0cf;border-color:#10a0cf}.btn-group,.btn-group-vertical{position:relative;border-radius:4px;margin:10px 1px;transition:box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1)}.btn-group.open .dropdown-toggle,.btn-group-vertical.open .dropdown-toggle{box-shadow:none}.btn-group.btn-group-raised,.btn-group-vertical.btn-group-raised{transition:box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1)}.btn-group .btn,.btn-group .btn:active,.btn-group .btn-group,.btn-group-vertical .btn,.btn-group-vertical .btn:active,.btn-group-vertical .btn-group{box-shadow:none !important;margin:0}.btn-group .btn:active .caret,.btn-group-vertical .btn:active .caret{margin-left:-1px}.btn-group-flat{box-shadow:none !important}.btn-fab{margin:0;padding:15px;font-size:26px;width:56px;height:56px}.btn-fab,.btn-fab .ripple-wrapper{border-radius:100%}.btn-fab.btn-mini{width:40px;height:40px;padding:13px;font-size:15px}.btn-default{background-color:#FFF}.btn-primary{background-color:#12B2E7}.btn-success{background-color:#0F9D58}.btn-info{background-color:#03A9F4}.btn-warning{background-color:#FF5722}.btn-danger{background-color:#F44336}.btn-material-red{background-color:#F44336}.btn-material-pink{background-color:#E91E63}.btn-material-purple{background-color:#9C27B0}.btn-material-deeppurple{background-color:#673AB7}.btn-material-indigo{background-color:#3F51B5}.btn-material-lightblue{background-color:#03A9F4}.btn-material-cyan{background-color:#00BCD4}.btn-material-teal{background-color:#009688}.btn-material-lightgreen{background-color:#8BC34A}.btn-material-lime{background-color:#CDDC39}.btn-material-lightyellow{background-color:#FFEB3B}.btn-material-orange{background-color:#FF9800}.btn-material-deeporange{background-color:#FF5722}.btn-material-grey{background-color:#9E9E9E}.btn-material-bluegrey{background-color:#607D8B}.btn-material-brown{background-color:#795548}.btn-material-lightgrey{background-color:#ECECEC}.form-horizontal .checkbox{padding-top:15px}.checkbox{transform:rotate(0deg)}.checkbox label{cursor:pointer;padding-left:45px;position:relative}.checkbox label span{display:block;position:absolute;left:0px;transition-duration:0.2s}.checkbox label .check:after{display:block;position:absolute;content:"";background-color:rgba(0,0,0,0.84);left:-5px;top:-15px;height:50px;width:50px;border-radius:100%;z-index:1;opacity:0;margin:0}.checkbox label .check:before{display:block;content:"";border:2px solid rgba(0,0,0,0.84);height:20px;width:20px;transition-delay:0.2s}.checkbox input[type=checkbox]{opacity:0}.checkbox input[type=checkbox] ~ .check:before{position:absolute;top:2px;left:11px;width:18px;height:18px;border:solid 2px;border-color:#5a5a5a;animation:uncheck 300ms ease-out forwards}.checkbox input[type=checkbox]:focus ~ .check:after{opacity:0.2}.checkbox input[type=checkbox]:checked ~ .check:before{animation:check 300ms ease-out forwards}.checkbox input[type=checkbox]:not(:checked) ~ .check:after{animation:rippleOff 500ms linear forwards}.checkbox input[type=checkbox]:checked ~ .check:after{animation:rippleOn 500ms linear forwards}.checkbox:not(:hover) input[type=checkbox] ~ .check:before,.checkbox:not(:hover) input[type=checkbox] ~ .check:after{animation-duration:1ms}.checkbox input[type=checkbox][disabled]:not(:checked) ~ .check:before{opacity:0.5}.checkbox input[type=checkbox][disabled] ~ .check:after{background-color:rgba(0,0,0,0.84);transform:rotate(-45deg)}@keyframes uncheck{0%{top:-3px;left:17px;width:10px;height:21px;border-color:#0f9d58;border-left-color:transparent;border-top-color:transparent;transform:rotate(45deg)}50%{top:14px;left:17px;width:4px;height:4px;transform:rotate(45deg);border-color:#0f9d58;border-left-color:transparent;border-top-color:transparent}51%{border-color:#5a5a5a;border-left-color:#5a5a5a;border-top-color:#5a5a5a}100%{top:1px;left:12px;width:18px;height:18px;transform:rotate(0deg);border-color:#5a5a5a;border-left-color:#5a5a5a;border-top-color:#5a5a5a}}@keyframes check{100%{top:-3px;left:17px;width:10px;height:21px;transform:rotate(45deg);border-color:#0f9d58;border-left-color:transparent;border-top-color:transparent}51%{border-left:transparent;border-top-color:transparent}50%{top:14px;left:17px;width:4px;height:4px;transform:rotate(45deg);border-color:#5a5a5a;border-left-color:#5a5a5a;border-top-color:#5a5a5a}0%{top:1px;left:12px;width:18px;height:18px;transform:rotate(0deg);border-color:#5a5a5a;border-left-color:#5a5a5a;border-top-color:#5a5a5a}}@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}.togglebutton{vertical-align:middle}.togglebutton,.togglebutton *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.togglebutton label{font-weight:400;cursor:pointer}.togglebutton label input[type=checkbox]:first-child{opacity:0;width:0;height:0}.togglebutton label input[type=checkbox]:first-child:checked+.toggle{background-color:rgba(18,178,231,0.5)}.togglebutton label input[type=checkbox]:first-child:checked+.toggle:after{background-color:#12B2E7}.togglebutton label .toggle,.togglebutton label input[type=checkbox][disabled]:first-child+.toggle{content:"";display:inline-block;width:30px;height:15px;background-color:rgba(80,80,80,0.7);border-radius:15px;margin-right:10px;transition:background 0.3s ease;vertical-align:middle}.togglebutton label .toggle:after{content:"";display:inline-block;width:20px;height:20px;background-color:#F1F1F1;border-radius:20px;position:relative;box-shadow:0 1px 3px 1px rgba(0,0,0,0.4);left:-5px;top:-2px;transition:left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease}.togglebutton label input[type=checkbox][disabled]:first-child+.toggle:after,.togglebutton label input[type=checkbox][disabled]:checked:first-child+.toggle:after{background-color:#BDBDBD}.togglebutton label input[type=checkbox]:first-child:checked ~ .toggle:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,149,135,0.1)}.togglebutton label input[type=checkbox]:first-child ~ .toggle:active:after,.togglebutton label input[type=checkbox][disabled]:first-child ~ .toggle:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,0.4),0 0 0 15px rgba(0,0,0,0.1)}.togglebutton label input[type=checkbox]:first-child:checked+.toggle:after{left:15px}.form-horizontal .radio{margin-bottom:10px}.radio label{cursor:pointer;padding-left:45px;position:relative}.radio label span{display:block;position:absolute;left:10px;top:2px;transition-duration:0.2s}.radio label .circle{border:2px solid rgba(0,0,0,0.84);height:15px;width:15px;border-radius:100%}.radio label .check{height:15px;width:15px;border-radius:100%;background-color:rgba(0,0,0,0.84);transform:scale(0)}.radio label .check:after{display:block;position:absolute;content:"";background-color:rgba(0,0,0,0.84);left:-18px;top:-18px;height:50px;width:50px;border-radius:100%;z-index:1;opacity:0;margin:0;transform:scale(1.5)}.radio label input[type=radio]:not(:checked) ~ .check:after{animation:rippleOff 500ms}.radio label input[type=radio]:checked ~ .check:after{animation:rippleOn 500ms}.radio input[type=radio][disabled] ~ .check,.radio input[type=radio][disabled] ~ .circle{opacity:0.5}.radio input[type=radio]{display:none}.radio input[type=radio]:checked ~ .check{transform:scale(0.55)}.radio input[type=radio][disabled] ~ .circle{border-color:rgba(0,0,0,0.84)}.radio input[type=radio][disabled] ~ .check{background-color:rgba(0,0,0,0.84)}@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}fieldset[disabled] .form-control,fieldset[disabled] .form-control:focus,fieldset[disabled] .form-control.focus,.form-control-wrapper .form-control,.form-control-wrapper .form-control:focus,.form-control-wrapper .form-control.focus,.form-control,.form-control:focus,.form-control.focus{padding:0;float:none;border:0;box-shadow:none;border-radius:0;background:transparent;border-bottom:1px solid #757575}fieldset[disabled] .form-control:not(textarea):not(select),fieldset[disabled] .form-control:focus:not(textarea):not(select),fieldset[disabled] .form-control.focus:not(textarea):not(select),.form-control-wrapper .form-control:not(textarea):not(select),.form-control-wrapper .form-control:focus:not(textarea):not(select),.form-control-wrapper .form-control.focus:not(textarea):not(select),.form-control:not(textarea):not(select),.form-control:focus:not(textarea):not(select),.form-control.focus:not(textarea):not(select){height:28px}fieldset[disabled] .form-control:disabled,fieldset[disabled] .form-control:focus:disabled,fieldset[disabled] .form-control.focus:disabled,.form-control-wrapper .form-control:disabled,.form-control-wrapper .form-control:focus:disabled,.form-control-wrapper .form-control.focus:disabled,.form-control:disabled,.form-control:focus:disabled,.form-control.focus:disabled{border-style:dashed}select.form-control{height:23px}select[multiple].form-control,select[multiple].form-control:focus,select[multiple].form-control.focus{height:85px}.form-control-wrapper{position:relative}.form-control-wrapper .form-control:focus,.form-control-wrapper .form-control.focus{outline:none}.form-control-wrapper .floating-label{color:#7E7E7E;font-size:14px;position:absolute;pointer-events:none;left:0px;top:5px;transition:0.2s ease all;opacity:0}.form-control-wrapper .form-control:not(.empty) ~ .floating-label{top:-10px;font-size:10px;opacity:1}.form-control-wrapper .form-control:focus:invalid ~ .floating-label,.form-control-wrapper .form-control.focus:invalid ~ .floating-label{color:#F44336}.form-control-wrapper .form-control:focus ~ .material-input:after,.form-control-wrapper .form-control.focus ~ .material-input:after{background-color:#12B2E7}.form-control-wrapper .form-control:focus:invalid ~ .material-input:before,.form-control-wrapper .form-control:focus:invalid ~ .material-input:after,.form-control-wrapper .form-control.focus:invalid ~ .material-input:before,.form-control-wrapper .form-control.focus:invalid ~ .material-input:after{background-color:#F44336}.form-control-wrapper .form-control.empty ~ .floating-label{opacity:1}.form-control-wrapper .material-input:before{position:absolute;content:"";width:100%;left:0;height:2px;background-color:#12B2E7;bottom:-1px;transform:scaleX(0);transition:transform 0s}.form-control-wrapper .form-control:focus ~ .material-input:before,.form-control-wrapper .form-control.focus ~ .material-input:before{transform:scaleX(1);transition:transform 0.2s ease-out}.form-control-wrapper .material-input:after{content:"";position:absolute;height:18px;width:100px;margin-top:-1px;top:7px;left:0;pointer-events:none;opacity:0.9;transform-origin:left}.form-control-wrapper .input-lg ~ .material-input:after,.form-control-wrapper .input-group-lg>.form-control ~ .material-input:after,.form-control-wrapper .input-group-lg>.input-group-addon ~ .material-input:after,.form-control-wrapper .input-group-lg>.input-group-btn>.btn ~ .material-input:after{height:26px}.form-control-wrapper textarea{resize:inherit}.form-control-wrapper textarea ~ .form-control-highlight{margin-top:-11px}.form-control-wrapper .form-control:focus ~ .material-input:after,.form-control-wrapper .form-control.focus ~ .material-input:after{animation:input-highlight 0.3s ease;animation-fill-mode:forwards;opacity:0}.form-control-wrapper select ~ .material-input:after{display:none}.form-group.has-warning .material-input:before,.form-group.has-warning input.form-control:focus ~ .material-input:after,.form-group.has-warning input.form-control.focus ~ .material-input:after{background:#FF5722}.form-group.has-warning .control-label,.form-group.has-warning input.form-control:not(.empty) ~ .floating-label{color:#FF5722}.form-group.has-error .material-input:before,.form-group.has-error input.form-control:focus ~ .material-input:after,.form-group.has-error input.form-control.focus ~ .material-input:after{background:#F44336}.form-group.has-error .control-label,.form-group.has-error input.form-control:not(.empty) ~ .floating-label{color:#F44336}.form-group.has-success .material-input:before,.form-group.has-success input.form-control:focus ~ .material-input:after,.form-group.has-success input.form-control.focus ~ .material-input:after{background:#0F9D58}.form-group.has-success .control-label,.form-group.has-success input.form-control:not(.empty) ~ .floating-label{color:#0F9D58}.form-group.has-info .material-input:before,.form-group.has-info input.form-control:focus ~ .material-input:after,.form-group.has-info input.form-control.focus ~ .material-input:after{background:#03A9F4}.form-group.has-info .control-label,.form-group.has-info input.form-control:not(.empty) ~ .floating-label{color:#03A9F4}.input-group .form-control-wrapper{margin-right:5px;margin-left:5px;bottom:-10px}.input-group .form-control-wrapper .form-control{float:none}.input-group .input-group-addon{border:0}.input-group .input-group-btn .btn{border-radius:4px}select.form-control{border:0;box-shadow:none;border-bottom:1px solid #757575;border-radius:0}select.form-control:focus,select.form-control.focus{box-shadow:none;border-color:#757575}@keyframes input-highlight{0%{left:20%;transform:scaleX(20%)}99%{transform:scaleX(0);left:0;opacity:1}100%{opacity:0}}.form-control-wrapper input[type=file]{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}legend{border-bottom:0}.modal-content{border-radius:0;border:0}.modal-content .modal-header{border-bottom:0}.modal-content .modal-footer{border-top:0}.modal-content .modal-footer .btn+.btn{margin-bottom:10px}.list-group{border-radius:0}.list-group .list-group-item{background-color:transparent;overflow:hidden;border:0;border-radius:0;padding:0 16px}.list-group .list-group-item .row-picture,.list-group .list-group-item .row-action-primary{float:left;display:inline-block;padding-right:16px}.list-group .list-group-item .row-picture img,.list-group .list-group-item .row-picture i,.list-group .list-group-item .row-picture label,.list-group .list-group-item .row-action-primary img,.list-group .list-group-item .row-action-primary i,.list-group .list-group-item .row-action-primary label{display:block;width:56px;height:56px}.list-group .list-group-item .row-picture img,.list-group .list-group-item .row-action-primary img{background:rgba(0,0,0,0.1);padding:1px}.list-group .list-group-item .row-picture img.circle,.list-group .list-group-item .row-action-primary img.circle{border-radius:100%}.list-group .list-group-item .row-picture i,.list-group .list-group-item .row-action-primary i{background:rgba(0,0,0,0.25);border-radius:100%;text-align:center;line-height:56px;font-size:20px;color:white}.list-group .list-group-item .row-picture label,.list-group .list-group-item .row-action-primary label{margin-left:7px;margin-right:-7px;margin-top:5px;margin-bottom:-5px}.list-group .list-group-item .row-content{display:inline-block;width:calc(100% - 92px);min-height:66px}.list-group .list-group-item .row-content .action-secondary{position:absolute;right:16px;top:16px}.list-group .list-group-item .row-content .action-secondary i{font-size:20px;color:rgba(0,0,0,0.25);cursor:pointer}.list-group .list-group-item .row-content .action-secondary ~ *{max-width:calc(100% - 30px)}.list-group .list-group-item .row-content .least-content{position:absolute;right:16px;top:0px;color:rgba(0,0,0,0.54);font-size:14px}.list-group .list-group-item .list-group-item-heading{color:rgba(0,0,0,0.77);font-size:20px;line-height:29px}.list-group .list-group-separator{clear:both;overflow:hidden;margin-top:10px;margin-bottom:10px}.list-group .list-group-separator:before{content:"";width:calc(100% - 90px);border-bottom:1px solid rgba(0,0,0,0.1);float:right}.navbar{background-color:#12B2E7;border:0;border-radius:0}.navbar .navbar-brand{position:relative;height:60px;line-height:30px;color:rgba(255,255,255,0.84)}.navbar .navbar-brand:hover,.navbar .navbar-brand:focus{color:rgba(255,255,255,0.84);background-color:transparent}.navbar .navbar-text{color:rgba(255,255,255,0.84);margin-top:20px;margin-bottom:20px}.navbar .navbar-nav>li>a{color:rgba(255,255,255,0.84);padding-top:20px;padding-bottom:20px}.navbar .navbar-nav>li>a:hover,.navbar .navbar-nav>li>a:focus{color:rgba(255,255,255,0.84);background-color:transparent}.navbar .navbar-nav>.active>a,.navbar .navbar-nav>.active>a:hover,.navbar .navbar-nav>.active>a:focus{color:rgba(255,255,255,0.84);background-color:rgba(0,0,0,0.05)}.navbar .navbar-nav>.disabled>a,.navbar .navbar-nav>.disabled>a:hover,.navbar .navbar-nav>.disabled>a:focus{color:#E5E5E5;background-color:transparent}.navbar .navbar-toggle{border-color:rgba(255,255,255,0.84)}.navbar .navbar-toggle:hover,.navbar .navbar-toggle:focus{background-color:transparent}.navbar .navbar-toggle .icon-bar{background-color:rgba(255,255,255,0.84)}.navbar .navbar-collapse,.navbar .navbar-form{border-color:rgba(0,0,0,0.1)}.navbar .navbar-nav>.open>a,.navbar .navbar-nav>.open>a:hover,.navbar .navbar-nav>.open>a:focus{background-color:rgba(0,0,0,0.05);color:rgba(255,255,255,0.84)}@media (max-width: 767px){.navbar .navbar-nav .open .dropdown-menu>.dropdown-header{border:0;color:rgba(212,212,212,0.84)}.navbar .navbar-nav .open .dropdown-menu .divider{background-color:rgba(255,255,255,0.84)}.navbar .navbar-nav .open .dropdown-menu>li>a{color:rgba(255,255,255,0.84)}.navbar .navbar-nav .open .dropdown-menu>li>a:hover,.navbar .navbar-nav .open .dropdown-menu>li>a:focus{color:rgba(255,255,255,0.84);background-color:transparent}.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:rgba(255,255,255,0.84);background-color:rgba(0,0,0,0.05)}.navbar .navbar-nav .open .dropdown-menu>.disabled>a,.navbar .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#E5E5E5;background-color:transparent}}.navbar .navbar-link{color:rgba(255,255,255,0.84)}.navbar .navbar-link:hover{color:rgba(255,255,255,0.84)}.navbar .navbar-link{color:rgba(255,255,255,0.84)}.navbar .navbar-link:hover,.navbar .navbar-link:focus{color:rgba(255,255,255,0.84)}.navbar .navbar-link[disabled]:hover,.navbar .navbar-link[disabled]:focus,fieldset[disabled] .navbar .navbar-link:hover,fieldset[disabled] .navbar .navbar-link:focus{color:#E5E5E5}.navbar .navbar-form{margin-top:16px}.navbar .navbar-form .form-control-wrapper .form-control,.navbar .navbar-form .form-control{border-color:rgba(255,255,255,0.84);color:rgba(255,255,255,0.84)}.navbar .navbar-form .form-control-wrapper .material-input:before,.navbar .navbar-form .form-control-wrapper input:focus ~ .material-input:after{background-color:rgba(255,255,255,0.84)}.navbar .navbar-form ::-webkit-input-placeholder{color:rgba(255,255,255,0.84)}.navbar .navbar-form :-moz-placeholder{color:rgba(255,255,255,0.84)}.navbar .navbar-form ::-moz-placeholder{color:rgba(255,255,255,0.84)}.navbar .navbar-form :-ms-input-placeholder{color:rgba(255,255,255,0.84)}.navbar-inverse{background-color:#5264AE}.navbar-white{background-color:#FFF}.navbar-white .navbar-brand,.navbar-white .navbar-brand:hover,.navbar-white .navbar-brand:focus{color:rgba(0,0,0,0.84)}.navbar-white .navbar-nav>li>a{color:rgba(0,0,0,0.84)}.navbar-white .navbar-nav>li>a:hover,.navbar-white .navbar-nav>li>a:focus{color:rgba(0,0,0,0.84);background-color:transparent}.navbar-white .navbar-nav>.active>a,.navbar-white .navbar-nav>.active>a:hover,.navbar-white .navbar-nav>.active>a:focus{color:rgba(0,0,0,0.84);background-color:rgba(0,0,0,0.05)}.navbar-white .navbar-nav>.disabled>a,.navbar-white .navbar-nav>.disabled>a:hover,.navbar-white .navbar-nav>.disabled>a:focus{color:rgba(0,0,0,0.84);background-color:transparent}.navbar-white .navbar-nav>.open>a,.navbar-white .navbar-nav>.open>a:hover,.navbar-white .navbar-nav>.open>a:focus{background-color:rgba(0,0,0,0.05);color:rgba(0,0,0,0.84)}.navbar-default{background-color:#12B2E7}.navbar-primary{background-color:#12B2E7}.navbar-success{background-color:#0F9D58}.navbar-info{background-color:#03A9F4}.navbar-warning{background-color:#FF5722}.navbar-danger{background-color:#F44336}.navbar-material-red{background-color:#F44336}.navbar-material-pink{background-color:#E91E63}.navbar-material-purple{background-color:#9C27B0}.navbar-material-deeppurple{background-color:#673AB7}.navbar-material-indigo{background-color:#3F51B5}.navbar-material-lightblue{background-color:#03A9F4}.navbar-material-cyan{background-color:#00BCD4}.navbar-material-teal{background-color:#009688}.navbar-material-lightgreen{background-color:#8BC34A}.navbar-material-lime{background-color:#CDDC39}.navbar-material-lightyellow{background-color:#FFEB3B}.navbar-material-orange{background-color:#FF9800}.navbar-material-deeporange{background-color:#FF5722}.navbar-material-grey{background-color:#9E9E9E}.navbar-material-bluegrey{background-color:#607D8B}.navbar-material-brown{background-color:#795548}.navbar-material-lightgrey{background-color:#ECECEC}.dropdown-menu{border:0;box-shadow:0 2px 5px 0 rgba(0,0,0,0.26)}.dropdown-menu .divider{background-color:rgba(229,229,229,0.12)}.dropdown-menu li{overflow:hidden;position:relative}.dropdown-menu li a:hover{background:rgba(0,0,0,0.08)}.alert{border:0px;border-radius:0}.alert a,.alert .alert-link{color:#FFFFFF}.alert-default{background-color:rgba(255,255,255,0.35);color:rgba(0,0,0,0.84)}.alert-default a,.alert-default .alert-link{color:#000000}.alert-primary{color:#FFFFFF;background-color:rgba(18,178,231,0.35);color:rgba(0,0,0,0.84)}.alert-success{color:#FFFFFF;background-color:rgba(15,157,88,0.35);color:rgba(0,0,0,0.84)}.alert-info{color:#FFFFFF;background-color:rgba(3,169,244,0.35);color:rgba(0,0,0,0.84)}.alert-warning{color:#FFFFFF;background-color:rgba(255,87,34,0.35);color:rgba(0,0,0,0.84)}.alert-danger{background-color:rgba(244,67,54,0.35);color:rgba(0,0,0,0.84)}.alert-material-red{background-color:rgba(244,67,54,0.35);color:rgba(0,0,0,0.84)}.alert-material-pink{background-color:rgba(233,30,99,0.35);color:rgba(0,0,0,0.84)}.alert-material-purple{background-color:rgba(156,39,176,0.35);color:rgba(0,0,0,0.84)}.alert-material-deeppurple{background-color:rgba(103,58,183,0.35);color:rgba(0,0,0,0.84)}.alert-material-indigo{background-color:rgba(63,81,181,0.35);color:rgba(0,0,0,0.84)}.alert-material-lightblue{background-color:rgba(3,169,244,0.35);color:rgba(0,0,0,0.84)}.alert-material-cyan{background-color:rgba(0,188,212,0.35);color:rgba(0,0,0,0.84)}.alert-material-teal{background-color:rgba(0,150,136,0.35);color:rgba(0,0,0,0.84)}.alert-material-lightgreen{background-color:rgba(139,195,74,0.35);color:rgba(0,0,0,0.84)}.alert-material-lime{background-color:rgba(205,220,57,0.35);color:rgba(0,0,0,0.84)}.alert-material-lightyellow{background-color:rgba(255,235,59,0.35);color:rgba(0,0,0,0.84)}.alert-material-orange{background-color:rgba(255,152,0,0.35);color:rgba(0,0,0,0.84)}.alert-material-deeporange{background-color:rgba(255,87,34,0.35);color:rgba(0,0,0,0.84)}.alert-material-grey{background-color:rgba(158,158,158,0.35);color:rgba(0,0,0,0.84)}.alert-material-bluegrey{background-color:rgba(96,125,139,0.35);color:rgba(0,0,0,0.84)}.alert-material-brown{background-color:rgba(121,85,72,0.35);color:rgba(0,0,0,0.84)}.alert-material-lightgrey{background-color:rgba(236,236,236,0.35);color:rgba(0,0,0,0.84)}.progress{height:4px;border-radius:0;box-shadow:none;background:#c8c8c8}.progress .progress-bar{box-shadow:none}.progress .progress-bar-default{background-color:#12B2E7}.progress .progress-bar-primary{background-color:#12B2E7}.progress .progress-bar-success{background-color:#0F9D58}.progress .progress-bar-info{background-color:#03A9F4}.progress .progress-bar-warning{background-color:#FF5722}.progress .progress-bar-danger{background-color:#F44336}.progress .progress-bar-material-red{background-color:#F44336}.progress .progress-bar-material-pink{background-color:#E91E63}.progress .progress-bar-material-purple{background-color:#9C27B0}.progress .progress-bar-material-deeppurple{background-color:#673AB7}.progress .progress-bar-material-indigo{background-color:#3F51B5}.progress .progress-bar-material-lightblue{background-color:#03A9F4}.progress .progress-bar-material-cyan{background-color:#00BCD4}.progress .progress-bar-material-teal{background-color:#009688}.progress .progress-bar-material-lightgreen{background-color:#8BC34A}.progress .progress-bar-material-lime{background-color:#CDDC39}.progress .progress-bar-material-lightyellow{background-color:#FFEB3B}.progress .progress-bar-material-orange{background-color:#FF9800}.progress .progress-bar-material-deeporange{background-color:#FF5722}.progress .progress-bar-material-grey{background-color:#9E9E9E}.progress .progress-bar-material-bluegrey{background-color:#607D8B}.progress .progress-bar-material-brown{background-color:#795548}.progress .progress-bar-material-lightgrey{background-color:#ECECEC}.card{border-radius:2px;margin-bottom:20px}.card h1,.card h2,.card h3,.card h4,.card h5,.card h6{font-weight:100;margin:10px 0}.card .card-body{padding:15px}.card .card-actions{padding:15px;text-transform:uppercase}.card .card-actions .main{font-weight:bold}.card .card-actions a{font-size:15px;margin:0 15px 0 0}.card .card-actions a:hover{text-decoration:none}.card img{max-width:100%;max-height:100%}.card .card-footer{padding:15px;border-top:1px solid;border-color:#ECECEC}.card .card-footer .icon{font-size:25px;transition:ease transform 0.5s}.card .card-footer .icon:hover{text-decoration:none;transform:transform3d(0, 0, 0, -1px)}.card-default{background-color:#FFF;color:#000}.card-default .card-footer,.card-default .card-header{border-color:#e6e6e6}.card-default a{color:#000}.card-primary{background-color:#12B2E7;color:#fff}.card-primary .card-footer,.card-primary .card-header{border-color:#ECECEC}.card-primary a{color:#fff}.card-success{background-color:#0F9D58;color:#fff}.card-success .card-footer,.card-success .card-header{border-color:#0b6e3e}.card-success a{color:#fff}.card-info{background-color:#03A9F4;color:#fff}.card-info .card-footer,.card-info .card-header{border-color:#0286c2}.card-info a{color:#fff}.card-warning{background-color:#FF5722;color:#fff}.card-warning .card-footer,.card-warning .card-header{border-color:#ff7e55}.card-warning a{color:#fff}.card-danger{background-color:#F44336;color:#fff}.card-danger .card-footer,.card-danger .card-header{border-color:#ea1c0d}.card-danger a{color:#fff}.card-material-red{background-color:#F44336;color:#fff}.card-material-red .card-footer,.card-material-red .card-header{border-color:#f77066}.card-material-red a{color:#fff}.card-material-pink{background-color:#E91E63;color:#fff}.card-material-pink .card-footer,.card-material-pink .card-header{border-color:#c1134e}.card-material-pink a{color:#fff}.card-material-purple{background-color:#9C27B0;color:#fff}.card-material-purple .card-footer,.card-material-purple .card-header{border-color:#771e86}.card-material-purple a{color:#fff}.card-material-deeppurple{background-color:#673AB7;color:#fff}.card-material-deeppurple .card-footer,.card-material-deeppurple .card-header{border-color:#8259cb}.card-material-deeppurple a{color:#fff}.card-material-indigo{background-color:#3F51B5;color:#fff}.card-material-indigo .card-footer,.card-material-indigo .card-header{border-color:#606fc7}.card-material-indigo a{color:#fff}.card-material-lightblue{background-color:#03A9F4;color:#fff}.card-material-lightblue .card-footer,.card-material-lightblue .card-header{border-color:#0286c2}.card-material-lightblue a{color:#fff}.card-material-cyan{background-color:#00BCD4;color:#fff}.card-material-cyan .card-footer,.card-material-cyan .card-header{border-color:#008fa1}.card-material-cyan a{color:#fff}.card-material-teal{background-color:#009688;color:#fff}.card-material-teal .card-footer,.card-material-teal .card-header{border-color:#00635a}.card-material-teal a{color:#fff}.card-material-lightgreen{background-color:#8BC34A;color:#fff}.card-material-lightgreen .card-footer,.card-material-lightgreen .card-header{border-color:#71a436}.card-material-lightgreen a{color:#fff}.card-material-lime{background-color:#CDDC39;color:#fff}.card-material-lime .card-footer,.card-material-lime .card-header{border-color:#b2c022}.card-material-lime a{color:#fff}.card-material-lightyellow{background-color:#FFEB3B;color:#080700}.card-material-lightyellow .card-footer,.card-material-lightyellow .card-header{border-color:#ffe608}.card-material-lightyellow a{color:#080700}.card-material-orange{background-color:#FF9800;color:#fff}.card-material-orange .card-footer,.card-material-orange .card-header{border-color:#cc7a00}.card-material-orange a{color:#fff}.card-material-deeporange{background-color:#FF5722;color:#fff}.card-material-deeporange .card-footer,.card-material-deeporange .card-header{border-color:#ee3900}.card-material-deeporange a{color:#fff}.card-material-grey{background-color:#9E9E9E;color:#fff}.card-material-grey .card-footer,.card-material-grey .card-header{border-color:#858585}.card-material-grey a{color:#fff}.card-material-bluegrey{background-color:#607D8B;color:#fff}.card-material-bluegrey .card-footer,.card-material-bluegrey .card-header{border-color:#4b626d}.card-material-bluegrey a{color:#fff}.card-material-brown{background-color:#795548;color:#fff}.card-material-brown .card-footer,.card-material-brown .card-header{border-color:#996b5b}.card-material-brown a{color:#fff}.card-material-lightgrey{background-color:#ECECEC;color:#e6e6e6}.card-material-lightgrey .card-footer,.card-material-lightgrey .card-header{border-color:#d3d3d3}.card-material-lightgrey a{color:#e6e6e6}.text-warning{color:#FF5722}.text-primary{color:#12B2E7}.text-danger{color:#F44336}.text-success{color:#0F9D58}.text-info{color:#03A9F4}.nav-tabs{background:#12B2E7}.nav-tabs>li>a{color:#FFFFFF;border:0;margin:0}.nav-tabs>li>a:hover{background:transparent;border:0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.open>a,.nav-tabs>li.open>a:hover{background:transparent !important;border:0 !important;color:#FFFFFF !important;font-weight:500}.nav-tabs>li.disabled>a,.nav-tabs>li.disabled>a:hover{color:rgba(255,255,255,0.5)}.popover,.tooltip-inner{background:#323232;color:#FFF;border-radius:2px}.tooltip,.tooltip.in{opacity:1}.popover.left .arrow:after,.popover.left .tooltip-arrow,.tooltip.left .arrow:after,.tooltip.left .tooltip-arrow{border-left-color:#323232}.popover.right .arrow:after,.popover.right .tooltip-arrow,.tooltip.right .arrow:after,.tooltip.right .tooltip-arrow{border-right-color:#323232}.popover.top .arrow:after,.popover.top .tooltip-arrow,.tooltip.top .arrow:after,.tooltip.top .tooltip-arrow{border-top-color:#323232}.popover.bottom .arrow:after,.popover.bottom .tooltip-arrow,.tooltip.bottom .arrow:after,.tooltip.bottom .tooltip-arrow{border-bottom-color:#323232}.icon-default{color:rgba(0,0,0,0.84)}.icon-primary{color:#12B2E7}.icon-success{color:#0F9D58}.icon-info{color:#03A9F4}.icon-warning{color:#FF5722}.icon-danger{color:#F44336}.icon-material-red{color:#F44336}.icon-material-pink{color:#E91E63}.icon-material-purple{color:#9C27B0}.icon-material-deeppurple{color:#673AB7}.icon-material-indigo{color:#3F51B5}.icon-material-lightblue{color:#03A9F4}.icon-material-cyan{color:#00BCD4}.icon-material-teal{color:#009688}.icon-material-lightgreen{color:#8BC34A}.icon-material-lime{color:#CDDC39}.icon-material-lightyellow{color:#FFEB3B}.icon-material-orange{color:#FF9800}.icon-material-deeporange{color:#FF5722}.icon-material-grey{color:#9E9E9E}.icon-material-bluegrey{color:#607D8B}.icon-material-brown{color:#795548}.icon-material-lightgrey{color:#ECECEC}.snackbar{background-color:#323232;color:rgba(255,255,255,0.84);font-size:14px;border-radius:2px;height:0;transition:transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;transform:translateY(200%)}.snackbar.snackbar-opened{padding:14px 15px;margin-bottom:20px;height:auto;transition:transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;transform:none}.snackbar.toast{border-radius:200px}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-ms-touch-action:none;user-select:none;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1;box-sizing:border-box}.noUi-stacking .noUi-handle{z-index:10}.noUi-stacking+.noUi-origin{*z-index:-1}.noUi-state-tap .noUi-origin{transition:left 0.3s, top 0.3s}.noUi-state-drag *{cursor:inherit !important}.noUi-horizontal{height:10px}.noUi-horizontal .noUi-handle{box-sizing:border-box;width:12px;height:12px;left:-10px;top:-5px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-background{height:2px;margin:20px 0}.noUi-origin{margin:0;border-radius:0;height:2px;background:#c8c8c8}.noUi-origin[style^="left: 0"] .noUi-handle{background-color:#fff;border:2px solid #c8c8c8}.noUi-target{border-radius:2px}.noUi-handle{border-radius:100%;cursor:default;transition:all 0.2s ease-out;border:1px solid}.noUi-horizontal{height:2px;margin:15px 0}[disabled].noUi-slider{opacity:0.5}[disabled] .noUi-handle{cursor:not-allowed}.slider{background:#c8c8c8}.withripple{position:relative}.ripple-wrapper{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;overflow:hidden;border-radius:2px}.ripple{position:absolute;width:20px;height:20px;margin-left:-10px;margin-top:-10px;border-radius:100%;background-color:rgba(0,0,0,0.05);transform:scale(1);transform-origin:50%;opacity:0;pointer-events:none}.ripple.ripple-on{transition:opacity 0.15s ease-in 0s,transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;opacity:1}.ripple.ripple-out{transition:opacity 0.1s linear 0s !important;opacity:0}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative;direction:ltr}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-stacking+.noUi-origin{*z-index:-1}.noUi-state-tap .noUi-origin{-webkit-transition:left 0.3s, top 0.3s;transition:left 0.3s, top 0.3s}.noUi-state-drag *{cursor:inherit !important}.noUi-base{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-connect{-webkit-transition:background 450ms;transition:background 450ms}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}[disabled] .noUi-handle{cursor:not-allowed}.xbbcode-b{font-weight:bold}.xbbcode-center{margin-left:auto;margin-right:auto;display:block;text-align:center}.xbbcode-code{white-space:pre-wrap;font-family:monospace}.xbbcode-i{font-style:italic}.xbbcode-justify{display:block;text-align:justify}.xbbcode-left{display:block;text-align:left}.xbbcode-right{display:block;text-align:right}.xbbcode-s{text-decoration:line-through}.xbbcode-size-4{font-size:4px}.xbbcode-size-5{font-size:5px}.xbbcode-size-6{font-size:6px}.xbbcode-size-7{font-size:7px}.xbbcode-size-8{font-size:8px}.xbbcode-size-9{font-size:9px}.xbbcode-size-10{font-size:10px}.xbbcode-size-11{font-size:11px}.xbbcode-size-12{font-size:12px}.xbbcode-size-13{font-size:13px}.xbbcode-size-14{font-size:14px}.xbbcode-size-15{font-size:15px}.xbbcode-size-16{font-size:16px}.xbbcode-size-17{font-size:17px}.xbbcode-size-18{font-size:18px}.xbbcode-size-19{font-size:19px}.xbbcode-size-20{font-size:20px}.xbbcode-size-21{font-size:21px}.xbbcode-size-22{font-size:22px}.xbbcode-size-23{font-size:23px}.xbbcode-size-24{font-size:24px}.xbbcode-size-25{font-size:25px}.xbbcode-size-26{font-size:26px}.xbbcode-size-27{font-size:27px}.xbbcode-size-28{font-size:28px}.xbbcode-size-29{font-size:29px}.xbbcode-size-30{font-size:30px}.xbbcode-size-31{font-size:31px}.xbbcode-size-32{font-size:32px}.xbbcode-size-33{font-size:33px}.xbbcode-size-34{font-size:34px}.xbbcode-size-35{font-size:35px}.xbbcode-size-36{font-size:36px}.xbbcode-size-37{font-size:37px}.xbbcode-size-38{font-size:38px}.xbbcode-size-39{font-size:39px}.xbbcode-size-40{font-size:40px}.xbbcode-u{text-decoration:underline}.xbbcode-table{border-collapse:collapse}.xbbcode-table,.xbbcode-th,.xbbcode-td{border:1px solid #666}html{-webkit-box-sizing:"border-box";-moz-box-sizing:"border-box";box-sizing:"border-box"}*,*:before,*:after{box-sizing:inherit}embed,img,object,video{max-width:100%;height:auto}.youtube-list .flat-btn,.filters-container .filter-btn,.filters-container .filter-btn:before,.local-playlist-list .region-first .new-list,.local-playlist-list .region-first .new-list:before,.player .controls-primary .control,.player .controls-secondary .control,.player .slider-bar,.set-page .entity-set .more a,.set-page .entity-set .more a:before,.landing-set .set__more a,.landing-set .set__more a:before,.imdblink,.imdblink:before,.btn-flat-play,.btn-flat-play:before,.btn-flat-add,.btn-flat-add:before,.btn-flat-stream,.btn-flat-stream:before,.btn-flat-download,.btn-flat-download:before,.btn-flat-more,.btn-flat-more:before,.btn-flat-watched,.btn-flat-watched:before{-webkit-transition:.3s all linear;-o-transition:.3s all linear;transition:.3s all linear}@-moz-keyframes wave{0%{background-position:0% bottom}100%{background-position:100% bottom}}@-webkit-keyframes wave{0%{background-position:0% bottom}100%{background-position:100% bottom}}@keyframes wave{0%{background-position:0% bottom}100%{background-position:100% bottom}}#files-container .loading-box{-webkit-animation:none;-o-animation:none;animation:none}@-moz-keyframes pulsate{50%{text-shadow:0 0 25px rgba(255,255,255,0.55);color:#fff}}@-webkit-keyframes pulsate{50%{text-shadow:0 0 25px rgba(255,255,255,0.55);color:#fff}}@keyframes pulsate{50%{text-shadow:0 0 25px rgba(255,255,255,0.55);color:#fff}}.filters-container .options-search-wrapper,.search-box{position:relative;padding-right:1em}.filters-container .options-search-wrapper:before,.search-box:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .options-search-wrapper:before,.search-box:before{top:8px;left:6px;position:absolute;z-index:20;font-size:130%;opacity:0.8}.filters-container .options-search-wrapper input,.search-box input{color:#666;border:none;width:100%;padding:.5em;padding-left:2em;background:rgba(255,255,255,0.5);margin-bottom:1em}.filters-container .options-search-wrapper input:focus,.search-box input:focus{background:rgba(255,255,255,0.9);outline:none}.card-detail .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.landing-page .landing-section,.region-content,.landing-set .set__collection,.landing-set .set__more{position:relative;padding:12px 12px 30px 12px}.with-header .landing-page .landing-section,.landing-page .with-header .landing-section,.with-header .region-content,.with-header .landing-set .set__collection,.landing-set .with-header .set__collection,.with-header .landing-set .set__more,.landing-set .with-header .set__more{padding:10px 20px 50px 20px}.edit-form .form-tabs,.form-imageselect__tabs,.folder-layout .folder-container,#modal-window.style-edit-form .form-content-region,.form-imageselect__thumbs,.form-imageselect__loader,.youtube-list li,form .inline-list,.help--page .help--overview--report ul li,.details-header .region-details-top,.content-container.with-sidebar,.section-content,.kodi-remote .secondary-controls,.icon-browser ul{*zoom:1}.edit-form .form-tabs:after,.form-imageselect__tabs:after,.folder-layout .folder-container:after,#modal-window.style-edit-form .form-content-region:after,.form-imageselect__thumbs:after,.form-imageselect__loader:after,.youtube-list li:after,form .inline-list:after,.help--page .help--overview--report ul li:after,.details-header .region-details-top:after,.content-container.with-sidebar:after,.section-content:after,.kodi-remote .secondary-controls:after,.icon-browser ul:after{content:"";display:table;clear:both}.help--page .region-content-wrapper h2,.help--page .region-content-wrapper h3,.help--page .region-content-wrapper h4{margin-top:1.5em}.help--page .region-content-wrapper h2{font-size:1.6em;font-weight:bold;border-bottom:1px dotted #ddd;padding-bottom:.5em;margin-top:2em}.help--page .region-content-wrapper h3{font-size:1.3em;color:#666;margin-bottom:1em}.help--page .region-content-wrapper h4{font-size:1.2em}.help--page .region-content-wrapper p,.help--page .region-content-wrapper li{line-height:1.8}.help--page .region-content-wrapper ul,.help--page .region-content-wrapper ol{padding-left:1.5em}.help--page .region-content-wrapper ul li,.help--page .region-content-wrapper ol li{list-style:disc;margin:.5em 0}.help--page .region-content-wrapper ol li{list-style-type:decimal}.help--page .region-content-wrapper code{border:1px solid rgba(186,193,200,0.33);background:rgba(221,221,221,0.5);color:#2B2F30}.help--page .region-content-wrapper code:hover{color:#12B2E7;border-color:#12B2E7}.help--page .region-content-wrapper pre{border:1px dashed #BAC1C8;margin:1em;margin-left:0}.help--page .region-content-wrapper pre code{background:none;border:none}.help--page .region-content-wrapper pre code:hover{color:inherit;border-color:inherit}.help--page .region-content-wrapper img{width:100%;max-width:1000px}.options-list,.mobile-menu{margin:0;padding:0}.options-list li,.mobile-menu li{margin:0;padding:0;list-style:none}.sidebar-section h3,.browser-page .region-first h3,.filters-container h3,.local-playlist-list .region-first h3,.region-first .nav-sub h3{font-size:15px;text-transform:uppercase;margin:1em 0;color:#888;font-weight:bold}.text-dim,.folder-layout .empty--page-content{opacity:0.4;font-size:0.85em}.landing-page .region-content h3,.landing-page h3.set-header,.landing-set .set__header{background:rgba(255,255,255,0.75);padding:1em 1em;position:relative}.landing-page .region-content h3,.landing-page h3.set-header,.landing-set .set__header,.landing-page .region-content h3 h2,.landing-page h3.set-header h2,.landing-set .set__header h2,.landing-page .region-content h3 h3,.landing-page h3.set-header h3,.landing-set .set__header h3{font-size:18px;margin:0}.landing-page .region-content h3 h2,.landing-page h3.set-header h2,.landing-set .set__header h2,.landing-page .region-content h3 h3,.landing-page h3.set-header h3,.landing-set .set__header h3{text-transform:capitalize}.empty-result h2,.search-no-result{text-align:center;margin-top:10%;font-size:1.8em;color:#a8a7a6}.modal ul.options{margin:0;padding:0}.modal ul.options li{-webkit-transition:0.2s all linear;-o-transition:0.2s all linear;transition:0.2s all linear;padding:.5em;border-bottom:1px solid rgba(229,229,229,0.6);cursor:pointer;text-transform:capitalize}.modal ul.options li:hover{background:rgba(229,229,229,0.7)}.modal ul.options li:last-child{border:0}.edit-form .form-tabs,.form-imageselect__tabs{background:#ddd;margin-bottom:1em;padding:.5em .5em 0}.edit-form .form-tabs li,.form-imageselect__tabs li{cursor:pointer;float:left;padding:.5em 1em}.edit-form .form-tabs li.active,.form-imageselect__tabs li.active{background:#fff;color:#12B2E7}.edit-form .form-tabs li:hover,.form-imageselect__tabs li:hover{color:#12B2E7}.card-grid--square .card{color:#888;width:159px;height:216px;margin:5px;background:#fff;position:relative;overflow:hidden}.card-grid--square .card a{color:#888}.card-grid--square .card .title a{color:#2B2F30}.card-grid--square .card .subtitle{font-size:85%;margin-top:5px}.card-grid--square .card .dropdown i,.card-grid--square .card .actions li,.card-grid--square .card .play{color:rgba(255,255,255,0.8)}.card-grid--square .card .dropdown i:hover,.card-grid--square .card .actions li:hover,.card-grid--square .card .play:hover{color:#fff}.card-grid--square .card .record{color:rgba(255,255,255,0.8)}.card-grid--square .card .record:hover{color:#bf0a07}.card-grid--square .ph.card{opacity:0.1;-webkit-box-shadow:none;box-shadow:none}.card-grid--square .card .artwork{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:159px;height:159px;position:relative;background:#ccc 50% 50% no-repeat;background-size:cover}.card-grid--square .card .artwork img{display:block;vertical-align:middle;width:159px;margin-top:0}.card-grid--square .card .artwork .thumb{width:159px;height:159px;background-position:50% 0;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.card-grid--square .card .artwork a{display:block}.card-grid--square .card .artwork .thumb:after{content:"";top:0;right:0;left:0;position:absolute;height:216px;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;opacity:0;-webkit-transition:0.1s all linear;-o-transition:0.1s all linear;transition:0.1s all linear}.card-grid--square .card .entity-progress{right:0;bottom:0;left:0;position:absolute;top:auto;z-index:20}.card-grid--square .card .entity-progress .current-progress{height:2px;background:#12B2E7}.card-grid--square .card .watched-tick{color:#12B2E7;right:10px;bottom:3px;position:absolute;font-size:125%;display:none}.card-grid--square .card .watched-tick:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .watched{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--square .card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .watched:before{display:table-cell;vertical-align:middle;height:1.5em}.thumbs-page .card-grid--square .card .watched,.card-grid--square .thumbs-page .card .watched{display:none}.card-grid--square .is-watched.card .watched{color:#12B2E7}.card-grid--square .is-watched.card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.card-grid--square .card .meta{position:relative;padding:8px 10px;width:159px}.card-grid--square .card .meta .title{position:relative;white-space:nowrap;overflow:hidden}.card-grid--square .card .meta .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--square .card .meta .subtitle{position:relative;white-space:nowrap;overflow:hidden}.card-grid--square .card .meta .subtitle:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--square .card .play{display:table;width:1.5em;text-align:center;cursor:pointer;bottom:0;left:0;position:absolute;font-size:220%;display:none;z-index:20}.card-grid--square .card .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .play:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--square .card .record{display:table;width:1.5em;text-align:center;cursor:pointer;right:10px;bottom:7px;position:absolute;font-size:150%;display:none;z-index:20}.card-grid--square .card .record:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .record:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--square .card .dropdown{top:5px;right:0;position:absolute}.card-grid--square .card .dropdown i{display:table;width:1.5em;text-align:center;cursor:pointer;z-index:20;font-size:180%;display:none}.card-grid--square .card .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--square .card .actions{top:10px;right:35px;position:absolute;display:table;display:none}.card-grid--square .card .actions .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--square .card .actions .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--square .card .actions .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-grid--square .card .actions .thumbs,.card-grid--square .disable-thumbs .card .actions .thumbs{display:none}.card-grid--square .card .actions li{float:left;margin-left:3px}.card-grid--square .card .actions li:before{display:table-cell !important}.card-grid--square .card:hover .artwork .thumb:after{opacity:1}.card-grid--square .card:hover .actions,.card-grid--square .card:hover .dropdown i,.card-grid--square .card:hover .play{display:table}.card-grid--square .card:hover .record{display:table}.card-grid--square .selected.card{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .card-grid--square .selected.card,.card-grid--square .active-player-local .selected.card{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .card-grid--square .selected.card:before,.card-grid--square .active-player-local .selected.card:before{border-color:#DB2464}.card-grid--square .selected.card:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.card-grid--square .selected.card .current-progress{display:none}.card-grid--square .card .dropdown-menu{left:auto;right:0px;top:-7px}.card-grid--square .thumbs-up.card .actions .thumbs{color:#12B2E7}.card-grid--wide .card{color:#888;width:276px;height:170px;margin:5px;background:#fff;position:relative;overflow:hidden}.card-grid--wide .card a{color:#888}.card-grid--wide .card .title a{color:#2B2F30}.card-grid--wide .card .subtitle{font-size:85%;margin-top:5px}.card-grid--wide .card .dropdown i,.card-grid--wide .card .actions li,.card-grid--wide .card .play{color:rgba(255,255,255,0.8)}.card-grid--wide .card .dropdown i:hover,.card-grid--wide .card .actions li:hover,.card-grid--wide .card .play:hover{color:#fff}.card-grid--wide .card .record{color:rgba(255,255,255,0.8)}.card-grid--wide .card .record:hover{color:#bf0a07}.card-grid--wide .ph.card{opacity:0.1;-webkit-box-shadow:none;box-shadow:none}.card-grid--wide .card .artwork{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:276px;height:138px;position:relative;background:#ccc 50% 50% no-repeat;background-size:cover}.card-grid--wide .card .artwork img{display:block;vertical-align:middle;width:276px;margin-top:20%}.card-grid--wide .card .artwork .thumb{width:276px;height:138px;background-position:50% 20%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.card-grid--wide .card .artwork a{display:block}.card-grid--wide .card .artwork .thumb:after{content:"";top:0;right:0;left:0;position:absolute;height:170px;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;opacity:0;-webkit-transition:0.1s all linear;-o-transition:0.1s all linear;transition:0.1s all linear}.card-grid--wide .card .entity-progress{right:0;bottom:0;left:0;position:absolute;top:auto;z-index:20}.card-grid--wide .card .entity-progress .current-progress{height:2px;background:#12B2E7}.card-grid--wide .card .watched-tick{color:#12B2E7;right:10px;bottom:3px;position:absolute;font-size:125%;display:none}.card-grid--wide .card .watched-tick:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .watched{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--wide .card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .watched:before{display:table-cell;vertical-align:middle;height:1.5em}.thumbs-page .card-grid--wide .card .watched,.card-grid--wide .thumbs-page .card .watched{display:none}.card-grid--wide .is-watched.card .watched{color:#12B2E7}.card-grid--wide .is-watched.card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.card-grid--wide .card .meta{position:relative;padding:8px 10px;width:276px}.card-grid--wide .card .meta .title{position:relative;white-space:nowrap;overflow:hidden}.card-grid--wide .card .meta .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--wide .card .meta .subtitle{position:relative;white-space:nowrap;overflow:hidden}.card-grid--wide .card .meta .subtitle:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--wide .card .play{display:table;width:1.5em;text-align:center;cursor:pointer;bottom:0;left:0;position:absolute;font-size:220%;display:none;z-index:20}.card-grid--wide .card .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .play:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--wide .card .record{display:table;width:1.5em;text-align:center;cursor:pointer;right:10px;bottom:7px;position:absolute;font-size:150%;display:none;z-index:20}.card-grid--wide .card .record:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .record:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--wide .card .dropdown{top:5px;right:0;position:absolute}.card-grid--wide .card .dropdown i{display:table;width:1.5em;text-align:center;cursor:pointer;z-index:20;font-size:180%;display:none}.card-grid--wide .card .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--wide .card .actions{top:10px;right:35px;position:absolute;display:table;display:none}.card-grid--wide .card .actions .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--wide .card .actions .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--wide .card .actions .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-grid--wide .card .actions .thumbs,.card-grid--wide .disable-thumbs .card .actions .thumbs{display:none}.card-grid--wide .card .actions li{float:left;margin-left:3px}.card-grid--wide .card .actions li:before{display:table-cell !important}.card-grid--wide .card:hover .artwork .thumb:after{opacity:1}.card-grid--wide .card:hover .actions,.card-grid--wide .card:hover .dropdown i,.card-grid--wide .card:hover .play{display:table}.card-grid--wide .card:hover .record{display:table}.card-grid--wide .selected.card{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .card-grid--wide .selected.card,.card-grid--wide .active-player-local .selected.card{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .card-grid--wide .selected.card:before,.card-grid--wide .active-player-local .selected.card:before{border-color:#DB2464}.card-grid--wide .selected.card:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.card-grid--wide .selected.card .current-progress{display:none}.card-grid--wide .card .dropdown-menu{left:auto;right:0px;top:-7px}.card-grid--wide .thumbs-up.card .actions .thumbs{color:#12B2E7}.card-grid--musicvideo .card,.card-grid--episode .card{color:#888;width:275px;height:196px;margin:5px;background:#fff;position:relative;overflow:hidden}.card-grid--musicvideo .card a,.card-grid--episode .card a{color:#888}.card-grid--musicvideo .card .title a,.card-grid--episode .card .title a{color:#2B2F30}.card-grid--musicvideo .card .subtitle,.card-grid--episode .card .subtitle{font-size:85%;margin-top:5px}.card-grid--musicvideo .card .dropdown i,.card-grid--episode .card .dropdown i,.card-grid--musicvideo .card .actions li,.card-grid--episode .card .actions li,.card-grid--musicvideo .card .play,.card-grid--episode .card .play{color:rgba(255,255,255,0.8)}.card-grid--musicvideo .card .dropdown i:hover,.card-grid--episode .card .dropdown i:hover,.card-grid--musicvideo .card .actions li:hover,.card-grid--episode .card .actions li:hover,.card-grid--musicvideo .card .play:hover,.card-grid--episode .card .play:hover{color:#fff}.card-grid--musicvideo .card .record,.card-grid--episode .card .record{color:rgba(255,255,255,0.8)}.card-grid--musicvideo .card .record:hover,.card-grid--episode .card .record:hover{color:#bf0a07}.card-grid--musicvideo .ph.card,.card-grid--episode .ph.card{opacity:0.1;-webkit-box-shadow:none;box-shadow:none}.card-grid--musicvideo .card .artwork,.card-grid--episode .card .artwork{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:275px;height:138px;position:relative;background:#ccc 50% 50% no-repeat;background-size:cover}.card-grid--musicvideo .card .artwork img,.card-grid--episode .card .artwork img{display:block;vertical-align:middle;width:275px;margin-top:50%}.card-grid--musicvideo .card .artwork .thumb,.card-grid--episode .card .artwork .thumb{width:275px;height:138px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.card-grid--musicvideo .card .artwork a,.card-grid--episode .card .artwork a{display:block}.card-grid--musicvideo .card .artwork .thumb:after,.card-grid--episode .card .artwork .thumb:after{content:"";top:0;right:0;left:0;position:absolute;height:196px;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;opacity:0;-webkit-transition:0.1s all linear;-o-transition:0.1s all linear;transition:0.1s all linear}.card-grid--musicvideo .card .entity-progress,.card-grid--episode .card .entity-progress{right:0;bottom:0;left:0;position:absolute;top:auto;z-index:20}.card-grid--musicvideo .card .entity-progress .current-progress,.card-grid--episode .card .entity-progress .current-progress{height:2px;background:#12B2E7}.card-grid--musicvideo .card .watched-tick,.card-grid--episode .card .watched-tick{color:#12B2E7;right:10px;bottom:3px;position:absolute;font-size:125%;display:none}.card-grid--musicvideo .card .watched-tick:before,.card-grid--episode .card .watched-tick:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .watched,.card-grid--episode .card .watched{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--musicvideo .card .watched:before,.card-grid--episode .card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .watched:before,.card-grid--episode .card .watched:before{display:table-cell;vertical-align:middle;height:1.5em}.thumbs-page .card-grid--musicvideo .card .watched,.card-grid--musicvideo .thumbs-page .card .watched,.thumbs-page .card-grid--episode .card .watched,.card-grid--episode .thumbs-page .card .watched{display:none}.card-grid--musicvideo .is-watched.card .watched,.card-grid--episode .is-watched.card .watched{color:#12B2E7}.card-grid--musicvideo .is-watched.card .watched:before,.card-grid--episode .is-watched.card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .thumb,.card-grid--episode .card .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.card-grid--musicvideo .card .meta,.card-grid--episode .card .meta{position:relative;padding:8px 10px;width:275px}.card-grid--musicvideo .card .meta .title,.card-grid--episode .card .meta .title{position:relative;white-space:nowrap;overflow:hidden}.card-grid--musicvideo .card .meta .title:after,.card-grid--episode .card .meta .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--musicvideo .card .meta .subtitle,.card-grid--episode .card .meta .subtitle{position:relative;white-space:nowrap;overflow:hidden}.card-grid--musicvideo .card .meta .subtitle:after,.card-grid--episode .card .meta .subtitle:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--musicvideo .card .play,.card-grid--episode .card .play{display:table;width:1.5em;text-align:center;cursor:pointer;bottom:0;left:0;position:absolute;font-size:220%;display:none;z-index:20}.card-grid--musicvideo .card .play:before,.card-grid--episode .card .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .play:before,.card-grid--episode .card .play:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--musicvideo .card .record,.card-grid--episode .card .record{display:table;width:1.5em;text-align:center;cursor:pointer;right:10px;bottom:7px;position:absolute;font-size:150%;display:none;z-index:20}.card-grid--musicvideo .card .record:before,.card-grid--episode .card .record:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .record:before,.card-grid--episode .card .record:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--musicvideo .card .dropdown,.card-grid--episode .card .dropdown{top:5px;right:0;position:absolute}.card-grid--musicvideo .card .dropdown i,.card-grid--episode .card .dropdown i{display:table;width:1.5em;text-align:center;cursor:pointer;z-index:20;font-size:180%;display:none}.card-grid--musicvideo .card .dropdown i:before,.card-grid--episode .card .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .dropdown i:before,.card-grid--episode .card .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--musicvideo .card .actions,.card-grid--episode .card .actions{top:10px;right:35px;position:absolute;display:table;display:none}.card-grid--musicvideo .card .actions .thumbs,.card-grid--episode .card .actions .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--musicvideo .card .actions .thumbs:before,.card-grid--episode .card .actions .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--musicvideo .card .actions .thumbs:before,.card-grid--episode .card .actions .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-grid--musicvideo .card .actions .thumbs,.card-grid--musicvideo .disable-thumbs .card .actions .thumbs,.disable-thumbs .card-grid--episode .card .actions .thumbs,.card-grid--episode .disable-thumbs .card .actions .thumbs{display:none}.card-grid--musicvideo .card .actions li,.card-grid--episode .card .actions li{float:left;margin-left:3px}.card-grid--musicvideo .card .actions li:before,.card-grid--episode .card .actions li:before{display:table-cell !important}.card-grid--musicvideo .card:hover .artwork .thumb:after,.card-grid--episode .card:hover .artwork .thumb:after{opacity:1}.card-grid--musicvideo .card:hover .actions,.card-grid--episode .card:hover .actions,.card-grid--musicvideo .card:hover .dropdown i,.card-grid--episode .card:hover .dropdown i,.card-grid--musicvideo .card:hover .play,.card-grid--episode .card:hover .play{display:table}.card-grid--musicvideo .card:hover .record,.card-grid--episode .card:hover .record{display:table}.card-grid--musicvideo .selected.card,.card-grid--episode .selected.card{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .card-grid--musicvideo .selected.card,.card-grid--musicvideo .active-player-local .selected.card,.active-player-local .card-grid--episode .selected.card,.card-grid--episode .active-player-local .selected.card{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .card-grid--musicvideo .selected.card:before,.card-grid--musicvideo .active-player-local .selected.card:before,.active-player-local .card-grid--episode .selected.card:before,.card-grid--episode .active-player-local .selected.card:before{border-color:#DB2464}.card-grid--musicvideo .selected.card:before,.card-grid--episode .selected.card:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.card-grid--musicvideo .selected.card .current-progress,.card-grid--episode .selected.card .current-progress{display:none}.card-grid--musicvideo .card .dropdown-menu,.card-grid--episode .card .dropdown-menu{left:auto;right:0px;top:-7px}.card-grid--musicvideo .thumbs-up.card .actions .thumbs,.card-grid--episode .thumbs-up.card .actions .thumbs{color:#12B2E7}.card-grid--tall .card{color:#888;width:159px;height:300px;margin:5px;background:#fff;position:relative;overflow:hidden}.card-grid--tall .card a{color:#888}.card-grid--tall .card .title a{color:#2B2F30}.card-grid--tall .card .subtitle{font-size:85%;margin-top:5px}.card-grid--tall .card .dropdown i,.card-grid--tall .card .actions li,.card-grid--tall .card .play{color:rgba(255,255,255,0.8)}.card-grid--tall .card .dropdown i:hover,.card-grid--tall .card .actions li:hover,.card-grid--tall .card .play:hover{color:#fff}.card-grid--tall .card .record{color:rgba(255,255,255,0.8)}.card-grid--tall .card .record:hover{color:#bf0a07}.card-grid--tall .ph.card{opacity:0.1;-webkit-box-shadow:none;box-shadow:none}.card-grid--tall .card .artwork{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:159px;height:235px;position:relative;background:#ccc 50% 50% no-repeat;background-size:cover}.card-grid--tall .card .artwork img{display:block;vertical-align:middle;width:159px;margin-top:0}.card-grid--tall .card .artwork .thumb{width:159px;height:235px;background-position:50% 0;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.card-grid--tall .card .artwork a{display:block}.card-grid--tall .card .artwork .thumb:after{content:"";top:0;right:0;left:0;position:absolute;height:300px;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;opacity:0;-webkit-transition:0.1s all linear;-o-transition:0.1s all linear;transition:0.1s all linear}.card-grid--tall .card .entity-progress{right:0;bottom:0;left:0;position:absolute;top:auto;z-index:20}.card-grid--tall .card .entity-progress .current-progress{height:2px;background:#12B2E7}.card-grid--tall .card .watched-tick{color:#12B2E7;right:10px;bottom:3px;position:absolute;font-size:125%;display:none}.card-grid--tall .card .watched-tick:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .watched{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--tall .card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .watched:before{display:table-cell;vertical-align:middle;height:1.5em}.thumbs-page .card-grid--tall .card .watched,.card-grid--tall .thumbs-page .card .watched{display:none}.card-grid--tall .is-watched.card .watched{color:#12B2E7}.card-grid--tall .is-watched.card .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.card-grid--tall .card .meta{position:relative;padding:8px 10px;width:159px}.card-grid--tall .card .meta .title{position:relative;white-space:nowrap;overflow:hidden}.card-grid--tall .card .meta .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--tall .card .meta .subtitle{position:relative;white-space:nowrap;overflow:hidden}.card-grid--tall .card .meta .subtitle:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-grid--tall .card .play{display:table;width:1.5em;text-align:center;cursor:pointer;bottom:0;left:0;position:absolute;font-size:220%;display:none;z-index:20}.card-grid--tall .card .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .play:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--tall .card .record{display:table;width:1.5em;text-align:center;cursor:pointer;right:10px;bottom:7px;position:absolute;font-size:150%;display:none;z-index:20}.card-grid--tall .card .record:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .record:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--tall .card .dropdown{top:5px;right:0;position:absolute}.card-grid--tall .card .dropdown i{display:table;width:1.5em;text-align:center;cursor:pointer;z-index:20;font-size:180%;display:none}.card-grid--tall .card .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.card-grid--tall .card .actions{top:10px;right:35px;position:absolute;display:table;display:none}.card-grid--tall .card .actions .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-grid--tall .card .actions .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-grid--tall .card .actions .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-grid--tall .card .actions .thumbs,.card-grid--tall .disable-thumbs .card .actions .thumbs{display:none}.card-grid--tall .card .actions li{float:left;margin-left:3px}.card-grid--tall .card .actions li:before{display:table-cell !important}.card-grid--tall .card:hover .artwork .thumb:after{opacity:1}.card-grid--tall .card:hover .actions,.card-grid--tall .card:hover .dropdown i,.card-grid--tall .card:hover .play{display:table}.card-grid--tall .card:hover .record{display:table}.card-grid--tall .selected.card{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .card-grid--tall .selected.card,.card-grid--tall .active-player-local .selected.card{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .card-grid--tall .selected.card:before,.card-grid--tall .active-player-local .selected.card:before{border-color:#DB2464}.card-grid--tall .selected.card:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.card-grid--tall .selected.card .current-progress{display:none}.card-grid--tall .card .dropdown-menu{left:auto;right:0px;top:-7px}.card-grid--tall .thumbs-up.card .actions .thumbs{color:#12B2E7}.card-grid--square .card,.card-grid--wide .card,.card-grid--musicvideo .card,.card-grid--episode .card,.card-grid--tall .card{display:inline-block}body{background:#fff}*{box-sizing:border-box}img{width:100%;max-width:auto;height:auto}ul,ol{margin:0;padding:0}ul li,ol li{margin:0;padding:0;list-style:none}a{color:#12B2E7;cursor:pointer}.hidden{display:none}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:inherit}.form-control-wrapper textarea,.form-control-wrapper textarea.form-control,textarea,textarea.form-control{resize:vertical;height:auto !important}@font-face{font-family:"Material-Design-Icons";src:url("../fonts/material/Material-Design-Icons.eot");src:url("../fonts/material/Material-Design-Icons.eot?#iefix") format("embedded-opentype"),url("../fonts/material/Material-Design-Icons.woff") format("woff"),url("../fonts/material/Material-Design-Icons.ttf") format("truetype");font-weight:normal;font-style:normal}.mdi-action-3d-rotation:before{content:""}.mdi-action-accessibility:before{content:""}.mdi-action-account-balance:before{content:""}.mdi-action-account-balance-wallet:before{content:""}.mdi-action-account-box:before{content:""}.mdi-action-account-child:before{content:""}.mdi-action-account-circle:before{content:""}.mdi-action-add-shopping-cart:before{content:""}.mdi-action-alarm:before{content:""}.mdi-action-alarm-add:before{content:""}.mdi-action-alarm-off:before{content:""}.mdi-action-alarm-on:before{content:""}.mdi-action-android:before{content:""}.mdi-action-announcement:before{content:""}.mdi-action-aspect-ratio:before{content:""}.mdi-action-assessment:before{content:""}.mdi-action-assignment:before{content:""}.mdi-action-assignment-ind:before{content:""}.mdi-action-assignment-late:before{content:""}.mdi-action-assignment-return:before{content:""}.mdi-action-assignment-returned:before{content:""}.mdi-action-assignment-turned-in:before{content:""}.mdi-action-autorenew:before{content:""}.mdi-action-backup:before{content:""}.mdi-action-book:before{content:""}.mdi-action-bookmark:before{content:""}.mdi-action-bookmark-outline:before{content:""}.mdi-action-bug-report:before{content:""}.mdi-action-cached:before{content:""}.mdi-action-class:before{content:""}.mdi-action-credit-card:before{content:""}.mdi-action-dashboard:before{content:""}.mdi-action-delete:before{content:""}.mdi-action-description:before{content:""}.mdi-action-dns:before{content:""}.mdi-action-done:before{content:""}.mdi-action-done-all:before{content:""}.mdi-action-event:before{content:""}.mdi-action-exit-to-app:before{content:""}.mdi-action-explore:before{content:""}.mdi-action-extension:before{content:""}.mdi-action-face-unlock:before{content:""}.mdi-action-favorite:before{content:""}.mdi-action-favorite-outline:before{content:""}.mdi-action-find-in-page:before{content:""}.mdi-action-find-replace:before{content:""}.mdi-action-flip-to-back:before{content:""}.mdi-action-flip-to-front:before{content:""}.mdi-action-get-app:before{content:""}.mdi-action-grade:before{content:""}.mdi-action-group-work:before{content:""}.mdi-action-help:before{content:""}.mdi-action-highlight-remove:before{content:""}.mdi-action-history:before{content:""}.mdi-action-home:before{content:""}.mdi-action-https:before{content:""}.mdi-action-info:before{content:""}.mdi-action-info-outline:before{content:""}.mdi-action-input:before{content:""}.mdi-action-invert-colors:before{content:""}.mdi-action-label:before{content:""}.mdi-action-label-outline:before{content:""}.mdi-action-language:before{content:""}.mdi-action-launch:before{content:""}.mdi-action-list:before{content:""}.mdi-action-lock:before{content:""}.mdi-action-lock-open:before{content:""}.mdi-action-lock-outline:before{content:""}.mdi-action-loyalty:before{content:""}.mdi-action-markunread-mailbox:before{content:""}.mdi-action-note-add:before{content:""}.mdi-action-open-in-browser:before{content:""}.mdi-action-open-in-new:before{content:""}.mdi-action-open-with:before{content:""}.mdi-action-pageview:before{content:""}.mdi-action-payment:before{content:""}.mdi-action-perm-camera-mic:before{content:""}.mdi-action-perm-contact-cal:before{content:""}.mdi-action-perm-data-setting:before{content:""}.mdi-action-perm-device-info:before{content:""}.mdi-action-perm-identity:before{content:""}.mdi-action-perm-media:before{content:""}.mdi-action-perm-phone-msg:before{content:""}.mdi-action-perm-scan-wifi:before{content:""}.mdi-action-picture-in-picture:before{content:""}.mdi-action-polymer:before{content:""}.mdi-action-print:before{content:""}.mdi-action-query-builder:before{content:""}.mdi-action-question-answer:before{content:""}.mdi-action-receipt:before{content:""}.mdi-action-redeem:before{content:""}.mdi-action-report-problem:before{content:""}.mdi-action-restore:before{content:""}.mdi-action-room:before{content:""}.mdi-action-schedule:before{content:""}.mdi-action-search:before{content:""}.mdi-action-settings:before{content:""}.mdi-action-settings-applications:before{content:""}.mdi-action-settings-backup-restore:before{content:""}.mdi-action-settings-bluetooth:before{content:""}.mdi-action-settings-cell:before{content:""}.mdi-action-settings-display:before{content:""}.mdi-action-settings-ethernet:before{content:""}.mdi-action-settings-input-antenna:before{content:""}.mdi-action-settings-input-component:before{content:""}.mdi-action-settings-input-composite:before{content:""}.mdi-action-settings-input-hdmi:before{content:""}.mdi-action-settings-input-svideo:before{content:""}.mdi-action-settings-overscan:before{content:""}.mdi-action-settings-phone:before{content:""}.mdi-action-settings-power:before{content:""}.mdi-action-settings-remote:before{content:""}.mdi-action-settings-voice:before{content:""}.mdi-action-shop:before{content:""}.mdi-action-shopping-basket:before{content:""}.mdi-action-shopping-cart:before{content:""}.mdi-action-shop-two:before{content:""}.mdi-action-speaker-notes:before{content:""}.mdi-action-spellcheck:before{content:""}.mdi-action-star-rate:before{content:""}.mdi-action-stars:before{content:""}.mdi-action-store:before{content:""}.mdi-action-subject:before{content:""}.mdi-action-swap-horiz:before{content:""}.mdi-action-swap-vert:before{content:""}.mdi-action-swap-vert-circle:before{content:""}.mdi-action-system-update-tv:before{content:""}.mdi-action-tab:before{content:""}.mdi-action-tab-unselected:before{content:""}.mdi-action-theaters:before{content:""}.mdi-action-thumb-down:before{content:""}.mdi-action-thumbs-up-down:before{content:""}.mdi-action-thumb-up:before{content:""}.mdi-action-toc:before{content:""}.mdi-action-today:before{content:""}.mdi-action-track-changes:before{content:""}.mdi-action-translate:before{content:""}.mdi-action-trending-down:before{content:""}.mdi-action-trending-neutral:before{content:""}.mdi-action-trending-up:before{content:""}.mdi-action-turned-in:before{content:""}.mdi-action-turned-in-not:before{content:""}.mdi-action-verified-user:before{content:""}.mdi-action-view-agenda:before{content:""}.mdi-action-view-array:before{content:""}.mdi-action-view-carousel:before{content:""}.mdi-action-view-column:before{content:""}.mdi-action-view-day:before{content:""}.mdi-action-view-headline:before{content:""}.mdi-action-view-list:before{content:""}.mdi-action-view-module:before{content:""}.mdi-action-view-quilt:before{content:""}.mdi-action-view-stream:before{content:""}.mdi-action-view-week:before{content:""}.mdi-action-visibility:before{content:""}.mdi-action-visibility-off:before{content:""}.mdi-action-wallet-giftcard:before{content:""}.mdi-action-wallet-membership:before{content:""}.mdi-action-wallet-travel:before{content:""}.mdi-action-work:before{content:""}.mdi-alert-error:before{content:""}.mdi-alert-warning:before{content:""}.mdi-av-album:before{content:""}.mdi-av-timer:before{content:""}.mdi-av-closed-caption:before{content:""}.mdi-av-equalizer:before{content:""}.mdi-av-explicit:before{content:""}.mdi-av-fast-forward:before{content:""}.mdi-av-fast-rewind:before{content:""}.mdi-av-games:before{content:""}.mdi-av-hearing:before{content:""}.mdi-av-high-quality:before{content:""}.mdi-av-loop:before{content:""}.mdi-av-mic:before{content:""}.mdi-av-mic-none:before{content:""}.mdi-av-mic-off:before{content:""}.mdi-av-movie:before{content:""}.mdi-av-my-library-add:before{content:""}.mdi-av-my-library-books:before{content:""}.mdi-av-my-library-music:before{content:""}.mdi-av-new-releases:before{content:""}.mdi-av-not-interested:before{content:""}.mdi-av-pause:before{content:""}.mdi-av-pause-circle-fill:before{content:""}.mdi-av-pause-circle-outline:before{content:""}.mdi-av-play-arrow:before{content:""}.mdi-av-play-circle-fill:before{content:""}.mdi-av-play-circle-outline:before{content:""}.mdi-av-playlist-add:before{content:""}.mdi-av-play-shopping-bag:before{content:""}.mdi-av-queue:before{content:""}.mdi-av-queue-music:before{content:""}.mdi-av-radio:before{content:""}.mdi-av-recent-actors:before{content:""}.mdi-av-repeat:before{content:""}.mdi-av-repeat-one:before{content:""}.mdi-av-replay:before{content:""}.mdi-av-shuffle:before{content:""}.mdi-av-skip-next:before{content:""}.mdi-av-skip-previous:before{content:""}.mdi-av-snooze:before{content:""}.mdi-av-stop:before{content:""}.mdi-av-subtitles:before{content:""}.mdi-av-surround-sound:before{content:""}.mdi-av-videocam:before{content:""}.mdi-av-videocam-off:before{content:""}.mdi-av-video-collection:before{content:""}.mdi-av-volume-down:before{content:""}.mdi-av-volume-mute:before{content:""}.mdi-av-volume-off:before{content:""}.mdi-av-volume-up:before{content:""}.mdi-av-web:before{content:""}.mdi-communication-business:before{content:""}.mdi-communication-call:before{content:""}.mdi-communication-call-end:before{content:""}.mdi-communication-call-made:before{content:""}.mdi-communication-call-merge:before{content:""}.mdi-communication-call-missed:before{content:""}.mdi-communication-call-received:before{content:""}.mdi-communication-call-split:before{content:""}.mdi-communication-chat:before{content:""}.mdi-communication-clear-all:before{content:""}.mdi-communication-comment:before{content:""}.mdi-communication-contacts:before{content:""}.mdi-communication-dialer-sip:before{content:""}.mdi-communication-dialpad:before{content:""}.mdi-communication-dnd-on:before{content:""}.mdi-communication-email:before{content:""}.mdi-communication-forum:before{content:""}.mdi-communication-import-export:before{content:""}.mdi-communication-invert-colors-off:before{content:""}.mdi-communication-invert-colors-on:before{content:""}.mdi-communication-live-help:before{content:""}.mdi-communication-location-off:before{content:""}.mdi-communication-location-on:before{content:""}.mdi-communication-message:before{content:""}.mdi-communication-messenger:before{content:""}.mdi-communication-no-sim:before{content:""}.mdi-communication-phone:before{content:""}.mdi-communication-portable-wifi-off:before{content:""}.mdi-communication-quick-contacts-dialer:before{content:""}.mdi-communication-quick-contacts-mail:before{content:""}.mdi-communication-ring-volume:before{content:""}.mdi-communication-stay-current-landscape:before{content:""}.mdi-communication-stay-current-portrait:before{content:""}.mdi-communication-stay-primary-landscape:before{content:""}.mdi-communication-stay-primary-portrait:before{content:""}.mdi-communication-swap-calls:before{content:""}.mdi-communication-textsms:before{content:""}.mdi-communication-voicemail:before{content:""}.mdi-communication-vpn-key:before{content:""}.mdi-content-add:before{content:""}.mdi-content-add-box:before{content:""}.mdi-content-add-circle:before{content:""}.mdi-content-add-circle-outline:before{content:""}.mdi-content-archive:before{content:""}.mdi-content-backspace:before{content:""}.mdi-content-block:before{content:""}.mdi-content-clear:before{content:""}.mdi-content-content-copy:before{content:""}.mdi-content-content-cut:before{content:""}.mdi-content-content-paste:before{content:""}.mdi-content-create:before{content:""}.mdi-content-drafts:before{content:""}.mdi-content-filter-list:before{content:""}.mdi-content-flag:before{content:""}.mdi-content-forward:before{content:""}.mdi-content-gesture:before{content:""}.mdi-content-inbox:before{content:""}.mdi-content-link:before{content:""}.mdi-content-mail:before{content:""}.mdi-content-markunread:before{content:""}.mdi-content-redo:before{content:""}.mdi-content-remove:before{content:""}.mdi-content-remove-circle:before{content:""}.mdi-content-remove-circle-outline:before{content:""}.mdi-content-reply:before{content:""}.mdi-content-reply-all:before{content:""}.mdi-content-report:before{content:""}.mdi-content-save:before{content:""}.mdi-content-select-all:before{content:""}.mdi-content-send:before{content:""}.mdi-content-sort:before{content:""}.mdi-content-text-format:before{content:""}.mdi-content-undo:before{content:""}.mdi-device-access-alarm:before{content:""}.mdi-device-access-alarms:before{content:""}.mdi-device-access-time:before{content:""}.mdi-device-add-alarm:before{content:""}.mdi-device-airplanemode-off:before{content:""}.mdi-device-airplanemode-on:before{content:""}.mdi-device-battery-20:before{content:""}.mdi-device-battery-30:before{content:""}.mdi-device-battery-50:before{content:""}.mdi-device-battery-60:before{content:""}.mdi-device-battery-80:before{content:""}.mdi-device-battery-90:before{content:""}.mdi-device-battery-alert:before{content:""}.mdi-device-battery-charging-20:before{content:""}.mdi-device-battery-charging-30:before{content:""}.mdi-device-battery-charging-50:before{content:""}.mdi-device-battery-charging-60:before{content:""}.mdi-device-battery-charging-80:before{content:""}.mdi-device-battery-charging-90:before{content:""}.mdi-device-battery-charging-full:before{content:""}.mdi-device-battery-full:before{content:""}.mdi-device-battery-std:before{content:""}.mdi-device-battery-unknown:before{content:""}.mdi-device-bluetooth:before{content:""}.mdi-device-bluetooth-connected:before{content:""}.mdi-device-bluetooth-disabled:before{content:""}.mdi-device-bluetooth-searching:before{content:""}.mdi-device-brightness-auto:before{content:""}.mdi-device-brightness-high:before{content:""}.mdi-device-brightness-low:before{content:""}.mdi-device-brightness-medium:before{content:""}.mdi-device-data-usage:before{content:""}.mdi-device-developer-mode:before{content:""}.mdi-device-devices:before{content:""}.mdi-device-dvr:before{content:""}.mdi-device-gps-fixed:before{content:""}.mdi-device-gps-not-fixed:before{content:""}.mdi-device-gps-off:before{content:""}.mdi-device-location-disabled:before{content:""}.mdi-device-location-searching:before{content:""}.mdi-device-multitrack-audio:before{content:""}.mdi-device-network-cell:before{content:""}.mdi-device-network-wifi:before{content:""}.mdi-device-nfc:before{content:""}.mdi-device-now-wallpaper:before{content:""}.mdi-device-now-widgets:before{content:""}.mdi-device-screen-lock-landscape:before{content:""}.mdi-device-screen-lock-portrait:before{content:""}.mdi-device-screen-lock-rotation:before{content:""}.mdi-device-screen-rotation:before{content:""}.mdi-device-sd-storage:before{content:""}.mdi-device-settings-system-daydream:before{content:""}.mdi-device-signal-cellular-0-bar:before{content:""}.mdi-device-signal-cellular-1-bar:before{content:""}.mdi-device-signal-cellular-2-bar:before{content:""}.mdi-device-signal-cellular-3-bar:before{content:""}.mdi-device-signal-cellular-4-bar:before{content:""}.mdi-device-signal-cellular-connected-no-internet-0-bar:before{content:""}.mdi-device-signal-cellular-connected-no-internet-1-bar:before{content:""}.mdi-device-signal-cellular-connected-no-internet-2-bar:before{content:""}.mdi-device-signal-cellular-connected-no-internet-3-bar:before{content:""}.mdi-device-signal-cellular-connected-no-internet-4-bar:before{content:""}.mdi-device-signal-cellular-no-sim:before{content:""}.mdi-device-signal-cellular-null:before{content:""}.mdi-device-signal-cellular-off:before{content:""}.mdi-device-signal-wifi-0-bar:before{content:""}.mdi-device-signal-wifi-1-bar:before{content:""}.mdi-device-signal-wifi-2-bar:before{content:""}.mdi-device-signal-wifi-3-bar:before{content:""}.mdi-device-signal-wifi-4-bar:before{content:""}.mdi-device-signal-wifi-off:before{content:""}.mdi-device-storage:before{content:""}.mdi-device-usb:before{content:""}.mdi-device-wifi-lock:before{content:""}.mdi-device-wifi-tethering:before{content:""}.mdi-editor-attach-file:before{content:""}.mdi-editor-attach-money:before{content:""}.mdi-editor-border-all:before{content:""}.mdi-editor-border-bottom:before{content:""}.mdi-editor-border-clear:before{content:""}.mdi-editor-border-color:before{content:""}.mdi-editor-border-horizontal:before{content:""}.mdi-editor-border-inner:before{content:""}.mdi-editor-border-left:before{content:""}.mdi-editor-border-outer:before{content:""}.mdi-editor-border-right:before{content:""}.mdi-editor-border-style:before{content:""}.mdi-editor-border-top:before{content:""}.mdi-editor-border-vertical:before{content:""}.mdi-editor-format-align-center:before{content:""}.mdi-editor-format-align-justify:before{content:""}.mdi-editor-format-align-left:before{content:""}.mdi-editor-format-align-right:before{content:""}.mdi-editor-format-bold:before{content:""}.mdi-editor-format-clear:before{content:""}.mdi-editor-format-color-fill:before{content:""}.mdi-editor-format-color-reset:before{content:""}.mdi-editor-format-color-text:before{content:""}.mdi-editor-format-indent-decrease:before{content:""}.mdi-editor-format-indent-increase:before{content:""}.mdi-editor-format-italic:before{content:""}.mdi-editor-format-line-spacing:before{content:""}.mdi-editor-format-list-bulleted:before{content:""}.mdi-editor-format-list-numbered:before{content:""}.mdi-editor-format-paint:before{content:""}.mdi-editor-format-quote:before{content:""}.mdi-editor-format-size:before{content:""}.mdi-editor-format-strikethrough:before{content:""}.mdi-editor-format-textdirection-l-to-r:before{content:""}.mdi-editor-format-textdirection-r-to-l:before{content:""}.mdi-editor-format-underline:before{content:""}.mdi-editor-functions:before{content:""}.mdi-editor-insert-chart:before{content:""}.mdi-editor-insert-comment:before{content:""}.mdi-editor-insert-drive-file:before{content:""}.mdi-editor-insert-emoticon:before{content:""}.mdi-editor-insert-invitation:before{content:""}.mdi-editor-insert-link:before{content:""}.mdi-editor-insert-photo:before{content:""}.mdi-editor-merge-type:before{content:""}.mdi-editor-mode-comment:before{content:""}.mdi-editor-mode-edit:before{content:""}.mdi-editor-publish:before{content:""}.mdi-editor-vertical-align-bottom:before{content:""}.mdi-editor-vertical-align-center:before{content:""}.mdi-editor-vertical-align-top:before{content:""}.mdi-editor-wrap-text:before{content:""}.mdi-file-attachment:before{content:""}.mdi-file-cloud:before{content:""}.mdi-file-cloud-circle:before{content:""}.mdi-file-cloud-done:before{content:""}.mdi-file-cloud-download:before{content:""}.mdi-file-cloud-off:before{content:""}.mdi-file-cloud-queue:before{content:""}.mdi-file-cloud-upload:before{content:""}.mdi-file-file-download:before{content:""}.mdi-file-file-upload:before{content:""}.mdi-file-folder:before{content:""}.mdi-file-folder-open:before{content:""}.mdi-file-folder-shared:before{content:""}.mdi-hardware-cast:before{content:""}.mdi-hardware-cast-connected:before{content:""}.mdi-hardware-computer:before{content:""}.mdi-hardware-desktop-mac:before{content:""}.mdi-hardware-desktop-windows:before{content:""}.mdi-hardware-dock:before{content:""}.mdi-hardware-gamepad:before{content:""}.mdi-hardware-headset:before{content:""}.mdi-hardware-headset-mic:before{content:""}.mdi-hardware-keyboard:before{content:""}.mdi-hardware-keyboard-alt:before{content:""}.mdi-hardware-keyboard-arrow-down:before{content:""}.mdi-hardware-keyboard-arrow-left:before{content:""}.mdi-hardware-keyboard-arrow-right:before{content:""}.mdi-hardware-keyboard-arrow-up:before{content:""}.mdi-hardware-keyboard-backspace:before{content:""}.mdi-hardware-keyboard-capslock:before{content:""}.mdi-hardware-keyboard-control:before{content:""}.mdi-hardware-keyboard-hide:before{content:""}.mdi-hardware-keyboard-return:before{content:""}.mdi-hardware-keyboard-tab:before{content:""}.mdi-hardware-keyboard-voice:before{content:""}.mdi-hardware-laptop:before{content:""}.mdi-hardware-laptop-chromebook:before{content:""}.mdi-hardware-laptop-mac:before{content:""}.mdi-hardware-laptop-windows:before{content:""}.mdi-hardware-memory:before{content:""}.mdi-hardware-mouse:before{content:""}.mdi-hardware-phone-android:before{content:""}.mdi-hardware-phone-iphone:before{content:""}.mdi-hardware-phonelink:before{content:""}.mdi-hardware-phonelink-off:before{content:""}.mdi-hardware-security:before{content:""}.mdi-hardware-sim-card:before{content:""}.mdi-hardware-smartphone:before{content:""}.mdi-hardware-speaker:before{content:""}.mdi-hardware-tablet:before{content:""}.mdi-hardware-tablet-android:before{content:""}.mdi-hardware-tablet-mac:before{content:""}.mdi-hardware-tv:before{content:""}.mdi-hardware-watch:before{content:""}.mdi-image-add-to-photos:before{content:""}.mdi-image-adjust:before{content:""}.mdi-image-assistant-photo:before{content:""}.mdi-image-audiotrack:before{content:""}.mdi-image-blur-circular:before{content:""}.mdi-image-blur-linear:before{content:""}.mdi-image-blur-off:before{content:""}.mdi-image-blur-on:before{content:""}.mdi-image-brightness-1:before{content:""}.mdi-image-brightness-2:before{content:""}.mdi-image-brightness-3:before{content:""}.mdi-image-brightness-4:before{content:""}.mdi-image-brightness-5:before{content:""}.mdi-image-brightness-6:before{content:""}.mdi-image-brightness-7:before{content:""}.mdi-image-brush:before{content:""}.mdi-image-camera:before{content:""}.mdi-image-camera-alt:before{content:""}.mdi-image-camera-front:before{content:""}.mdi-image-camera-rear:before{content:""}.mdi-image-camera-roll:before{content:""}.mdi-image-center-focus-strong:before{content:""}.mdi-image-center-focus-weak:before{content:""}.mdi-image-collections:before{content:""}.mdi-image-colorize:before{content:""}.mdi-image-color-lens:before{content:""}.mdi-image-compare:before{content:""}.mdi-image-control-point:before{content:""}.mdi-image-control-point-duplicate:before{content:""}.mdi-image-crop:before{content:""}.mdi-image-crop-3-2:before{content:""}.mdi-image-crop-5-4:before{content:""}.mdi-image-crop-7-5:before{content:""}.mdi-image-crop-16-9:before{content:""}.mdi-image-crop-din:before{content:""}.mdi-image-crop-free:before{content:""}.mdi-image-crop-landscape:before{content:""}.mdi-image-crop-original:before{content:""}.mdi-image-crop-portrait:before{content:""}.mdi-image-crop-square:before{content:""}.mdi-image-dehaze:before{content:""}.mdi-image-details:before{content:""}.mdi-image-edit:before{content:""}.mdi-image-exposure:before{content:""}.mdi-image-exposure-minus-1:before{content:""}.mdi-image-exposure-minus-2:before{content:""}.mdi-image-exposure-plus-1:before{content:""}.mdi-image-exposure-plus-2:before{content:""}.mdi-image-exposure-zero:before{content:""}.mdi-image-filter:before{content:""}.mdi-image-filter-1:before{content:""}.mdi-image-filter-2:before{content:""}.mdi-image-filter-3:before{content:""}.mdi-image-filter-4:before{content:""}.mdi-image-filter-5:before{content:""}.mdi-image-filter-6:before{content:""}.mdi-image-filter-7:before{content:""}.mdi-image-filter-8:before{content:""}.mdi-image-filter-9:before{content:""}.mdi-image-filter-9-plus:before{content:""}.mdi-image-filter-b-and-w:before{content:""}.mdi-image-filter-center-focus:before{content:""}.mdi-image-filter-drama:before{content:""}.mdi-image-filter-frames:before{content:""}.mdi-image-filter-hdr:before{content:""}.mdi-image-filter-none:before{content:""}.mdi-image-filter-tilt-shift:before{content:""}.mdi-image-filter-vintage:before{content:""}.mdi-image-flare:before{content:""}.mdi-image-flash-auto:before{content:""}.mdi-image-flash-off:before{content:""}.mdi-image-flash-on:before{content:""}.mdi-image-flip:before{content:""}.mdi-image-gradient:before{content:""}.mdi-image-grain:before{content:""}.mdi-image-grid-off:before{content:""}.mdi-image-grid-on:before{content:""}.mdi-image-hdr-off:before{content:""}.mdi-image-hdr-on:before{content:""}.mdi-image-hdr-strong:before{content:""}.mdi-image-hdr-weak:before{content:""}.mdi-image-healing:before{content:""}.mdi-image-image:before{content:""}.mdi-image-image-aspect-ratio:before{content:""}.mdi-image-iso:before{content:""}.mdi-image-landscape:before{content:""}.mdi-image-leak-add:before{content:""}.mdi-image-leak-remove:before{content:""}.mdi-image-lens:before{content:""}.mdi-image-looks:before{content:""}.mdi-image-looks-3:before{content:""}.mdi-image-looks-4:before{content:""}.mdi-image-looks-5:before{content:""}.mdi-image-looks-6:before{content:""}.mdi-image-looks-one:before{content:""}.mdi-image-looks-two:before{content:""}.mdi-image-loupe:before{content:""}.mdi-image-movie-creation:before{content:""}.mdi-image-nature:before{content:""}.mdi-image-nature-people:before{content:""}.mdi-image-navigate-:before{content:""}.mdi-image-navigate-next:before{content:""}.mdi-image-palette:before{content:""}.mdi-image-panorama:before{content:""}.mdi-image-panorama-fisheye:before{content:""}.mdi-image-panorama-horizontal:before{content:""}.mdi-image-panorama-vertical:before{content:""}.mdi-image-panorama-wide-angle:before{content:""}.mdi-image-photo:before{content:""}.mdi-image-photo-album:before{content:""}.mdi-image-photo-camera:before{content:""}.mdi-image-photo-library:before{content:""}.mdi-image-portrait:before{content:""}.mdi-image-remove-red-eye:before{content:""}.mdi-image-rotate-left:before{content:""}.mdi-image-rotate-right:before{content:""}.mdi-image-slideshow:before{content:""}.mdi-image-straighten:before{content:""}.mdi-image-style:before{content:""}.mdi-image-switch-camera:before{content:""}.mdi-image-switch-video:before{content:""}.mdi-image-tag-faces:before{content:""}.mdi-image-texture:before{content:""}.mdi-image-timelapse:before{content:""}.mdi-image-timer:before{content:""}.mdi-image-timer-3:before{content:""}.mdi-image-timer-10:before{content:""}.mdi-image-timer-auto:before{content:""}.mdi-image-timer-off:before{content:""}.mdi-image-tonality:before{content:""}.mdi-image-transform:before{content:""}.mdi-image-tune:before{content:""}.mdi-image-wb-auto:before{content:""}.mdi-image-wb-cloudy:before{content:""}.mdi-image-wb-incandescent:before{content:""}.mdi-image-wb-iridescent:before{content:""}.mdi-image-wb-sunny:before{content:""}.mdi-maps-beenhere:before{content:""}.mdi-maps-directions:before{content:""}.mdi-maps-directions-bike:before{content:""}.mdi-maps-directions-bus:before{content:""}.mdi-maps-directions-car:before{content:""}.mdi-maps-directions-ferry:before{content:""}.mdi-maps-directions-subway:before{content:""}.mdi-maps-directions-train:before{content:""}.mdi-maps-directions-transit:before{content:""}.mdi-maps-directions-walk:before{content:""}.mdi-maps-flight:before{content:""}.mdi-maps-hotel:before{content:""}.mdi-maps-layers:before{content:""}.mdi-maps-layers-clear:before{content:""}.mdi-maps-local-airport:before{content:""}.mdi-maps-local-atm:before{content:""}.mdi-maps-local-attraction:before{content:""}.mdi-maps-local-bar:before{content:""}.mdi-maps-local-cafe:before{content:""}.mdi-maps-local-car-wash:before{content:""}.mdi-maps-local-convenience-store:before{content:""}.mdi-maps-local-drink:before{content:""}.mdi-maps-local-florist:before{content:""}.mdi-maps-local-gas-station:before{content:""}.mdi-maps-local-grocery-store:before{content:""}.mdi-maps-local-hospital:before{content:""}.mdi-maps-local-hotel:before{content:""}.mdi-maps-local-laundry-service:before{content:""}.mdi-maps-local-library:before{content:""}.mdi-maps-local-mall:before{content:""}.mdi-maps-local-movies:before{content:""}.mdi-maps-local-offer:before{content:""}.mdi-maps-local-parking:before{content:""}.mdi-maps-local-pharmacy:before{content:""}.mdi-maps-local-phone:before{content:""}.mdi-maps-local-pizza:before{content:""}.mdi-maps-local-play:before{content:""}.mdi-maps-local-post-office:before{content:""}.mdi-maps-local-print-shop:before{content:""}.mdi-maps-local-restaurant:before{content:""}.mdi-maps-local-see:before{content:""}.mdi-maps-local-shipping:before{content:""}.mdi-maps-local-taxi:before{content:""}.mdi-maps-location-history:before{content:""}.mdi-maps-map:before{content:""}.mdi-maps-my-location:before{content:""}.mdi-maps-navigation:before{content:""}.mdi-maps-pin-drop:before{content:""}.mdi-maps-place:before{content:""}.mdi-maps-rate-review:before{content:""}.mdi-maps-restaurant-menu:before{content:""}.mdi-maps-satellite:before{content:""}.mdi-maps-store-mall-directory:before{content:""}.mdi-maps-terrain:before{content:""}.mdi-maps-traffic:before{content:""}.mdi-navigation-apps:before{content:""}.mdi-navigation-arrow-back:before{content:""}.mdi-navigation-arrow-drop-down:before{content:""}.mdi-navigation-arrow-drop-down-circle:before{content:""}.mdi-navigation-arrow-drop-up:before{content:""}.mdi-navigation-arrow-forward:before{content:""}.mdi-navigation-cancel:before{content:""}.mdi-navigation-check:before{content:""}.mdi-navigation-chevron-left:before{content:""}.mdi-navigation-chevron-right:before{content:""}.mdi-navigation-close:before{content:""}.mdi-navigation-expand-less:before{content:""}.mdi-navigation-expand-more:before{content:""}.mdi-navigation-fullscreen:before{content:""}.mdi-navigation-fullscreen-exit:before{content:""}.mdi-navigation-menu:before{content:""}.mdi-navigation-more-horiz:before{content:""}.mdi-navigation-more-vert:before{content:""}.mdi-navigation-refresh:before{content:""}.mdi-navigation-unfold-less:before{content:""}.mdi-navigation-unfold-more:before{content:""}.mdi-notification-adb:before{content:""}.mdi-notification-bluetooth-audio:before{content:""}.mdi-notification-disc-full:before{content:""}.mdi-notification-dnd-forwardslash:before{content:""}.mdi-notification-do-not-disturb:before{content:""}.mdi-notification-drive-eta:before{content:""}.mdi-notification-event-available:before{content:""}.mdi-notification-event-busy:before{content:""}.mdi-notification-event-note:before{content:""}.mdi-notification-folder-special:before{content:""}.mdi-notification-mms:before{content:""}.mdi-notification-more:before{content:""}.mdi-notification-network-locked:before{content:""}.mdi-notification-phone-bluetooth-speaker:before{content:""}.mdi-notification-phone-forwarded:before{content:""}.mdi-notification-phone-in-talk:before{content:""}.mdi-notification-phone-locked:before{content:""}.mdi-notification-phone-missed:before{content:""}.mdi-notification-phone-paused:before{content:""}.mdi-notification-play-download:before{content:""}.mdi-notification-play-install:before{content:""}.mdi-notification-sd-card:before{content:""}.mdi-notification-sim-card-alert:before{content:""}.mdi-notification-sms:before{content:""}.mdi-notification-sms-failed:before{content:""}.mdi-notification-sync:before{content:""}.mdi-notification-sync-disabled:before{content:""}.mdi-notification-sync-problem:before{content:""}.mdi-notification-system-update:before{content:""}.mdi-notification-tap-and-play:before{content:""}.mdi-notification-time-to-leave:before{content:""}.mdi-notification-vibration:before{content:""}.mdi-notification-voice-chat:before{content:""}.mdi-notification-vpn-lock:before{content:""}.mdi-social-cake:before{content:""}.mdi-social-domain:before{content:""}.mdi-social-group:before{content:""}.mdi-social-group-add:before{content:""}.mdi-social-location-city:before{content:""}.mdi-social-mood:before{content:""}.mdi-social-notifications:before{content:""}.mdi-social-notifications-none:before{content:""}.mdi-social-notifications-off:before{content:""}.mdi-social-notifications-on:before{content:""}.mdi-social-notifications-paused:before{content:""}.mdi-social-pages:before{content:""}.mdi-social-party-mode:before{content:""}.mdi-social-people:before{content:""}.mdi-social-people-outline:before{content:""}.mdi-social-person:before{content:""}.mdi-social-person-add:before{content:""}.mdi-social-person-outline:before{content:""}.mdi-social-plus-one:before{content:""}.mdi-social-poll:before{content:""}.mdi-social-public:before{content:""}.mdi-social-school:before{content:""}.mdi-social-share:before{content:""}.mdi-social-whatshot:before{content:""}.mdi-toggle-check-box:before{content:""}.mdi-toggle-check-box-outline-blank:before{content:""}.mdi-toggle-radio-button-off:before{content:""}.mdi-toggle-radio-button-on:before{content:""}[class^="mdi-"],[class*=" mdi-"],.mdi{display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.player .control{display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}@font-face{font-family:"icomoon";src:url("../fonts/icomoon/fonts/icomoon.eot");src:url("../fonts/icomoon/fonts/icomoon.eot?#iefix") format("embedded-opentype"),url("../fonts/icomoon/fonts/icomoon.woff") format("woff"),url("../fonts/icomoon/fonts/icomoon.ttf") format("truetype");font-weight:normal;font-style:normal}.icomoon-google:before{content:""}.icomoon-home:before{content:""}.icomoon-pencil:before{content:""}.icomoon-image:before{content:""}.icomoon-music2:before{content:""}.icomoon-headphones:before{content:""}.icomoon-play:before{content:""}.icomoon-film:before{content:""}.icomoon-camera:before{content:""}.icomoon-pacman:before{content:""}.icomoon-tag:before{content:""}.icomoon-tags:before{content:""}.icomoon-location:before{content:""}.icomoon-screen:before{content:""}.icomoon-mobile:before{content:""}.icomoon-tv:before{content:""}.icomoon-bubble:before{content:""}.icomoon-bubbles:before{content:""}.icomoon-user:before{content:""}.icomoon-spinner:before{content:""}.icomoon-search:before{content:""}.icomoon-key:before{content:""}.icomoon-settings:before{content:""}.icomoon-cog:before{content:""}.icomoon-stats:before{content:""}.icomoon-switch:before{content:""}.icomoon-tree:before{content:""}.icomoon-cloud:before{content:""}.icomoon-earth:before{content:""}.icomoon-link:before{content:""}.icomoon-attachment:before{content:""}.icomoon-star:before{content:""}.icomoon-star2:before{content:""}.icomoon-heart:before{content:""}.icomoon-heart2:before{content:""}.icomoon-smiley:before{content:""}.icomoon-smiley2:before{content:""}.icomoon-info:before{content:""}.icomoon-checkmark:before{content:""}.icomoon-arrow-right:before{content:""}.icomoon-arrow-left:before{content:""}.icomoon-arrow-right2:before{content:""}.icomoon-arrow-left2:before{content:""}.icomoon-share:before{content:""}.icomoon-googleplus:before{content:""}.icomoon-facebook:before{content:""}.icomoon-twitter:before{content:""}.icomoon-feed:before{content:""}.icomoon-feed2:before{content:""}.icomoon-youtube:before{content:""}.icomoon-picasa:before{content:""}.icomoon-github:before{content:""}.icomoon-github2:before{content:""}.icomoon-github3:before{content:""}.icomoon-tux:before{content:""}.icomoon-apple:before{content:""}.icomoon-android:before{content:""}.icomoon-windows8:before{content:""}.icomoon-paypal:before{content:""}.icomoon-file-zip:before{content:""}.icomoon-file-css:before{content:""}.icomoon-imdb:before{content:""}.icomoon-flatscreen:before{content:""}.icomoon-clapperboard:before{content:""}.icomoon-kodi-symbol:before{content:""}.icomoon-kodi-text:before{content:""}.icomoon-linux:before{content:""}.icomoon-music:before{content:""}.icomoon-pi:before{content:""}.icomoon-network:before{content:""}.icomoon-rss:before{content:""}.icomoon-statistics:before{content:""}.icomoon-pie:before{content:""}.icomoon-minus:before{content:""}.icomoon-plus:before{content:""}.icomoon-info2:before{content:""}.icomoon-question:before{content:""}.icomoon-help:before{content:""}.icomoon-warning:before{content:""}.icomoon-list:before{content:""}.icomoon-flow-tree:before{content:""}.icomoon-arrow-left3:before{content:""}.icomoon-arrow-right3:before{content:""}.icomoon-arrow-left4:before{content:""}.icomoon-arrow-right4:before{content:""}.icomoon-arrow-left5:before{content:""}.icomoon-uniE654:before{content:""}[class^="icomoon-"],[class*=" icomoon-"],.icomoon{display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}#logo{display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.table-hover>tbody>tr:hover,.songs-table tr.song.menu-open,.songs-table tr.song:hover{background-color:rgba(255,255,255,0.3)}.table-hover>tbody>tr:hover .crop,.songs-table tr.song.menu-open .crop,.songs-table tr.song:hover .crop{position:relative;white-space:nowrap;overflow:hidden}.table-hover>tbody>tr:hover .crop:after,.songs-table tr.song.menu-open .crop:after,.songs-table tr.song:hover .crop:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00E7E7E7', endColorstr='#FFE7E7E7');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U3ZTdlNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlN2U3ZTciLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(231,231,231,0)),color-stop(100%, #e7e7e7));background-image:-moz-linear-gradient(left, rgba(231,231,231,0) 0%,#e7e7e7 100%);background-image:-webkit-linear-gradient(left, rgba(231,231,231,0) 0%,#e7e7e7 100%);background-image:linear-gradient(to right, rgba(231,231,231,0) 0%,#e7e7e7 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.shadow-z-1,.card,.snackbar,.landing-page .region-content h3,.landing-page h3.set-header,.landing-set .set__header,.card,.snackbar{box-shadow:0 1px 3px rgba(0,0,0,0.04),0 1px 2px rgba(0,0,0,0.05)}.shadow-z-2-hover,.btn:hover:not(.btn-link),.btn:hover:not(.btn-link){box-shadow:0 3px 6px rgba(0,0,0,0.07),0 2px 4px rgba(0,0,0,0.13)}.table-striped>tbody>tr:nth-child(odd){background-color:rgba(255,255,255,0.5)}.table-striped>tbody>tr>td{border:0}.table>tbody>tr>td{border-top:none}.options-list{padding-bottom:.5em}.options-list>li{border-bottom:1px solid #ddd}.options-list>li:last-child{border:0}.options-list>li>span,.options-list>li>a{display:block;padding:.5em 1em;cursor:pointer}.options-list>li>span:hover,.options-list>li>a:hover{background:#12B2E7;color:#fff}.options-list>li>span:hover small,.options-list>li>a:hover small{display:inline}.options-list small{font-size:70%;opacity:0.7;display:none}@media (min-width: 57em){.modal.style-options .modal-dialog{width:300px}}.modal.style-options .modal-footer{display:none}.page-padding,.settings-form .form-content-region,.section-lab .page,.api-method--execute{padding:1em}@media (min-width: 57em){.page-padding,.settings-form .form-content-region,.section-lab .page,.api-method--execute{padding:2em;padding-left:3em}}.page,.page-secondary,.api-method--execute,.help--page .region-content-wrapper .region-content,.settings-form{max-width:58em;margin-left:0;background:#fff}.page-secondary,.api-method--execute{background:rgba(255,255,255,0.5)}.page-wrapper,.help--page .region-content-wrapper{padding:0;margin-bottom:4em}.page-wrapper .region-content,.help--page .region-content-wrapper .region-content{padding:0}.addon-list .region-first,.browser-page .region-first,.category-list .region-first,.filter-pane,.help--page .region-first,.landing-page .region-first,.local-playlist-list .region-first,.pvr-page .region-first,.epg-page .region-first,.search-page-layout .region-first,.settings-page .region-first{padding:1em 1.5em}.sidebar-section h3,.browser-page .region-first h3,.filters-container h3,.local-playlist-list .region-first h3,.region-first .nav-sub h3{font-size:15px;text-transform:uppercase;margin:1em 0;color:#888;font-weight:bold}.sidebar-section,.browser-page .region-first .source-set,.filters-container .nav-list,.filters-container .selection-list,.filters-container .active-list,.region-first .nav-sub{margin-bottom:2em}.sidebar-section ul,.filters-container .nav-list,.filters-container .selection-list,.local-playlist-list .region-first .lists,.region-first .nav-sub .items{padding-left:1em}.sidebar-section ul li,.filters-container .nav-list li,.filters-container .selection-list li,.local-playlist-list .region-first .lists li,.region-first .nav-sub .items li{padding-bottom:.5em;position:relative;white-space:nowrap;overflow:hidden;cursor:pointer}.sidebar-section ul li:after,.filters-container .nav-list li:after,.filters-container .selection-list li:after,.local-playlist-list .region-first .lists li:after,.region-first .nav-sub .items li:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00F2F2F2', endColorstr='#FFF2F2F2');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YyZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(242,242,242,0)),color-stop(100%, #f2f2f2));background-image:-moz-linear-gradient(left, rgba(242,242,242,0) 0%,#f2f2f2 100%);background-image:-webkit-linear-gradient(left, rgba(242,242,242,0) 0%,#f2f2f2 100%);background-image:linear-gradient(to right, rgba(242,242,242,0) 0%,#f2f2f2 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.sidebar-section ul li:hover,.filters-container .nav-list li:hover,.filters-container .selection-list li:hover,.local-playlist-list .region-first .lists li:hover,.region-first .nav-sub .items li:hover{color:#12B2E7}.sidebar-section ul li a,.filters-container .nav-list li a,.filters-container .selection-list li a,.local-playlist-list .region-first .lists li a,.region-first .nav-sub .items li a{color:#2B2F30}.sidebar-section ul li a.active,.filters-container .nav-list li a.active,.filters-container .selection-list li a.active,.local-playlist-list .region-first .lists li a.active,.region-first .nav-sub .items li a.active{color:#12B2E7;font-weight:bold}.active-player-local .sidebar-section ul li a.active,.sidebar-section .active-player-local ul li a.active,.active-player-local .filters-container .nav-list li a.active,.filters-container .active-player-local .nav-list li a.active,.active-player-local .filters-container .selection-list li a.active,.filters-container .active-player-local .selection-list li a.active,.active-player-local .local-playlist-list .region-first .lists li a.active,.local-playlist-list .region-first .active-player-local .lists li a.active,.active-player-local .region-first .nav-sub .items li a.active,.region-first .nav-sub .active-player-local .items li a.active{color:#DB2464}.browser-page .region-first .sources{padding-left:1em;padding-left:.5em}.browser-page .region-first .sources li{padding-bottom:.5em;position:relative;white-space:nowrap;overflow:hidden;cursor:pointer}.browser-page .region-first .sources li:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00F2F2F2', endColorstr='#FFF2F2F2');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YyZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(242,242,242,0)),color-stop(100%, #f2f2f2));background-image:-moz-linear-gradient(left, rgba(242,242,242,0) 0%,#f2f2f2 100%);background-image:-webkit-linear-gradient(left, rgba(242,242,242,0) 0%,#f2f2f2 100%);background-image:linear-gradient(to right, rgba(242,242,242,0) 0%,#f2f2f2 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.browser-page .region-first .sources li:hover{color:#12B2E7}.browser-page .region-first .sources li a{color:#2B2F30}.browser-page .region-first .sources li a.active{color:#12B2E7;font-weight:bold}.active-player-local .browser-page .region-first .sources li a.active,.browser-page .region-first .active-player-local .sources li a.active{color:#DB2464}.browser-page .region-first .sources li>div{display:inline-block;padding-left:.5em}.browser-page .region-first .sources li:before{display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none;opacity:0.3;content:"";font-size:0.9em}@font-face{font-family:"opensans-light";src:url("../fonts/opensans/opensans-light-webfont.eot");src:url("../fonts/opensans/opensans-light-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/opensans/opensans-light-webfont.woff") format("woff"),url("../fonts/opensans/opensans-light-webfont.ttf") format("truetype");font-weight:"normal";font-style:normal}@font-face{font-family:"opensans";src:url("../fonts/opensans/opensans-regular-webfont.eot");src:url("../fonts/opensans/opensans-regular-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/opensans/opensans-regular-webfont.woff") format("woff"),url("../fonts/opensans/opensans-regular-webfont.ttf") format("truetype");font-weight:"normal";font-style:normal}html,body{font-family:"opensans",Helvetica,Arial,sans-serif}body{zoom:0.75}@media (min-width: 25em){body{zoom:0.85}}@media (min-width: 37em){body{zoom:0.95}}@media (min-width: 45em){body{zoom:1}}a{-webkit-transition:all 0.3s linear;-o-transition:all 0.3s linear;transition:all 0.3s linear}a:focus,a:hover{text-decoration:none;outline:none}h1,h2,h3,h4{font-family:"opensans-light",Helvetica,Arial,sans-serif}.inline-links{margin-top:1.5em}.inline-links>li{display:inline-block;margin-right:.5em}.addon-list .nav-sub li{text-transform:capitalize}.addon-list .card .play{display:none !important}.addon-list .card .subtitle{text-transform:capitalize}.album--with-songs{position:relative;margin-bottom:20px}@media (min-width: 57em){.album--with-songs .region-album-side{position:absolute}}@media (min-width: 57em) and (min-width: 45em){.album--with-songs .region-album-side{width:190px}}@media (min-width: 57em) and (min-width: 75em){.album--with-songs .region-album-side{width:280px}}@media (min-width: 57em){.album--with-songs .region-album-content{max-width:1100px;padding:0 20px 0 0}}@media (min-width: 57em) and (min-width: 45em){.artist-show .album--with-songs .region-album-content{margin-left:190px}}@media (min-width: 57em) and (min-width: 75em){.artist-show .album--with-songs .region-album-content{margin-left:280px}}@media (min-width: 57em) and (min-width: 45em){.album--with-songs .region-album-content{min-height:190px}}@media (min-width: 57em) and (min-width: 75em){.album--with-songs .region-album-content{min-height:280px}}@media (min-width: 57em){.album--with-songs .card-minimal{padding:0 22px 0 0px}}.dropdown-menu{padding:.5em 0;background:#1b1c1d;color:#999;border-radius:0}.dropdown-menu li{padding:.25em 1em}.dropdown-menu li:hover{background:rgba(255,255,255,0.1);color:#fff;cursor:pointer}.dropdown-menu li:hover.divider{cursor:none;background:none}.dropdown-menu li.divider{padding:0;margin:.25em 0}.dropdown-menu li.dropdown-submenu{position:relative;overflow:visible}.dropdown-menu li.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-4px;white-space:nowrap}.dropdown-menu li.dropdown-submenu:hover>.dropdown-menu{display:block}.browser-page .region-first .sources li.type-source:before{content:""}.browser-page .region-first .sources li.type-addon:before{content:""}.browser-page .region-first .sources li.type-playlist:before{content:""}.browser-page .region-content{padding:0}.browser-page .actions{top:1px;right:10px;position:absolute}.browser-page .actions .sort-toggle,.browser-page .actions .context-toggle{display:table;width:30px;text-align:center;cursor:pointer;font-size:1.5em;opacity:0.6}.browser-page .actions .sort-toggle:before,.browser-page .actions .context-toggle:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.browser-page .actions .sort-toggle:before,.browser-page .actions .context-toggle:before{display:table-cell;vertical-align:middle;height:39px}.browser-page .actions .sort-toggle:hover,.browser-page .actions .context-toggle:hover{opacity:1}.browser-page .actions .context-toggle:before{content:""}.browser-page .actions>li{display:inline-block}.browser-page .actions .dropdown-menu{text-transform:capitalize}.browser-page .sort-wrapper li i:after{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.browser-page .sort-wrapper li.order-descending i:after{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.browser-page .sort-wrapper li.active{color:#fff}.folder-layout .loading-bar,.folder-layout .path{height:3em;padding-right:5em;background:rgba(0,0,0,0.05)}.loading .folder-layout .loading-bar,.loading .folder-layout .path{display:none}.folder-layout .loading-bar ul,.folder-layout .path ul{display:table}.folder-layout .loading-bar ul li,.folder-layout .path ul li{display:table-cell;vertical-align:middle;height:3em;padding:0 1em;cursor:pointer;border-right:1px dotted rgba(0,0,0,0.05);max-width:300px;overflow:hidden;white-space:nowrap}.folder-layout .loading-bar ul li:last-child,.folder-layout .path ul li:last-child{border:none;font-weight:bold}.folder-layout .loading-bar ul li:last-child:hover,.folder-layout .path ul li:last-child:hover{background:none}.folder-layout .loading-bar ul li:hover,.folder-layout .path ul li:hover{background:rgba(0,0,0,0.05)}.folder-layout .loading-bar{display:none}.loading .folder-layout .loading-bar{display:block}.folder-layout .loading-bar .inner{display:table}.folder-layout .loading-bar .inner span{display:table-cell;vertical-align:middle;height:3em;padding:0 1em}.folder-layout .loading-bar .loader-small-inline{margin:0.7em 0 0 0.7em}.folder-layout .folder-container .folders-pane,.folder-layout .folder-container .files{padding:1em}.folder-layout .folder-container .folders-pane{background:#F9F9F9}@media (min-width: 75em){.folder-layout .folder-container .folders-pane{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:41.6666666667%;float:left}.folder-layout .folder-container .files{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:58.3333333333%;float:right}}.folder-layout .folder,.folder-layout .file,.folder-layout .back-button,.browser-file-list .folder,.browser-file-list .file,.browser-file-list .back-button,.browser-folder-list .folder,.browser-folder-list .file,.browser-folder-list .back-button{height:42px;position:relative;border-bottom:1px solid #eee}.folder-layout .folder .thumb,.folder-layout .file .thumb,.folder-layout .back-button .thumb,.browser-file-list .folder .thumb,.browser-file-list .file .thumb,.browser-file-list .back-button .thumb,.browser-folder-list .folder .thumb,.browser-folder-list .file .thumb,.browser-folder-list .back-button .thumb{width:40px;height:40px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.folder-layout .folder .thumb,.folder-layout .file .thumb,.folder-layout .back-button .thumb,.browser-file-list .folder .thumb,.browser-file-list .file .thumb,.browser-file-list .back-button .thumb,.browser-folder-list .folder .thumb,.browser-folder-list .file .thumb,.browser-folder-list .back-button .thumb{top:1px;bottom:1px;left:0;position:absolute;z-index:20}.folder-layout .folder .thumb:hover .play,.folder-layout .file .thumb:hover .play,.folder-layout .back-button .thumb:hover .play,.browser-file-list .folder .thumb:hover .play,.browser-file-list .file .thumb:hover .play,.browser-file-list .back-button .thumb:hover .play,.browser-folder-list .folder .thumb:hover .play,.browser-folder-list .file .thumb:hover .play,.browser-folder-list .back-button .thumb:hover .play{display:table}.folder-layout .folder .title,.folder-layout .file .title,.folder-layout .back-button .title,.browser-file-list .folder .title,.browser-file-list .file .title,.browser-file-list .back-button .title,.browser-folder-list .folder .title,.browser-folder-list .file .title,.browser-folder-list .back-button .title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:0 7px;padding-left:50px;cursor:pointer;line-height:40px}.folder-layout .folder .play,.folder-layout .file .play,.folder-layout .back-button .play,.browser-file-list .folder .play,.browser-file-list .file .play,.browser-file-list .back-button .play,.browser-folder-list .folder .play,.browser-folder-list .file .play,.browser-folder-list .back-button .play{background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;display:table;width:40px;text-align:center;cursor:pointer;display:none;color:#fff;font-size:150%}.folder-layout .folder .play:before,.folder-layout .file .play:before,.folder-layout .back-button .play:before,.browser-file-list .folder .play:before,.browser-file-list .file .play:before,.browser-file-list .back-button .play:before,.browser-folder-list .folder .play:before,.browser-folder-list .file .play:before,.browser-folder-list .back-button .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.folder-layout .folder .play:before,.folder-layout .file .play:before,.folder-layout .back-button .play:before,.browser-file-list .folder .play:before,.browser-file-list .file .play:before,.browser-file-list .back-button .play:before,.browser-folder-list .folder .play:before,.browser-folder-list .file .play:before,.browser-folder-list .back-button .play:before{display:table-cell;vertical-align:middle;height:40px}.folder-layout .folder .play:before,.folder-layout .file .play:before,.folder-layout .back-button .play:before,.browser-file-list .folder .play:before,.browser-file-list .file .play:before,.browser-file-list .back-button .play:before,.browser-folder-list .folder .play:before,.browser-folder-list .file .play:before,.browser-folder-list .back-button .play:before{padding-right:5px}.folder-layout .file .title,.browser-file-list .file .title,.browser-folder-list .file .title{position:relative;white-space:nowrap;overflow:hidden;margin-right:3em}.folder-layout .file .title:after,.browser-file-list .file .title:after,.browser-folder-list .file .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00E0DFDF', endColorstr='#FFE0DFDF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UwZGZkZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlMGRmZGYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(224,223,223,0)),color-stop(100%, #e0dfdf));background-image:-moz-linear-gradient(left, rgba(224,223,223,0) 0%,#e0dfdf 100%);background-image:-webkit-linear-gradient(left, rgba(224,223,223,0) 0%,#e0dfdf 100%);background-image:linear-gradient(to right, rgba(224,223,223,0) 0%,#e0dfdf 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.folder-layout .folder,.browser-file-list .folder,.browser-folder-list .folder{position:relative;white-space:nowrap;overflow:hidden}.folder-layout .folder:after,.browser-file-list .folder:after,.browser-folder-list .folder:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00F9F9F9', endColorstr='#FFF9F9F9');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmOWY5ZjkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(249,249,249,0)),color-stop(100%, #f9f9f9));background-image:-moz-linear-gradient(left, rgba(249,249,249,0) 0%,#f9f9f9 100%);background-image:-webkit-linear-gradient(left, rgba(249,249,249,0) 0%,#f9f9f9 100%);background-image:linear-gradient(to right, rgba(249,249,249,0) 0%,#f9f9f9 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.folder-layout .file .menu i,.folder-layout .folder .menu i,.browser-file-list .file .menu i,.browser-file-list .folder .menu i,.browser-folder-list .file .menu i,.browser-folder-list .folder .menu i{font-size:150%}.folder-layout .file .menu i:before,.folder-layout .folder .menu i:before,.browser-file-list .file .menu i:before,.browser-file-list .folder .menu i:before,.browser-folder-list .file .menu i:before,.browser-folder-list .folder .menu i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.folder-layout .file .menu .dropdown-menu,.folder-layout .folder .menu .dropdown-menu,.browser-file-list .file .menu .dropdown-menu,.browser-file-list .folder .menu .dropdown-menu,.browser-folder-list .file .menu .dropdown-menu,.browser-folder-list .folder .menu .dropdown-menu{top:0}.folder-layout .file .actions,.folder-layout .folder .actions,.browser-file-list .file .actions,.browser-file-list .folder .actions,.browser-folder-list .file .actions,.browser-folder-list .folder .actions{top:0;right:0px;bottom:0;position:absolute;display:none;width:30px;display:block;z-index:50}.folder-layout .file .actions>li,.folder-layout .folder .actions>li,.browser-file-list .file .actions>li,.browser-file-list .folder .actions>li,.browser-folder-list .file .actions>li,.browser-folder-list .folder .actions>li{width:30px;text-align:center;float:left}.folder-layout .file .actions>li i:before,.folder-layout .file .actions>li:before,.folder-layout .folder .actions>li i:before,.folder-layout .folder .actions>li:before,.browser-file-list .file .actions>li i:before,.browser-file-list .file .actions>li:before,.browser-file-list .folder .actions>li i:before,.browser-file-list .folder .actions>li:before,.browser-folder-list .file .actions>li i:before,.browser-folder-list .file .actions>li:before,.browser-folder-list .folder .actions>li i:before,.browser-folder-list .folder .actions>li:before{display:table-cell;vertical-align:middle;width:30px;height:40px;color:#999;cursor:pointer}.folder-layout .file .actions>li>i,.folder-layout .folder .actions>li>i,.browser-file-list .file .actions>li>i,.browser-file-list .folder .actions>li>i,.browser-folder-list .file .actions>li>i,.browser-folder-list .folder .actions>li>i{opacity:0.4}.folder-layout .back-button i,.browser-file-list .back-button i,.browser-folder-list .back-button i{display:table;width:39px;text-align:center;cursor:pointer}.folder-layout .back-button i:before,.browser-file-list .back-button i:before,.browser-folder-list .back-button i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.folder-layout .back-button i:before,.browser-file-list .back-button i:before,.browser-folder-list .back-button i:before{display:table-cell;vertical-align:middle;height:39px}.folder-layout .back-button i:before,.browser-file-list .back-button i:before,.browser-folder-list .back-button i:before{background:#DBDBDB;font-size:150%;color:#B5B5B5;width:40px}.card-detail{position:relative}.card-detail .entity-progress{display:none}.card-detail .meta{display:none}.card-detail .card-album,.card-detail .card-artist{width:158px}.card-detail .card-album .artwork,.card-detail .card-album .artwork .thumb,.card-detail .card-artist .artwork,.card-detail .card-artist .artwork .thumb{width:158px;height:158px}@media (min-width: 75em){.card-detail .card-album,.card-detail .card-artist{width:238px}.card-detail .card-album .artwork,.card-detail .card-album .artwork .thumb,.card-detail .card-artist .artwork,.card-detail .card-artist .artwork .thumb{width:238px;height:238px}}.card-detail .card-movie,.card-detail .card-tvshow,.card-detail .card-season{width:158px}.card-detail .card-movie .artwork,.card-detail .card-movie .artwork .thumb,.card-detail .card-tvshow .artwork,.card-detail .card-tvshow .artwork .thumb,.card-detail .card-season .artwork,.card-detail .card-season .artwork .thumb{width:158px;height:236px}@media (min-width: 75em){.card-detail .card-movie,.card-detail .card-tvshow,.card-detail .card-season{width:238px}.card-detail .card-movie .artwork,.card-detail .card-movie .artwork .thumb,.card-detail .card-tvshow .artwork,.card-detail .card-tvshow .artwork .thumb,.card-detail .card-season .artwork,.card-detail .card-season .artwork .thumb{width:238px;height:357px}}.card-detail .card-musicvideo,.card-detail .card-episode{width:158px}.card-detail .card-musicvideo .artwork,.card-detail .card-musicvideo .artwork .thumb,.card-detail .card-episode .artwork,.card-detail .card-episode .artwork .thumb{width:158px;height:99px}@media (min-width: 75em){.card-detail .card-musicvideo,.card-detail .card-episode{width:238px}.card-detail .card-musicvideo .artwork,.card-detail .card-musicvideo .artwork .thumb,.card-detail .card-episode .artwork,.card-detail .card-episode .artwork .thumb{width:238px;height:150px}}.card-detail .actions{top:10px;right:10px;position:absolute;z-index:50}.card-detail .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:200%;color:rgba(255,255,255,0.8);display:none;text-shadow:1px 1px 5px rgba(0,0,0,0.3)}.card-detail .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-detail .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-detail .thumbs{display:none !important}.card-detail.thumbs-up .thumbs{color:rgba(255,255,255,0.6);opacity:1;display:table}.card-detail:hover .thumbs{display:table}.card-detail:hover.thumbs-up .thumbs{color:#12B2E7}.card-minimal{color:#888;width:199px;height:auto;margin:5px;background:#fff;position:relative;overflow:hidden;width:47px;height:auto;width:100%;margin:2em 0 .5em;padding:0;overflow:visible}.card-minimal a{color:#888}.card-minimal .title a{color:#2B2F30}.card-minimal .subtitle{font-size:85%;margin-top:5px}.card-minimal .dropdown i,.card-minimal .actions li,.card-minimal .play{color:rgba(255,255,255,0.8)}.card-minimal .dropdown i:hover,.card-minimal .actions li:hover,.card-minimal .play:hover{color:#fff}.card-minimal .record{color:rgba(255,255,255,0.8)}.card-minimal .record:hover{color:#bf0a07}.card-minimal.ph{opacity:0.1;-webkit-box-shadow:none;box-shadow:none}.card-minimal .artwork{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:199px;height:199px;position:relative;background:#ccc 50% 50% no-repeat;background-size:cover}.card-minimal .artwork img{display:block;vertical-align:middle;width:199px;margin-top:0}.card-minimal .artwork .thumb{width:199px;height:199px;background-position:50% 0;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.card-minimal .artwork a{display:block}.card-minimal .artwork .thumb:after{content:"";top:0;right:0;left:0;position:absolute;height:auto;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;opacity:0;-webkit-transition:0.1s all linear;-o-transition:0.1s all linear;transition:0.1s all linear}.card-minimal .entity-progress{right:0;bottom:0;left:0;position:absolute;top:auto;z-index:20}.card-minimal .entity-progress .current-progress{height:2px;background:#12B2E7}.card-minimal .watched-tick{color:#12B2E7;right:10px;bottom:3px;position:absolute;font-size:125%;display:none}.card-minimal .watched-tick:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .watched{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-minimal .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .watched:before{display:table-cell;vertical-align:middle;height:1.5em}.thumbs-page .card-minimal .watched{display:none}.card-minimal.is-watched .watched{color:#12B2E7}.card-minimal.is-watched .watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .thumb{display:block;background-size:cover;background-position:50% 50%;background-repeat:no-repeat}.card-minimal .meta{position:relative;padding:8px 10px;width:199px}.card-minimal .meta .title{position:relative;white-space:nowrap;overflow:hidden}.card-minimal .meta .title:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-minimal .meta .subtitle{position:relative;white-space:nowrap;overflow:hidden}.card-minimal .meta .subtitle:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card-minimal .play{display:table;width:1.5em;text-align:center;cursor:pointer;bottom:0;left:0;position:absolute;font-size:220%;display:none;z-index:20}.card-minimal .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .play:before{display:table-cell;vertical-align:middle;height:1.5em}.card-minimal .record{display:table;width:1.5em;text-align:center;cursor:pointer;right:10px;bottom:7px;position:absolute;font-size:150%;display:none;z-index:20}.card-minimal .record:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .record:before{display:table-cell;vertical-align:middle;height:1.5em}.card-minimal .dropdown{top:5px;right:0;position:absolute}.card-minimal .dropdown i{display:table;width:1.5em;text-align:center;cursor:pointer;z-index:20;font-size:180%;display:none}.card-minimal .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.card-minimal .actions{top:10px;right:35px;position:absolute;display:table;display:none}.card-minimal .actions .thumbs{display:table;width:1.5em;text-align:center;cursor:pointer;font-size:135%}.card-minimal .actions .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.card-minimal .actions .thumbs:before{display:table-cell;vertical-align:middle;height:1.5em}.disable-thumbs .card-minimal .actions .thumbs{display:none}.card-minimal .actions li{float:left;margin-left:3px}.card-minimal .actions li:before{display:table-cell !important}.card-minimal:hover .artwork .thumb:after{opacity:1}.card-minimal:hover .actions,.card-minimal:hover .dropdown i,.card-minimal:hover .play{display:table}.card-minimal:hover .record{display:table}.card-minimal.selected{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .card-minimal.selected{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .card-minimal.selected:before{border-color:#DB2464}.card-minimal.selected:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.card-minimal.selected .current-progress{display:none}.card-minimal .dropdown-menu{left:auto;right:0px;top:-7px}.card-minimal.thumbs-up .actions .thumbs{color:#12B2E7}.card-minimal .artwork,.card-minimal .artwork .thumb{width:47px;height:47px}@media (min-width: 75em){.card-minimal{width:70px}.card-minimal .artwork,.card-minimal .artwork .thumb{width:70px;height:70px}}.card-minimal .artwork{float:left}.card-minimal .dropdown i,.card-minimal ul.actions>li{color:#ddd}.card-minimal .dropdown i:hover,.card-minimal ul.actions>li:hover{color:#b1b1b1}.card-minimal .meta{padding:4px 0 4px 60px}.card-minimal .meta .title:after,.card-minimal .meta .subtitle:after{display:none}@media (min-width: 57em){.card-minimal{width:238px;margin:0;width:158px;background:none}.card-minimal .artwork,.card-minimal .artwork .thumb{width:158px;height:158px}}@media (min-width: 57em) and (min-width: 75em){.card-minimal{width:238px}.card-minimal .artwork,.card-minimal .artwork .thumb{width:238px;height:238px}}@media (min-width: 57em){.card-minimal .artwork{float:none}.card-minimal .meta{padding:.5em 0}}.card.category{height:50px;width:185px}.card.category a{padding:1em .5em;display:block;position:relative;white-space:nowrap;overflow:hidden}.card.category a:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.card.category:hover{background:#e5e5e5}.card.category:hover a{position:relative;white-space:nowrap;overflow:hidden}.card.category:hover a:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00E5E5E5', endColorstr='#FFE5E5E5');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U1ZTVlNSIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlNWU1ZTUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(229,229,229,0)),color-stop(100%, #e5e5e5));background-image:-moz-linear-gradient(left, rgba(229,229,229,0) 0%,#e5e5e5 100%);background-image:-webkit-linear-gradient(left, rgba(229,229,229,0) 0%,#e5e5e5 100%);background-image:linear-gradient(to right, rgba(229,229,229,0) 0%,#e5e5e5 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}@media (min-width: 45em){.edit-form .form-tabs,.edit-form.with-tabs .form-groups{height:420px;overflow-y:auto}}.edit-form .form-item{*zoom:1;margin-bottom:1em}.edit-form .form-item:after{content:"";display:table;clear:both}.edit-form label{color:#666}.edit-form .form-control{padding:7px;background:#FAFAFA;height:auto !important;border-bottom-color:#ddd}.edit-form .form-control:focus{border-bottom-color:#12B2E7;background:#f0fafe}.edit-form .form-control[type="date"]{padding-bottom:5px}.edit-form .form-groups{padding:1em}.edit-form.with-tabs .group-title{display:none}@media (min-width: 45em){.edit-form.with-tabs .form-tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:28.5714285714%;float:left;-webkit-box-shadow:inset 1px 1px 8px 0 rgba(43,47,48,0.1);box-shadow:inset 1px 1px 8px 0 rgba(43,47,48,0.1);padding:1em 0 1em .5em;margin-bottom:0}.edit-form.with-tabs .form-tabs li{float:none}.edit-form.with-tabs .form-tabs li.active{-webkit-box-shadow:1px 1px 8px 0 rgba(43,47,48,0.1);box-shadow:1px 1px 8px 0 rgba(43,47,48,0.1)}.edit-form.with-tabs .form-groups{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:71.4285714286%;float:right;padding-bottom:0}}.edit-form textarea{min-height:115px}.edit-form .form-edit-file textarea{padding:.5em;border:none}#modal-window.style-edit-form .modal-body{padding:0}#modal-window.style-edit-form form footer{margin-top:0}#modal-window.style-edit-form form footer .inline-list{padding:0 2em}#modal-window.style-edit-form .modal-title span{color:rgba(255,255,255,0.5)}#modal-window.style-edit-form .modal-title span:after{content:": "}@media (min-width: 45em){#modal-window.style-edit-form .modal-dialog{width:700px}}.form-imageselect__tabs{margin:-1em -1em 1em;background:#e5e5e5;padding-left:1em}.form-imageselect__panes .pane{display:none}.form-imageselect__panes .pane.active{display:block}.form-imageselect__thumbs li{float:left;margin:0 .5em .5em 0;cursor:pointer;overflow:hidden;background:#a8a7a6 50% 50% no-repeat;background-size:cover}.form-imageselect__thumbs li.selected{outline:2px solid #12B2E7;box-shadow:0 0 10px 1px rgba(18,178,231,0.5);position:relative}.active-player-local .form-imageselect__thumbs li.selected{outline:2px solid #DB2464;box-shadow:0 0 10px 1px rgba(219,36,100,0.5)}.active-player-local .form-imageselect__thumbs li.selected:before{border-color:#DB2464}.form-imageselect__thumbs li.selected:before{right:-10px;bottom:-10px;position:absolute;transform:rotate(-45deg);content:'';width:0;height:0;border:10px solid transparent;border-top-color:#12B2E7}.form-imageselect__thumbs li.selected .current-progress{display:none}.form-imageselect__thumbs li,.form-item-poster-size .form-imageselect__thumbs li{width:106px;height:160px}.form-item-fanart-size .form-imageselect__thumbs li,.form-edit-fanart .form-imageselect__thumbs li{width:222px;height:125px}.form-imageselect__loader{display:none;margin:1em 0;border-radius:3px;padding:.5em;color:#999}.form-imageselect__loader .loader-small-inline{margin-right:.5em;float:left}.form-imageselect__loader span{display:inline-block;line-height:20px;height:20px}.images-loading .form-imageselect__loader{display:block}.empty-result{text-align:center}.empty-result .empty-actions{margin-top:1em;font-size:120%}.youtube-list .thumb{width:120px;float:left;margin-right:1em}.youtube-list li{margin-bottom:.5em}.youtube-list h3{font-size:18px;padding-top:.25em;margin-bottom:1em}.youtube-list .flat-btn{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#BAC1C8;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;margin-right:.5em;display:inline-block;padding:0.3em 1em}.youtube-list .flat-btn .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.youtube-list .flat-btn .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00BAC1C8', endColorstr='#FFBAC1C8');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JhYzFjOCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiYWMxYzgiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(186,193,200,0)),color-stop(100%, #bac1c8));background-image:-moz-linear-gradient(left, rgba(186,193,200,0) 0%,#bac1c8 100%);background-image:-webkit-linear-gradient(left, rgba(186,193,200,0) 0%,#bac1c8 100%);background-image:linear-gradient(to right, rgba(186,193,200,0) 0%,#bac1c8 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.youtube-list .flat-btn:hover{color:#fff}.with-filters .layout-container>.region-first{overflow:hidden}.filters-loading .with-filters .region-content-wrapper .region-content{opacity:0.3}.filters-container .nav-list a,.filters-container .nav-list .option,.filters-container .selection-list a,.filters-container .selection-list .option{color:#2B2F30;cursor:pointer}.filters-container .nav-list a.active,.filters-container .nav-list .option.active,.filters-container .selection-list a.active,.filters-container .selection-list .option.active{color:#12B2E7;font-weight:bold}.active-player-local .filters-container .nav-list a.active,.active-player-local .filters-container .nav-list .option.active,.active-player-local .filters-container .selection-list a.active,.active-player-local .filters-container .selection-list .option.active{color:#DB2464}.filters-container .selection-list a,.filters-container .selection-list .option{text-transform:capitalize}.filters-container .sortable.active{position:relative}.filters-container .sortable.active.order-asc:after{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .sortable.active.order-desc:after{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .sortable.active:after{font-size:130%;padding-left:.25em;position:absolute;margin-top:1px}.filters-container .filter-btn{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#12B2E7;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em;display:block}.filters-container .filter-btn .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.filters-container .filter-btn .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#0012B2E7', endColorstr='#FF12B2E7');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzEyYjJlNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxMmIyZTciLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(18,178,231,0)),color-stop(100%, #12b2e7));background-image:-moz-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:-webkit-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:linear-gradient(to right, rgba(18,178,231,0) 0%,#12b2e7 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.filters-container .filter-btn:hover{color:#fff}.filters-container .filter-btn:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .filter-btn:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.filters-container .filter-btn:hover:before{color:#fff}.filters-container .filter-btn.filterable-add{display:inline-block;background-color:#a8a7a6}.filters-container .filter-btn.filterable-add:hover{background-color:#12B2E7}.active-player-local .filters-container .filter-btn.filterable-add:hover{background-color:#DB2464}.filters-container .filter-btn.filterable-add:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .filters-page h3,.filters-container .filters-options h3{cursor:pointer;padding-left:1em;position:relative}.filters-container .filters-page h3:before,.filters-container .filters-options h3:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .filters-page h3:before,.filters-container .filters-options h3:before{font-size:140%;position:absolute;left:-12px;top:-3px}.filters-container .filters-page h3:hover:before,.filters-container .filters-options h3:hover:before{color:#12B2E7}.active-player-local .filters-container .filters-page h3:hover:before,.active-player-local .filters-container .filters-options h3:hover:before{color:#DB2464}.filters-container .open-filters{position:relative}.filters-container .open-filters i{top:-3px;right:3px;position:absolute;cursor:pointer;font-size:150%;display:none}.filters-container .open-filters i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-container .open-filters:hover i{color:#2B2F30}.filters-container .deselect-all{margin:0 0 .5em 1em;cursor:pointer}.filters-active-bar{-webkit-box-shadow:0 3px 6px -4px rgba(0,0,0,0.15);box-shadow:0 3px 6px -4px rgba(0,0,0,0.15);position:fixed;margin-left:0;left:0;top:50px;right:0;background:#fff;padding:.75em;text-align:center;z-index:50;display:none}@media (min-width: 57em){.filters-active-bar{margin-left:50px}}@media (min-width: 57em){.filters-active-bar{left:190px}}@media (min-width: 75em){.filters-active-bar{left:250px}}.shell-playlist-closed .filters-active-bar{right:0}@media (min-width: 57em){.filters-active-bar{right:310px}.shell-playlist-closed .filters-active-bar{right:50px}}@media (min-width: 75em){.filters-active-bar{right:400px}.shell-playlist-closed .filters-active-bar{right:50px}}.shell-playlist-closed .filters-active-bar{right:0}@media (min-width: 57em){.shell-playlist-closed .filters-active-bar{right:50px}}@media (min-width: 75em){.shell-playlist-closed .filters-active-bar{right:50px}}.filters-active-bar .remove{top:0;right:0;bottom:0;position:absolute;display:table;width:2em;text-align:center;cursor:pointer;font-size:150%;opacity:0.5}.filters-active-bar .remove:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.filters-active-bar .remove:before{display:table-cell;vertical-align:middle;height:2em}.filters-active-bar .remove:hover{opacity:1}.filters-active-bar .filters-active-all{display:block;margin:0 2em;position:relative;white-space:nowrap;overflow:hidden;text-transform:capitalize}.filters-active-bar .filters-active-all:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.layout-container.filters-active .filters-active-bar{display:block}.layout-container.filters-active .region-content{padding-top:3.5em}.layout-container.filters-active .filters-container .open-filters i{display:block}.is-loading{opacity:0.5}.filter-pane{top:0;right:0;bottom:0;left:0;position:absolute;-webkit-transition:0.2s all ease-out;-o-transition:0.2s all ease-out;transition:0.2s all ease-out;overflow-y:auto}.filter-pane.filters-current{-moz-transform:translate(0, 0);-ms-transform:translate(0, 0);-webkit-transform:translate(0, 0);transform:translate(0, 0)}.show-filters .filter-pane.filters-current{-moz-transform:translate(-240px, 0);-ms-transform:translate(-240px, 0);-webkit-transform:translate(-240px, 0);transform:translate(-240px, 0)}.show-options .filter-pane.filters-current{-moz-transform:translate(-480px, 0);-ms-transform:translate(-480px, 0);-webkit-transform:translate(-480px, 0);transform:translate(-480px, 0)}.filter-pane.filters-page{-moz-transform:translate(240px, 0);-ms-transform:translate(240px, 0);-webkit-transform:translate(240px, 0);transform:translate(240px, 0)}.show-filters .filter-pane.filters-page{-moz-transform:translate(0, 0);-ms-transform:translate(0, 0);-webkit-transform:translate(0, 0);transform:translate(0, 0)}.show-options .filter-pane.filters-page{-moz-transform:translate(-240px, 0);-ms-transform:translate(-240px, 0);-webkit-transform:translate(-240px, 0);transform:translate(-240px, 0)}.filter-pane.filters-options{-moz-transform:translate(480px, 0);-ms-transform:translate(480px, 0);-webkit-transform:translate(480px, 0);transform:translate(480px, 0)}.show-filters .filter-pane.filters-options{-moz-transform:translate(240px, 0);-ms-transform:translate(240px, 0);-webkit-transform:translate(240px, 0);transform:translate(240px, 0)}.show-options .filter-pane.filters-options{-moz-transform:translate(0, 0);-ms-transform:translate(0, 0);-webkit-transform:translate(0, 0);transform:translate(0, 0)}form .form-control-wrapper .form-control:focus,form .form-control-wrapper .form-control{padding:.5em .25em;height:auto;margin-bottom:.5em}.help-block{margin-top:8px;font-size:90%;color:#C0C0C0}.form-type-hidden{display:none}form .inline-list li{display:inline-block;margin-right:2em;float:left}form .inline-list .response{padding-top:18px}.form-type-hide{display:none}.form-item-half-width{width:50%;float:left;padding-right:.5em}.active-player-kodi #header{background:#1e2122}.active-player-kodi #logo{color:#12B2E7;background:#1e2122}.active-player-local #header{background:#313233}.active-player-local #logo{color:#DB2464;background:#313233}#header{color:rgba(255,255,255,0.6);position:fixed;top:0;left:0;right:0;height:50px;z-index:51;right:0}.shell-playlist-closed #header{right:0}@media (min-width: 57em){#header{right:310px}.shell-playlist-closed #header{right:50px}}@media (min-width: 75em){#header{right:400px}.shell-playlist-closed #header{right:50px}}.shell-playlist-closed #header{right:0}@media (min-width: 57em){.shell-playlist-closed #header{right:50px}}@media (min-width: 75em){.shell-playlist-closed #header{right:50px}}#header .search-toggle{top:0;right:150px;position:absolute}#header .search-toggle i{display:table;width:50px;text-align:center;cursor:pointer}#header .search-toggle i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}#header .search-toggle i:before{display:table-cell;vertical-align:middle;height:50px}#selected-region{display:none;position:absolute;top:0;height:50px;right:100%}@media (min-width: 57em){#selected-region{right:200px}}#selected-region .menu-toggle{font-size:150%;display:table;width:50px;text-align:center;cursor:pointer;float:right}#selected-region .menu-toggle:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}#selected-region .menu-toggle:before{display:table-cell;vertical-align:middle;height:50px}#selected-region .dropdown-menu{margin:0}#selected-region .selected-text{display:inline-block;height:50px;line-height:50px}#selected-region.media-video .selected-watched,#selected-region.media-video .selected-unwatched{display:block}#selected-region.media-video .selected-localadd{display:none}#selected-region.media-audio .selected-watched,#selected-region.media-audio .selected-unwatched{display:none}#selected-region.media-audio .selected-localadd{display:block}#page-title{margin:0;line-height:50px;font-size:1.3em}#page-title .context a,#page-title .title{padding:0 0 0 0.5em}#search-region{top:50px;right:0;left:0;position:absolute;display:none}body.section-search #search-region{display:block}@media (min-width: 57em){#search-region{top:0;left:auto}}.mobile-menu{top:0;right:0;position:absolute}.mobile-menu li{display:inline-block;margin:0;width:50px;height:50px}.mobile-menu i{display:table;width:50px;text-align:center;cursor:pointer;color:rgba(255,255,255,0.6);font-size:120%}.mobile-menu i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.mobile-menu i:before{display:table-cell;vertical-align:middle;height:50px}@media (min-width: 57em){.mobile-menu{display:none}}.mobile-menu--link__remote i:before{content:""}.section-remote .mobile-menu--link__remote i:before{color:#fff}.mobile-menu--link__search i:before{content:""}.section-search .mobile-menu--link__search i:before{color:#fff}.mobile-menu--link__playlist i:before{content:""}.section-playlist .mobile-menu--link__playlist i:before{color:#fff}.help--page .region-content-wrapper .region-content{padding:1em}@media (min-width: 57em){.help--page .region-content-wrapper .region-content{padding:2em;padding-left:3em}}.help--page .help--overview--report ul{margin:0;padding:0}.help--page .help--overview--report ul li{margin:0;padding:0;list-style:none}.help--page .help--overview--report ul li:nth-child(even){background:#f5f5f5}.help--page .help--overview--report ul li.warning{background:#ffeacc}.help--page .help--overview--report ul strong,.help--page .help--overview--report ul span{padding:.5em;display:block;width:50%;float:left}@media (min-width: 57em){.help--page .help--overview--report ul span{width:70%}.help--page .help--overview--report ul strong{width:30%}}.landing-page .landing-section{padding-bottom:10px}.landing-page .region-content{padding:0}.landing-page .region-content h3 a,.landing-page h3.set-header a{font-size:75%;line-height:1.4;float:right;color:#999}.landing-page .region-content h3 a:hover,.landing-page h3.set-header a:hover{color:#12B2E7}.landing-page .landing-sections{position:relative;z-index:10}.landing-loading .landing-page .landing-content{min-height:3000px}#landing-hero{display:none;background-color:#323537;background-attachment:fixed;background-repeat:no-repeat;background-size:cover;background-position:50% 50%;height:600px;position:relative;z-index:1}@media (min-width: 57em){#landing-hero{display:block}}.active-player-kodi .details-header{background:#323537}.active-player-kodi .details-header .gradient{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMyMzUzNyIvPjxzdG9wIG9mZnNldD0iMzAlIiBzdG9wLWNvbG9yPSIjMzIzNTM3IiBzdG9wLW9wYWNpdHk9IjAuOSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMyMzUzNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #323537),color-stop(30%, rgba(50,53,55,0.9)),color-stop(100%, rgba(50,53,55,0)));background-image:-moz-linear-gradient(left, #323537 0%,rgba(50,53,55,0.9) 30%,rgba(50,53,55,0) 100%);background-image:-webkit-linear-gradient(left, #323537 0%,rgba(50,53,55,0.9) 30%,rgba(50,53,55,0) 100%);background-image:linear-gradient(to right, #323537 0%,rgba(50,53,55,0.9) 30%,rgba(50,53,55,0) 100%)}.active-player-local .details-header{background:#222425}.active-player-local .details-header .gradient{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzIyMjQyNSIvPjxzdG9wIG9mZnNldD0iMzAlIiBzdG9wLWNvbG9yPSIjMjIyNDI1IiBzdG9wLW9wYWNpdHk9IjAuOSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIyMjQyNSIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #222425),color-stop(30%, rgba(34,36,37,0.9)),color-stop(100%, rgba(34,36,37,0)));background-image:-moz-linear-gradient(left, #222425 0%,rgba(34,36,37,0.9) 30%,rgba(34,36,37,0) 100%);background-image:-webkit-linear-gradient(left, #222425 0%,rgba(34,36,37,0.9) 30%,rgba(34,36,37,0) 100%);background-image:linear-gradient(to right, #222425 0%,rgba(34,36,37,0.9) 30%,rgba(34,36,37,0) 100%)}.details-header{*zoom:1;position:relative;min-height:283px;padding-bottom:2em}.details-header:after{content:"";display:table;clear:both}.details-header a{color:rgba(255,255,255,0.6)}.details-header a:hover{color:rgba(255,255,255,0.9)}.details-header .region-details-side{padding:.5em 0 .5em .5em;display:none}@media (min-width: 45em){.details-header .region-details-side{width:190px}}@media (min-width: 75em){.details-header .region-details-side{width:280px}}@media (min-width: 45em){.details-header .region-details-side{display:block;padding:1.5em;position:absolute}}.details-header .region-details-meta-wrapper{padding:.5em 2em;color:rgba(255,255,255,0.9);position:relative;z-index:20}@media (min-width: 45em){.details-header .region-details-meta-wrapper{margin-left:190px}}@media (min-width: 75em){.details-header .region-details-meta-wrapper{margin-left:280px}}@media (min-width: 45em){.details-header .region-details-meta-wrapper{padding:.5em 1em 0 .5em}}@media (min-width: 75em){.details-header .region-details-meta-wrapper{padding-top:1em}}@media (min-width: 90em){.details-header .region-details-meta-wrapper{margin-right:300px;color:rgba(255,255,255,0.9)}.shell-playlist-closed .details-header .region-details-meta-wrapper{margin-right:500px}}.details-header .region-details-title{color:rgba(255,255,255,0.95);margin-bottom:.5em}.details-header .region-details-title .sub{font-weight:normal;font-size:14px;color:rgba(255,255,255,0.4)}@media (min-width: 45em){.details-header .region-details-title{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:75%;float:left}}.details-header .region-details-rating{width:73px;font-size:170%;color:rgba(255,255,255,0.7);white-space:nowrap;margin-top:0.8em;padding-right:2em;position:relative;text-align:right}.details-header .region-details-rating i{font-size:150%;top:-5px;right:0;position:absolute}.details-header .region-details-rating i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}@media (min-width: 45em){.details-header .region-details-rating{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:25%;float:right}}.details-header .region-details-subtext{color:rgba(255,255,255,0.6);*zoom:1}.details-header .region-details-subtext:after{content:"";display:table;clear:both}.details-header .region-details-fanart{background-size:cover;background-position:50% 50%;width:100%;top:0;right:0;bottom:0;left:0;position:absolute;z-index:10;opacity:0.3}@media (min-width: 57em){.details-header .region-details-fanart{width:600px;margin-left:50px}}@media (min-width: 75em){.details-header .region-details-fanart{left:auto}}.details-header .region-details-fanart .gradient{content:"";top:0;bottom:0;left:0;position:absolute;width:60%}@media (min-width: 90em){.details-header .region-details-fanart{opacity:0.8}}.details-header .tagline,.details-header .description{margin-bottom:.5em;max-height:22px;overflow:hidden;cursor:pointer;color:rgba(255,255,255,0.6)}.details-header .tagline.expanded,.details-header .description.expanded{max-height:none}@media (min-width: 75em){.details-header .tagline,.details-header .description{padding-right:10%}}.details-header .tagline{max-height:none;cursor:default;color:rgba(255,255,255,0.8)}.details-header .meta{margin:1em 0}.details-header .meta span{color:rgba(255,255,255,0.6)}.details-header .meta label{text-transform:capitalize}.details-header .runtime{font-size:120%;margin-bottom:0.6em;float:left}.details-header .genres{float:right}.details-header .streams span{color:rgba(255,255,255,0.6);text-transform:uppercase}.details-header .card-detail .artwork{position:relative;z-index:20}.details-header .card-detail .play{top:0;right:0;bottom:0;left:0;position:absolute;background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;z-index:20;cursor:pointer;opacity:0}.details-header .card-detail .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.details-header .card-detail .play:before{font-size:400%;color:rgba(255,255,255,0.8);top:0;right:0;bottom:0;left:0;position:absolute;margin:auto;width:55px;height:55px}.details-header .card-detail:hover .play{opacity:1}.details-header label{font-weight:normal}.details-header .dropdown>span{cursor:pointer}.tvshow-show .details-header,.season-details .details-header,.movie-show .details-header{min-height:315px}@media (min-width: 75em){.tvshow-show .details-header,.season-details .details-header,.movie-show .details-header{min-height:405px}}.section-movie .details-header .region-details-meta-below,.section-tvshow .details-header .region-details-meta-below{height:auto;overflow:initial}.layout-container.with-sidebar-first>.region-first{background:#F2F2F2;position:fixed;bottom:70px;top:50px;left:0;width:0;width:250px;left:-100%;-webkit-box-shadow:1px 0 3px 0 rgba(134,134,134,0.3);box-shadow:1px 0 3px 0 rgba(134,134,134,0.3);-webkit-transition:all 0.3s linear;-o-transition:all 0.3s linear;transition:all 0.3s linear;overflow-y:auto;z-index:25}@media (min-width: 57em){.layout-container.with-sidebar-first>.region-first{bottom:70px}}@media (min-width: 57em){.layout-container.with-sidebar-first>.region-first{left:50px}}@media (min-width: 57em){.layout-container.with-sidebar-first>.region-first{width:190px}}@media (min-width: 75em){.layout-container.with-sidebar-first>.region-first{width:250px}}@media (min-width: 57em){.layout-container.with-sidebar-first>.region-first{display:block;-webkit-box-shadow:1px 0 3px 0 rgba(134,134,134,0.05);box-shadow:1px 0 3px 0 rgba(134,134,134,0.05);left:50px}}.region-first-open .layout-container.with-sidebar-first>.region-first{left:0}@media (min-width: 57em){.region-first-open .layout-container.with-sidebar-first>.region-first{left:50px}}.layout-container.with-sidebar-first>.region-content-wrapper{margin-left:0;margin-left:0}@media (min-width: 57em){.layout-container.with-sidebar-first>.region-content-wrapper{margin-left:190px}}@media (min-width: 75em){.layout-container.with-sidebar-first>.region-content-wrapper{margin-left:250px}}.layout-container.with-header>.region-content-wrapper{position:relative}.layout-container.with-header>.region-content-wrapper>.region-content,.layout-container.with-header>.region-content{background:#f5f5f5;padding-top:2em;min-height:500px}.region-first-toggle{top:0;left:50px;position:fixed;display:table;width:50px;text-align:center;cursor:pointer;color:rgba(255,255,255,0.6);z-index:100;font-size:150%;opacity:0.5}.region-first-toggle:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.region-first-toggle:before{display:table-cell;vertical-align:middle;height:50px}@media (min-width: 57em){.region-first-toggle{display:none}}.region-first-open .region-first-toggle{color:#fff}.region-first-open .region-first-toggle:before{content:""}.content-container.with-sidebar .content-container-first{float:left;padding-right:2em;display:none}@media (min-width: 45em){.content-container.with-sidebar .content-container-first{width:190px}}@media (min-width: 75em){.content-container.with-sidebar .content-container-first{width:280px}}@media (min-width: 45em){.content-container.with-sidebar .content-container-content-wrapper{margin-left:190px}}@media (min-width: 75em){.content-container.with-sidebar .content-container-content-wrapper{margin-left:280px}}.section-content{max-width:1150px;margin-bottom:2em;padding-bottom:2em}.section-content h2{margin-bottom:1em}.section-content.section-full-width{max-width:none}.content-sections>.section-content:last-child{border:none}#loading-page{top:0;right:0;bottom:150px;left:0;position:fixed;left:0;right:0}@media (min-width: 57em){#loading-page{left:50px}}.shell-playlist-closed #loading-page{right:0}@media (min-width: 57em){#loading-page{right:310px}.shell-playlist-closed #loading-page{right:50px}}@media (min-width: 75em){#loading-page{right:400px}.shell-playlist-closed #loading-page{right:50px}}#loading-page.init{left:0 !important;right:0 !important}.shell-playlist-closed #loading-page{right:0}@media (min-width: 57em){.shell-playlist-closed #loading-page{right:50px}}@media (min-width: 75em){.shell-playlist-closed #loading-page{right:50px}}#loading-page h2{text-align:center;margin-top:18rem;font-size:1.5em;color:#a8a7a6}@media (min-width: 57em){#loading-page h2{margin-top:33rem}}.loader-inline #loading-page{position:relative;bottom:0;left:0 !important;right:0 !important}.loader-inline #loading-page h2{margin-top:10rem}@media (min-width: 57em){.loader-inline #loading-page h2{margin-top:12rem}}.search-page #loading-page{position:static;width:100%}.loader{position:absolute;margin:5rem auto 3rem auto;overflow:hidden}.loader>div{position:absolute;top:0;left:0;height:100%;width:100%}.orbit{height:20rem;width:20rem;top:0;left:0;bottom:0;right:0;margin:auto;overflow:visible;background-color:#ddd;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%}.orbit>div{top:2.5rem;left:2.5rem;font-size:1rem;height:15rem;width:15rem;-webkit-transform-origin:center center;-moz-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.orbit>div::before{position:absolute;left:calc(50% - .5em);display:block;content:'';height:1em;width:1em;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%;-moz-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.orbit>div:nth-child(1)::before{background-color:#a8a7a6}.orbit>div:nth-child(2)::before{background-color:#a8a7a6}.orbit>div:nth-child(3)::before{background-color:#a8a7a6}.orbit>div:nth-child(4)::before{background-color:#a8a7a6}@-moz-keyframes loading-orbit{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-orbit{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-orbit{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-orbit-before{0%{height:1em;width:1em;-moz-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:5}5%{height:1.25em;width:1.25em}25%{height:2em;width:2em;z-index:10;background-color:#12B2E7}50%{-moz-transform:translate3d(1rem, 15rem, 0);transform:translate3d(1rem, 15rem, 0);z-index:0;height:1em;width:1em}100%{-moz-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:0;height:1em;width:1em}}@-webkit-keyframes loading-orbit-before{0%{height:1em;width:1em;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:5}5%{height:1.25em;width:1.25em}25%{height:2em;width:2em;z-index:10;background-color:#12B2E7}50%{-webkit-transform:translate3d(1rem, 15rem, 0);transform:translate3d(1rem, 15rem, 0);z-index:0;height:1em;width:1em}100%{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:0;height:1em;width:1em}}@keyframes loading-orbit-before{0%{height:1em;width:1em;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:5}5%{height:1.25em;width:1.25em}25%{height:2em;width:2em;z-index:10;background-color:#12B2E7}50%{-moz-transform:translate3d(1rem, 15rem, 0);-ms-transform:translate3d(1rem, 15rem, 0);-webkit-transform:translate3d(1rem, 15rem, 0);transform:translate3d(1rem, 15rem, 0);z-index:0;height:1em;width:1em}100%{-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:0;height:1em;width:1em}}.loader.orbit>div{-webkit-animation:loading-orbit 6s infinite linear;-o-animation:loading-orbit 6s infinite linear;animation:loading-orbit 6s infinite linear}.loader.orbit>div::before{-webkit-animation:loading-orbit-before 2s infinite ease-in-out;-o-animation:loading-orbit-before 2s infinite ease-in-out;animation:loading-orbit-before 2s infinite ease-in-out}.loader.orbit>div:nth-child(1){-webkit-animation-delay:0s;animation-delay:0s}.loader.orbit>div:nth-child(2){-webkit-animation-delay:-0.75s;animation-delay:-0.75s}.loader.orbit>div:nth-child(3){-webkit-animation-delay:-1.5s;animation-delay:-1.5s}.loader.orbit>div:nth-child(4){-webkit-animation-delay:-2.25s;animation-delay:-2.25s}.loader.orbit>div:nth-child(1)::before{-webkit-animation-delay:0s;animation-delay:0s}.loader.orbit>div:nth-child(2)::before{-webkit-animation-delay:-0.5s;animation-delay:-0.5s}.loader.orbit>div:nth-child(3)::before{-webkit-animation-delay:-1s;animation-delay:-1s}.loader.orbit>div:nth-child(4)::before{-webkit-animation-delay:-1.5s;animation-delay:-1.5s}.spinner-double-section-far,.spinner-double-section{top:20em;right:0;bottom:0;left:0;position:absolute;margin:auto;width:80px;height:80px;border-radius:50%;border:4px solid rgba(170,170,170,0.2);-webkit-animation:spinner 3s linear infinite;-o-animation:spinner 3s linear infinite;animation:spinner 3s linear infinite}.loader-inline .spinner-double-section-far,.loader-inline .spinner-double-section{top:5em}@-moz-keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@-webkit-keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.spinner-double-section-far,.spinner-double-section{position:relative}.spinner-double-section-far:before,.spinner-double-section-far:after,.spinner-double-section:before,.spinner-double-section:after{content:'';position:absolute;top:-20px;left:-20px;display:block;width:80px;height:80px;border-radius:50%;border:4px solid transparent;border-top-color:#12B2E7}.spinner-double-section-far:after,.spinner-double-section:after{border-top-color:transparent;border-bottom-color:#12B2E7}.spinner-double-section-far{top:11em}.spinner-double-section-far:before,.spinner-double-section-far:after{top:-12px;left:-12px;width:96px;height:96px}@media (min-width: 57em){.spinner-double-section-far{top:20em}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.loader-small-inline{border-radius:50%;width:20px;height:20px;border:0.25rem solid rgba(0,0,0,0.1);border-top-color:#12B2E7;animation:spin 1s infinite linear;display:inline-block}.local-playlist-list .region-first .new-list{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#a8a7a6;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em;margin:2em 0}.local-playlist-list .region-first .new-list .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.local-playlist-list .region-first .new-list .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00A8A7A6', endColorstr='#FFA8A7A6');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E4YTdhNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNhOGE3YTYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(168,167,166,0)),color-stop(100%, #a8a7a6));background-image:-moz-linear-gradient(left, rgba(168,167,166,0) 0%,#a8a7a6 100%);background-image:-webkit-linear-gradient(left, rgba(168,167,166,0) 0%,#a8a7a6 100%);background-image:linear-gradient(to right, rgba(168,167,166,0) 0%,#a8a7a6 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.local-playlist-list .region-first .new-list:hover{color:#fff}.local-playlist-list .region-first .new-list:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.local-playlist-list .region-first .new-list:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.local-playlist-list .region-first .new-list:hover:before{color:#fff}.local-playlist-list .region-content{padding:0}.modal .playlist-selection-list h3{display:none}.modal .playlist-selection-list .lists li:after{display:none}.local-playlist .local-playlist-header{position:relative;background:#fff;padding:1em}.local-playlist .local-playlist-header h2{margin:0;font-size:18px;color:#888}.local-playlist .local-playlist-header .dropdown{position:absolute;right:1em;top:.5em}.local-playlist .local-playlist-header .dropdown i{color:#888;display:table;width:1.5em;text-align:center;cursor:pointer;font-size:150%}.local-playlist .local-playlist-header .dropdown i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.local-playlist .local-playlist-header .dropdown i:before{display:table-cell;vertical-align:middle;height:1.5em}.local-playlist .local-playlist-header .dropdown ul{left:auto;right:0}.local-playlist .item-container{margin:1em}.local-playlist .empty-content{color:#888;text-align:center;font-size:150%;margin:2em}#modal-window .close,#modal-window .close:hover,#modal-window .close:focus{color:#fff}#modal-window .modal-dialog{-webkit-box-shadow:0 2px 11px 2px rgba(0,0,0,0.32);box-shadow:0 2px 11px 2px rgba(0,0,0,0.32)}@media (min-width: 45em){#modal-window .modal-dialog{min-width:500px}}#modal-window .modal-header{background:#2F3334;color:#fff}#modal-window .modal-header,#modal-window .modal-body{padding:15px 20px}#modal-window .modal-footer{background:rgba(0,0,0,0.05);padding:5px 20px}#modal-window.style-confirm .modal-body{padding:30px 20px}@media (min-width: 57em){#modal-window.style-video .modal-dialog{width:800px}}#modal-window.style-video .modal-body{padding:0;position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}#modal-window.style-video .modal-body iframe{position:absolute;top:0;left:0;width:100%;height:100%}#modal-window.style-video .modal-footer{display:none}#modal-window.style-edit-form .modal-footer,#modal-window.style-form .modal-footer{display:none}#modal-window.style-edit-form footer,#modal-window.style-form footer{margin:15px -20px -15px;padding:5px 20px;background:rgba(0,0,0,0.05);*zoom:1}#modal-window.style-edit-form footer:after,#modal-window.style-form footer:after{content:"";display:table;clear:both}#modal-window.style-edit-form footer .inline-list li,#modal-window.style-form footer .inline-list li{margin:0 0 0 2em;float:right}#nav-bar{background:rgba(255,255,255,0.9);width:50px;padding:0;top:0;left:0;position:fixed;margin:0;padding:0;-webkit-transition:all 0.3s linear;-o-transition:all 0.3s linear;transition:all 0.3s linear;z-index:50;-webkit-box-shadow:1px 0 3px 0 rgba(134,134,134,0.05);box-shadow:1px 0 3px 0 rgba(134,134,134,0.05);display:none}#nav-bar #nav-header{height:50px;background:#1e2122 url('../images/logo.png?1711106462') 0 0 no-repeat}.section-home #nav-bar{display:block}@media (min-width: 57em){#nav-bar{display:block}}#nav-bar nav{padding:1em 0}#nav-bar nav ul{margin:0;padding:0}#nav-bar nav ul li{margin:0;padding:0;list-style:none}#nav-bar nav ul a{display:block;padding:.5em 0;color:#2B2F30;top:0;bottom:0;left:0;position:absolute;white-space:nowrap;-webkit-transition:none;-o-transition:none;transition:none}#nav-bar nav ul a span{display:none;padding-right:1em;font-weight:bold;padding-top:2px}#nav-bar nav ul a i{font-size:130%;width:50px;text-align:center}#nav-bar nav ul a i:before{top:10px;left:16px;position:absolute}#nav-bar nav ul ul{display:none}#nav-bar nav ul li{position:relative;height:38px}#nav-bar nav ul li:hover{white-space:nowrap}#nav-bar nav ul li:hover a{background:#12B2E7;color:#fff}#nav-bar nav ul li:hover a span{display:inline-block}.active-player-local #nav-bar nav ul li:hover a{background:#DB2464}#player-wrapper{right:0;bottom:0;left:0;position:fixed;height:70px;background:#18191A;z-index:501}@media (min-width: 57em){#player-wrapper{height:70px}}#player-local{display:none}.active-player-local #player-local{display:block}#player-kodi{display:block}.active-player-local #player-kodi{display:none}#player-kodi .playing-thumb:hover .remote-toggle{display:table}.player .controls-primary,.player .controls-secondary{background:rgba(255,255,255,0.05);height:70px}@media (min-width: 57em){.player .controls-primary,.player .controls-secondary{height:70px}}.player .controls-primary .control,.player .controls-secondary .control{cursor:pointer;height:70px;display:table;font-size:40px;color:rgba(255,255,255,0.5)}@media (min-width: 57em){.player .controls-primary .control,.player .controls-secondary .control{height:70px}}.player .controls-primary .control:hover,.player .controls-secondary .control:hover{color:#fff}.player .control{text-align:center}.player .control:before{display:table-cell;vertical-align:middle}.player .controls-primary{display:none;width:100%}@media (min-width: 57em){.player .controls-primary{width:300px}}.player .controls-primary .control{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:33.33%;float:left}@media (min-width: 57em){.player .controls-primary{float:left;display:block}}.player .controls-secondary{display:none;width:100%}@media (min-width: 57em){.player .controls-secondary{width:300px}}.player .controls-secondary .control{margin-top:-9px;font-size:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:25%;float:left}@media (min-width: 57em){.player .controls-secondary{float:right;display:block}}.player .now-playing{height:70px;position:relative;font-size:12px;font-weight:bold;color:#bac1c8}@media (min-width: 57em){.player .now-playing{height:70px}}.player .now-playing a{color:#bac1c8}@media (min-width: 57em){.player .now-playing{margin-right:300px;margin-left:300px}}.player .thumb{width:70px;height:70px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.player .playing-thumb{top:0;bottom:0;left:0;position:absolute;width:70px;height:70px;z-index:10;overflow:hidden;background-color:rgba(255,255,255,0.2);background-size:cover;background-position:50% 50%}@media (min-width: 57em){.player .playing-thumb{width:70px}}@media (min-width: 57em){.player .playing-thumb{height:70px}}.player .remote-toggle{background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;display:table;width:100px;text-align:center;cursor:pointer;display:none;color:#fff;font-size:200%;text-align:center;height:70px;width:70px;font-size:300%;opacity:0.8}.player .remote-toggle:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.player .remote-toggle:before{display:table-cell;vertical-align:middle;height:100px}.player .remote-toggle:before{padding-right:5px}@media (min-width: 57em){.player .remote-toggle{height:70px}}@media (min-width: 57em){.player .remote-toggle{width:70px}}.player .remote-toggle:before{display:table-cell;vertical-align:middle;height:70px;width:70px;padding:0}@media (min-width: 57em){.player .remote-toggle:before{height:70px}}@media (min-width: 57em){.player .remote-toggle:before{width:70px}}.player .playing-info{margin-left:70px}@media (min-width: 57em){.player .playing-info{margin-left:70px}}.player .playing-time{right:0;bottom:0;position:absolute;top:20px;margin:7px 10px 0 0;text-align:right}.player .playing-meta{margin:7px 0 0 10px}.player .playing-title a,.player .playing-time-current{color:#fff;font-size:14px}.player .slider-bar{height:20px;background:rgba(255,255,255,0.1);border-top:4px solid rgba(255,255,255,0);margin:0;cursor:pointer}.player .slider-bar .noUi-base,.player .slider-bar .noUi-handle,.player .slider-bar .noUi-origin{height:20px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;top:0;border:none}.player .slider-bar .noUi-origin{background:#1F1F20;top:-4px}.player .slider-bar .noUi-handle{background:none;width:7px;left:-5px}.player .slider-bar:hover .noUi-handle{background:#6B6B6B}.player .volume{background:#36393a}.control-prev:before{content:""}.control-play:before{content:"";font-size:150%}.control-next:before{content:""}.control-mute:before{content:""}.control-repeat:before{content:""}.control-shuffle:before{content:""}.control-menu:before{content:""}.player-menu-wrapper{right:0;position:fixed;width:100%;bottom:70px;z-index:50}@media (min-width: 57em){.player-menu-wrapper{width:300px}}@media (min-width: 57em){.player-menu-wrapper{bottom:70px}}.player-menu-wrapper ul{background:#fff;-webkit-box-shadow:-1px -1px 8px rgba(0,0,0,0.1);box-shadow:-1px -1px 8px rgba(0,0,0,0.1);height:0;-webkit-transition:height 0.5s ease-in;-o-transition:height 0.5s ease-in;transition:height 0.5s ease-in}.player-menu-wrapper ul li{padding:7px 13px;cursor:pointer}.player-menu-wrapper ul li:hover{background:rgba(0,0,0,0.1)}.player-menu-wrapper.opened ul{height:auto}#player-kodi{background:#18191A}.kodi-playing #player-kodi .control-play:before{content:""}.kodi-playing #player-kodi .playing-progress{border-top-color:#12B2E7}.kodi-paused #player-kodi .control-play:before{content:""}.kodi-mute-on #player-kodi .control-mute:hover{color:#12B2E7}.kodi-mute-on #player-kodi .control-mute:before{content:""}.kodi-repeat-one #player-kodi .control-repeat{color:#fff}.kodi-repeat-one #player-kodi .control-repeat:before{content:""}.kodi-repeat-one #player-kodi .control-repeat:hover{color:#12B2E7}.kodi-repeat-all #player-kodi .control-repeat{color:#fff}.kodi-repeat-all #player-kodi .control-repeat:hover{color:#12B2E7}.kodi-shuffled-on #player-kodi .control-shuffle{color:#fff}.kodi-shuffled-on #player-kodi .control-shuffle:hover{color:#12B2E7}#player-kodi .slider-bar{background:#2a2b2c}#player-kodi .slider-bar .noUi-origin{background:#161717}#player-local{background:#313233}.local-playing #player-local .control-play:before{content:""}.local-playing #player-local .playing-progress{border-top-color:#DB2464}.local-paused #player-local .control-play:before{content:""}.local-mute-on #player-local .control-mute:hover{color:#DB2464}.local-mute-on #player-local .control-mute:before{content:""}.local-repeat-one #player-local .control-repeat{color:#fff}.local-repeat-one #player-local .control-repeat:before{content:""}.local-repeat-one #player-local .control-repeat:hover{color:#DB2464}.local-repeat-all #player-local .control-repeat{color:#fff}.local-repeat-all #player-local .control-repeat:hover{color:#DB2464}.local-shuffled-on #player-local .control-shuffle{color:#fff}.local-shuffled-on #player-local .control-shuffle:hover{color:#DB2464}#player-local .slider-bar{background:#414243}#player-local .slider-bar .noUi-origin{background:#2c2d2e}.playlist-items li{border-bottom:1px solid rgba(255,255,255,0.1);height:34px;position:relative;color:#999}.playlist-items li a{color:#999}.playlist-items li.sortable-ghost,.playlist-items li.row-playing,.playlist-items li.row-paused,.playlist-items li:hover{height:51px;background-color:#0b0c0c}.playlist-items li.sortable-ghost .thumb,.playlist-items li.row-playing .thumb,.playlist-items li.row-paused .thumb,.playlist-items li:hover .thumb{width:50px;height:50px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.playlist-items li.sortable-ghost .subtitle,.playlist-items li.sortable-ghost .thumb,.playlist-items li.row-playing .subtitle,.playlist-items li.row-playing .thumb,.playlist-items li.row-paused .subtitle,.playlist-items li.row-paused .thumb,.playlist-items li:hover .subtitle,.playlist-items li:hover .thumb{display:block}.playlist-items li.sortable-ghost .title a,.playlist-items li.row-playing .title a,.playlist-items li.row-paused .title a,.playlist-items li:hover .title a{color:rgba(255,255,255,0.95)}.playlist-items li.row-playing,.playlist-items li.row-paused{height:80px;background-image:url('../images/row-playing-white.gif?1711106462');background-repeat:no-repeat;background-position:2px 1px}.playlist-items li.row-playing .remove,.playlist-items li.row-paused .remove{display:none !important}.playlist-items li.row-playing .thumb,.playlist-items li.row-paused .thumb{width:80px;height:80px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.playlist-items li.row-playing .thumb,.playlist-items li.row-paused .thumb{top:0;right:0;bottom:0;position:absolute;margin:0}.playlist-items li.row-playing .thumb .play,.playlist-items li.row-paused .thumb .play{display:none !important}.playlist-items li.row-playing .thumb .thumbs,.playlist-items li.row-paused .thumb .thumbs{background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;display:table;width:50px;text-align:center;cursor:pointer;display:none;color:#fff;font-size:200%;width:80px}.playlist-items li.row-playing .thumb .thumbs:before,.playlist-items li.row-paused .thumb .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.playlist-items li.row-playing .thumb .thumbs:before,.playlist-items li.row-paused .thumb .thumbs:before{display:table-cell;vertical-align:middle;height:50px}.playlist-items li.row-playing .thumb .thumbs:before,.playlist-items li.row-paused .thumb .thumbs:before{padding-right:5px}.playlist-items li.row-playing .thumb .thumbs:before,.playlist-items li.row-paused .thumb .thumbs:before{width:80px;height:80px}.playlist-items li.row-playing .thumb:hover .thumbs,.playlist-items li.row-paused .thumb:hover .thumbs{display:block}.playlist-items li.row-playing .meta,.playlist-items li.row-paused .meta{margin-right:90px;margin-left:27px}.playlist-items li.row-playing .meta .title,.playlist-items li.row-paused .meta .title{margin-top:5px;font-size:110%}.playlist-items li.row-paused{background-image:url('../images/row-pause-white.png?1711106462')}.playlist-items li.sortable-ghost{height:50px;background:rgba(255,255,255,0.3);opacity:0.5}.playlist-items li.thumbs-up .thumbs{color:#12B2E7 !important}.active-player-local .playlist-items li.thumbs-up .thumbs{color:#DB2464 !important}.playlist-items .thumb{background:transparent;overflow:hidden;letter-spacing:-0.31em;width:50px;height:50px;float:left;margin-right:10px;display:none;position:relative}.playlist-items .thumb img{display:block;vertical-align:middle;width:50px;margin-top:50%}.playlist-items .thumb .thumb{width:50px;height:50px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.playlist-items .thumb:hover .play{display:table}.playlist-items .play{background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;display:table;width:50px;text-align:center;cursor:pointer;display:none;color:#fff;font-size:200%}.playlist-items .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.playlist-items .play:before{display:table-cell;vertical-align:middle;height:50px}.playlist-items .play:before{padding-right:5px}.playlist-items .meta{margin:0 30px 0 0px;padding:9px 10px 5px 15px}.playlist-items .title,.playlist-items .subtitle{display:block;overflow:hidden;white-space:nowrap}.playlist-items .title,.playlist-items .title a{color:#bdc1c2}.playlist-items .subtitle{display:none;font-size:95%;margin-top:2px}.playlist-items .remove{top:0;right:0;bottom:0;position:absolute;display:table;width:34px;text-align:center;cursor:pointer;display:none}.playlist-items .remove:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.playlist-items .remove:before{display:table-cell;vertical-align:middle;height:50px}.playlist-items .remove:hover{font-size:120%;color:darkred}.playlist-items li:hover .remove{display:table}.playlists-wrapper{padding:1em;font-size:85%;overflow-y:auto;right:0;bottom:0;left:0;position:absolute;top:50px;z-index:500}.media-toggle{*zoom:1;background:rgba(255,255,255,0.1);margin-bottom:.5em}.media-toggle:after{content:"";display:table;clear:both}.media-toggle li{float:left;padding:5px 15px;color:#999;cursor:pointer}.playlist-bar.media-audio .media-toggle li.audio{color:#fff;background:rgba(255,255,255,0.1)}.playlist-bar.media-video .media-toggle li.video{color:#fff;background:rgba(255,255,255,0.1)}.playlist-header{background:#313233;height:50px}.playlist-header .player-toggle{display:table}.playlist-header .player-toggle li{height:50px;display:table-cell;vertical-align:middle;padding:0 2em 0 2em;color:rgba(255,255,255,0.8);cursor:pointer}.playlist-header .player-toggle li:before{margin-right:.5em;font-size:90%}.playlist-header .player-toggle li.kodi:before{content:"";display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.playlist-header .player-toggle li.local:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.active-player-kodi .playlist-header .player-toggle li.kodi{color:#12B2E7;background:#1b1c1d}.active-player-local .playlist-header .player-toggle li.local{color:#DB2464;background:#1b1c1d}.playlist-header .playlist-menu{top:0;right:0;position:absolute}.playlist-header .playlist-menu .menu-toggle{display:table;width:50px;text-align:center;cursor:pointer;color:rgba(255,255,255,0.5);font-size:150%}.playlist-header .playlist-menu .menu-toggle:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.playlist-header .playlist-menu .menu-toggle:before{display:table-cell;vertical-align:middle;height:50px}.playlist-header .playlist-menu .menu-toggle:hover{color:#fff}@media (min-width: 57em){.playlist-header .playlist-menu{right:50px}}.playlist-header .playlist-menu .dropdown-menu{background:#fff;padding:0;top:50px;margin-top:-5px}.playlist-header .playlist-menu .dropdown-menu li{padding:0;font-size:12px}.playlist-header .playlist-menu .dropdown-menu li.dropdown-header{background:rgba(0,0,0,0.1);color:rgba(0,0,0,0.6)}.playlist-header .playlist-menu .dropdown-menu li.dropdown-header,.playlist-header .playlist-menu .dropdown-menu li a{padding:0.6em 1em}.playlist-header .playlist-menu .dropdown-menu li a{color:rgba(0,0,0,0.5)}.playlist-header .playlist-menu .dropdown-menu li .party-mode i{display:none}.active-player-local.local-partymode-on .playlist-header .playlist-menu .dropdown-menu li .party-mode i,.active-player-kodi.kodi-partymode-on .playlist-header .playlist-menu .dropdown-menu li .party-mode i{display:inline-block}.active-player-kodi .kodi-playlists{display:block}.active-player-kodi .local-playlists{display:none}.active-player-local .kodi-playlists{display:none}.active-player-local .local-playlists{display:block}.playlist-page__empty{text-align:right;margin-right:1em}.playlist-page__empty h3{margin-bottom:1em}.pvr-card{background:#fff;padding:1em;margin-bottom:.5em;position:relative}.pvr-card.aired{background-color:#f0f0f0}.pvr-card.airing{background:#f4fcff}.pvr-card .title{margin-bottom:.5em}.pvr-card .entity-progress{top:auto;bottom:0}.pvr-card .entity-progress .current-progress{height:4px;background:#12b2e7}.pvr-card .plot,.pvr-card .title span{color:#888;font-size:90%}.pvr-card .plot{margin-top:.5em}.pvr-card .actions{top:.5em;right:.5em;position:absolute}.pvr-card .actions li{display:table;width:1.5em;text-align:center;cursor:pointer;color:rgba(0,0,0,0.3);float:left;font-size:140%}.pvr-card .actions li:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.pvr-card .actions li:before{display:table-cell;vertical-align:middle;height:1.5em}.pvr-card .actions li:hover{color:rgba(0,0,0,0.6)}.pvr-card .actions li.play{font-size:190%;margin-top:-5px}.pvr-card .actions li.record:before{content:""}.pvr-card .actions li.toggle-timer:before{content:""}.pvr-card.has-timer .actions li.toggle-timer,.pvr-card.has-timer .actions li.record{color:#bf0a07}#remote{display:none;position:fixed;top:0;right:0;left:0;bottom:70px;top:50px;right:0;background-color:#18191A;z-index:500;background-size:cover}.section-remote #remote{display:block}@media (min-width: 57em){#remote{bottom:70px}}.shell-playlist-closed #remote{right:0}@media (min-width: 57em){#remote{right:310px}.shell-playlist-closed #remote{right:50px}}@media (min-width: 75em){#remote{right:400px}.shell-playlist-closed #remote{right:50px}}#remote-background{top:0;right:0;bottom:360px;left:0;position:absolute;background-color:#2B2F30;background-position:50% 50%;background-size:cover}@media (min-width: 57em){#remote-background{bottom:0;z-index:1;background-color:#f5f5f5}}.kodi-remote{position:absolute;bottom:180px;left:0;right:0;font-size:1.7em;color:#6F7374;overflow:hidden;z-index:500;width:auto}@media (min-width: 57em){.kodi-remote{bottom:0}}@media (min-width: 57em){.kodi-remote{width:371px}}.kodi-remote .ibut{background:#222324}.kodi-remote .ibut:hover{color:#ccc;cursor:pointer}.kodi-remote .main-controls{background:#18191A;*zoom:1}.kodi-remote .main-controls:after{content:"";display:table;clear:both}.kodi-remote .direction{background:#222324;height:155px;margin-top:-12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:75%;float:left;position:relative;z-index:10}.kodi-remote .direction .pad{margin:5px auto;width:240px;position:relative;text-align:center}.kodi-remote .direction .pad .ibut{height:145px;position:absolute;top:0;left:80px;width:80px;font-size:125%}.kodi-remote .direction .pad .ibut.up,.kodi-remote .direction .pad .ibut.down,.kodi-remote .direction .pad .ibut.ok{height:48.3333333333px;line-height:48.3333333333px}.kodi-remote .direction .pad .ibut.down{top:96.6666666667px}.kodi-remote .direction .pad .ibut.ok{top:48.3333333333px;font-size:12px}.kodi-remote .direction .pad .ibut.left{bottom:0;left:0;line-height:145px;padding-left:20px}.kodi-remote .direction .pad .ibut.right{bottom:0;right:0;left:auto;line-height:145px;padding-right:20px}.kodi-remote .buttons{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:25%;float:right;padding:6px 8px 4px;margin-top:-20px}.kodi-remote .buttons .ibut{display:block;padding:11px 0;text-align:center;margin:1px 0 9px 0}.kodi-remote .alt-controls .row,.kodi-remote .secondary-controls{clear:both;background:#18191A;height:70px}.kodi-remote .alt-controls .row .ibut,.kodi-remote .secondary-controls .ibut{background:#222324;width:33%;padding:0;line-height:70px;font-size:1.5em;text-align:center;float:left;margin-bottom:12px}@media (min-width: 57em){.kodi-remote .alt-controls .row .ibut,.kodi-remote .secondary-controls .ibut{line-height:70px}}.kodi-remote .secondary-controls{height:auto}.kodi-remote .alt-controls .row{margin:8px 0}.kodi-remote .playing-area{height:150px;position:relative;font-size:15px;color:#838b8d}.kodi-remote .playing-area .not-playing,.kodi-remote .playing-area .playing{padding:10px 20px 35px;text-align:right}.kodi-remote .playing-area .playing{background:#3b3f40 0 0 no-repeat;background-size:cover;display:none}.kodi-remote .playing-area:after{content:"";position:absolute;left:0;bottom:0;right:0;height:24px;z-index:5}.section-remote .player .now-playing .remote-toggle,.section-remote .player .now-playing .thumb{height:75px;width:75px}.section-remote .player .controls-secondary,.section-remote .player .controls-secondary .control,.section-remote .player .controls-primary,.section-remote .player .controls-primary .control,.section-remote .player .now-playing,.section-remote .player .now-playing .thumb{height:75px}.section-remote #player-wrapper{height:250px}.section-remote .player .controls-secondary,.section-remote .player .controls-primary{display:block;margin-bottom:12px}.section-remote .player .now-playing{margin:10px 0 0 0}.section-remote .player .playing-info{margin-left:75px}@media (min-width: 57em){.section-remote #player-wrapper{height:70px}.section-remote .player .now-playing,.section-remote .player .controls-secondary,.section-remote .player .controls-primary{margin:0}.section-remote .player .now-playing,.section-remote .player .now-playing .control,.section-remote .player .controls-secondary,.section-remote .player .controls-secondary .control,.section-remote .player .controls-primary,.section-remote .player .controls-primary .control{height:70px}.section-remote .player .now-playing,.section-remote .player .now-playing .thumb,.section-remote .player .controls-secondary,.section-remote .player .controls-secondary .thumb,.section-remote .player .controls-primary,.section-remote .player .controls-primary .thumb{height:70px}.section-remote .player .now-playing .thumb,.section-remote .player .controls-secondary .thumb,.section-remote .player .controls-primary .thumb{width:70px}.section-remote .player .now-playing .playing-info,.section-remote .player .controls-secondary .playing-info,.section-remote .player .controls-primary .playing-info{margin-left:70px}.section-remote .player .now-playing{margin-left:300px;margin-right:300px}}#modal-window.style-system .modal-dialog{width:300px;min-width:300px}#search-region{background:rgba(255,255,255,0.9);height:50px;margin-left:0}@media (min-width: 57em){#search-region{display:block}}#search-region:after{content:"";height:3px;background:#12B2E7;opacity:0.3;bottom:0;left:0;position:absolute;width:0%}#search-region.pre-search:after{display:block;width:100%;-webkit-transition:2s all linear;-o-transition:2s all linear;transition:2s all linear}#search{background:none;border:none;height:50px;width:100%;outline:none;padding:0 .5em 0 50px;color:rgba(0,0,0,0.4)}@media (min-width: 57em){#search{width:200px}}#do-search{width:50px;height:50px;display:table;top:0;left:0;position:absolute}#do-search:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}#do-search:before{font-size:150%;display:table-cell;vertical-align:middle;text-align:center;color:rgba(0,0,0,0.6)}.search-page{top:50px;position:relative}@media (min-width: 57em){.search-page{top:0}}@media (min-width: 57em){.search-page__empty{text-align:right}}.search-page h2.set-header{padding-left:5px}.search-page .browser-folder-list{background:rgba(255,255,255,0.7)}.search-page-layout .search-media-links a{text-transform:capitalize}.search-page-layout .region-content{padding:0}.set-page{padding:.5em 1.5em 1em}.set-page .entity-set .set-header{margin:1em 0 .5em;text-transform:capitalize;font-size:22px}.set-page .entity-set .more a{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#12B2E7;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.set-page .entity-set .more a .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.set-page .entity-set .more a .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#0012B2E7', endColorstr='#FF12B2E7');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzEyYjJlNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxMmIyZTciLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(18,178,231,0)),color-stop(100%, #12b2e7));background-image:-moz-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:-webkit-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:linear-gradient(to right, rgba(18,178,231,0) 0%,#12b2e7 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.set-page .entity-set .more a:hover{color:#fff}.set-page .entity-set .more a:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.set-page .entity-set .more a:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.set-page .entity-set .more a:hover:before{color:#fff}.set-page .entity-set-song .set-results{padding:5px}.set-page .entity-set-loading #loading-page{left:0;right:0;position:relative}.set-page .entity-set-loading .spinner-double-section-far,.set-page .entity-set-loading h2{top:5em}.set-page .entity-set-loading h2{margin-top:5em !important}.landing-set .set__actions{top:.75em;right:1em;position:absolute;z-index:20}.landing-set .set__actions i{display:table;width:1.5em;text-align:center;cursor:pointer}.landing-set .set__actions i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.landing-set .set__actions i:before{display:table-cell;vertical-align:middle;height:1.5em}.landing-set .set__more{margin-top:-2em}.landing-set .set__more a{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#12B2E7;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.landing-set .set__more a .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.landing-set .set__more a .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#0012B2E7', endColorstr='#FF12B2E7');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzEyYjJlNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxMmIyZTciLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(18,178,231,0)),color-stop(100%, #12b2e7));background-image:-moz-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:-webkit-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:linear-gradient(to right, rgba(18,178,231,0) 0%,#12b2e7 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.landing-set .set__more a:hover{color:#fff}.landing-set .set__more a:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.landing-set .set__more a:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.landing-set .set__more a:hover:before{color:#fff}.section-content .set h2{margin-bottom:.25em}.settings-page .region-content{padding:0;padding-bottom:70px}@media (min-width: 57em){.settings-page .region-content{padding-bottom:70px}}.settings-form .form-group{padding-bottom:1.5em;margin-bottom:0;*zoom:1}.settings-form .form-group:after{content:"";display:table;clear:both}@media (min-width: 45em){.settings-form .form-group .control-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:42.8571428571%;float:left;padding:5px 2em .5em 0}.settings-form .form-group .element{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:57.1428571429%;float:right}}.settings-form .group-title{margin-top:.5em;margin-bottom:1em;padding-bottom:.5em;color:#12B2E7;display:inline-block}.settings-form .group-title i{color:rgba(136,136,136,0.7)}@media (min-width: 57em){.settings-form .form-items{margin:0 4em 0 2em}}.settings-form footer{color:rgba(255,255,255,0.7);border-top:1px solid #C8C8C8;background:#2B2E2F;padding:1em}@media (min-width: 57em){.settings-form footer{padding:1em 2em}}.settings-form .togglebutton{margin-top:4px}.settings-form .togglebutton label .toggle:after{top:-3px}.settings-form-draggable .form-groups .draggable-row{position:relative;border-bottom:1px solid rgba(221,221,221,0.6);padding:1em 2em .5em .5em}@media (min-width: 57em){.settings-form-draggable .form-groups .draggable-row{cursor:move;padding-right:1em}}.settings-form-draggable .form-groups .draggable-row:nth-child(even){background:rgba(229,229,229,0.2)}.settings-form-draggable .form-groups .draggable-row .form-group{padding-bottom:.5em}.settings-form-draggable .form-groups .draggable-row .control-label{cursor:move;position:relative;display:block}.settings-form-draggable .form-groups .draggable-row .control-label i{margin-left:.5em;font-weight:normal;font-size:1.3em;position:absolute;right:.5em;top:.5em;opacity:0.9}.settings-form-draggable .form-groups .draggable-row .remove-item{top:0;right:0;position:absolute;padding:.5em .5em .25em;color:#921212;font-size:1.5em;cursor:pointer;opacity:0.5}@media (min-width: 57em){.settings-form-draggable .form-groups .draggable-row .remove-item{display:none}}.settings-form-draggable .form-groups .draggable-row .remove-item:hover{opacity:0.9}.settings-form-draggable .form-groups .draggable-row:hover .remove-item{display:block}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{border:#ddd}::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2);cursor:pointer}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.4)}body,body.model-open{overflow-y:scroll}#logo{top:0;left:0;position:fixed;height:50px;width:50px;display:table;z-index:100;-webkit-perspective:1000;overflow:hidden;text-align:center;color:#12B2E7;font-size:2em}#logo:before{content:"";display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.loading #logo{-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-animation:pulsate 2s linear;-o-animation:pulsate 2s linear;animation:pulsate 2s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-font-smoothing:subpixel-antialiased}#logo:before{display:table-cell;vertical-align:middle}#page-title .title{padding-left:50px;display:none}@media (min-width: 57em){#page-title .title{display:inline-block}}#fanart,#fanart-overlay{top:50px;bottom:0;position:fixed;bottom:70px;right:0;left:0}@media (min-width: 57em){#fanart,#fanart-overlay{bottom:70px}}.shell-playlist-closed #fanart,.shell-playlist-closed #fanart-overlay{right:0}@media (min-width: 57em){#fanart,#fanart-overlay{right:310px}.shell-playlist-closed #fanart,.shell-playlist-closed #fanart-overlay{right:50px}}@media (min-width: 75em){#fanart,#fanart-overlay{right:400px}.shell-playlist-closed #fanart,.shell-playlist-closed #fanart-overlay{right:50px}}@media (min-width: 57em){#fanart,#fanart-overlay{left:50px}}#fanart{background-color:#E0DFDF;background-size:cover;background-position:50% 50%;z-index:-10}#fanart-overlay{z-index:-9;background-color:rgba(224,223,223,0.7)}.section-home #fanart-overlay{display:none}#main{*zoom:1;margin:50px 0 50px 0;margin-right:0;padding-bottom:70px}#main:after{content:"";display:table;clear:both}.shell-playlist-closed #main{margin-right:0}@media (min-width: 57em){#main{margin-right:310px}.shell-playlist-closed #main{margin-right:50px}}@media (min-width: 75em){#main{margin-right:400px}.shell-playlist-closed #main{margin-right:50px}}@media (min-width: 57em){#main{padding-bottom:70px}}@media (min-width: 57em){#main{margin-left:50px;margin-bottom:0}}.shell-playlist-closed #main{margin-right:0}@media (min-width: 57em){.shell-playlist-closed #main{margin-right:50px}}@media (min-width: 75em){.shell-playlist-closed #main{margin-right:50px}}#sidebar-two{top:0;right:0;bottom:0;left:0;position:fixed;background:#1b1c1d;z-index:50;top:50px;display:none;width:0;width:auto;bottom:70px}body.page-playlist #sidebar-two{display:block}@media (min-width: 57em){#sidebar-two{left:auto;top:0;display:block}}.shell-playlist-closed #sidebar-two{width:0}@media (min-width: 57em){#sidebar-two{width:310px}.shell-playlist-closed #sidebar-two{width:50px}}@media (min-width: 75em){#sidebar-two{width:400px}.shell-playlist-closed #sidebar-two{width:50px}}@media (min-width: 57em){#sidebar-two{bottom:70px}}#sidebar-two #playlist-summary{display:none}#sidebar-two .playlist-toggle-open{top:0;right:0;position:absolute;width:50px;height:50px;display:table;width:50px;text-align:center;cursor:pointer;display:table;cursor:pointer;display:none;text-align:center}#sidebar-two .playlist-toggle-open:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}#sidebar-two .playlist-toggle-open:before{display:table-cell;vertical-align:middle;height:50px}#sidebar-two .playlist-toggle-open:before{-webkit-transition:all 0.4s linear;-o-transition:all 0.4s linear;transition:all 0.4s linear;display:table-cell;vertical-align:middle;text-align:center;font-size:150%;color:rgba(255,255,255,0.5)}@media (min-width: 57em){#sidebar-two .playlist-toggle-open{display:table}}.shell-playlist-closed #sidebar-two{width:0}.shell-playlist-closed #sidebar-two .playlist-toggle-open:before{-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}@media (min-width: 57em){.shell-playlist-closed #sidebar-two{width:50px}}@media (min-width: 75em){.shell-playlist-closed #sidebar-two{width:50px}}.shell-playlist-closed #sidebar-two #playlist-bar{display:none}.shell-playlist-closed #sidebar-two #playlist-summary{display:block}#offscreen{display:none}#disconnected{top:0;right:0;bottom:0;left:0;position:fixed;background:rgba(0,0,0,0.7);z-index:9999999;display:none}.lost-connection #disconnected{display:block}#disconnected i{font-size:300%;color:#12B2E7;margin:10px 0 5px}#disconnected h2{margin:.5em 0;font-size:2em}#disconnected .message{max-width:400px;width:95%;margin:10% auto 0;background:#fff;border-radius:5px;padding:1em;text-align:center}#disconnected .btn{color:#fff}#disconnected .btn:hover{background:#12B2E7}.reconnecting #disconnected .try-connect{display:none}#disconnected .load-connect{display:none}.reconnecting #disconnected .load-connect{display:block}#snackbar-container{position:fixed;z-index:50;right:0;bottom:70px;margin-bottom:-10px}@media (min-width: 57em){#snackbar-container{bottom:70px}}.snackbar{overflow:hidden;clear:both;cursor:pointer;opacity:0;min-width:0;max-width:600px}.shell-playlist-closed .snackbar{min-width:0}@media (min-width: 57em){.snackbar{min-width:310px}.shell-playlist-closed .snackbar{min-width:50px}}@media (min-width: 75em){.snackbar{min-width:400px}.shell-playlist-closed .snackbar{min-width:50px}}.snackbar.snackbar-opened{height:auto;opacity:1}@media (max-width: 767px){#snackbar-container{left:0px !important;right:0px;width:100%}#snackbar-container .snackbar{min-width:100%}#snackbar-container [class="snackbar snackbar-opened"] ~ .snackbar.toast{margin-top:20px}#snackbar-container [class="snackbar snackbar-opened"]{border-radius:0;margin-bottom:0}}.snackbar{background-color:rgba(255,255,255,0.95);color:#2B2F30;font-size:14px;border-radius:0px;box-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24);height:0;-moz-transition:-moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;-webkit-transition:-webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;transition:transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;-moz-transform:translateY(200%);-webkit-transform:translateY(200%);transform:translateY(200%)}.snackbar.snackbar-opened{padding:14px 15px;margin:0 0 10px 0;height:auto;-moz-transition:-moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s;-webkit-transition:-webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s;transition:transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;-moz-transform:none;-webkit-transform:none;transform:none}.songs-table tr.song{cursor:pointer;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.songs-table tr.song.ph td{height:40px}.songs-table tr.song td{vertical-align:middle;position:relative;border-bottom:1px solid rgba(139,139,139,0.05)}.songs-table tr.song td.song-title{width:60%}.songs-table tr.song td.song-artist{width:40%}.songs-table tr.song .crop{position:relative;white-space:nowrap;overflow:hidden;display:block;height:18px;white-space:normal}.songs-table tr.song .crop:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00E0DFDF', endColorstr='#FFE0DFDF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UwZGZkZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlMGRmZGYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(224,223,223,0)),color-stop(100%, #e0dfdf));background-image:-moz-linear-gradient(left, rgba(224,223,223,0) 0%,#e0dfdf 100%);background-image:-webkit-linear-gradient(left, rgba(224,223,223,0) 0%,#e0dfdf 100%);background-image:linear-gradient(to right, rgba(224,223,223,0) 0%,#e0dfdf 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.region-album-songs .songs-table tr.song .crop:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00F5F5F5', endColorstr='#FFF5F5F5');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZjVmNSIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(245,245,245,0)),color-stop(100%, #f5f5f5));background-image:-moz-linear-gradient(left, rgba(245,245,245,0) 0%,#f5f5f5 100%);background-image:-webkit-linear-gradient(left, rgba(245,245,245,0) 0%,#f5f5f5 100%);background-image:linear-gradient(to right, rgba(245,245,245,0) 0%,#f5f5f5 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.songs-table tr.song a{color:rgba(43,47,48,0.7)}.songs-table tr.song a:hover{color:#2B2F30}.songs-table tr.song .play,.songs-table tr.song .play:before,.songs-table tr.song .cell-first{width:40px;height:40px}.songs-table tr.song .play{top:0;left:0;position:absolute;display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;display:none;font-size:200%}.songs-table tr.song .play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.songs-table tr.song .play:before{display:table-cell;vertical-align:middle}.songs-table tr.song .play:hover{color:#2B2F30}.songs-table tr.song .thumb{width:39px;height:39px;background-position:50% 50%;background-color:transparent;display:block;background-size:cover;background-repeat:no-repeat}.songs-table tr.song .thumb{top:0px;bottom:1px;left:0;position:absolute;display:none}.songs-table tr.song .add{font-size:140%}.songs-table tr.song .add:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.songs-table tr.song .thumbed-up,.songs-table tr.song .thumbs{font-size:140%}.songs-table tr.song .thumbed-up:before,.songs-table tr.song .thumbs:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.disable-thumbs .songs-table tr.song .thumbed-up,.disable-thumbs .songs-table tr.song .thumbs{display:none}.songs-table tr.song .thumbed-up{top:0px;right:90px;position:absolute;margin-right:-2px;display:none;opacity:0.4}.songs-table tr.song .thumbed-up:before{display:table-cell;vertical-align:middle;width:40px;height:40px}.songs-table tr.song.thumbs-up .thumbed-up{display:table}.songs-table tr.song.thumbs-up .thumbs{color:#12B2E7}.songs-table tr.song .menu i{font-size:150%}.songs-table tr.song .menu i:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.songs-table tr.song .menu .dropdown-menu{top:0}.songs-table tr.song .actions{top:0;right:0px;bottom:0;position:absolute;display:none;width:90px}.songs-table tr.song .actions>li{width:30px;text-align:center;float:left}.songs-table tr.song .actions>li i:before,.songs-table tr.song .actions>li:before{display:table-cell;vertical-align:middle;width:30px;height:40px;color:#999;cursor:pointer}.songs-table tr.song.menu-open .crop,.songs-table tr.song:hover .crop{white-space:normal}.songs-table tr.song.menu-open .duration,.songs-table tr.song.menu-open .track,.songs-table tr.song:hover .duration,.songs-table tr.song:hover .track{display:none}.songs-table tr.song.menu-open .play,.songs-table tr.song.menu-open .actions,.songs-table tr.song:hover .play,.songs-table tr.song:hover .actions{display:block}.songs-table tr.song.menu-open .thumbed-up,.songs-table tr.song:hover .thumbed-up{display:none}.songs-table tr.song .song-artist{display:none}@media (min-width: 57em){.songs-table tr.song .song-artist{display:table-cell}}.songs-table tr.song .song-album{display:none}.songs-table tr.song.selected{border-left:1px solid #12B2E7;background:#e2f6fd}.songs-table tr.song.selected .crop:after{display:none}.active-player-local .songs-table tr.song.selected{border-left:1px solid #DB2464;background:#fbe9f0}.songs-table tr.song .cell-remove{display:none;padding-top:12px;padding-bottom:0}.songs-table tr.song.sortable-ghost{height:40px;background:#ddd}.songs-table tr.song.sortable-ghost td{opacity:0}.songs-table tr.song.sortable-ghost .play{display:none}.songs-table.verbose .track{margin-left:47px}.songs-table.verbose .play{background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;color:#fff}.songs-table.verbose tr.song .thumb{display:block}.songs-table.verbose tr.song td.song-album{width:30%}@media (min-width: 57em){.songs-table.verbose tr.song td.song-album{display:table-cell}}.songs-table.verbose tr.song td.song-title{width:80%}@media (min-width: 57em){.songs-table.verbose tr.song td.song-title{width:45%}}.songs-table.verbose tr.song td.song-artist{width:25%}.songs-table.verbose tr.song:hover .play{width:39px;height:39px}.songs-table.verbose tr.song:hover .play:hover{color:#fff}.songs-table.verbose tr.song:hover .track{display:block}.local-playlist .songs-table.verbose tr.song:hover .cell-remove{opacity:1;color:darkred}.local-playlist .songs-table.verbose tr.song:hover .cell-remove i:before{content:""}.songs-table.verbose tr.song.local-row-playing .track,.songs-table.verbose tr.song.local-row-paused .track,.songs-table.verbose tr.song.kodi-row-playing .track,.songs-table.verbose tr.song.kodi-row-paused .track{text-indent:0;background:none}.songs-table.verbose tr.song.local-row-playing .thumb,.songs-table.verbose tr.song.local-row-paused .thumb,.songs-table.verbose tr.song.kodi-row-playing .thumb,.songs-table.verbose tr.song.kodi-row-paused .thumb{background:url('../images/row-pause-blue.png?1711106462') 0 50% no-repeat !important;background-size:initial}.songs-table.verbose tr.song.local-row-playing .play,.songs-table.verbose tr.song.local-row-paused .play,.songs-table.verbose tr.song.kodi-row-playing .play,.songs-table.verbose tr.song.kodi-row-paused .play{display:none}.songs-table.verbose tr.song.kodi-row-playing .thumb{background-image:url('../images/row-playing-blue.gif?1711106462') !important}.songs-table.verbose tr.song.local-row-playing .thumb{background-image:url('../images/row-playing-pink.gif?1711106462') !important}.songs-table.verbose tr.song.local-row-paused .thumb{background-image:url('../images/row-pause-pink.png?1711106462') !important}.local-playlist .songs-table.verbose tr.song .cell-remove{display:block;opacity:0.3}.songs-table.basic .thumb{display:none}.songs-table tr.song.local-row-playing,.songs-table tr.song.local-row-paused,.songs-table tr.song.kodi-row-playing,.songs-table tr.song.kodi-row-paused{background:rgba(255,255,255,0.9) !important}.songs-table tr.song.local-row-playing:hover td .crop:after,.songs-table tr.song.local-row-playing td .crop:after,.songs-table tr.song.local-row-paused:hover td .crop:after,.songs-table tr.song.local-row-paused td .crop:after,.songs-table tr.song.kodi-row-playing:hover td .crop:after,.songs-table tr.song.kodi-row-playing td .crop:after,.songs-table tr.song.kodi-row-paused:hover td .crop:after,.songs-table tr.song.kodi-row-paused td .crop:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.songs-table tr.song.local-row-playing .track,.songs-table tr.song.local-row-paused .track,.songs-table tr.song.kodi-row-playing .track,.songs-table tr.song.kodi-row-paused .track{background:url('../images/row-pause-blue.png?1711106462') 50% 50% no-repeat;text-indent:-99999px}.songs-table tr.song.local-row-paused .track{background:url('../images/row-pause-pink.png?1711106462') 50% 50% no-repeat}.songs-table tr.song.local-row-playing .track,.songs-table tr.song.kodi-row-playing .track{background-image:url('../images/row-playing-blue.gif?1711106462')}.songs-table tr.song.local-row-playing .track{background-image:url('../images/row-playing-pink.gif?1711106462')}.box-loading{max-width:50em;margin-left:auto;margin-right:auto;width:95%;background:#FAFAFA url('../images/loading-box-bg.jpg?1711106462') 0 bottom repeat-x;-webkit-animation:wave 16s infinite linear;-o-animation:wave 16s infinite linear;animation:wave 16s infinite linear;margin-top:1em;padding:1em;text-align:center;font-size:28px}.box-loading:after{content:" ";display:block;clear:both}.table-row .cell-first{width:40px;min-width:40px;text-align:center;color:rgba(43,47,48,0.5);font-size:95%}.table-row .cell-last{width:80px;min-width:80px;text-align:right;color:rgba(43,47,48,0.5);font-size:95%}.content-tabs li{display:inline-block;padding:1em 2em}.content-tabs li.active{background:rgba(43,47,48,0.05)}.content-tabs li a{color:rgba(102,102,102,0.7)}.content-tabs li a.active{color:#2B2F30}.tab-content{background:rgba(43,47,48,0.05);padding:2em;margin-right:20%;color:#888}.tvshow-show .card-season .thumbs{display:none !important}.streams-short{text-align:center}.streams-short li{display:inline-block;font-size:170%;color:rgba(43,47,48,0.4);padding:0 .5em}.trailer{position:relative;cursor:pointer}@media (min-width: 45em){.trailer{max-width:238px;float:left;margin-right:2em}}.trailer:hover:after{content:"Watch trailer";background:rgba(0,0,0,0.55);top:0;right:0;bottom:0;left:0;position:absolute;top:0;right:0;bottom:0;left:0;position:absolute;color:#fff;text-align:center;padding-top:30%;font-size:150%}.cast-full{height:141px;white-space:nowrap;overflow-y:auto}.cast-full>li{width:80px;display:inline-block;margin:0 0.6em 0 0;position:relative}.cast-full>li a{color:#2B2F30}.cast-full>li img{-webkit-filter:grayscale(100%);filter:grayscale(100%);opacity:0.8}.cast-full>li .thumb{background:#CBCBCB;overflow:hidden;letter-spacing:-0.31em;width:80px;height:105px}.cast-full>li .thumb img{display:block;vertical-align:middle;width:80px;margin-top:0}.cast-full>li .thumb .thumb{width:80px;height:105px;background-position:50% 0;background-color:#CBCBCB;display:block;background-size:cover;background-repeat:no-repeat}.cast-full>li strong{font-weight:normal}.cast-full>li span{font-size:85%;color:#666}.cast-full>li span,.cast-full>li strong{position:relative;white-space:nowrap;overflow:hidden;display:block}.cast-full>li span:after,.cast-full>li strong:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.cast-full>li .meta{position:absolute;bottom:0;z-index:20;background:#fff;padding:4px;right:0;left:0;display:none}.cast-full>li:hover img{-webkit-filter:grayscale(0%);filter:grayscale(0%);opacity:1}.cast-full>li:hover .actions{display:block}.cast-full>li .actions{bottom:4px;left:4px;position:absolute;display:none}.cast-full>li .actions li{border-radius:3px;float:left;width:15px;height:15px;cursor:pointer;font-size:1.25em;margin-right:5px;opacity:0.7}.cast-full>li .actions li:hover{opacity:1}.cast-full>li .actions li:before{display:block !important}.cast-full>li .actions li.google{color:#4285f4;font-size:1.15em;background:#fff}.cast-full>li .actions li.google:before{content:"";display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.cast-full>li .actions li.imdb{color:#e3b922;background:#000}.cast-full>li .actions li.imdb:before{content:"";display:inline-block;font-family:"icomoon";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.imdblink{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.imdblink .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.imdblink .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.imdblink:hover{color:#fff}.imdblink:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.imdblink:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.imdblink:hover:before{color:#fff}.btn-flat-play{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:#12B2E7;padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-play .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-play .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#0012B2E7', endColorstr='#FF12B2E7');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzEyYjJlNyIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxMmIyZTciLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(18,178,231,0)),color-stop(100%, #12b2e7));background-image:-moz-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:-webkit-linear-gradient(left, rgba(18,178,231,0) 0%,#12b2e7 100%);background-image:linear-gradient(to right, rgba(18,178,231,0) 0%,#12b2e7 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-play:hover{color:#fff}.btn-flat-play:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-play:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-play:hover:before{color:#fff}.btn-flat-add{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-add .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-add .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-add:hover{color:#fff}.btn-flat-add:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-add:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-add:hover:before{color:#fff}.btn-flat-stream{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-stream .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-stream .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-stream:hover{color:#fff}.btn-flat-stream:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-stream:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-stream:hover:before{color:#fff}.btn-flat-download{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-download .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-download .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-download:hover{color:#fff}.btn-flat-download:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-download:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-download:hover:before{color:#fff}.btn-flat-more{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-more .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-more .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-more:hover{color:#fff}.btn-flat-more:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-more:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-more:hover:before{color:#fff}.btn-flat-watched{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(255,255,255,0.1);padding:.5em 1em;position:relative;cursor:pointer;margin:0 .5em .5em 0;color:#fff;text-transform:capitalize;padding-right:2.5em}.btn-flat-watched .text{position:relative;white-space:nowrap;overflow:hidden;display:block}.btn-flat-watched .text:after{content:"";*zoom:1;filter:progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#00FFFFFF', endColorstr='#1AFFFFFF');background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA=');background-size:100%;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255,255,255,0)),color-stop(100%, #ffffff));background-image:-moz-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%,#ffffff 100%);background-image:linear-gradient(to right, rgba(255,255,255,0) 0%,#ffffff 100%);top:0;right:0;bottom:0;position:absolute;width:1.5em}.btn-flat-watched:hover{color:#fff}.btn-flat-watched:before{content:"";display:inline-block;font-family:"Material-Design-Icons";font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;font-variant:normal;text-transform:none}.btn-flat-watched:before{top:9px;right:.5em;position:absolute;color:rgba(255,255,255,0.5);font-size:110%}.btn-flat-watched:hover:before{color:#fff}.btn-flat-watched .action-watched{display:inline}.btn-flat-watched .action-unwatched{display:none}.is-watched .btn-flat-watched .action-watched{display:none}.is-watched .btn-flat-watched .action-unwatched{display:inline}.entity-progress{top:-2px;right:0;left:0;position:absolute;z-index:10}.entity-progress .current-progress{-webkit-transition:width 0.3s linear;-o-transition:width 0.3s linear;transition:width 0.3s linear;height:3px;background:#12B2E7}.season-show .card .show-name,.season-show .card .ep-num{display:none}.landing-page .card .ep-num-full{display:none}.lab--items h3{margin-bottom:2em;font-size:1.3em;margin-top:0}.lab-item{padding:1em;background:rgba(0,0,0,0.05);display:block;margin-bottom:.5em}.lab-item p{color:#2B2F30}.lab-item:hover{background:rgba(0,0,0,0.1)}.api-browser--methods{padding:1em}.api-browser--method{padding:.5em 0 0}.api-browser--method h4{font-size:1.05em;margin:0 0 .25em 0}.api-browser--method p{font-size:90%;opacity:0.5;height:0;overflow:hidden;margin:0 0 .25em}.api-browser--method .api-method--item{border-bottom:1px solid #ddd;cursor:pointer}.api-browser--method:hover h4{color:#12B2E7;font-weight:700}.api-browser--method:hover p{height:100%}.api-browser--page{padding:0 .5em;margin-bottom:2em}.api-browser--page .description{font-size:90%;opacity:0.6}.api-method--execute{max-width:58em}.api-method--execute textarea{display:block;width:100%;margin:.5em 0;padding:.5em;height:200px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #ddd}.api-browser--content{margin:2em 0}.json-syntax-highlight{background:rgba(245,245,245,0.74)}.json-syntax-highlight .string{color:green}.json-syntax-highlight .number{color:darkorange}.json-syntax-highlight .boolean{color:blue}.json-syntax-highlight .null{color:#bd09bd}.json-syntax-highlight .key{color:#bb1313}.icon-browser{max-width:none;background:rgba(255,255,255,0.5)}.icon-browser h3{padding-bottom:.5em;border-bottom:1px solid #ddd;margin-bottom:.5em}.icon-browser i{font-size:3.1em;margin-right:.25em;float:left}.icon-browser li{border-radius:5px;width:210px;padding:.5em;margin:.5em;overflow:hidden;float:left;height:65px;position:relative}.icon-browser li span{display:block;font-size:85%}.icon-browser li small{right:0;bottom:0;left:0;position:absolute;padding:4px;background:rgba(153,153,153,0.5);text-align:center;display:none}.icon-browser li:hover{background:#fff}.icon-browser li:hover small{display:block} +@charset "UTF-8"; +/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * Add the correct display in IE. + */ +main { + display: block; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Links + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/* Text-level semantics + ========================================================================== */ +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + */ +button { + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} + +button, +[type=button], +[type=reset], +[type=submit] { + /** + * Remove the inner border and padding in Firefox. + */ + /** + * Restore the focus styles unset by the previous rule. + */ +} +button::-moz-focus-inner, +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} +button:-moz-focusring, +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Show the overflow in Edge. + */ +input { + overflow: visible; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type=checkbox], +[type=radio] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type=search] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + /** + * Remove the inner padding in Chrome and Safari on macOS. + */ +} +[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; /* 1 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + color: inherit; /* 2 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +@-moz-keyframes flash { + 0% { + opacity: 1; + } + 25% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes flash { + 0% { + opacity: 1; + } + 25% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-o-keyframes flash { + 0% { + opacity: 1; + } + 25% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-ms-keyframes flash { + 0% { + opacity: 1; + } + 25% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes flash { + 0% { + opacity: 1; + } + 25% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-moz-keyframes bounce { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 50% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 60% { + -webkit-transform: translateY(-15px); + -moz-transform: translateY(-15px); + -ms-transform: translateY(-15px); + -o-transform: translateY(-15px); + transform: translateY(-15px); + } + 80% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes bounce { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 50% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 60% { + -webkit-transform: translateY(-15px); + -moz-transform: translateY(-15px); + -ms-transform: translateY(-15px); + -o-transform: translateY(-15px); + transform: translateY(-15px); + } + 80% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes bounce { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 50% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 60% { + -webkit-transform: translateY(-15px); + -moz-transform: translateY(-15px); + -ms-transform: translateY(-15px); + -o-transform: translateY(-15px); + transform: translateY(-15px); + } + 80% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-ms-keyframes bounce { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 50% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 60% { + -webkit-transform: translateY(-15px); + -moz-transform: translateY(-15px); + -ms-transform: translateY(-15px); + -o-transform: translateY(-15px); + transform: translateY(-15px); + } + 80% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes bounce { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 50% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 60% { + -webkit-transform: translateY(-15px); + -moz-transform: translateY(-15px); + -ms-transform: translateY(-15px); + -o-transform: translateY(-15px); + transform: translateY(-15px); + } + 80% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes shake { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 20% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 30% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 40% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 50% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 60% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 70% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 90% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes shake { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 20% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 30% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 40% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 50% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 60% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 70% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 90% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes shake { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 20% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 30% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 40% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 50% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 60% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 70% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 90% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-ms-keyframes shake { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 20% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 30% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 40% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 50% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 60% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 70% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 90% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes shake { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 10% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 20% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 30% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 40% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 50% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 60% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 70% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 90% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes tada { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 10% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 50% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 60% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 70% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -moz-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + -o-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} +@-webkit-keyframes tada { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 10% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 50% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 60% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 70% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -moz-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + -o-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} +@-o-keyframes tada { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 10% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 50% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 60% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 70% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -moz-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + -o-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} +@-ms-keyframes tada { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 10% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 50% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 60% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 70% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -moz-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + -o-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} +@keyframes tada { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 10% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 20% { + -webkit-transform: scale(0.9) rotate(-3deg); + -moz-transform: scale(0.9) rotate(-3deg); + -ms-transform: scale(0.9) rotate(-3deg); + -o-transform: scale(0.9) rotate(-3deg); + transform: scale(0.9) rotate(-3deg); + } + 30% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 40% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 50% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 60% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 70% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 80% { + -webkit-transform: scale(1.1) rotate(-3deg); + -moz-transform: scale(1.1) rotate(-3deg); + -ms-transform: scale(1.1) rotate(-3deg); + -o-transform: scale(1.1) rotate(-3deg); + transform: scale(1.1) rotate(-3deg); + } + 90% { + -webkit-transform: scale(1.1) rotate(3deg); + -moz-transform: scale(1.1) rotate(3deg); + -ms-transform: scale(1.1) rotate(3deg); + -o-transform: scale(1.1) rotate(3deg); + transform: scale(1.1) rotate(3deg); + } + 100% { + -webkit-transform: scale(1) rotate(0); + -moz-transform: scale(1) rotate(0); + -ms-transform: scale(1) rotate(0); + -o-transform: scale(1) rotate(0); + transform: scale(1) rotate(0); + } +} +@-moz-keyframes swing { + 20%, 40%, 60%, 80%, 100% { + -webkit-transform-origin: top center 50%; + -moz-transform-origin: top center 50%; + -ms-transform-origin: top center 50%; + -o-transform-origin: top center 50%; + transform-origin: top center 50%; + } + 20% { + -webkit-transform: rotate(15deg); + -moz-transform: rotate(15deg); + -ms-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + -o-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -moz-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + -o-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-webkit-keyframes swing { + 20%, 40%, 60%, 80%, 100% { + -webkit-transform-origin: top center 50%; + -moz-transform-origin: top center 50%; + -ms-transform-origin: top center 50%; + -o-transform-origin: top center 50%; + transform-origin: top center 50%; + } + 20% { + -webkit-transform: rotate(15deg); + -moz-transform: rotate(15deg); + -ms-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + -o-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -moz-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + -o-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-o-keyframes swing { + 20%, 40%, 60%, 80%, 100% { + -webkit-transform-origin: top center 50%; + -moz-transform-origin: top center 50%; + -ms-transform-origin: top center 50%; + -o-transform-origin: top center 50%; + transform-origin: top center 50%; + } + 20% { + -webkit-transform: rotate(15deg); + -moz-transform: rotate(15deg); + -ms-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + -o-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -moz-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + -o-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-ms-keyframes swing { + 20%, 40%, 60%, 80%, 100% { + -webkit-transform-origin: top center 50%; + -moz-transform-origin: top center 50%; + -ms-transform-origin: top center 50%; + -o-transform-origin: top center 50%; + transform-origin: top center 50%; + } + 20% { + -webkit-transform: rotate(15deg); + -moz-transform: rotate(15deg); + -ms-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + -o-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -moz-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + -o-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes swing { + 20%, 40%, 60%, 80%, 100% { + -webkit-transform-origin: top center 50%; + -moz-transform-origin: top center 50%; + -ms-transform-origin: top center 50%; + -o-transform-origin: top center 50%; + transform-origin: top center 50%; + } + 20% { + -webkit-transform: rotate(15deg); + -moz-transform: rotate(15deg); + -ms-transform: rotate(15deg); + -o-transform: rotate(15deg); + transform: rotate(15deg); + } + 40% { + -webkit-transform: rotate(-10deg); + -moz-transform: rotate(-10deg); + -ms-transform: rotate(-10deg); + -o-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 60% { + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + -o-transform: rotate(5deg); + transform: rotate(5deg); + } + 80% { + -webkit-transform: rotate(-5deg); + -moz-transform: rotate(-5deg); + -ms-transform: rotate(-5deg); + -o-transform: rotate(-5deg); + transform: rotate(-5deg); + } + 100% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-moz-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -moz-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + -o-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -moz-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + -o-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -moz-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + -o-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -moz-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + -o-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -moz-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + -o-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } +} +@-webkit-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -moz-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + -o-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -moz-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + -o-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -moz-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + -o-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -moz-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + -o-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -moz-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + -o-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } +} +@-o-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -moz-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + -o-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -moz-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + -o-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -moz-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + -o-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -moz-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + -o-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -moz-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + -o-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } +} +@-ms-keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -moz-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + -o-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -moz-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + -o-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -moz-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + -o-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -moz-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + -o-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -moz-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + -o-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } +} +@keyframes wobble { + 0% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } + 15% { + -webkit-transform: translateX(-25%) rotate(-5deg); + -moz-transform: translateX(-25%) rotate(-5deg); + -ms-transform: translateX(-25%) rotate(-5deg); + -o-transform: translateX(-25%) rotate(-5deg); + transform: translateX(-25%) rotate(-5deg); + } + 30% { + -webkit-transform: translateX(20%) rotate(3deg); + -moz-transform: translateX(20%) rotate(3deg); + -ms-transform: translateX(20%) rotate(3deg); + -o-transform: translateX(20%) rotate(3deg); + transform: translateX(20%) rotate(3deg); + } + 45% { + -webkit-transform: translateX(-15%) rotate(-3deg); + -moz-transform: translateX(-15%) rotate(-3deg); + -ms-transform: translateX(-15%) rotate(-3deg); + -o-transform: translateX(-15%) rotate(-3deg); + transform: translateX(-15%) rotate(-3deg); + } + 60% { + -webkit-transform: translateX(10%) rotate(2deg); + -moz-transform: translateX(10%) rotate(2deg); + -ms-transform: translateX(10%) rotate(2deg); + -o-transform: translateX(10%) rotate(2deg); + transform: translateX(10%) rotate(2deg); + } + 75% { + -webkit-transform: translateX(-5%) rotate(-1deg); + -moz-transform: translateX(-5%) rotate(-1deg); + -ms-transform: translateX(-5%) rotate(-1deg); + -o-transform: translateX(-5%) rotate(-1deg); + transform: translateX(-5%) rotate(-1deg); + } + 100% { + -webkit-transform: translateX(0%); + -moz-transform: translateX(0%); + -ms-transform: translateX(0%); + -o-transform: translateX(0%); + transform: translateX(0%); + } +} +@-moz-keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-o-keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-ms-keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@keyframes pulse { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 50% { + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-moz-keyframes wiggle { + 0% { + -webkit-transform: skewX(9deg); + -moz-transform: skewX(9deg); + -ms-transform: skewX(9deg); + -o-transform: skewX(9deg); + transform: skewX(9deg); + } + 10% { + -webkit-transform: skewX(-8deg); + -moz-transform: skewX(-8deg); + -ms-transform: skewX(-8deg); + -o-transform: skewX(-8deg); + transform: skewX(-8deg); + } + 20% { + -webkit-transform: skewX(7deg); + -moz-transform: skewX(7deg); + -ms-transform: skewX(7deg); + -o-transform: skewX(7deg); + transform: skewX(7deg); + } + 30% { + -webkit-transform: skewX(-6deg); + -moz-transform: skewX(-6deg); + -ms-transform: skewX(-6deg); + -o-transform: skewX(-6deg); + transform: skewX(-6deg); + } + 40% { + -webkit-transform: skewX(5deg); + -moz-transform: skewX(5deg); + -ms-transform: skewX(5deg); + -o-transform: skewX(5deg); + transform: skewX(5deg); + } + 50% { + -webkit-transform: skewX(-4deg); + -moz-transform: skewX(-4deg); + -ms-transform: skewX(-4deg); + -o-transform: skewX(-4deg); + transform: skewX(-4deg); + } + 60% { + -webkit-transform: skewX(3deg); + -moz-transform: skewX(3deg); + -ms-transform: skewX(3deg); + -o-transform: skewX(3deg); + transform: skewX(3deg); + } + 70% { + -webkit-transform: skewX(-2deg); + -moz-transform: skewX(-2deg); + -ms-transform: skewX(-2deg); + -o-transform: skewX(-2deg); + transform: skewX(-2deg); + } + 80% { + -webkit-transform: skewX(1deg); + -moz-transform: skewX(1deg); + -ms-transform: skewX(1deg); + -o-transform: skewX(1deg); + transform: skewX(1deg); + } + 90% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } + 100% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } +} +@-webkit-keyframes wiggle { + 0% { + -webkit-transform: skewX(9deg); + -moz-transform: skewX(9deg); + -ms-transform: skewX(9deg); + -o-transform: skewX(9deg); + transform: skewX(9deg); + } + 10% { + -webkit-transform: skewX(-8deg); + -moz-transform: skewX(-8deg); + -ms-transform: skewX(-8deg); + -o-transform: skewX(-8deg); + transform: skewX(-8deg); + } + 20% { + -webkit-transform: skewX(7deg); + -moz-transform: skewX(7deg); + -ms-transform: skewX(7deg); + -o-transform: skewX(7deg); + transform: skewX(7deg); + } + 30% { + -webkit-transform: skewX(-6deg); + -moz-transform: skewX(-6deg); + -ms-transform: skewX(-6deg); + -o-transform: skewX(-6deg); + transform: skewX(-6deg); + } + 40% { + -webkit-transform: skewX(5deg); + -moz-transform: skewX(5deg); + -ms-transform: skewX(5deg); + -o-transform: skewX(5deg); + transform: skewX(5deg); + } + 50% { + -webkit-transform: skewX(-4deg); + -moz-transform: skewX(-4deg); + -ms-transform: skewX(-4deg); + -o-transform: skewX(-4deg); + transform: skewX(-4deg); + } + 60% { + -webkit-transform: skewX(3deg); + -moz-transform: skewX(3deg); + -ms-transform: skewX(3deg); + -o-transform: skewX(3deg); + transform: skewX(3deg); + } + 70% { + -webkit-transform: skewX(-2deg); + -moz-transform: skewX(-2deg); + -ms-transform: skewX(-2deg); + -o-transform: skewX(-2deg); + transform: skewX(-2deg); + } + 80% { + -webkit-transform: skewX(1deg); + -moz-transform: skewX(1deg); + -ms-transform: skewX(1deg); + -o-transform: skewX(1deg); + transform: skewX(1deg); + } + 90% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } + 100% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } +} +@-o-keyframes wiggle { + 0% { + -webkit-transform: skewX(9deg); + -moz-transform: skewX(9deg); + -ms-transform: skewX(9deg); + -o-transform: skewX(9deg); + transform: skewX(9deg); + } + 10% { + -webkit-transform: skewX(-8deg); + -moz-transform: skewX(-8deg); + -ms-transform: skewX(-8deg); + -o-transform: skewX(-8deg); + transform: skewX(-8deg); + } + 20% { + -webkit-transform: skewX(7deg); + -moz-transform: skewX(7deg); + -ms-transform: skewX(7deg); + -o-transform: skewX(7deg); + transform: skewX(7deg); + } + 30% { + -webkit-transform: skewX(-6deg); + -moz-transform: skewX(-6deg); + -ms-transform: skewX(-6deg); + -o-transform: skewX(-6deg); + transform: skewX(-6deg); + } + 40% { + -webkit-transform: skewX(5deg); + -moz-transform: skewX(5deg); + -ms-transform: skewX(5deg); + -o-transform: skewX(5deg); + transform: skewX(5deg); + } + 50% { + -webkit-transform: skewX(-4deg); + -moz-transform: skewX(-4deg); + -ms-transform: skewX(-4deg); + -o-transform: skewX(-4deg); + transform: skewX(-4deg); + } + 60% { + -webkit-transform: skewX(3deg); + -moz-transform: skewX(3deg); + -ms-transform: skewX(3deg); + -o-transform: skewX(3deg); + transform: skewX(3deg); + } + 70% { + -webkit-transform: skewX(-2deg); + -moz-transform: skewX(-2deg); + -ms-transform: skewX(-2deg); + -o-transform: skewX(-2deg); + transform: skewX(-2deg); + } + 80% { + -webkit-transform: skewX(1deg); + -moz-transform: skewX(1deg); + -ms-transform: skewX(1deg); + -o-transform: skewX(1deg); + transform: skewX(1deg); + } + 90% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } + 100% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } +} +@-ms-keyframes wiggle { + 0% { + -webkit-transform: skewX(9deg); + -moz-transform: skewX(9deg); + -ms-transform: skewX(9deg); + -o-transform: skewX(9deg); + transform: skewX(9deg); + } + 10% { + -webkit-transform: skewX(-8deg); + -moz-transform: skewX(-8deg); + -ms-transform: skewX(-8deg); + -o-transform: skewX(-8deg); + transform: skewX(-8deg); + } + 20% { + -webkit-transform: skewX(7deg); + -moz-transform: skewX(7deg); + -ms-transform: skewX(7deg); + -o-transform: skewX(7deg); + transform: skewX(7deg); + } + 30% { + -webkit-transform: skewX(-6deg); + -moz-transform: skewX(-6deg); + -ms-transform: skewX(-6deg); + -o-transform: skewX(-6deg); + transform: skewX(-6deg); + } + 40% { + -webkit-transform: skewX(5deg); + -moz-transform: skewX(5deg); + -ms-transform: skewX(5deg); + -o-transform: skewX(5deg); + transform: skewX(5deg); + } + 50% { + -webkit-transform: skewX(-4deg); + -moz-transform: skewX(-4deg); + -ms-transform: skewX(-4deg); + -o-transform: skewX(-4deg); + transform: skewX(-4deg); + } + 60% { + -webkit-transform: skewX(3deg); + -moz-transform: skewX(3deg); + -ms-transform: skewX(3deg); + -o-transform: skewX(3deg); + transform: skewX(3deg); + } + 70% { + -webkit-transform: skewX(-2deg); + -moz-transform: skewX(-2deg); + -ms-transform: skewX(-2deg); + -o-transform: skewX(-2deg); + transform: skewX(-2deg); + } + 80% { + -webkit-transform: skewX(1deg); + -moz-transform: skewX(1deg); + -ms-transform: skewX(1deg); + -o-transform: skewX(1deg); + transform: skewX(1deg); + } + 90% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } + 100% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } +} +@keyframes wiggle { + 0% { + -webkit-transform: skewX(9deg); + -moz-transform: skewX(9deg); + -ms-transform: skewX(9deg); + -o-transform: skewX(9deg); + transform: skewX(9deg); + } + 10% { + -webkit-transform: skewX(-8deg); + -moz-transform: skewX(-8deg); + -ms-transform: skewX(-8deg); + -o-transform: skewX(-8deg); + transform: skewX(-8deg); + } + 20% { + -webkit-transform: skewX(7deg); + -moz-transform: skewX(7deg); + -ms-transform: skewX(7deg); + -o-transform: skewX(7deg); + transform: skewX(7deg); + } + 30% { + -webkit-transform: skewX(-6deg); + -moz-transform: skewX(-6deg); + -ms-transform: skewX(-6deg); + -o-transform: skewX(-6deg); + transform: skewX(-6deg); + } + 40% { + -webkit-transform: skewX(5deg); + -moz-transform: skewX(5deg); + -ms-transform: skewX(5deg); + -o-transform: skewX(5deg); + transform: skewX(5deg); + } + 50% { + -webkit-transform: skewX(-4deg); + -moz-transform: skewX(-4deg); + -ms-transform: skewX(-4deg); + -o-transform: skewX(-4deg); + transform: skewX(-4deg); + } + 60% { + -webkit-transform: skewX(3deg); + -moz-transform: skewX(3deg); + -ms-transform: skewX(3deg); + -o-transform: skewX(3deg); + transform: skewX(3deg); + } + 70% { + -webkit-transform: skewX(-2deg); + -moz-transform: skewX(-2deg); + -ms-transform: skewX(-2deg); + -o-transform: skewX(-2deg); + transform: skewX(-2deg); + } + 80% { + -webkit-transform: skewX(1deg); + -moz-transform: skewX(1deg); + -ms-transform: skewX(1deg); + -o-transform: skewX(1deg); + transform: skewX(1deg); + } + 90% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } + 100% { + -webkit-transform: skewX(0deg); + -moz-transform: skewX(0deg); + -ms-transform: skewX(0deg); + -o-transform: skewX(0deg); + transform: skewX(0deg); + } +} +@-moz-keyframes bounceOut { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(0.95, 0.95); + -moz-transform: scale(0.95, 0.95); + -ms-transform: scale(0.95, 0.95); + -o-transform: scale(0.95, 0.95); + transform: scale(0.95, 0.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } +} +@-webkit-keyframes bounceOut { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(0.95, 0.95); + -moz-transform: scale(0.95, 0.95); + -ms-transform: scale(0.95, 0.95); + -o-transform: scale(0.95, 0.95); + transform: scale(0.95, 0.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } +} +@-o-keyframes bounceOut { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(0.95, 0.95); + -moz-transform: scale(0.95, 0.95); + -ms-transform: scale(0.95, 0.95); + -o-transform: scale(0.95, 0.95); + transform: scale(0.95, 0.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } +} +@-ms-keyframes bounceOut { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(0.95, 0.95); + -moz-transform: scale(0.95, 0.95); + -ms-transform: scale(0.95, 0.95); + -o-transform: scale(0.95, 0.95); + transform: scale(0.95, 0.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } +} +@keyframes bounceOut { + 0% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } + 25% { + -webkit-transform: scale(0.95, 0.95); + -moz-transform: scale(0.95, 0.95); + -ms-transform: scale(0.95, 0.95); + -o-transform: scale(0.95, 0.95); + transform: scale(0.95, 0.95); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.1, 1.1); + -moz-transform: scale(1.1, 1.1); + -ms-transform: scale(1.1, 1.1); + -o-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); + } + 100% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } +} +@-moz-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} +@-webkit-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} +@-o-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} +@-ms-keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} +@keyframes bounceOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } +} +@-moz-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-webkit-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-o-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-ms-keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@keyframes bounceOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 20% { + opacity: 1; + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-moz-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-webkit-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-o-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-ms-keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@keyframes bounceOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-moz-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-webkit-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-o-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-ms-keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@keyframes bounceOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 20% { + opacity: 1; + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-moz-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + } + 70% { + -webkit-transform: scale(0.9, 0.9); + -moz-transform: scale(0.9, 0.9); + -ms-transform: scale(0.9, 0.9); + -o-transform: scale(0.9, 0.9); + transform: scale(0.9, 0.9); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-webkit-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + } + 70% { + -webkit-transform: scale(0.9, 0.9); + -moz-transform: scale(0.9, 0.9); + -ms-transform: scale(0.9, 0.9); + -o-transform: scale(0.9, 0.9); + transform: scale(0.9, 0.9); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-o-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + } + 70% { + -webkit-transform: scale(0.9, 0.9); + -moz-transform: scale(0.9, 0.9); + -ms-transform: scale(0.9, 0.9); + -o-transform: scale(0.9, 0.9); + transform: scale(0.9, 0.9); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-ms-keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + } + 70% { + -webkit-transform: scale(0.9, 0.9); + -moz-transform: scale(0.9, 0.9); + -ms-transform: scale(0.9, 0.9); + -o-transform: scale(0.9, 0.9); + transform: scale(0.9, 0.9); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@keyframes bounceIn { + 0% { + opacity: 0; + -webkit-transform: scale(0.3, 0.3); + -moz-transform: scale(0.3, 0.3); + -ms-transform: scale(0.3, 0.3); + -o-transform: scale(0.3, 0.3); + transform: scale(0.3, 0.3); + } + 50% { + opacity: 1; + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + } + 70% { + -webkit-transform: scale(0.9, 0.9); + -moz-transform: scale(0.9, 0.9); + -ms-transform: scale(0.9, 0.9); + -o-transform: scale(0.9, 0.9); + transform: scale(0.9, 0.9); + } + 100% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); + } +} +@-moz-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -moz-transform: translateY(30px); + -ms-transform: translateY(30px); + -o-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -moz-transform: translateY(30px); + -ms-transform: translateY(30px); + -o-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -moz-transform: translateY(30px); + -ms-transform: translateY(30px); + -o-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-ms-keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -moz-transform: translateY(30px); + -ms-transform: translateY(30px); + -o-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes bounceInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(30px); + -moz-transform: translateY(30px); + -ms-transform: translateY(30px); + -o-transform: translateY(30px); + transform: translateY(30px); + } + 80% { + -webkit-transform: translateY(-10px); + -moz-transform: translateY(-10px); + -ms-transform: translateY(-10px); + -o-transform: translateY(-10px); + transform: translateY(-10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-ms-keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes bounceInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateY(-30px); + -moz-transform: translateY(-30px); + -ms-transform: translateY(-30px); + -o-transform: translateY(-30px); + transform: translateY(-30px); + } + 80% { + -webkit-transform: translateY(10px); + -moz-transform: translateY(10px); + -ms-transform: translateY(10px); + -o-transform: translateY(10px); + transform: translateY(10px); + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -ms-transform: translateX(-30px); + -o-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -ms-transform: translateX(-30px); + -o-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -ms-transform: translateX(-30px); + -o-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-ms-keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -ms-transform: translateX(-30px); + -o-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes bounceInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(-30px); + -moz-transform: translateX(-30px); + -ms-transform: translateX(-30px); + -o-transform: translateX(-30px); + transform: translateX(-30px); + } + 80% { + -webkit-transform: translateX(10px); + -moz-transform: translateX(10px); + -ms-transform: translateX(10px); + -o-transform: translateX(10px); + transform: translateX(10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -moz-transform: translateX(30px); + -ms-transform: translateX(30px); + -o-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -moz-transform: translateX(30px); + -ms-transform: translateX(30px); + -o-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -moz-transform: translateX(30px); + -ms-transform: translateX(30px); + -o-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-ms-keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -moz-transform: translateX(30px); + -ms-transform: translateX(30px); + -o-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes bounceInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 60% { + opacity: 1; + -webkit-transform: translateX(30px); + -moz-transform: translateX(30px); + -ms-transform: translateX(30px); + -o-transform: translateX(30px); + transform: translateX(30px); + } + 80% { + -webkit-transform: translateX(-10px); + -moz-transform: translateX(-10px); + -ms-transform: translateX(-10px); + -o-transform: translateX(-10px); + transform: translateX(-10px); + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@-webkit-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@-o-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@-ms-keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@-moz-keyframes fadeOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@-webkit-keyframes fadeOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@-o-keyframes fadeOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@-ms-keyframes fadeOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@keyframes fadeOutUp { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@-moz-keyframes fadeOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@-webkit-keyframes fadeOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@-o-keyframes fadeOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@-ms-keyframes fadeOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@keyframes fadeOutDown { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@-moz-keyframes fadeOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@-webkit-keyframes fadeOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@-o-keyframes fadeOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@-ms-keyframes fadeOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@keyframes fadeOutRight { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@-moz-keyframes fadeOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@-webkit-keyframes fadeOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@-o-keyframes fadeOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@-ms-keyframes fadeOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@keyframes fadeOutLeft { + 0% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 100% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@-moz-keyframes fadeOutUpBig { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + opacity: 0; + } +} +@-webkit-keyframes fadeOutUpBig { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + opacity: 0; + } +} +@-o-keyframes fadeOutUpBig { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + opacity: 0; + } +} +@-ms-keyframes fadeOutUpBig { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + opacity: 0; + } +} +@keyframes fadeOutUpBig { + 0% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 100% { + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + opacity: 0; + } +} +@-moz-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-o-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-ms-keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@keyframes fadeOutDownBig { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } + 100% { + opacity: 0; + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + } +} +@-moz-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-o-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-ms-keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@keyframes fadeOutRightBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } +} +@-moz-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-o-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-ms-keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@keyframes fadeOutLeftBig { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } + 100% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } +} +@-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-o-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-ms-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-moz-keyframes fadeInUp { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fadeInUp { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fadeInUp { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-ms-keyframes fadeInUp { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@keyframes fadeInUp { + 0% { + -webkit-transform: translateY(20px); + -moz-transform: translateY(20px); + -ms-transform: translateY(20px); + -o-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes fadeInDown { + 0% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fadeInDown { + 0% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fadeInDown { + 0% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-ms-keyframes fadeInDown { + 0% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@keyframes fadeInDown { + 0% { + -webkit-transform: translateY(-20px); + -moz-transform: translateY(-20px); + -ms-transform: translateY(-20px); + -o-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes fadeInRight { + 0% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-webkit-keyframes fadeInRight { + 0% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-o-keyframes fadeInRight { + 0% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-ms-keyframes fadeInRight { + 0% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@keyframes fadeInRight { + 0% { + -webkit-transform: translateX(20px); + -moz-transform: translateX(20px); + -ms-transform: translateX(20px); + -o-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-moz-keyframes fadeInLeft { + 0% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-webkit-keyframes fadeInLeft { + 0% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-o-keyframes fadeInLeft { + 0% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-ms-keyframes fadeInLeft { + 0% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@keyframes fadeInLeft { + 0% { + -webkit-transform: translateX(-20px); + -moz-transform: translateX(-20px); + -ms-transform: translateX(-20px); + -o-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } + 100% { + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } +} +@-moz-keyframes fadeInUpBig { + 0% { + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-webkit-keyframes fadeInUpBig { + 0% { + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-o-keyframes fadeInUpBig { + 0% { + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-ms-keyframes fadeInUpBig { + 0% { + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@keyframes fadeInUpBig { + 0% { + -webkit-transform: translateY(2000px); + -moz-transform: translateY(2000px); + -ms-transform: translateY(2000px); + -o-transform: translateY(2000px); + transform: translateY(2000px); + opacity: 0; + } + 100% { + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } +} +@-moz-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-o-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-ms-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translateY(-2000px); + -moz-transform: translateY(-2000px); + -ms-transform: translateY(-2000px); + -o-transform: translateY(-2000px); + transform: translateY(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + } +} +@-moz-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-ms-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translateX(2000px); + -moz-transform: translateX(2000px); + -ms-transform: translateX(2000px); + -o-transform: translateX(2000px); + transform: translateX(2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-o-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-ms-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translateX(-2000px); + -moz-transform: translateX(-2000px); + -ms-transform: translateX(-2000px); + -o-transform: translateX(-2000px); + transform: translateX(-2000px); + } + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -moz-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + } +} +@-moz-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotateY(0); + -moz-transform: perspective(400px) rotateY(0); + -ms-transform: perspective(400px) rotateY(0); + -o-transform: perspective(400px) rotateY(0); + transform: perspective(400px) rotateY(0); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -o-transform: perspective(400px) translateZ(150px) rotateY(170deg); + transform: perspective(400px) translateZ(150px) rotateY(170deg); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95); + -moz-transform: perspective(400px) rotateY(360deg) scale(0.95); + -ms-transform: perspective(400px) rotateY(360deg) scale(0.95); + -o-transform: perspective(400px) rotateY(360deg) scale(0.95); + transform: perspective(400px) rotateY(360deg) scale(0.95); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) scale(1); + -moz-transform: perspective(400px) scale(1); + -ms-transform: perspective(400px) scale(1); + -o-transform: perspective(400px) scale(1); + transform: perspective(400px) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotateY(0); + -moz-transform: perspective(400px) rotateY(0); + -ms-transform: perspective(400px) rotateY(0); + -o-transform: perspective(400px) rotateY(0); + transform: perspective(400px) rotateY(0); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -o-transform: perspective(400px) translateZ(150px) rotateY(170deg); + transform: perspective(400px) translateZ(150px) rotateY(170deg); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95); + -moz-transform: perspective(400px) rotateY(360deg) scale(0.95); + -ms-transform: perspective(400px) rotateY(360deg) scale(0.95); + -o-transform: perspective(400px) rotateY(360deg) scale(0.95); + transform: perspective(400px) rotateY(360deg) scale(0.95); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) scale(1); + -moz-transform: perspective(400px) scale(1); + -ms-transform: perspective(400px) scale(1); + -o-transform: perspective(400px) scale(1); + transform: perspective(400px) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@-o-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotateY(0); + -moz-transform: perspective(400px) rotateY(0); + -ms-transform: perspective(400px) rotateY(0); + -o-transform: perspective(400px) rotateY(0); + transform: perspective(400px) rotateY(0); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -o-transform: perspective(400px) translateZ(150px) rotateY(170deg); + transform: perspective(400px) translateZ(150px) rotateY(170deg); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95); + -moz-transform: perspective(400px) rotateY(360deg) scale(0.95); + -ms-transform: perspective(400px) rotateY(360deg) scale(0.95); + -o-transform: perspective(400px) rotateY(360deg) scale(0.95); + transform: perspective(400px) rotateY(360deg) scale(0.95); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) scale(1); + -moz-transform: perspective(400px) scale(1); + -ms-transform: perspective(400px) scale(1); + -o-transform: perspective(400px) scale(1); + transform: perspective(400px) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@-ms-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotateY(0); + -moz-transform: perspective(400px) rotateY(0); + -ms-transform: perspective(400px) rotateY(0); + -o-transform: perspective(400px) rotateY(0); + transform: perspective(400px) rotateY(0); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -o-transform: perspective(400px) translateZ(150px) rotateY(170deg); + transform: perspective(400px) translateZ(150px) rotateY(170deg); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95); + -moz-transform: perspective(400px) rotateY(360deg) scale(0.95); + -ms-transform: perspective(400px) rotateY(360deg) scale(0.95); + -o-transform: perspective(400px) rotateY(360deg) scale(0.95); + transform: perspective(400px) rotateY(360deg) scale(0.95); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) scale(1); + -moz-transform: perspective(400px) scale(1); + -ms-transform: perspective(400px) scale(1); + -o-transform: perspective(400px) scale(1); + transform: perspective(400px) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotateY(0); + -moz-transform: perspective(400px) rotateY(0); + -ms-transform: perspective(400px) rotateY(0); + -o-transform: perspective(400px) rotateY(0); + transform: perspective(400px) rotateY(0); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 40% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg); + -o-transform: perspective(400px) translateZ(150px) rotateY(170deg); + transform: perspective(400px) translateZ(150px) rotateY(170deg); + -webkit-animation-timing-function: ease-out; + -moz-animation-timing-function: ease-out; + -ms-animation-timing-function: ease-out; + -o-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + 50% { + -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 80% { + -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95); + -moz-transform: perspective(400px) rotateY(360deg) scale(0.95); + -ms-transform: perspective(400px) rotateY(360deg) scale(0.95); + -o-transform: perspective(400px) rotateY(360deg) scale(0.95); + transform: perspective(400px) rotateY(360deg) scale(0.95); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + 100% { + -webkit-transform: perspective(400px) scale(1); + -moz-transform: perspective(400px) scale(1); + -ms-transform: perspective(400px) scale(1); + -o-transform: perspective(400px) scale(1); + transform: perspective(400px) scale(1); + -webkit-animation-timing-function: ease-in; + -moz-animation-timing-function: ease-in; + -ms-animation-timing-function: ease-in; + -o-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} +@-moz-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -moz-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + -o-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -moz-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + -o-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -moz-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + -o-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -moz-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + -o-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-o-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -moz-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + -o-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -moz-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + -o-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-ms-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -moz-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + -o-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -moz-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + -o-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateX(-10deg); + -moz-transform: perspective(400px) rotateX(-10deg); + -ms-transform: perspective(400px) rotateX(-10deg); + -o-transform: perspective(400px) rotateX(-10deg); + transform: perspective(400px) rotateX(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateX(10deg); + -moz-transform: perspective(400px) rotateX(10deg); + -ms-transform: perspective(400px) rotateX(10deg); + -o-transform: perspective(400px) rotateX(10deg); + transform: perspective(400px) rotateX(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-moz-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-o-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-ms-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px) rotateX(0deg); + -moz-transform: perspective(400px) rotateX(0deg); + -ms-transform: perspective(400px) rotateX(0deg); + -o-transform: perspective(400px) rotateX(0deg); + transform: perspective(400px) rotateX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateX(90deg); + -moz-transform: perspective(400px) rotateX(90deg); + -ms-transform: perspective(400px) rotateX(90deg); + -o-transform: perspective(400px) rotateX(90deg); + transform: perspective(400px) rotateX(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-moz-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -moz-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + -o-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -moz-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + -o-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -moz-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + -o-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -moz-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + -o-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-o-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -moz-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + -o-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -moz-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + -o-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-ms-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -moz-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + -o-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -moz-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + -o-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotateY(-10deg); + -moz-transform: perspective(400px) rotateY(-10deg); + -ms-transform: perspective(400px) rotateY(-10deg); + -o-transform: perspective(400px) rotateY(-10deg); + transform: perspective(400px) rotateY(-10deg); + } + 70% { + -webkit-transform: perspective(400px) rotateY(10deg); + -moz-transform: perspective(400px) rotateY(10deg); + -ms-transform: perspective(400px) rotateY(10deg); + -o-transform: perspective(400px) rotateY(10deg); + transform: perspective(400px) rotateY(10deg); + } + 100% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-moz-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-o-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-ms-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px) rotateY(0deg); + -moz-transform: perspective(400px) rotateY(0deg); + -ms-transform: perspective(400px) rotateY(0deg); + -o-transform: perspective(400px) rotateY(0deg); + transform: perspective(400px) rotateY(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: perspective(400px) rotateY(90deg); + -moz-transform: perspective(400px) rotateY(90deg); + -ms-transform: perspective(400px) rotateY(90deg); + -o-transform: perspective(400px) rotateY(90deg); + transform: perspective(400px) rotateY(90deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-moz-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -moz-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + -o-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -moz-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + -o-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -moz-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + -o-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -moz-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + -o-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-o-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -moz-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + -o-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -moz-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + -o-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-ms-keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -moz-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + -o-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -moz-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + -o-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@keyframes lightSpeedIn { + 0% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } + 60% { + -webkit-transform: translateX(-20%) skewX(30deg); + -moz-transform: translateX(-20%) skewX(30deg); + -ms-transform: translateX(-20%) skewX(30deg); + -o-transform: translateX(-20%) skewX(30deg); + transform: translateX(-20%) skewX(30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 80% { + -webkit-transform: translateX(0%) skewX(-15deg); + -moz-transform: translateX(0%) skewX(-15deg); + -ms-transform: translateX(0%) skewX(-15deg); + -o-transform: translateX(0%) skewX(-15deg); + transform: translateX(0%) skewX(-15deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } +} +@-moz-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-webkit-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-o-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-ms-keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@keyframes lightSpeedOut { + 0% { + -webkit-transform: translateX(0%) skewX(0deg); + -moz-transform: translateX(0%) skewX(0deg); + -ms-transform: translateX(0%) skewX(0deg); + -o-transform: translateX(0%) skewX(0deg); + transform: translateX(0%) skewX(0deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + } + 100% { + -webkit-transform: translateX(100%) skewX(-30deg); + -moz-transform: translateX(100%) skewX(-30deg); + -ms-transform: translateX(100%) skewX(-30deg); + -o-transform: translateX(100%) skewX(-30deg); + transform: translateX(100%) skewX(-30deg); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-moz-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(200deg); + -moz-transform: rotate(200deg); + -ms-transform: rotate(200deg); + -o-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} +@-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(200deg); + -moz-transform: rotate(200deg); + -ms-transform: rotate(200deg); + -o-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} +@-o-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(200deg); + -moz-transform: rotate(200deg); + -ms-transform: rotate(200deg); + -o-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} +@-ms-keyframes rotateOut { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(200deg); + -moz-transform: rotate(200deg); + -ms-transform: rotate(200deg); + -o-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} +@keyframes rotateOut { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(200deg); + -moz-transform: rotate(200deg); + -ms-transform: rotate(200deg); + -o-transform: rotate(200deg); + transform: rotate(200deg); + opacity: 0; + } +} +@-moz-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-o-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-ms-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-moz-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-o-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-ms-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-moz-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-o-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-ms-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } +} +@-moz-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-o-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-ms-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } +} +@-moz-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(-200deg); + -moz-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + -o-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(-200deg); + -moz-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + -o-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-o-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(-200deg); + -moz-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + -o-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-ms-keyframes rotateIn { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(-200deg); + -moz-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + -o-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@keyframes rotateIn { + 0% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(-200deg); + -moz-transform: rotate(-200deg); + -ms-transform: rotate(-200deg); + -o-transform: rotate(-200deg); + transform: rotate(-200deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: center center 50%; + -moz-transform-origin: center center 50%; + -ms-transform-origin: center center 50%; + -o-transform-origin: center center 50%; + transform-origin: center center 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-moz-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-o-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-ms-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-moz-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-o-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-ms-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: left bottom 50%; + -moz-transform-origin: left bottom 50%; + -ms-transform-origin: left bottom 50%; + -o-transform-origin: left bottom 50%; + transform-origin: left bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-moz-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-o-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-ms-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-moz-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-o-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-ms-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + opacity: 0; + } + 100% { + -webkit-transform-origin: right bottom 50%; + -moz-transform-origin: right bottom 50%; + -ms-transform-origin: right bottom 50%; + -o-transform-origin: right bottom 50%; + transform-origin: right bottom 50%; + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + opacity: 1; + } +} +@-moz-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, 60% { + -webkit-transform: rotate(80deg); + -moz-transform: rotate(80deg); + -ms-transform: rotate(80deg); + -o-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -moz-transform: rotate(60deg); + -ms-transform: rotate(60deg); + -o-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -moz-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + -o-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translateY(700px); + -moz-transform: translateY(700px); + -ms-transform: translateY(700px); + -o-transform: translateY(700px); + transform: translateY(700px); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-webkit-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, 60% { + -webkit-transform: rotate(80deg); + -moz-transform: rotate(80deg); + -ms-transform: rotate(80deg); + -o-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -moz-transform: rotate(60deg); + -ms-transform: rotate(60deg); + -o-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -moz-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + -o-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translateY(700px); + -moz-transform: translateY(700px); + -ms-transform: translateY(700px); + -o-transform: translateY(700px); + transform: translateY(700px); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-o-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, 60% { + -webkit-transform: rotate(80deg); + -moz-transform: rotate(80deg); + -ms-transform: rotate(80deg); + -o-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -moz-transform: rotate(60deg); + -ms-transform: rotate(60deg); + -o-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -moz-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + -o-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translateY(700px); + -moz-transform: translateY(700px); + -ms-transform: translateY(700px); + -o-transform: translateY(700px); + transform: translateY(700px); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-ms-keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, 60% { + -webkit-transform: rotate(80deg); + -moz-transform: rotate(80deg); + -ms-transform: rotate(80deg); + -o-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -moz-transform: rotate(60deg); + -ms-transform: rotate(60deg); + -o-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -moz-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + -o-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translateY(700px); + -moz-transform: translateY(700px); + -ms-transform: translateY(700px); + -o-transform: translateY(700px); + transform: translateY(700px); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@keyframes hinge { + 0% { + -webkit-transform: rotate(0); + -moz-transform: rotate(0); + -ms-transform: rotate(0); + -o-transform: rotate(0); + transform: rotate(0); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 20%, 60% { + -webkit-transform: rotate(80deg); + -moz-transform: rotate(80deg); + -ms-transform: rotate(80deg); + -o-transform: rotate(80deg); + transform: rotate(80deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 40% { + -webkit-transform: rotate(60deg); + -moz-transform: rotate(60deg); + -ms-transform: rotate(60deg); + -o-transform: rotate(60deg); + transform: rotate(60deg); + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 80% { + -webkit-transform: rotate(60deg) translateY(0); + -moz-transform: rotate(60deg) translateY(0); + -ms-transform: rotate(60deg) translateY(0); + -o-transform: rotate(60deg) translateY(0); + transform: rotate(60deg) translateY(0); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform-origin: top left 50%; + -moz-transform-origin: top left 50%; + -ms-transform-origin: top left 50%; + -o-transform-origin: top left 50%; + transform-origin: top left 50%; + -webkit-animation-timing-function: ease-in-out; + -moz-animation-timing-function: ease-in-out; + -ms-animation-timing-function: ease-in-out; + -o-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + 100% { + -webkit-transform: translateY(700px); + -moz-transform: translateY(700px); + -ms-transform: translateY(700px); + -o-transform: translateY(700px); + transform: translateY(700px); + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + } +} +@-moz-keyframes rollIn { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} +@-webkit-keyframes rollIn { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} +@-o-keyframes rollIn { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} +@-ms-keyframes rollIn { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} +@keyframes rollIn { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } +} +@-moz-keyframes rollOut { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } +} +@-webkit-keyframes rollOut { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } +} +@-o-keyframes rollOut { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } +} +@-ms-keyframes rollOut { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } +} +@keyframes rollOut { + 0% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + opacity: 1; + -webkit-transform: translateX(0px) rotate(0deg); + -moz-transform: translateX(0px) rotate(0deg); + -ms-transform: translateX(0px) rotate(0deg); + -o-transform: translateX(0px) rotate(0deg); + transform: translateX(0px) rotate(0deg); + } + 100% { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); + opacity: 0; + -webkit-transform: translateX(-100%) rotate(-120deg); + -moz-transform: translateX(-100%) rotate(-120deg); + -ms-transform: translateX(-100%) rotate(-120deg); + -o-transform: translateX(-100%) rotate(-120deg); + transform: translateX(-100%) rotate(-120deg); + } +} +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active, +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + box-sizing: content-box; + height: 0; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type=button], +input[type=reset], +input[type=submit] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input { + line-height: normal; +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + height: auto; +} + +input[type=search] { + -webkit-appearance: textfield; + box-sizing: content-box; +} + +input[type=search]::-webkit-search-cancel-button, +input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: "Glyphicons Halflings"; + src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot"); + src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: "Glyphicons Halflings"; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.glyphicon-asterisk:before { + content: "*"; +} + +.glyphicon-plus:before { + content: "+"; +} + +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "€"; +} + +.glyphicon-minus:before { + content: "−"; +} + +.glyphicon-cloud:before { + content: "☁"; +} + +.glyphicon-envelope:before { + content: "✉"; +} + +.glyphicon-pencil:before { + content: "✏"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-lock:before { + content: "\e033"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-bookmark:before { + content: "\e044"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-camera:before { + content: "\e046"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-fire:before { + content: "\e104"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-calendar:before { + content: "\e109"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-bell:before { + content: "\e123"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-wrench:before { + content: "\e136"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-briefcase:before { + content: "\e139"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-paperclip:before { + content: "\e142"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-pushpin:before { + content: "\e146"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-cd:before { + content: "\e201"; +} + +.glyphicon-save-file:before { + content: "\e202"; +} + +.glyphicon-open-file:before { + content: "\e203"; +} + +.glyphicon-level-up:before { + content: "\e204"; +} + +.glyphicon-copy:before { + content: "\e205"; +} + +.glyphicon-paste:before { + content: "\e206"; +} + +.glyphicon-alert:before { + content: "\e209"; +} + +.glyphicon-equalizer:before { + content: "\e210"; +} + +.glyphicon-king:before { + content: "\e211"; +} + +.glyphicon-queen:before { + content: "\e212"; +} + +.glyphicon-pawn:before { + content: "\e213"; +} + +.glyphicon-bishop:before { + content: "\e214"; +} + +.glyphicon-knight:before { + content: "\e215"; +} + +.glyphicon-baby-formula:before { + content: "\e216"; +} + +.glyphicon-tent:before { + content: "⛺"; +} + +.glyphicon-blackboard:before { + content: "\e218"; +} + +.glyphicon-bed:before { + content: "\e219"; +} + +.glyphicon-apple:before { + content: "\f8ff"; +} + +.glyphicon-erase:before { + content: "\e221"; +} + +.glyphicon-hourglass:before { + content: "⌛"; +} + +.glyphicon-lamp:before { + content: "\e223"; +} + +.glyphicon-duplicate:before { + content: "\e224"; +} + +.glyphicon-piggy-bank:before { + content: "\e225"; +} + +.glyphicon-scissors:before { + content: "\e226"; +} + +.glyphicon-bitcoin:before { + content: "\e227"; +} + +.glyphicon-btc:before { + content: "\e227"; +} + +.glyphicon-xbt:before { + content: "\e227"; +} + +.glyphicon-yen:before { + content: "¥"; +} + +.glyphicon-jpy:before { + content: "¥"; +} + +.glyphicon-ruble:before { + content: "₽"; +} + +.glyphicon-rub:before { + content: "₽"; +} + +.glyphicon-scale:before { + content: "\e230"; +} + +.glyphicon-ice-lolly:before { + content: "\e231"; +} + +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} + +.glyphicon-education:before { + content: "\e233"; +} + +.glyphicon-option-horizontal:before { + content: "\e234"; +} + +.glyphicon-option-vertical:before { + content: "\e235"; +} + +.glyphicon-menu-hamburger:before { + content: "\e236"; +} + +.glyphicon-modal-window:before { + content: "\e237"; +} + +.glyphicon-oil:before { + content: "\e238"; +} + +.glyphicon-grain:before { + content: "\e239"; +} + +.glyphicon-sunglasses:before { + content: "\e240"; +} + +.glyphicon-text-size:before { + content: "\e241"; +} + +.glyphicon-text-color:before { + content: "\e242"; +} + +.glyphicon-text-background:before { + content: "\e243"; +} + +.glyphicon-object-align-top:before { + content: "\e244"; +} + +.glyphicon-object-align-bottom:before { + content: "\e245"; +} + +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} + +.glyphicon-object-align-left:before { + content: "\e247"; +} + +.glyphicon-object-align-vertical:before { + content: "\e248"; +} + +.glyphicon-object-align-right:before { + content: "\e249"; +} + +.glyphicon-triangle-right:before { + content: "\e250"; +} + +.glyphicon-triangle-left:before { + content: "\e251"; +} + +.glyphicon-triangle-bottom:before { + content: "\e252"; +} + +.glyphicon-triangle-top:before { + content: "\e253"; +} + +.glyphicon-console:before { + content: "\e254"; +} + +.glyphicon-superscript:before { + content: "\e255"; +} + +.glyphicon-subscript:before { + content: "\e256"; +} + +.glyphicon-menu-left:before { + content: "\e257"; +} + +.glyphicon-menu-right:before { + content: "\e258"; +} + +.glyphicon-menu-down:before { + content: "\e259"; +} + +.glyphicon-menu-up:before { + content: "\e260"; +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #fff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #337ab7; + text-decoration: none; +} +a:hover, a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +figure { + margin: 0; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + padding: 4px; + line-height: 1.428571429; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +[role=button] { + cursor: pointer; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h1 .small, h2 small, +h2 .small, h3 small, +h3 .small, h4 small, +h4 .small, h5 small, +h5 .small, h6 small, +h6 .small, +.h1 small, +.h1 .small, .h2 small, +.h2 .small, .h3 small, +.h3 .small, .h4 small, +.h4 .small, .h5 small, +.h5 .small, .h6 small, +.h6 .small { + font-weight: 400; + line-height: 1; + color: #777777; +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +h1 .small, .h1 small, +.h1 .small, +h2 small, +h2 .small, .h2 small, +.h2 .small, +h3 small, +h3 .small, .h3 small, +.h3 .small { + font-size: 65%; +} + +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +h4 .small, .h4 small, +.h4 .small, +h5 small, +h5 .small, .h5 small, +.h5 .small, +h6 small, +h6 .small, .h6 small, +.h6 .small { + font-size: 75%; +} + +h1, .h1 { + font-size: 36px; +} + +h2, .h2 { + font-size: 30px; +} + +h3, .h3 { + font-size: 24px; +} + +h4, .h4 { + font-size: 18px; +} + +h5, .h5 { + font-size: 14px; +} + +h6, .h6 { + font-size: 12px; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small, +.small { + font-size: 85%; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-nowrap { + white-space: nowrap; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase, .initialism { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-muted { + color: #777777; +} + +.text-primary { + color: #337ab7; +} + +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} + +.text-success { + color: #3c763d; +} + +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} + +.text-info { + color: #31708f; +} + +a.text-info:hover, +a.text-info:focus { + color: #245269; +} + +.text-warning { + color: #8a6d3b; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} + +.text-danger { + color: #a94442; +} + +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} + +.bg-primary { + color: #fff; +} + +.bg-primary { + background-color: #337ab7; +} + +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} + +.bg-success { + background-color: #dff0d8; +} + +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} + +.bg-info { + background-color: #d9edf7; +} + +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} + +.bg-warning { + background-color: #fcf8e3; +} + +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} + +.bg-danger { + background-color: #f2dede; +} + +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ul ol, +ol ul, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-top: 0; + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: 700; +} + +dd { + margin-left: 0; +} + +.dl-horizontal dd:before, .dl-horizontal dd:after { + display: table; + content: " "; +} +.dl-horizontal dd:after { + clear: both; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; +} + +.initialism { + font-size: 90%; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.428571429; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: "— "; +} + +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eeeeee; + border-left: 0; +} +.blockquote-reverse footer:before, +.blockquote-reverse small:before, +.blockquote-reverse .small:before, +blockquote.pull-right footer:before, +blockquote.pull-right small:before, +blockquote.pull-right .small:before { + content: ""; +} +.blockquote-reverse footer:after, +.blockquote-reverse small:after, +.blockquote-reverse .small:after, +blockquote.pull-right footer:after, +blockquote.pull-right small:after, +blockquote.pull-right .small:after { + content: " —"; +} + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + box-shadow: none; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.container:before, .container:after { + display: table; + content: " "; +} +.container:after { + clear: both; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} + +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: " "; +} +.container-fluid:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} +.row:before, .row:after { + display: table; + content: " "; +} +.row:after { + clear: both; +} + +.row-no-gutters { + margin-right: 0; + margin-left: 0; +} +.row-no-gutters [class*=col-] { + padding-right: 0; + padding-left: 0; +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-1 { + width: 8.3333333333%; +} + +.col-xs-2 { + width: 16.6666666667%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.3333333333%; +} + +.col-xs-5 { + width: 41.6666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.3333333333%; +} + +.col-xs-8 { + width: 66.6666666667%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.3333333333%; +} + +.col-xs-11 { + width: 91.6666666667%; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-pull-1 { + right: 8.3333333333%; +} + +.col-xs-pull-2 { + right: 16.6666666667%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-4 { + right: 33.3333333333%; +} + +.col-xs-pull-5 { + right: 41.6666666667%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-7 { + right: 58.3333333333%; +} + +.col-xs-pull-8 { + right: 66.6666666667%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-10 { + right: 83.3333333333%; +} + +.col-xs-pull-11 { + right: 91.6666666667%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-push-1 { + left: 8.3333333333%; +} + +.col-xs-push-2 { + left: 16.6666666667%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-4 { + left: 33.3333333333%; +} + +.col-xs-push-5 { + left: 41.6666666667%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-7 { + left: 58.3333333333%; +} + +.col-xs-push-8 { + left: 66.6666666667%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-10 { + left: 83.3333333333%; +} + +.col-xs-push-11 { + left: 91.6666666667%; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-offset-0 { + margin-left: 0%; +} + +.col-xs-offset-1 { + margin-left: 8.3333333333%; +} + +.col-xs-offset-2 { + margin-left: 16.6666666667%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-4 { + margin-left: 33.3333333333%; +} + +.col-xs-offset-5 { + margin-left: 41.6666666667%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-7 { + margin-left: 58.3333333333%; +} + +.col-xs-offset-8 { + margin-left: 66.6666666667%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-10 { + margin-left: 83.3333333333%; +} + +.col-xs-offset-11 { + margin-left: 91.6666666667%; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-1 { + width: 8.3333333333%; + } + .col-sm-2 { + width: 16.6666666667%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.3333333333%; + } + .col-sm-5 { + width: 41.6666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.3333333333%; + } + .col-sm-8 { + width: 66.6666666667%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.3333333333%; + } + .col-sm-11 { + width: 91.6666666667%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-pull-1 { + right: 8.3333333333%; + } + .col-sm-pull-2 { + right: 16.6666666667%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.3333333333%; + } + .col-sm-pull-5 { + right: 41.6666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.3333333333%; + } + .col-sm-pull-8 { + right: 66.6666666667%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.3333333333%; + } + .col-sm-pull-11 { + right: 91.6666666667%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-push-1 { + left: 8.3333333333%; + } + .col-sm-push-2 { + left: 16.6666666667%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.3333333333%; + } + .col-sm-push-5 { + left: 41.6666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.3333333333%; + } + .col-sm-push-8 { + left: 66.6666666667%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.3333333333%; + } + .col-sm-push-11 { + left: 91.6666666667%; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-offset-0 { + margin-left: 0%; + } + .col-sm-offset-1 { + margin-left: 8.3333333333%; + } + .col-sm-offset-2 { + margin-left: 16.6666666667%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.3333333333%; + } + .col-sm-offset-5 { + margin-left: 41.6666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.3333333333%; + } + .col-sm-offset-8 { + margin-left: 66.6666666667%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.3333333333%; + } + .col-sm-offset-11 { + margin-left: 91.6666666667%; + } + .col-sm-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-1 { + width: 8.3333333333%; + } + .col-md-2 { + width: 16.6666666667%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.3333333333%; + } + .col-md-5 { + width: 41.6666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.3333333333%; + } + .col-md-8 { + width: 66.6666666667%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.3333333333%; + } + .col-md-11 { + width: 91.6666666667%; + } + .col-md-12 { + width: 100%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.3333333333%; + } + .col-md-pull-2 { + right: 16.6666666667%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.3333333333%; + } + .col-md-pull-5 { + right: 41.6666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.3333333333%; + } + .col-md-pull-8 { + right: 66.6666666667%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.3333333333%; + } + .col-md-pull-11 { + right: 91.6666666667%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.3333333333%; + } + .col-md-push-2 { + left: 16.6666666667%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.3333333333%; + } + .col-md-push-5 { + left: 41.6666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.3333333333%; + } + .col-md-push-8 { + left: 66.6666666667%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.3333333333%; + } + .col-md-push-11 { + left: 91.6666666667%; + } + .col-md-push-12 { + left: 100%; + } + .col-md-offset-0 { + margin-left: 0%; + } + .col-md-offset-1 { + margin-left: 8.3333333333%; + } + .col-md-offset-2 { + margin-left: 16.6666666667%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.3333333333%; + } + .col-md-offset-5 { + margin-left: 41.6666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.3333333333%; + } + .col-md-offset-8 { + margin-left: 66.6666666667%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.3333333333%; + } + .col-md-offset-11 { + margin-left: 91.6666666667%; + } + .col-md-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-1 { + width: 8.3333333333%; + } + .col-lg-2 { + width: 16.6666666667%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.3333333333%; + } + .col-lg-5 { + width: 41.6666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.3333333333%; + } + .col-lg-8 { + width: 66.6666666667%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.3333333333%; + } + .col-lg-11 { + width: 91.6666666667%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.3333333333%; + } + .col-lg-pull-2 { + right: 16.6666666667%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.3333333333%; + } + .col-lg-pull-5 { + right: 41.6666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.3333333333%; + } + .col-lg-pull-8 { + right: 66.6666666667%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.3333333333%; + } + .col-lg-pull-11 { + right: 91.6666666667%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.3333333333%; + } + .col-lg-push-2 { + left: 16.6666666667%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.3333333333%; + } + .col-lg-push-5 { + left: 41.6666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.3333333333%; + } + .col-lg-push-8 { + left: 66.6666666667%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.3333333333%; + } + .col-lg-push-11 { + left: 91.6666666667%; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-offset-0 { + margin-left: 0%; + } + .col-lg-offset-1 { + margin-left: 8.3333333333%; + } + .col-lg-offset-2 { + margin-left: 16.6666666667%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.3333333333%; + } + .col-lg-offset-5 { + margin-left: 41.6666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.3333333333%; + } + .col-lg-offset-8 { + margin-left: 66.6666666667%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.3333333333%; + } + .col-lg-offset-11 { + margin-left: 91.6666666667%; + } + .col-lg-offset-12 { + margin-left: 100%; + } +} +table { + background-color: transparent; +} +table col[class*=col-] { + position: static; + display: table-column; + float: none; +} +table td[class*=col-], +table th[class*=col-] { + position: static; + display: table-cell; + float: none; +} + +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} + +th { + text-align: left; +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > thead > tr > td, +.table > tbody > tr > th, +.table > tbody > tr > td, +.table > tfoot > tr > th, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > th, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} + +.table-condensed > thead > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > th, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > th, +.table-condensed > tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > th, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > th, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} + +.table > thead > tr > td.active, +.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, +.table > tbody > tr > td.active, +.table > tbody > tr > th.active, +.table > tbody > tr.active > td, +.table > tbody > tr.active > th, +.table > tfoot > tr > td.active, +.table > tfoot > tr > th.active, +.table > tfoot > tr.active > td, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} + +.table > thead > tr > td.success, +.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th, +.table > tbody > tr > td.success, +.table > tbody > tr > th.success, +.table > tbody > tr.success > td, +.table > tbody > tr.success > th, +.table > tfoot > tr > td.success, +.table > tfoot > tr > th.success, +.table > tfoot > tr.success > td, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} + +.table > thead > tr > td.info, +.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th, +.table > tbody > tr > td.info, +.table > tbody > tr > th.info, +.table > tbody > tr.info > td, +.table > tbody > tr.info > th, +.table > tfoot > tr > td.info, +.table > tfoot > tr > th.info, +.table > tfoot > tr.info > td, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} + +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} + +.table > thead > tr > td.warning, +.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th, +.table > tbody > tr > td.warning, +.table > tbody > tr > th.warning, +.table > tbody > tr.warning > td, +.table > tbody > tr.warning > th, +.table > tfoot > tr > td.warning, +.table > tfoot > tr > th.warning, +.table > tfoot > tr.warning > td, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} + +.table > thead > tr > td.danger, +.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th, +.table > tbody > tr > td.danger, +.table > tbody > tr > th.danger, +.table > tbody > tr.danger > td, +.table > tbody > tr.danger > th, +.table > tfoot > tr > td.danger, +.table > tfoot > tr > th.danger, +.table > tfoot > tr.danger > td, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} + +.table-responsive { + min-height: 0.01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700; +} + +input[type=search] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + appearance: none; +} + +input[type=radio], +input[type=checkbox] { + margin: 4px 0 0; + margin-top: 1px \9 ; + line-height: normal; +} +input[type=radio][disabled], input[type=radio].disabled, fieldset[disabled] input[type=radio], +input[type=checkbox][disabled], +input[type=checkbox].disabled, +fieldset[disabled] input[type=checkbox] { + cursor: not-allowed; +} + +input[type=file] { + display: block; +} + +input[type=range] { + display: block; + width: 100%; +} + +select[multiple], +select[size] { + height: auto; +} + +input[type=file]:focus, +input[type=radio]:focus, +input[type=checkbox]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #eeeeee; + opacity: 1; +} +.form-control[disabled], fieldset[disabled] .form-control { + cursor: not-allowed; +} + +textarea.form-control { + height: auto; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type=date].form-control, + input[type=time].form-control, + input[type=datetime-local].form-control, + input[type=month].form-control { + line-height: 34px; + } + input[type=date].input-sm, + .input-group-sm > .input-group-btn > input[type=date].btn, .input-group-sm input[type=date], + input[type=time].input-sm, + .input-group-sm > .input-group-btn > input[type=time].btn, + .input-group-sm input[type=time], + input[type=datetime-local].input-sm, + .input-group-sm > .input-group-btn > input[type=datetime-local].btn, + .input-group-sm input[type=datetime-local], + input[type=month].input-sm, + .input-group-sm > .input-group-btn > input[type=month].btn, + .input-group-sm input[type=month] { + line-height: 30px; + } + input[type=date].input-lg, + .input-group-lg > .input-group-btn > input[type=date].btn, .input-group-lg input[type=date], + input[type=time].input-lg, + .input-group-lg > .input-group-btn > input[type=time].btn, + .input-group-lg input[type=time], + input[type=datetime-local].input-lg, + .input-group-lg > .input-group-btn > input[type=datetime-local].btn, + .input-group-lg input[type=datetime-local], + input[type=month].input-lg, + .input-group-lg > .input-group-btn > input[type=month].btn, + .input-group-lg input[type=month] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio.disabled label, fieldset[disabled] .radio label, +.checkbox.disabled label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} + +.radio input[type=radio], +.radio-inline input[type=radio], +.checkbox input[type=checkbox], +.checkbox-inline input[type=checkbox] { + position: absolute; + margin-top: 4px \9 ; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + vertical-align: middle; + cursor: pointer; +} +.radio-inline.disabled, fieldset[disabled] .radio-inline, +.checkbox-inline.disabled, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.input-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm, .input-group-sm > select.form-control, +.input-group-sm > select.input-group-addon, +.input-group-sm > .input-group-btn > select.btn { + height: 30px; + line-height: 30px; +} + +textarea.input-sm, .input-group-sm > textarea.form-control, +.input-group-sm > textarea.input-group-addon, +.input-group-sm > .input-group-btn > textarea.btn, +select[multiple].input-sm, +.input-group-sm > select[multiple].form-control, +.input-group-sm > select[multiple].input-group-addon, +.input-group-sm > .input-group-btn > select[multiple].btn { + height: auto; +} + +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} + +.input-lg, .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-lg, .input-group-lg > select.form-control, +.input-group-lg > select.input-group-addon, +.input-group-lg > .input-group-btn > select.btn { + height: 46px; + line-height: 46px; +} + +textarea.input-lg, .input-group-lg > textarea.form-control, +.input-group-lg > textarea.input-group-addon, +.input-group-lg > .input-group-btn > textarea.btn, +select[multiple].input-lg, +.input-group-lg > select[multiple].form-control, +.input-group-lg > select[multiple].input-group-addon, +.input-group-lg > .input-group-btn > select[multiple].btn { + height: auto; +} + +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} + +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} + +.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, +.input-group-lg > .input-group-addon + .form-control-feedback, +.input-group-lg > .input-group-btn > .btn + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} + +.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, +.input-group-sm > .input-group-addon + .form-control-feedback, +.input-group-sm > .input-group-btn > .btn + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} + +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type=radio], + .form-inline .checkbox input[type=checkbox] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +.form-horizontal .form-group:before, .form-horizontal .form-group:after { + display: table; + content: " "; +} +.form-horizontal .form-group:after { + clear: both; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, .btn:focus, .btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, .btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + opacity: 0.65; + -webkit-box-shadow: none; + box-shadow: none; +} + +a.btn.disabled, fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, .btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { + color: #333; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} +.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus, .open > .btn-default.dropdown-toggle:hover, .open > .btn-default.dropdown-toggle:focus, .open > .btn-default.dropdown-toggle.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} + +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #286090; + background-image: none; + border-color: #204d74; +} +.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, .open > .btn-primary.dropdown-toggle:hover, .open > .btn-primary.dropdown-toggle:focus, .open > .btn-primary.dropdown-toggle.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + 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 > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #398439; +} +.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, .open > .btn-success.dropdown-toggle:hover, .open > .btn-success.dropdown-toggle:focus, .open > .btn-success.dropdown-toggle.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success.focus { + background-color: #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 > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #269abc; +} +.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, .open > .btn-info.dropdown-toggle:hover, .open > .btn-info.dropdown-toggle:focus, .open > .btn-info.dropdown-toggle.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info.focus { + background-color: #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 > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #d58512; +} +.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, .open > .btn-warning.dropdown-toggle:hover, .open > .btn-warning.dropdown-toggle:focus, .open > .btn-warning.dropdown-toggle.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #ac2925; +} +.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, .open > .btn-danger.dropdown-toggle:hover, .open > .btn-danger.dropdown-toggle:focus, .open > .btn-danger.dropdown-toggle.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} + +.btn-link { + font-weight: 400; + color: #337ab7; + border-radius: 0; +} +.btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent; +} +.btn-link:hover, .btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type=submit].btn-block, +input[type=reset].btn-block, +input[type=button].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} +.collapse.in { + display: block; +} + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9 ; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} + +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #777777; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9 ; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar:before, .btn-toolbar:after { + display: table; + content: " "; +} +.btn-toolbar:after { + clear: both; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} +.btn-group-vertical > .btn-group:after { + clear: both; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} + +[data-toggle=buttons] > .btn input[type=radio], +[data-toggle=buttons] > .btn input[type=checkbox], +[data-toggle=buttons] > .btn-group > .btn input[type=radio], +[data-toggle=buttons] > .btn-group > .btn input[type=checkbox] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*=col-] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type=radio], +.input-group-addon input[type=checkbox] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav:before, .nav:after { + display: table; + content: " "; +} +.nav:after { + clear: both; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #eeeeee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; +} +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} + +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified, .nav-tabs.nav-justified { + width: 100%; +} +.nav-justified > li, .nav-tabs.nav-justified > li { + float: none; +} +.nav-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li, .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +.nav-tabs-justified, .nav-tabs.nav-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +.navbar:before, .navbar:after { + display: table; + content: " "; +} +.navbar:after { + clear: both; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, .navbar-header:after { + display: table; + content: " "; +} +.navbar-header:after { + clear: both; +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse:before, .navbar-collapse:after { + display: table; + content: " "; +} +.navbar-collapse:after { + clear: both; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +.container > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-header, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-header, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-right: 15px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +.navbar-form { + padding: 10px 15px; + margin-right: -15px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type=radio], + .navbar-form .checkbox input[type=checkbox] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn { + margin-top: 14px; + margin-bottom: 14px; +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, .navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:hover, fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} + +.navbar-inverse { + background-color: #222; + border-color: #090909; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #090909; +} +.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #090909; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #090909; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:hover, fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/ "; +} +.breadcrumb > .active { + color: #777777; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li > a:hover, .pagination > li > a:focus, +.pagination > li > span:hover, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eeeeee; + border-color: #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, +.pagination > .active > span, +.pagination > .active > span:hover, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.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-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager:before, .pager:after { + display: table; + content: " "; +} +.pager:after { + clear: both; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + cursor: not-allowed; + background-color: #fff; +} + +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} + +a.label:hover, a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label-default { + background-color: #777777; +} +.label-default[href]:hover, .label-default[href]:focus { + background-color: #5e5e5e; +} + +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #286090; +} + +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, .label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, .label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, .btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #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 { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.428571429; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + display: block; + max-width: 100%; + height: auto; + margin-right: auto; + margin-left: auto; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media-body { + width: 10000px; +} + +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} + +.media-right, +.media > .pull-right { + padding-left: 10px; +} + +.media-left, +.media > .pull-left { + padding-right: 10px; +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { + color: #777777; + cursor: not-allowed; + background-color: #eeeeee; +} +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} + +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, a.list-group-item:focus, +button.list-group-item:hover, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} + +button.list-group-item { + width: 100%; + text-align: left; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, a.list-group-item-success:focus, +button.list-group-item-success:hover, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus, +button.list-group-item-success.active, +button.list-group-item-success.active:hover, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, a.list-group-item-info:focus, +button.list-group-item-info:hover, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus, +button.list-group-item-info.active, +button.list-group-item-info.active:hover, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, a.list-group-item-warning:focus, +button.list-group-item-warning:hover, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, +button.list-group-item-warning.active, +button.list-group-item-warning.active:hover, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, a.list-group-item-danger:focus, +button.list-group-item-danger:hover, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, +button.list-group-item-danger.active, +button.list-group-item-danger.active:hover, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} +.panel-body:before, .panel-body:after { + display: table; + content: " "; +} +.panel-body:after { + clear: both; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.list-group + .panel-footer { + border-top-width: 0; +} + +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} + +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} + +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #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: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} + +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} + +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} + +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: 0.2; +} +.close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: 0.5; +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: 0.5; +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header:before, .modal-header:after { + display: table; + content: " "; +} +.modal-header:after { + clear: both; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: " "; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.428571429; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 12px; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: 0.9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.428571429; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 14px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -moz-transition: -moz-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + -moz-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: 0.5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000", endColorstr="#00000000", GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#80000000", GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, .carousel-control:focus { + color: #fff; + text-decoration: none; + outline: 0; + filter: alpha(opacity=90); + opacity: 0.9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: "‹"; +} +.carousel-control .icon-next:before { + content: "›"; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9 ; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, .clearfix:after { + display: table; + content: " "; +} +.clearfix:after { + clear: both; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.hidden { + display: none !important; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} +.visible-xs { + display: none !important; +} + +.visible-sm { + display: none !important; +} + +.visible-md { + display: none !important; +} + +.visible-lg { + display: none !important; +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} + +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +/** + * Get a breakpoint query + */ +/** + * Wrapper for breakpoint() using our standard sizes. + */ +/** + * Wrapper for the major desktop breakpoint. + */ +/* ========================================================================== + Load a font-face. + ============================================================================ */ +/* ========================================================================== + Returns the icon set based on the key. + ============================================================================ */ +/* ========================================================================== + Returns a property of an icon set. + ============================================================================ */ +/* ========================================================================== + Returns the code of an icon. + ============================================================================ */ +/* ========================================================================== + Load an icon font. + ============================================================================ */ +/* ========================================================================== + Icon style config. + ============================================================================ */ +/* ========================================================================== + Component: Icon + ============================================================================ */ +/* ========================================================================== + Create classes for all icons in a set. + ============================================================================ */ +/** + * Return a value from a nested map. + */ +/** + * This mixin provides an easy way to position an element. + * + * Example: + * + * Position an element absolutely 50% from the top and 1em from the left: + * @include set-position(absolute, top 50% left 1em); + * + * This generates the CSS: + * + * position: absolute; + * top: 50%; + * left: 1em; + * + * @param {string} $position + * The type of positioning, e.g absolute, relative. + * @param {list} $args + * The direction and amount, e.g top 1em left 5em. + */ +/** + * This mixin provides an easy way to absolutely position an element. + * It is a wrapper for @mixin duk-position. + * + * @param {list} $args + * The direction and amount, e.g top 1em left 5em. + */ +/** + * This mixin provides an easy way to relatively position an element. + * It is a wrapper for @mixin duk-position. + * + * @param {list} $args + * The direction and amount, e.g top 1em left 5em. + */ +/** + * This mixin provides an easy way to fixed position an element. + * It is a wrapper for @mixin duk-position. + * + * @param {list} $args + * The direction and amount, e.g top 1em left 5em. + */ +/** + * The wrapper surrounding the element to align. + */ +/** + * The element to align + */ +/** + * Palettes. + */ +/** +* Components +*/ +/** + * Add all the sets to our $icon-sets map. + */ +/** + * Palettes. + */ +/** +* Components +*/ +.shadow-z-1, .landing-set .set__header, .landing-page .region-content h3, +.landing-page h3.set-header, .snackbar, .card { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.shadow-z-2, .modal-content, .btn-group.btn-group-raised, .btn-group-vertical.btn-group-raised, .btn-group, .btn-group-vertical, .btn-raised, .well, .jumbotron { + box-shadow: 0 0px 14px -5px rgba(0, 0, 0, 0.06), 0 6px 12px -6px rgba(0, 0, 0, 0.13); +} + +.shadow-z-2-hover, .btn:hover:not(.btn-link) { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.28); +} + +.shadow-z-3, .btn-group.btn-group-raised:active:not(.btn-link), .btn-group-vertical.btn-group-raised:active:not(.btn-link), .btn-group:active:not(.btn-link), .btn-group-vertical:active:not(.btn-link), .btn-raised:active:not(.btn-link), .btn:active:not(.btn-link) { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.shadow-z-4, .btn-group.btn-group-raised:hover, .btn-group-vertical.btn-group-raised:hover, .btn-group:hover, .btn-group-vertical:hover, .btn-raised:hover { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} + +.shadow-z-5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} + +body { + background-color: #EEEEEE; +} +body.inverse { + background: #333333; +} +body.inverse, body.inverse .form-control { + color: rgba(255, 255, 255, 0.84); +} + +.well, .well .form-control, .well:not([class^="well well-material-"]), .well:not([class^="well well-material-"]) .form-control { + color: rgba(0, 0, 0, 0.84); +} +.well .floating-label, .well:not([class^="well well-material-"]) .floating-label { + color: #7e7e7e; +} +.well .form-control, .well:not([class^="well well-material-"]) .form-control { + border-bottom-color: #7e7e7e; +} +.well .form-control::-webkit-input-placeholder, .well:not([class^="well well-material-"]) .form-control::-webkit-input-placeholder { + color: #7e7e7e; +} +.well .form-control::-moz-placeholder, .well:not([class^="well well-material-"]) .form-control::-moz-placeholder { + color: #7e7e7e; + opacity: 1; +} +.well .form-control:-ms-input-placeholder, .well:not([class^="well well-material-"]) .form-control:-ms-input-placeholder { + color: #7e7e7e; +} +.well .option, .well .create, .well:not([class^="well well-material-"]) .option, .well:not([class^="well well-material-"]) .create { + color: rgba(0, 0, 0, 0.84); +} + +[class^="well well-material-"], [class^="well well-material-"] .form-control, [class^="well well-material-"] .floating-label { + color: rgba(255, 255, 255, 0.84); +} +[class^="well well-material-"] .form-control { + border-bottom-color: rgba(255, 255, 255, 0.84); +} +[class^="well well-material-"] .form-control::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +[class^="well well-material-"] .form-control::-moz-placeholder { + color: rgba(255, 255, 255, 0.84); + opacity: 1; +} +[class^="well well-material-"] .form-control:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +[class^="well well-material-"] .option, [class^="well well-material-"] .create { + color: rgba(0, 0, 0, 0.84); +} + +.well, .jumbotron { + background-color: #fff; + padding: 19px; + margin-bottom: 20px; + border-radius: 2px; + border: 0; +} +.well p, .jumbotron p { + font-weight: 300; +} + +.btn { + position: relative; + padding: 8px 30px; + border: 0; + margin: 10px 1px; + cursor: pointer; + border-radius: 2px; + text-transform: uppercase; + text-decoration: none; + color: rgba(255, 255, 255, 0.84); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + outline: none !important; +} +.btn:hover { + color: rgba(255, 255, 255, 0.84); +} +.btn-link, .btn:not([class^="btn btn-"]), .btn-default { + color: rgba(0, 0, 0, 0.84); +} +.btn-link:hover, .btn:not([class^="btn btn-"]):hover, .btn-default:hover { + color: rgba(0, 0, 0, 0.84); +} + +.btn:not([class^="btn btn-"]):hover, .btn-default:hover { + background-color: rgba(255, 255, 255, 0.5); +} + +.btn-raised { + transition: box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-flat { + box-shadow: none !important; +} +.btn-flat.btn-default:hover { + background: none; +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary.focus { + background: #10a0cf; + border-color: #10a0cf; +} + +.btn-group, .btn-group-vertical { + position: relative; + border-radius: 4px; + margin: 10px 1px; + transition: box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-group.open .dropdown-toggle, .btn-group-vertical.open .dropdown-toggle { + box-shadow: none; +} +.btn-group.btn-group-raised, .btn-group-vertical.btn-group-raised { + transition: box-shadow transform 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-group .btn, .btn-group .btn:active, .btn-group .btn-group, .btn-group-vertical .btn, .btn-group-vertical .btn:active, .btn-group-vertical .btn-group { + box-shadow: none !important; + margin: 0; +} +.btn-group .btn:active .caret, .btn-group-vertical .btn:active .caret { + margin-left: -1px; +} + +.btn-group-flat { + box-shadow: none !important; +} + +.btn-fab { + margin: 0; + padding: 15px; + font-size: 26px; + width: 56px; + height: 56px; +} +.btn-fab, .btn-fab .ripple-wrapper { + border-radius: 100%; +} +.btn-fab.btn-mini { + width: 40px; + height: 40px; + padding: 13px; + font-size: 15px; +} + +.btn-default { + background-color: #FFF; +} + +.btn-primary { + background-color: #12B2E7; +} + +.btn-success { + background-color: #0F9D58; +} + +.btn-info { + background-color: #03A9F4; +} + +.btn-warning { + background-color: #FF5722; +} + +.btn-danger { + background-color: #F44336; +} + +.btn-material-red { + background-color: #F44336; +} + +.btn-material-pink { + background-color: #E91E63; +} + +.btn-material-purple { + background-color: #9C27B0; +} + +.btn-material-deeppurple { + background-color: #673AB7; +} + +.btn-material-indigo { + background-color: #3F51B5; +} + +.btn-material-lightblue { + background-color: #03A9F4; +} + +.btn-material-cyan { + background-color: #00BCD4; +} + +.btn-material-teal { + background-color: #009688; +} + +.btn-material-lightgreen { + background-color: #8BC34A; +} + +.btn-material-lime { + background-color: #CDDC39; +} + +.btn-material-lightyellow { + background-color: #FFEB3B; +} + +.btn-material-orange { + background-color: #FF9800; +} + +.btn-material-deeporange { + background-color: #FF5722; +} + +.btn-material-grey { + background-color: #9E9E9E; +} + +.btn-material-bluegrey { + background-color: #607D8B; +} + +.btn-material-brown { + background-color: #795548; +} + +.btn-material-lightgrey { + background-color: #ECECEC; +} + +.form-horizontal .checkbox { + padding-top: 15px; +} + +.checkbox { + transform: rotate(0deg); +} +.checkbox label { + cursor: pointer; + padding-left: 45px; + position: relative; +} +.checkbox label span { + display: block; + position: absolute; + left: 0px; + transition-duration: 0.2s; +} +.checkbox label .check:after { + display: block; + position: absolute; + content: ""; + background-color: rgba(0, 0, 0, 0.84); + left: -5px; + top: -15px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; +} +.checkbox label .check:before { + display: block; + content: ""; + border: 2px solid rgba(0, 0, 0, 0.84); + height: 20px; + width: 20px; + transition-delay: 0.2s; +} +.checkbox input[type=checkbox] { + opacity: 0; +} +.checkbox input[type=checkbox] ~ .check:before { + position: absolute; + top: 2px; + left: 11px; + width: 18px; + height: 18px; + border: solid 2px; + border-color: #5a5a5a; + animation: uncheck 300ms ease-out forwards; +} +.checkbox input[type=checkbox]:focus ~ .check:after { + opacity: 0.2; +} +.checkbox input[type=checkbox]:checked ~ .check:before { + animation: check 300ms ease-out forwards; +} +.checkbox input[type=checkbox]:not(:checked) ~ .check:after { + animation: rippleOff 500ms linear forwards; +} +.checkbox input[type=checkbox]:checked ~ .check:after { + animation: rippleOn 500ms linear forwards; +} +.checkbox:not(:hover) input[type=checkbox] ~ .check:before, .checkbox:not(:hover) input[type=checkbox] ~ .check:after { + animation-duration: 1ms; +} +.checkbox input[type=checkbox][disabled]:not(:checked) ~ .check:before { + opacity: 0.5; +} +.checkbox input[type=checkbox][disabled] ~ .check:after { + background-color: rgba(0, 0, 0, 0.84); + transform: rotate(-45deg); +} + +@keyframes uncheck { + 0% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + transform: rotate(45deg); + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 100% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@keyframes check { + 100% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-left: transparent; + border-top-color: transparent; + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + transform: rotate(45deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 0% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +.togglebutton { + vertical-align: middle; +} + +.togglebutton, +.togglebutton * { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.togglebutton label { + font-weight: 400; + cursor: pointer; +} + +.togglebutton label input[type=checkbox]:first-child { + opacity: 0; + width: 0; + height: 0; +} + +.togglebutton label input[type=checkbox]:first-child:checked + .toggle { + background-color: rgba(18, 178, 231, 0.5); +} + +.togglebutton label input[type=checkbox]:first-child:checked + .toggle:after { + background-color: #12B2E7; +} + +.togglebutton label .toggle, +.togglebutton label input[type=checkbox][disabled]:first-child + .toggle { + content: ""; + display: inline-block; + width: 30px; + height: 15px; + background-color: rgba(80, 80, 80, 0.7); + border-radius: 15px; + margin-right: 10px; + transition: background 0.3s ease; + vertical-align: middle; +} + +.togglebutton label .toggle:after { + content: ""; + display: inline-block; + width: 20px; + height: 20px; + background-color: #F1F1F1; + border-radius: 20px; + position: relative; + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4); + left: -5px; + top: -2px; + transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease; +} + +.togglebutton label input[type=checkbox][disabled]:first-child + .toggle:after, +.togglebutton label input[type=checkbox][disabled]:checked:first-child + .toggle:after { + background-color: #BDBDBD; +} + +.togglebutton label input[type=checkbox]:first-child:checked ~ .toggle:active:after { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 149, 135, 0.1); +} + +.togglebutton label input[type=checkbox]:first-child ~ .toggle:active:after, +.togglebutton label input[type=checkbox][disabled]:first-child ~ .toggle:active:after { + box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.1); +} + +.togglebutton label input[type=checkbox]:first-child:checked + .toggle:after { + left: 15px; +} + +.form-horizontal .radio { + margin-bottom: 10px; +} + +.radio label { + cursor: pointer; + padding-left: 45px; + position: relative; +} +.radio label span { + display: block; + position: absolute; + left: 10px; + top: 2px; + transition-duration: 0.2s; +} +.radio label .circle { + border: 2px solid rgba(0, 0, 0, 0.84); + height: 15px; + width: 15px; + border-radius: 100%; +} +.radio label .check { + height: 15px; + width: 15px; + border-radius: 100%; + background-color: rgba(0, 0, 0, 0.84); + transform: scale(0); +} +.radio label .check:after { + display: block; + position: absolute; + content: ""; + background-color: rgba(0, 0, 0, 0.84); + left: -18px; + top: -18px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; + transform: scale(1.5); +} +.radio label input[type=radio]:not(:checked) ~ .check:after { + animation: rippleOff 500ms; +} +.radio label input[type=radio]:checked ~ .check:after { + animation: rippleOn 500ms; +} +.radio input[type=radio][disabled] ~ .check, +.radio input[type=radio][disabled] ~ .circle { + opacity: 0.5; +} +.radio input[type=radio] { + display: none; +} +.radio input[type=radio]:checked ~ .check { + transform: scale(0.55); +} +.radio input[type=radio][disabled] ~ .circle { + border-color: rgba(0, 0, 0, 0.84); +} +.radio input[type=radio][disabled] ~ .check { + background-color: rgba(0, 0, 0, 0.84); +} + +@keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +fieldset[disabled] .form-control, fieldset[disabled] .form-control:focus, fieldset[disabled] .form-control.focus, .form-control-wrapper .form-control, .form-control-wrapper .form-control:focus, .form-control-wrapper .form-control.focus, .form-control, .form-control:focus, .form-control.focus { + padding: 0; + float: none; + border: 0; + box-shadow: none; + border-radius: 0; + background: transparent; + border-bottom: 1px solid #757575; +} +fieldset[disabled] .form-control:not(textarea):not(select), fieldset[disabled] .form-control:focus:not(textarea):not(select), fieldset[disabled] .form-control.focus:not(textarea):not(select), .form-control-wrapper .form-control:not(textarea):not(select), .form-control-wrapper .form-control:focus:not(textarea):not(select), .form-control-wrapper .form-control.focus:not(textarea):not(select), .form-control:not(textarea):not(select), .form-control:focus:not(textarea):not(select), .form-control.focus:not(textarea):not(select) { + height: 28px; +} +fieldset[disabled] .form-control:disabled, fieldset[disabled] .form-control:focus:disabled, fieldset[disabled] .form-control.focus:disabled, .form-control-wrapper .form-control:disabled, .form-control-wrapper .form-control:focus:disabled, .form-control-wrapper .form-control.focus:disabled, .form-control:disabled, .form-control:focus:disabled, .form-control.focus:disabled { + border-style: dashed; +} + +select.form-control { + height: 23px; +} + +select[multiple].form-control, select[multiple].form-control:focus, select[multiple].form-control.focus { + height: 85px; +} + +.form-control-wrapper { + position: relative; + /* active state */ +} +.form-control-wrapper .form-control:focus, .form-control-wrapper .form-control.focus { + outline: none; +} +.form-control-wrapper .floating-label { + color: #7E7E7E; + font-size: 14px; + position: absolute; + pointer-events: none; + left: 0px; + top: 5px; + transition: 0.2s ease all; + opacity: 0; +} +.form-control-wrapper .form-control:not(.empty) ~ .floating-label { + top: -10px; + font-size: 10px; + opacity: 1; +} +.form-control-wrapper .form-control:focus:invalid ~ .floating-label, .form-control-wrapper .form-control.focus:invalid ~ .floating-label { + color: #F44336; +} +.form-control-wrapper .form-control:focus ~ .material-input:after, .form-control-wrapper .form-control.focus ~ .material-input:after { + background-color: #12B2E7; +} +.form-control-wrapper .form-control:focus:invalid ~ .material-input:before, .form-control-wrapper .form-control:focus:invalid ~ .material-input:after, .form-control-wrapper .form-control.focus:invalid ~ .material-input:before, .form-control-wrapper .form-control.focus:invalid ~ .material-input:after { + background-color: #F44336; +} +.form-control-wrapper .form-control.empty ~ .floating-label { + opacity: 1; +} +.form-control-wrapper .material-input:before { + position: absolute; + content: ""; + width: 100%; + left: 0; + height: 2px; + background-color: #12B2E7; + bottom: -1px; + transform: scaleX(0); + transition: transform 0s; +} +.form-control-wrapper .form-control:focus ~ .material-input:before, .form-control-wrapper .form-control.focus ~ .material-input:before { + transform: scaleX(1); + transition: transform 0.2s ease-out; +} +.form-control-wrapper .material-input:after { + content: ""; + position: absolute; + height: 18px; + width: 100px; + margin-top: -1px; + top: 7px; + left: 0; + pointer-events: none; + opacity: 0.9; + transform-origin: left; +} +.form-control-wrapper .input-lg ~ .material-input:after, .form-control-wrapper .input-group-lg > .form-control ~ .material-input:after, +.form-control-wrapper .input-group-lg > .input-group-addon ~ .material-input:after, +.form-control-wrapper .input-group-lg > .input-group-btn > .btn ~ .material-input:after { + height: 26px; +} +.form-control-wrapper textarea { + resize: inherit; +} +.form-control-wrapper textarea ~ .form-control-highlight { + margin-top: -11px; +} +.form-control-wrapper .form-control:focus ~ .material-input:after, .form-control-wrapper .form-control.focus ~ .material-input:after { + animation: input-highlight 0.3s ease; + animation-fill-mode: forwards; + opacity: 0; +} +.form-control-wrapper select ~ .material-input:after { + display: none; +} + +.form-group.has-warning .material-input:before, .form-group.has-warning input.form-control:focus ~ .material-input:after, .form-group.has-warning input.form-control.focus ~ .material-input:after { + background: #FF5722; +} +.form-group.has-warning .control-label, .form-group.has-warning input.form-control:not(.empty) ~ .floating-label { + color: #FF5722; +} +.form-group.has-error .material-input:before, .form-group.has-error input.form-control:focus ~ .material-input:after, .form-group.has-error input.form-control.focus ~ .material-input:after { + background: #F44336; +} +.form-group.has-error .control-label, .form-group.has-error input.form-control:not(.empty) ~ .floating-label { + color: #F44336; +} +.form-group.has-success .material-input:before, .form-group.has-success input.form-control:focus ~ .material-input:after, .form-group.has-success input.form-control.focus ~ .material-input:after { + background: #0F9D58; +} +.form-group.has-success .control-label, .form-group.has-success input.form-control:not(.empty) ~ .floating-label { + color: #0F9D58; +} +.form-group.has-info .material-input:before, .form-group.has-info input.form-control:focus ~ .material-input:after, .form-group.has-info input.form-control.focus ~ .material-input:after { + background: #03A9F4; +} +.form-group.has-info .control-label, .form-group.has-info input.form-control:not(.empty) ~ .floating-label { + color: #03A9F4; +} + +.input-group .form-control-wrapper { + margin-right: 5px; + margin-left: 5px; + bottom: -10px; +} +.input-group .form-control-wrapper .form-control { + float: none; +} +.input-group .input-group-addon { + border: 0; +} +.input-group .input-group-btn .btn { + border-radius: 4px; +} + +select.form-control { + border: 0; + box-shadow: none; + border-bottom: 1px solid #757575; + border-radius: 0; +} +select.form-control:focus, select.form-control.focus { + box-shadow: none; + border-color: #757575; +} + +@keyframes input-highlight { + 0% { + left: 20%; + transform: scaleX(20%); + } + 99% { + transform: scaleX(0); + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +.form-control-wrapper input[type=file] { + opacity: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; +} + +legend { + border-bottom: 0; +} + +.modal-content { + border-radius: 0; + border: 0; +} +.modal-content .modal-header { + border-bottom: 0; +} +.modal-content .modal-footer { + border-top: 0; +} +.modal-content .modal-footer .btn + .btn { + margin-bottom: 10px; +} + +.list-group { + border-radius: 0; +} +.list-group .list-group-item { + background-color: transparent; + overflow: hidden; + border: 0; + border-radius: 0; + padding: 0 16px; +} +.list-group .list-group-item .row-picture, .list-group .list-group-item .row-action-primary { + float: left; + display: inline-block; + padding-right: 16px; +} +.list-group .list-group-item .row-picture img, .list-group .list-group-item .row-picture i, .list-group .list-group-item .row-picture label, .list-group .list-group-item .row-action-primary img, .list-group .list-group-item .row-action-primary i, .list-group .list-group-item .row-action-primary label { + display: block; + width: 56px; + height: 56px; +} +.list-group .list-group-item .row-picture img, .list-group .list-group-item .row-action-primary img { + background: rgba(0, 0, 0, 0.1); + padding: 1px; +} +.list-group .list-group-item .row-picture img.circle, .list-group .list-group-item .row-action-primary img.circle { + border-radius: 100%; +} +.list-group .list-group-item .row-picture i, .list-group .list-group-item .row-action-primary i { + background: rgba(0, 0, 0, 0.25); + border-radius: 100%; + text-align: center; + line-height: 56px; + font-size: 20px; + color: white; +} +.list-group .list-group-item .row-picture label, .list-group .list-group-item .row-action-primary label { + margin-left: 7px; + margin-right: -7px; + margin-top: 5px; + margin-bottom: -5px; +} +.list-group .list-group-item .row-content { + display: inline-block; + width: calc(100% - 92px); + min-height: 66px; +} +.list-group .list-group-item .row-content .action-secondary { + position: absolute; + right: 16px; + top: 16px; +} +.list-group .list-group-item .row-content .action-secondary i { + font-size: 20px; + color: rgba(0, 0, 0, 0.25); + cursor: pointer; +} +.list-group .list-group-item .row-content .action-secondary ~ * { + max-width: calc(100% - 30px); +} +.list-group .list-group-item .row-content .least-content { + position: absolute; + right: 16px; + top: 0px; + color: rgba(0, 0, 0, 0.54); + font-size: 14px; +} +.list-group .list-group-item .list-group-item-heading { + color: rgba(0, 0, 0, 0.77); + font-size: 20px; + line-height: 29px; +} +.list-group .list-group-separator { + clear: both; + overflow: hidden; + margin-top: 10px; + margin-bottom: 10px; +} +.list-group .list-group-separator:before { + content: ""; + width: calc(100% - 90px); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + float: right; +} + +.navbar { + background-color: #12B2E7; + border: 0; + border-radius: 0; +} +.navbar .navbar-brand { + position: relative; + height: 60px; + line-height: 30px; + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-brand:hover, .navbar .navbar-brand:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; +} +.navbar .navbar-text { + color: rgba(255, 255, 255, 0.84); + margin-top: 20px; + margin-bottom: 20px; +} +.navbar .navbar-nav > li > a { + color: rgba(255, 255, 255, 0.84); + padding-top: 20px; + padding-bottom: 20px; +} +.navbar .navbar-nav > li > a:hover, .navbar .navbar-nav > li > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; +} +.navbar .navbar-nav > .active > a, .navbar .navbar-nav > .active > a:hover, .navbar .navbar-nav > .active > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: rgba(0, 0, 0, 0.05); +} +.navbar .navbar-nav > .disabled > a, .navbar .navbar-nav > .disabled > a:hover, .navbar .navbar-nav > .disabled > a:focus { + color: #E5E5E5; + background-color: transparent; +} +.navbar .navbar-toggle { + border-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-toggle:hover, .navbar .navbar-toggle:focus { + background-color: transparent; +} +.navbar .navbar-toggle .icon-bar { + background-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-collapse, +.navbar .navbar-form { + border-color: rgba(0, 0, 0, 0.1); +} +.navbar .navbar-nav > .open > a, .navbar .navbar-nav > .open > a:hover, .navbar .navbar-nav > .open > a:focus { + background-color: rgba(0, 0, 0, 0.05); + color: rgba(255, 255, 255, 0.84); +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .dropdown-header { + border: 0; + color: rgba(212, 212, 212, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu .divider { + background-color: rgba(255, 255, 255, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu > li > a { + color: rgba(255, 255, 255, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu > li > a:hover, .navbar .navbar-nav .open .dropdown-menu > li > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; + } + .navbar .navbar-nav .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: rgba(0, 0, 0, 0.05); + } + .navbar .navbar-nav .open .dropdown-menu > .disabled > a, .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #E5E5E5; + background-color: transparent; + } +} +.navbar .navbar-link { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-link:hover { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-link { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-link:hover, .navbar .navbar-link:focus { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-link[disabled]:hover, .navbar .navbar-link[disabled]:focus, fieldset[disabled] .navbar .navbar-link:hover, fieldset[disabled] .navbar .navbar-link:focus { + color: #E5E5E5; +} +.navbar .navbar-form { + margin-top: 16px; +} +.navbar .navbar-form .form-control-wrapper .form-control, .navbar .navbar-form .form-control { + border-color: rgba(255, 255, 255, 0.84); + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form .form-control-wrapper .material-input:before, .navbar .navbar-form .form-control-wrapper input:focus ~ .material-input:after { + background-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form ::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form :-moz-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form ::-moz-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form :-ms-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} + +.navbar-inverse { + background-color: #5264AE; +} + +.navbar-white { + background-color: #FFF; +} +.navbar-white .navbar-brand, .navbar-white .navbar-brand:hover, .navbar-white .navbar-brand:focus { + color: rgba(0, 0, 0, 0.84); +} +.navbar-white .navbar-nav > li > a { + color: rgba(0, 0, 0, 0.84); +} +.navbar-white .navbar-nav > li > a:hover, .navbar-white .navbar-nav > li > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: transparent; +} +.navbar-white .navbar-nav > .active > a, .navbar-white .navbar-nav > .active > a:hover, .navbar-white .navbar-nav > .active > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: rgba(0, 0, 0, 0.05); +} +.navbar-white .navbar-nav > .disabled > a, .navbar-white .navbar-nav > .disabled > a:hover, .navbar-white .navbar-nav > .disabled > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: transparent; +} +.navbar-white .navbar-nav > .open > a, .navbar-white .navbar-nav > .open > a:hover, .navbar-white .navbar-nav > .open > a:focus { + background-color: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.84); +} + +.navbar-default { + background-color: #12B2E7; +} + +.navbar-primary { + background-color: #12B2E7; +} + +.navbar-success { + background-color: #0F9D58; +} + +.navbar-info { + background-color: #03A9F4; +} + +.navbar-warning { + background-color: #FF5722; +} + +.navbar-danger { + background-color: #F44336; +} + +.navbar-material-red { + background-color: #F44336; +} + +.navbar-material-pink { + background-color: #E91E63; +} + +.navbar-material-purple { + background-color: #9C27B0; +} + +.navbar-material-deeppurple { + background-color: #673AB7; +} + +.navbar-material-indigo { + background-color: #3F51B5; +} + +.navbar-material-lightblue { + background-color: #03A9F4; +} + +.navbar-material-cyan { + background-color: #00BCD4; +} + +.navbar-material-teal { + background-color: #009688; +} + +.navbar-material-lightgreen { + background-color: #8BC34A; +} + +.navbar-material-lime { + background-color: #CDDC39; +} + +.navbar-material-lightyellow { + background-color: #FFEB3B; +} + +.navbar-material-orange { + background-color: #FF9800; +} + +.navbar-material-deeporange { + background-color: #FF5722; +} + +.navbar-material-grey { + background-color: #9E9E9E; +} + +.navbar-material-bluegrey { + background-color: #607D8B; +} + +.navbar-material-brown { + background-color: #795548; +} + +.navbar-material-lightgrey { + background-color: #ECECEC; +} + +.dropdown-menu { + border: 0; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); +} +.dropdown-menu .divider { + background-color: rgba(229, 229, 229, 0.12); +} +.dropdown-menu li { + overflow: hidden; + position: relative; +} +.dropdown-menu li a:hover { + background: rgba(0, 0, 0, 0.08); +} + +.alert { + border: 0px; + border-radius: 0; +} +.alert a, .alert .alert-link { + color: #FFFFFF; +} + +.alert-default { + background-color: rgba(255, 255, 255, 0.35); + color: rgba(0, 0, 0, 0.84); +} +.alert-default a, .alert-default .alert-link { + color: #000000; +} + +.alert-primary { + color: #FFFFFF; + background-color: rgba(18, 178, 231, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-success { + color: #FFFFFF; + background-color: rgba(15, 157, 88, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-info { + color: #FFFFFF; + background-color: rgba(3, 169, 244, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-warning { + color: #FFFFFF; + background-color: rgba(255, 87, 34, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-danger { + background-color: rgba(244, 67, 54, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-red { + background-color: rgba(244, 67, 54, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-pink { + background-color: rgba(233, 30, 99, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-purple { + background-color: rgba(156, 39, 176, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-deeppurple { + background-color: rgba(103, 58, 183, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-indigo { + background-color: rgba(63, 81, 181, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-lightblue { + background-color: rgba(3, 169, 244, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-cyan { + background-color: rgba(0, 188, 212, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-teal { + background-color: rgba(0, 150, 136, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-lightgreen { + background-color: rgba(139, 195, 74, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-lime { + background-color: rgba(205, 220, 57, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-lightyellow { + background-color: rgba(255, 235, 59, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-orange { + background-color: rgba(255, 152, 0, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-deeporange { + background-color: rgba(255, 87, 34, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-grey { + background-color: rgba(158, 158, 158, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-bluegrey { + background-color: rgba(96, 125, 139, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-brown { + background-color: rgba(121, 85, 72, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.alert-material-lightgrey { + background-color: rgba(236, 236, 236, 0.35); + color: rgba(0, 0, 0, 0.84); +} + +.progress { + height: 4px; + border-radius: 0; + box-shadow: none; + background: #c8c8c8; +} +.progress .progress-bar { + box-shadow: none; +} +.progress .progress-bar-default { + background-color: #12B2E7; +} +.progress .progress-bar-primary { + background-color: #12B2E7; +} +.progress .progress-bar-success { + background-color: #0F9D58; +} +.progress .progress-bar-info { + background-color: #03A9F4; +} +.progress .progress-bar-warning { + background-color: #FF5722; +} +.progress .progress-bar-danger { + background-color: #F44336; +} +.progress .progress-bar-material-red { + background-color: #F44336; +} +.progress .progress-bar-material-pink { + background-color: #E91E63; +} +.progress .progress-bar-material-purple { + background-color: #9C27B0; +} +.progress .progress-bar-material-deeppurple { + background-color: #673AB7; +} +.progress .progress-bar-material-indigo { + background-color: #3F51B5; +} +.progress .progress-bar-material-lightblue { + background-color: #03A9F4; +} +.progress .progress-bar-material-cyan { + background-color: #00BCD4; +} +.progress .progress-bar-material-teal { + background-color: #009688; +} +.progress .progress-bar-material-lightgreen { + background-color: #8BC34A; +} +.progress .progress-bar-material-lime { + background-color: #CDDC39; +} +.progress .progress-bar-material-lightyellow { + background-color: #FFEB3B; +} +.progress .progress-bar-material-orange { + background-color: #FF9800; +} +.progress .progress-bar-material-deeporange { + background-color: #FF5722; +} +.progress .progress-bar-material-grey { + background-color: #9E9E9E; +} +.progress .progress-bar-material-bluegrey { + background-color: #607D8B; +} +.progress .progress-bar-material-brown { + background-color: #795548; +} +.progress .progress-bar-material-lightgrey { + background-color: #ECECEC; +} + +.card { + border-radius: 2px; + margin-bottom: 20px; +} +.card h1, .card h2, .card h3, .card h4, .card h5, .card h6 { + font-weight: 100; + margin: 10px 0; +} +.card .card-body { + padding: 15px; +} +.card .card-actions { + padding: 15px; + text-transform: uppercase; +} +.card .card-actions .main { + font-weight: bold; +} +.card .card-actions a { + font-size: 15px; + margin: 0 15px 0 0; +} +.card .card-actions a:hover { + text-decoration: none; +} +.card img { + max-width: 100%; + max-height: 100%; +} +.card .card-footer { + padding: 15px; + border-top: 1px solid; + border-color: #ECECEC; +} +.card .card-footer .icon { + font-size: 25px; + transition: ease transform 0.5s; +} +.card .card-footer .icon:hover { + text-decoration: none; + transform: transform3d(0, 0, 0, -1px); +} + +.card-default { + background-color: #FFF; + color: #000; +} +.card-default .card-footer, .card-default .card-header { + border-color: #e6e6e6; +} +.card-default a { + color: #000; +} + +.card-primary { + background-color: #12B2E7; + color: #FFFFFF; +} +.card-primary .card-footer, .card-primary .card-header { + border-color: #ECECEC; +} +.card-primary a { + color: #FFFFFF; +} + +.card-success { + background-color: #0F9D58; + color: #FFFFFF; +} +.card-success .card-footer, .card-success .card-header { + border-color: #0b6e3e; +} +.card-success a { + color: #FFFFFF; +} + +.card-info { + background-color: #03A9F4; + color: #FFFFFF; +} +.card-info .card-footer, .card-info .card-header { + border-color: #0286c2; +} +.card-info a { + color: #FFFFFF; +} + +.card-warning { + background-color: #FF5722; + color: #FFFFFF; +} +.card-warning .card-footer, .card-warning .card-header { + border-color: #ff7e55; +} +.card-warning a { + color: #FFFFFF; +} + +.card-danger { + background-color: #F44336; + color: #FFFFFF; +} +.card-danger .card-footer, .card-danger .card-header { + border-color: #ea1c0d; +} +.card-danger a { + color: #FFFFFF; +} + +.card-material-red { + background-color: #F44336; + color: #FFFFFF; +} +.card-material-red .card-footer, .card-material-red .card-header { + border-color: #f77066; +} +.card-material-red a { + color: #FFFFFF; +} + +.card-material-pink { + background-color: #E91E63; + color: #FFFFFF; +} +.card-material-pink .card-footer, .card-material-pink .card-header { + border-color: #c1134e; +} +.card-material-pink a { + color: #FFFFFF; +} + +.card-material-purple { + background-color: #9C27B0; + color: #FFFFFF; +} +.card-material-purple .card-footer, .card-material-purple .card-header { + border-color: #771e86; +} +.card-material-purple a { + color: #FFFFFF; +} + +.card-material-deeppurple { + background-color: #673AB7; + color: #FFFFFF; +} +.card-material-deeppurple .card-footer, .card-material-deeppurple .card-header { + border-color: #8259cb; +} +.card-material-deeppurple a { + color: #FFFFFF; +} + +.card-material-indigo { + background-color: #3F51B5; + color: #FFFFFF; +} +.card-material-indigo .card-footer, .card-material-indigo .card-header { + border-color: #606fc7; +} +.card-material-indigo a { + color: #FFFFFF; +} + +.card-material-lightblue { + background-color: #03A9F4; + color: #fff; +} +.card-material-lightblue .card-footer, .card-material-lightblue .card-header { + border-color: #0286c2; +} +.card-material-lightblue a { + color: #fff; +} + +.card-material-cyan { + background-color: #00BCD4; + color: #FFFFFF; +} +.card-material-cyan .card-footer, .card-material-cyan .card-header { + border-color: #008fa1; +} +.card-material-cyan a { + color: #FFFFFF; +} + +.card-material-teal { + background-color: #009688; + color: #FFFFFF; +} +.card-material-teal .card-footer, .card-material-teal .card-header { + border-color: #00635a; +} +.card-material-teal a { + color: #FFFFFF; +} + +.card-material-lightgreen { + background-color: #8BC34A; + color: #FFFFFF; +} +.card-material-lightgreen .card-footer, .card-material-lightgreen .card-header { + border-color: #71a436; +} +.card-material-lightgreen a { + color: #FFFFFF; +} + +.card-material-lime { + background-color: #CDDC39; + color: #FFFFFF; +} +.card-material-lime .card-footer, .card-material-lime .card-header { + border-color: #b2c022; +} +.card-material-lime a { + color: #FFFFFF; +} + +.card-material-lightyellow { + background-color: #FFEB3B; + color: #080700; +} +.card-material-lightyellow .card-footer, .card-material-lightyellow .card-header { + border-color: #ffe608; +} +.card-material-lightyellow a { + color: #080700; +} + +.card-material-orange { + background-color: #FF9800; + color: #FFFFFF; +} +.card-material-orange .card-footer, .card-material-orange .card-header { + border-color: #cc7a00; +} +.card-material-orange a { + color: #FFFFFF; +} + +.card-material-deeporange { + background-color: #FF5722; + color: #FFFFFF; +} +.card-material-deeporange .card-footer, .card-material-deeporange .card-header { + border-color: #ee3900; +} +.card-material-deeporange a { + color: #FFFFFF; +} + +.card-material-grey { + background-color: #9E9E9E; + color: #FFFFFF; +} +.card-material-grey .card-footer, .card-material-grey .card-header { + border-color: #858585; +} +.card-material-grey a { + color: #FFFFFF; +} + +.card-material-bluegrey { + background-color: #607D8B; + color: #FFFFFF; +} +.card-material-bluegrey .card-footer, .card-material-bluegrey .card-header { + border-color: #4b626d; +} +.card-material-bluegrey a { + color: #FFFFFF; +} + +.card-material-brown { + background-color: #795548; + color: #FFFFFF; +} +.card-material-brown .card-footer, .card-material-brown .card-header { + border-color: #996b5b; +} +.card-material-brown a { + color: #FFFFFF; +} + +.card-material-lightgrey { + background-color: #ECECEC; + color: #e6e6e6; +} +.card-material-lightgrey .card-footer, .card-material-lightgrey .card-header { + border-color: lightgray; +} +.card-material-lightgrey a { + color: #e6e6e6; +} + +.text-warning { + color: #FF5722; +} + +.text-primary { + color: #12B2E7; +} + +.text-danger { + color: #F44336; +} + +.text-success { + color: #0F9D58; +} + +.text-info { + color: #03A9F4; +} + +.nav-tabs { + background: #12B2E7; +} +.nav-tabs > li > a { + color: #FFFFFF; + border: 0; + margin: 0; +} +.nav-tabs > li > a:hover { + background: transparent; + border: 0; +} +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.open > a, .nav-tabs > li.open > a:hover { + background: transparent !important; + border: 0 !important; + color: #FFFFFF !important; + font-weight: 500; +} +.nav-tabs > li.disabled > a, .nav-tabs > li.disabled > a:hover { + color: rgba(255, 255, 255, 0.5); +} + +.popover, .tooltip-inner { + background: #323232; + color: #FFF; + border-radius: 2px; +} + +.tooltip, .tooltip.in { + opacity: 1; +} + +.popover.left .arrow:after, .popover.left .tooltip-arrow, .tooltip.left .arrow:after, .tooltip.left .tooltip-arrow { + border-left-color: #323232; +} +.popover.right .arrow:after, .popover.right .tooltip-arrow, .tooltip.right .arrow:after, .tooltip.right .tooltip-arrow { + border-right-color: #323232; +} +.popover.top .arrow:after, .popover.top .tooltip-arrow, .tooltip.top .arrow:after, .tooltip.top .tooltip-arrow { + border-top-color: #323232; +} +.popover.bottom .arrow:after, .popover.bottom .tooltip-arrow, .tooltip.bottom .arrow:after, .tooltip.bottom .tooltip-arrow { + border-bottom-color: #323232; +} + +.icon-default { + color: rgba(0, 0, 0, 0.84); +} + +.icon-primary { + color: #12B2E7; +} + +.icon-success { + color: #0F9D58; +} + +.icon-info { + color: #03A9F4; +} + +.icon-warning { + color: #FF5722; +} + +.icon-danger { + color: #F44336; +} + +.icon-material-red { + color: #F44336; +} + +.icon-material-pink { + color: #E91E63; +} + +.icon-material-purple { + color: #9C27B0; +} + +.icon-material-deeppurple { + color: #673AB7; +} + +.icon-material-indigo { + color: #3F51B5; +} + +.icon-material-lightblue { + color: #03A9F4; +} + +.icon-material-cyan { + color: #00BCD4; +} + +.icon-material-teal { + color: #009688; +} + +.icon-material-lightgreen { + color: #8BC34A; +} + +.icon-material-lime { + color: #CDDC39; +} + +.icon-material-lightyellow { + color: #FFEB3B; +} + +.icon-material-orange { + color: #FF9800; +} + +.icon-material-deeporange { + color: #FF5722; +} + +.icon-material-grey { + color: #9E9E9E; +} + +.icon-material-bluegrey { + color: #607D8B; +} + +.icon-material-brown { + color: #795548; +} + +.icon-material-lightgrey { + color: #ECECEC; +} + +.snackbar { + background-color: #323232; + color: rgba(255, 255, 255, 0.84); + font-size: 14px; + border-radius: 2px; + height: 0; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + transform: translateY(200%); +} + +.snackbar.snackbar-opened { + padding: 14px 15px; + margin-bottom: 20px; + height: auto; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s; + transform: none; +} + +.snackbar.toast { + border-radius: 200px; +} + +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -ms-touch-action: none; + user-select: none; + box-sizing: border-box; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} + +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; + box-sizing: border-box; +} + +.noUi-stacking .noUi-handle { + z-index: 10; +} + +.noUi-stacking + .noUi-origin { + *z-index: -1; +} + +.noUi-state-tap .noUi-origin { + transition: left 0.3s, top 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + +.noUi-horizontal { + height: 10px; +} + +.noUi-horizontal .noUi-handle { + box-sizing: border-box; + width: 12px; + height: 12px; + left: -10px; + top: -5px; +} + +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} + +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} + +.noUi-background { + height: 2px; + margin: 20px 0; +} + +.noUi-origin { + margin: 0; + border-radius: 0; + height: 2px; + background: #c8c8c8; +} +.noUi-origin[style^="left: 0"] .noUi-handle { + background-color: #fff; + border: 2px solid #c8c8c8; +} + +.noUi-target { + border-radius: 2px; +} + +.noUi-handle { + border-radius: 100%; + cursor: default; + transition: all 0.2s ease-out; + border: 1px solid; +} + +.noUi-horizontal { + height: 2px; + margin: 15px 0; +} + +[disabled].noUi-slider { + opacity: 0.5; +} + +[disabled] .noUi-handle { + cursor: not-allowed; +} + +.slider { + background: #c8c8c8; +} + +.withripple { + position: relative; +} + +.ripple-wrapper { + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 2px; +} + +.ripple { + position: absolute; + width: 20px; + height: 20px; + margin-left: -10px; + margin-top: -10px; + border-radius: 100%; + background-color: rgba(0, 0, 0, 0.05); + transform: scale(1); + transform-origin: 50%; + opacity: 0; + pointer-events: none; +} + +.ripple.ripple-on { + transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + opacity: 1; +} + +.ripple.ripple-out { + transition: opacity 0.1s linear 0s !important; + opacity: 0; +} + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -ms-touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-target { + position: relative; + direction: ltr; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} + +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; +} + +.noUi-stacking .noUi-handle { + /* This class is applied to the lower origin when + its values is > 50%. */ + z-index: 10; +} + +.noUi-stacking + .noUi-origin { + /* Fix stacking order in IE7, which incorrectly + creates a new context for the origins. */ + *z-index: -1; +} + +.noUi-state-tap .noUi-origin { + -webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + +/* Painting and performance; + * Browsers can paint handles in their own layer. + */ +.noUi-base { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +/* Slider size and handle placement; + */ +.noUi-horizontal { + height: 18px; +} + +.noUi-horizontal .noUi-handle { + width: 34px; + height: 28px; + left: -17px; + top: -6px; +} + +.noUi-vertical { + width: 18px; +} + +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} + +/* Styling; + */ +.noUi-connect { + -webkit-transition: background 450ms; + transition: background 450ms; +} + +/* Handles and cursors; + */ +.noUi-dragable { + cursor: w-resize; +} + +.noUi-vertical .noUi-dragable { + cursor: n-resize; +} + +/* Handle stripes; + */ +/* Disabled state; + */ +[disabled] .noUi-handle { + cursor: not-allowed; +} + +.xbbcode-b { + font-weight: bold; +} + +.xbbcode-center { + margin-left: auto; + margin-right: auto; + display: block; + text-align: center; +} + +.xbbcode-code { + white-space: pre-wrap; + font-family: monospace; +} + +.xbbcode-i { + font-style: italic; +} + +.xbbcode-justify { + display: block; + text-align: justify; +} + +.xbbcode-left { + display: block; + text-align: left; +} + +.xbbcode-right { + display: block; + text-align: right; +} + +.xbbcode-s { + text-decoration: line-through; +} + +.xbbcode-size-4 { + font-size: 4px; +} + +.xbbcode-size-5 { + font-size: 5px; +} + +.xbbcode-size-6 { + font-size: 6px; +} + +.xbbcode-size-7 { + font-size: 7px; +} + +.xbbcode-size-8 { + font-size: 8px; +} + +.xbbcode-size-9 { + font-size: 9px; +} + +.xbbcode-size-10 { + font-size: 10px; +} + +.xbbcode-size-11 { + font-size: 11px; +} + +.xbbcode-size-12 { + font-size: 12px; +} + +.xbbcode-size-13 { + font-size: 13px; +} + +.xbbcode-size-14 { + font-size: 14px; +} + +.xbbcode-size-15 { + font-size: 15px; +} + +.xbbcode-size-16 { + font-size: 16px; +} + +.xbbcode-size-17 { + font-size: 17px; +} + +.xbbcode-size-18 { + font-size: 18px; +} + +.xbbcode-size-19 { + font-size: 19px; +} + +.xbbcode-size-20 { + font-size: 20px; +} + +.xbbcode-size-21 { + font-size: 21px; +} + +.xbbcode-size-22 { + font-size: 22px; +} + +.xbbcode-size-23 { + font-size: 23px; +} + +.xbbcode-size-24 { + font-size: 24px; +} + +.xbbcode-size-25 { + font-size: 25px; +} + +.xbbcode-size-26 { + font-size: 26px; +} + +.xbbcode-size-27 { + font-size: 27px; +} + +.xbbcode-size-28 { + font-size: 28px; +} + +.xbbcode-size-29 { + font-size: 29px; +} + +.xbbcode-size-30 { + font-size: 30px; +} + +.xbbcode-size-31 { + font-size: 31px; +} + +.xbbcode-size-32 { + font-size: 32px; +} + +.xbbcode-size-33 { + font-size: 33px; +} + +.xbbcode-size-34 { + font-size: 34px; +} + +.xbbcode-size-35 { + font-size: 35px; +} + +.xbbcode-size-36 { + font-size: 36px; +} + +.xbbcode-size-37 { + font-size: 37px; +} + +.xbbcode-size-38 { + font-size: 38px; +} + +.xbbcode-size-39 { + font-size: 39px; +} + +.xbbcode-size-40 { + font-size: 40px; +} + +.xbbcode-u { + text-decoration: underline; +} + +.xbbcode-table { + border-collapse: collapse; +} + +.xbbcode-table, .xbbcode-th, .xbbcode-td { + border: 1px solid #666; +} + +html { + -webkit-box-sizing: "border-box"; + -moz-box-sizing: "border-box"; + box-sizing: "border-box"; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +embed, +img, +object, +video { + max-width: 100%; + height: auto; +} + +/** + * Standard transitions + */ +.btn-flat-watched:before, .btn-flat-watched, .btn-flat-more:before, .btn-flat-more, .btn-flat-download:before, .btn-flat-download, .btn-flat-stream:before, .btn-flat-stream, .btn-flat-add:before, .btn-flat-add, .btn-flat-play:before, .btn-flat-play, .imdblink:before, .imdblink, .landing-set .set__more a:before, .landing-set .set__more a, .set-page .entity-set .more a:before, .set-page .entity-set .more a, .player .slider-bar, .player .controls-primary .control, +.player .controls-secondary .control, .local-playlist-list .region-first .new-list:before, .local-playlist-list .region-first .new-list, .filters-container .filter-btn:before, .filters-container .filter-btn, .youtube-list .flat-btn { + -webkit-transition: 0.3s all linear; + -o-transition: 0.3s all linear; + transition: 0.3s all linear; +} + +/** + * Loading box. + */ +@-moz-keyframes wave { + 0% { + background-position: 0% bottom; + } + 100% { + background-position: 100% bottom; + } +} +@-webkit-keyframes wave { + 0% { + background-position: 0% bottom; + } + 100% { + background-position: 100% bottom; + } +} +@-o-keyframes wave { + 0% { + background-position: 0% bottom; + } + 100% { + background-position: 100% bottom; + } +} +@-ms-keyframes wave { + 0% { + background-position: 0% bottom; + } + 100% { + background-position: 100% bottom; + } +} +@keyframes wave { + 0% { + background-position: 0% bottom; + } + 100% { + background-position: 100% bottom; + } +} +#files-container .loading-box { + -webkit-animation: none; + -o-animation: none; + animation: none; +} + +/** + * Pulsing logo + */ +@-moz-keyframes pulsate { + 50% { + text-shadow: 0 0 25px rgba(255, 255, 255, 0.55); + color: #fff; + } +} +@-webkit-keyframes pulsate { + 50% { + text-shadow: 0 0 25px rgba(255, 255, 255, 0.55); + color: #fff; + } +} +@-o-keyframes pulsate { + 50% { + text-shadow: 0 0 25px rgba(255, 255, 255, 0.55); + color: #fff; + } +} +@-ms-keyframes pulsate { + 50% { + text-shadow: 0 0 25px rgba(255, 255, 255, 0.55); + color: #fff; + } +} +@keyframes pulsate { + 50% { + text-shadow: 0 0 25px rgba(255, 255, 255, 0.55); + color: #fff; + } +} +/** + * Style a search box, should be applied on wrapper with 1 text field inside it. + */ +.search-box, .filters-container .options-search-wrapper { + position: relative; + padding-right: 1em; +} +.search-box:before, .filters-container .options-search-wrapper:before { + content: "\e65f"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.search-box:before, .filters-container .options-search-wrapper:before { + top: 8px; + left: 6px; + position: absolute; + z-index: 20; + font-size: 130%; + opacity: 0.8; +} +.search-box input, .filters-container .options-search-wrapper input { + color: #666; + border: none; + width: 100%; + padding: 0.5em; + padding-left: 2em; + background: rgba(255, 255, 255, 0.5); + margin-bottom: 1em; +} +.search-box input:focus, .filters-container .options-search-wrapper input:focus { + background: rgba(255, 255, 255, 0.9); + outline: none; +} + +/** + * A mixin to scale and crop an image. Called on its parent wrapper. + */ +.card-detail .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} + +/** + * Standard centered container. + */ +/** + * Get a layout value for a given breakpoint. + */ +/** + * Set a property based on its layout for all breakpoints. + * + * @param $key + * The item you want the value for. e.g. height-footer + * @param $property + * The property you want to assign that to e.g. margin-right or width + */ +/** + * Standard padding for a content region. + */ +.landing-set .set__more, .landing-set .set__collection, .region-content, .landing-page .landing-section { + position: relative; + padding: 12px 12px 30px 12px; +} +.with-header .landing-set .set__more, .landing-set .with-header .set__more, .with-header .landing-set .set__collection, .landing-set .with-header .set__collection, .with-header .region-content, .with-header .landing-page .landing-section, .landing-page .with-header .landing-section { + padding: 10px 20px 50px 20px; +} + +/** + * Clearfix. + */ +.icon-browser ul, .kodi-remote .secondary-controls, .section-content, .content-container.with-sidebar, .details-header .region-details-top, .help--page .help--overview--report ul li, form .inline-list, .youtube-list li, .form-imageselect__loader, .form-imageselect__thumbs, #modal-window.style-edit-form .form-content-region, .folder-layout .folder-container, .form-imageselect__tabs, .edit-form .form-tabs { + *zoom: 1; +} +.icon-browser ul:after, .kodi-remote .secondary-controls:after, .section-content:after, .content-container.with-sidebar:after, .details-header .region-details-top:after, .help--page .help--overview--report ul li:after, form .inline-list:after, .youtube-list li:after, .form-imageselect__loader:after, .form-imageselect__thumbs:after, #modal-window.style-edit-form .form-content-region:after, .folder-layout .folder-container:after, .form-imageselect__tabs:after, .edit-form .form-tabs:after { + content: ""; + display: table; + clear: both; +} + +.help--page .region-content-wrapper h2, .help--page .region-content-wrapper h3, .help--page .region-content-wrapper h4 { + margin-top: 1.5em; +} +.help--page .region-content-wrapper h2 { + font-size: 1.6em; + font-weight: bold; + border-bottom: 1px dotted #ddd; + padding-bottom: 0.5em; + margin-top: 2em; +} +.help--page .region-content-wrapper h3 { + font-size: 1.3em; + color: #666; + margin-bottom: 1em; +} +.help--page .region-content-wrapper h4 { + font-size: 1.2em; +} +.help--page .region-content-wrapper p, .help--page .region-content-wrapper li { + line-height: 1.8; +} +.help--page .region-content-wrapper ul, .help--page .region-content-wrapper ol { + padding-left: 1.5em; +} +.help--page .region-content-wrapper ul li, .help--page .region-content-wrapper ol li { + list-style: disc; + margin: 0.5em 0; +} +.help--page .region-content-wrapper ol li { + list-style-type: decimal; +} +.help--page .region-content-wrapper code { + border: 1px solid rgba(186, 193, 200, 0.33); + background: rgba(221, 221, 221, 0.5); + color: #2B2F30; +} +.help--page .region-content-wrapper code:hover { + color: #12B2E7; + border-color: #12B2E7; +} +.help--page .region-content-wrapper pre { + border: 1px dashed #BAC1C8; + margin: 1em; + margin-left: 0; +} +.help--page .region-content-wrapper pre code { + background: none; + border: none; +} +.help--page .region-content-wrapper pre code:hover { + color: inherit; + border-color: inherit; +} +.help--page .region-content-wrapper img { + width: 100%; + max-width: 1000px; +} + +/** + * Remove padding and margin from an element. + */ +/** + * Remove standard styles from a list. + * Call on ul or ol + */ +.mobile-menu, +.options-list { + margin: 0; + padding: 0; +} +.mobile-menu li, +.options-list li { + margin: 0; + padding: 0; + list-style: none; +} + +/** + * Reset position sets all edges to zero. + */ +.region-first .nav-sub h3, .local-playlist-list .region-first h3, .filters-container h3, .browser-page .region-first h3, .sidebar-section h3 { + font-size: 15px; + text-transform: uppercase; + margin: 1em 0; + color: #888888; + font-weight: bold; +} + +.folder-layout .empty--page-content, .text-dim { + opacity: 0.4; + font-size: 0.85em; +} + +.landing-set .set__header, .landing-page .region-content h3, +.landing-page h3.set-header { + background: rgba(255, 255, 255, 0.75); + padding: 1em 1em; + position: relative; +} +.landing-set .set__header, .landing-page .region-content h3, +.landing-page h3.set-header, .landing-set .set__header h2, .landing-page .region-content h3 h2, +.landing-page h3.set-header h2, .landing-set .set__header h3, +.landing-page h3.set-header h3 { + font-size: 18px; + margin: 0; +} +.landing-set .set__header h2, .landing-page .region-content h3 h2, +.landing-page h3.set-header h2, .landing-set .set__header h3, .landing-page .region-content h3 h3, +.landing-page h3.set-header h3 { + text-transform: capitalize; +} + +.search-no-result, .empty-result h2 { + text-align: center; + margin-top: 10%; + font-size: 1.8em; + color: #a8a7a6; +} + +.modal ul.options { + margin: 0; + padding: 0; +} +.modal ul.options li { + -webkit-transition: 0.2s all linear; + -o-transition: 0.2s all linear; + transition: 0.2s all linear; + padding: 0.5em; + border-bottom: 1px solid rgba(229, 229, 229, 0.6); + cursor: pointer; + text-transform: capitalize; +} +.modal ul.options li:hover { + background: rgba(229, 229, 229, 0.7); +} +.modal ul.options li:last-child { + border: 0; +} + +.form-imageselect__tabs, .edit-form .form-tabs { + background: #ddd; + margin-bottom: 1em; + padding: 0.5em 0.5em 0; +} +.form-imageselect__tabs li, .edit-form .form-tabs li { + cursor: pointer; + float: left; + padding: 0.5em 1em; +} +.form-imageselect__tabs li.active, .edit-form .form-tabs li.active { + background: #fff; + color: #12B2E7; +} +.form-imageselect__tabs li:hover, .edit-form .form-tabs li:hover { + color: #12B2E7; +} + +/** + * Get a card layout + */ +/** + * The card base typography + */ +/** + * Set artwork size for cards not using the card mixin + */ +/** + * Artwork starts off at 2/3 of original size then full size on larger screens. + */ +/** + * The card mixin + */ +/** + * Extendables. + */ +.card-grid--square .card { + color: #888888; + width: 159px; + height: 216px; + margin: 5px; + background: #fff; + position: relative; + overflow: hidden; +} +.card-grid--square .card a { + color: #888888; +} +.card-grid--square .card .title a { + color: #2B2F30; +} +.card-grid--square .card .subtitle { + font-size: 85%; + margin-top: 5px; +} +.card-grid--square .card .dropdown i, +.card-grid--square .card .actions li, +.card-grid--square .card .play { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--square .card .dropdown i:hover, +.card-grid--square .card .actions li:hover, +.card-grid--square .card .play:hover { + color: #fff; +} +.card-grid--square .card .record { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--square .card .record:hover { + color: #bf0a07; +} +.card-grid--square .ph.card { + opacity: 0.1; + -webkit-box-shadow: none; + box-shadow: none; +} +.card-grid--square .card .artwork { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 159px; + height: 159px; + position: relative; + background: #ccc 50% 50% no-repeat; + background-size: cover; +} +.card-grid--square .card .artwork img { + display: block; + vertical-align: middle; + width: 159px; + margin-top: 0; +} +.card-grid--square .card .artwork .thumb { + width: 159px; + height: 159px; + background-position: 50% 0; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.card-grid--square .card .artwork a { + display: block; +} +.card-grid--square .card .artwork .thumb:after { + content: ""; + top: 0; + right: 0; + left: 0; + position: absolute; + height: 216px; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + opacity: 0; + -webkit-transition: 0.1s all linear; + -o-transition: 0.1s all linear; + transition: 0.1s all linear; +} +.card-grid--square .card .entity-progress { + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: auto; + z-index: 20; +} +.card-grid--square .card .entity-progress .current-progress { + height: 2px; + background: #12B2E7; +} +.card-grid--square .card .watched-tick { + color: #12B2E7; + right: 10px; + bottom: 3px; + position: absolute; + font-size: 125%; + display: none; +} +.card-grid--square .card .watched-tick:before { + content: "\e899"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .watched { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--square .card .watched:before { + content: "\e8e2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .watched:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.thumbs-page .card-grid--square .card .watched, .card-grid--square .thumbs-page .card .watched { + display: none; +} +.card-grid--square .is-watched.card .watched { + color: #12B2E7; +} +.card-grid--square .is-watched.card .watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.card-grid--square .card .meta { + position: relative; + padding: 8px 10px; + width: 159px; +} +.card-grid--square .card .meta .title { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--square .card .meta .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--square .card .meta .subtitle { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--square .card .meta .subtitle:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--square .card .play { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + bottom: 0; + left: 0; + position: absolute; + font-size: 220%; + display: none; + z-index: 20; +} +.card-grid--square .card .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .play:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--square .card .record { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + right: 10px; + bottom: 7px; + position: absolute; + font-size: 150%; + display: none; + z-index: 20; +} +.card-grid--square .card .record:before { + content: "\e7da"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .record:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--square .card .dropdown { + top: 5px; + right: 0; + position: absolute; +} +.card-grid--square .card .dropdown i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + z-index: 20; + font-size: 180%; + display: none; +} +.card-grid--square .card .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--square .card .actions { + top: 10px; + right: 35px; + position: absolute; + display: table; + display: none; +} +.card-grid--square .card .actions .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--square .card .actions .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--square .card .actions .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-grid--square .card .actions .thumbs, .card-grid--square .disable-thumbs .card .actions .thumbs { + display: none; +} +.card-grid--square .card .actions li { + float: left; + margin-left: 3px; +} +.card-grid--square .card .actions li:before { + display: table-cell !important; +} +.card-grid--square .card:hover .artwork .thumb:after { + opacity: 1; +} +.card-grid--square .card:hover .actions, +.card-grid--square .card:hover .dropdown i, +.card-grid--square .card:hover .play { + display: table; +} +.card-grid--square .card:hover .record { + display: table; +} +.card-grid--square .selected.card { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .card-grid--square .selected.card, .card-grid--square .active-player-local .selected.card { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .card-grid--square .selected.card:before, .card-grid--square .active-player-local .selected.card:before { + border-color: #DB2464; +} +.card-grid--square .selected.card:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.card-grid--square .selected.card .current-progress { + display: none; +} +.card-grid--square .card .dropdown-menu { + left: auto; + right: 0px; + top: -7px; +} +.card-grid--square .thumbs-up.card .actions .thumbs { + color: #12B2E7; +} + +.card-grid--wide .card { + color: #888888; + width: 276px; + height: 170px; + margin: 5px; + background: #fff; + position: relative; + overflow: hidden; +} +.card-grid--wide .card a { + color: #888888; +} +.card-grid--wide .card .title a { + color: #2B2F30; +} +.card-grid--wide .card .subtitle { + font-size: 85%; + margin-top: 5px; +} +.card-grid--wide .card .dropdown i, +.card-grid--wide .card .actions li, +.card-grid--wide .card .play { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--wide .card .dropdown i:hover, +.card-grid--wide .card .actions li:hover, +.card-grid--wide .card .play:hover { + color: #fff; +} +.card-grid--wide .card .record { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--wide .card .record:hover { + color: #bf0a07; +} +.card-grid--wide .ph.card { + opacity: 0.1; + -webkit-box-shadow: none; + box-shadow: none; +} +.card-grid--wide .card .artwork { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 276px; + height: 138px; + position: relative; + background: #ccc 50% 50% no-repeat; + background-size: cover; +} +.card-grid--wide .card .artwork img { + display: block; + vertical-align: middle; + width: 276px; + margin-top: 20%; +} +.card-grid--wide .card .artwork .thumb { + width: 276px; + height: 138px; + background-position: 50% 20%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.card-grid--wide .card .artwork a { + display: block; +} +.card-grid--wide .card .artwork .thumb:after { + content: ""; + top: 0; + right: 0; + left: 0; + position: absolute; + height: 170px; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + opacity: 0; + -webkit-transition: 0.1s all linear; + -o-transition: 0.1s all linear; + transition: 0.1s all linear; +} +.card-grid--wide .card .entity-progress { + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: auto; + z-index: 20; +} +.card-grid--wide .card .entity-progress .current-progress { + height: 2px; + background: #12B2E7; +} +.card-grid--wide .card .watched-tick { + color: #12B2E7; + right: 10px; + bottom: 3px; + position: absolute; + font-size: 125%; + display: none; +} +.card-grid--wide .card .watched-tick:before { + content: "\e899"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .watched { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--wide .card .watched:before { + content: "\e8e2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .watched:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.thumbs-page .card-grid--wide .card .watched, .card-grid--wide .thumbs-page .card .watched { + display: none; +} +.card-grid--wide .is-watched.card .watched { + color: #12B2E7; +} +.card-grid--wide .is-watched.card .watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.card-grid--wide .card .meta { + position: relative; + padding: 8px 10px; + width: 276px; +} +.card-grid--wide .card .meta .title { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--wide .card .meta .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--wide .card .meta .subtitle { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--wide .card .meta .subtitle:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--wide .card .play { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + bottom: 0; + left: 0; + position: absolute; + font-size: 220%; + display: none; + z-index: 20; +} +.card-grid--wide .card .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .play:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--wide .card .record { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + right: 10px; + bottom: 7px; + position: absolute; + font-size: 150%; + display: none; + z-index: 20; +} +.card-grid--wide .card .record:before { + content: "\e7da"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .record:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--wide .card .dropdown { + top: 5px; + right: 0; + position: absolute; +} +.card-grid--wide .card .dropdown i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + z-index: 20; + font-size: 180%; + display: none; +} +.card-grid--wide .card .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--wide .card .actions { + top: 10px; + right: 35px; + position: absolute; + display: table; + display: none; +} +.card-grid--wide .card .actions .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--wide .card .actions .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--wide .card .actions .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-grid--wide .card .actions .thumbs, .card-grid--wide .disable-thumbs .card .actions .thumbs { + display: none; +} +.card-grid--wide .card .actions li { + float: left; + margin-left: 3px; +} +.card-grid--wide .card .actions li:before { + display: table-cell !important; +} +.card-grid--wide .card:hover .artwork .thumb:after { + opacity: 1; +} +.card-grid--wide .card:hover .actions, +.card-grid--wide .card:hover .dropdown i, +.card-grid--wide .card:hover .play { + display: table; +} +.card-grid--wide .card:hover .record { + display: table; +} +.card-grid--wide .selected.card { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .card-grid--wide .selected.card, .card-grid--wide .active-player-local .selected.card { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .card-grid--wide .selected.card:before, .card-grid--wide .active-player-local .selected.card:before { + border-color: #DB2464; +} +.card-grid--wide .selected.card:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.card-grid--wide .selected.card .current-progress { + display: none; +} +.card-grid--wide .card .dropdown-menu { + left: auto; + right: 0px; + top: -7px; +} +.card-grid--wide .thumbs-up.card .actions .thumbs { + color: #12B2E7; +} + +.card-grid--musicvideo .card, +.card-grid--episode .card { + color: #888888; + width: 275px; + height: 196px; + margin: 5px; + background: #fff; + position: relative; + overflow: hidden; +} +.card-grid--musicvideo .card a, +.card-grid--episode .card a { + color: #888888; +} +.card-grid--musicvideo .card .title a, +.card-grid--episode .card .title a { + color: #2B2F30; +} +.card-grid--musicvideo .card .subtitle, +.card-grid--episode .card .subtitle { + font-size: 85%; + margin-top: 5px; +} +.card-grid--musicvideo .card .dropdown i, +.card-grid--episode .card .dropdown i, +.card-grid--musicvideo .card .actions li, +.card-grid--episode .card .actions li, +.card-grid--musicvideo .card .play, +.card-grid--episode .card .play { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--musicvideo .card .dropdown i:hover, +.card-grid--episode .card .dropdown i:hover, +.card-grid--musicvideo .card .actions li:hover, +.card-grid--episode .card .actions li:hover, +.card-grid--musicvideo .card .play:hover, +.card-grid--episode .card .play:hover { + color: #fff; +} +.card-grid--musicvideo .card .record, +.card-grid--episode .card .record { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--musicvideo .card .record:hover, +.card-grid--episode .card .record:hover { + color: #bf0a07; +} +.card-grid--musicvideo .ph.card, +.card-grid--episode .ph.card { + opacity: 0.1; + -webkit-box-shadow: none; + box-shadow: none; +} +.card-grid--musicvideo .card .artwork, +.card-grid--episode .card .artwork { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 275px; + height: 138px; + position: relative; + background: #ccc 50% 50% no-repeat; + background-size: cover; +} +.card-grid--musicvideo .card .artwork img, +.card-grid--episode .card .artwork img { + display: block; + vertical-align: middle; + width: 275px; + margin-top: 50%; +} +.card-grid--musicvideo .card .artwork .thumb, +.card-grid--episode .card .artwork .thumb { + width: 275px; + height: 138px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.card-grid--musicvideo .card .artwork a, +.card-grid--episode .card .artwork a { + display: block; +} +.card-grid--musicvideo .card .artwork .thumb:after, +.card-grid--episode .card .artwork .thumb:after { + content: ""; + top: 0; + right: 0; + left: 0; + position: absolute; + height: 196px; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + opacity: 0; + -webkit-transition: 0.1s all linear; + -o-transition: 0.1s all linear; + transition: 0.1s all linear; +} +.card-grid--musicvideo .card .entity-progress, +.card-grid--episode .card .entity-progress { + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: auto; + z-index: 20; +} +.card-grid--musicvideo .card .entity-progress .current-progress, +.card-grid--episode .card .entity-progress .current-progress { + height: 2px; + background: #12B2E7; +} +.card-grid--musicvideo .card .watched-tick, +.card-grid--episode .card .watched-tick { + color: #12B2E7; + right: 10px; + bottom: 3px; + position: absolute; + font-size: 125%; + display: none; +} +.card-grid--musicvideo .card .watched-tick:before, +.card-grid--episode .card .watched-tick:before { + content: "\e899"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .watched, +.card-grid--episode .card .watched { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--musicvideo .card .watched:before, +.card-grid--episode .card .watched:before { + content: "\e8e2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .watched:before, +.card-grid--episode .card .watched:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.thumbs-page .card-grid--musicvideo .card .watched, .card-grid--musicvideo .thumbs-page .card .watched, +.thumbs-page .card-grid--episode .card .watched, +.card-grid--episode .thumbs-page .card .watched { + display: none; +} +.card-grid--musicvideo .is-watched.card .watched, +.card-grid--episode .is-watched.card .watched { + color: #12B2E7; +} +.card-grid--musicvideo .is-watched.card .watched:before, +.card-grid--episode .is-watched.card .watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .thumb, +.card-grid--episode .card .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.card-grid--musicvideo .card .meta, +.card-grid--episode .card .meta { + position: relative; + padding: 8px 10px; + width: 275px; +} +.card-grid--musicvideo .card .meta .title, +.card-grid--episode .card .meta .title { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--musicvideo .card .meta .title:after, +.card-grid--episode .card .meta .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--musicvideo .card .meta .subtitle, +.card-grid--episode .card .meta .subtitle { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--musicvideo .card .meta .subtitle:after, +.card-grid--episode .card .meta .subtitle:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--musicvideo .card .play, +.card-grid--episode .card .play { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + bottom: 0; + left: 0; + position: absolute; + font-size: 220%; + display: none; + z-index: 20; +} +.card-grid--musicvideo .card .play:before, +.card-grid--episode .card .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .play:before, +.card-grid--episode .card .play:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--musicvideo .card .record, +.card-grid--episode .card .record { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + right: 10px; + bottom: 7px; + position: absolute; + font-size: 150%; + display: none; + z-index: 20; +} +.card-grid--musicvideo .card .record:before, +.card-grid--episode .card .record:before { + content: "\e7da"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .record:before, +.card-grid--episode .card .record:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--musicvideo .card .dropdown, +.card-grid--episode .card .dropdown { + top: 5px; + right: 0; + position: absolute; +} +.card-grid--musicvideo .card .dropdown i, +.card-grid--episode .card .dropdown i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + z-index: 20; + font-size: 180%; + display: none; +} +.card-grid--musicvideo .card .dropdown i:before, +.card-grid--episode .card .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .dropdown i:before, +.card-grid--episode .card .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--musicvideo .card .actions, +.card-grid--episode .card .actions { + top: 10px; + right: 35px; + position: absolute; + display: table; + display: none; +} +.card-grid--musicvideo .card .actions .thumbs, +.card-grid--episode .card .actions .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--musicvideo .card .actions .thumbs:before, +.card-grid--episode .card .actions .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--musicvideo .card .actions .thumbs:before, +.card-grid--episode .card .actions .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-grid--musicvideo .card .actions .thumbs, .card-grid--musicvideo .disable-thumbs .card .actions .thumbs, +.disable-thumbs .card-grid--episode .card .actions .thumbs, +.card-grid--episode .disable-thumbs .card .actions .thumbs { + display: none; +} +.card-grid--musicvideo .card .actions li, +.card-grid--episode .card .actions li { + float: left; + margin-left: 3px; +} +.card-grid--musicvideo .card .actions li:before, +.card-grid--episode .card .actions li:before { + display: table-cell !important; +} +.card-grid--musicvideo .card:hover .artwork .thumb:after, +.card-grid--episode .card:hover .artwork .thumb:after { + opacity: 1; +} +.card-grid--musicvideo .card:hover .actions, +.card-grid--episode .card:hover .actions, +.card-grid--musicvideo .card:hover .dropdown i, +.card-grid--episode .card:hover .dropdown i, +.card-grid--musicvideo .card:hover .play, +.card-grid--episode .card:hover .play { + display: table; +} +.card-grid--musicvideo .card:hover .record, +.card-grid--episode .card:hover .record { + display: table; +} +.card-grid--musicvideo .selected.card, +.card-grid--episode .selected.card { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .card-grid--musicvideo .selected.card, .card-grid--musicvideo .active-player-local .selected.card, +.active-player-local .card-grid--episode .selected.card, +.card-grid--episode .active-player-local .selected.card { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .card-grid--musicvideo .selected.card:before, .card-grid--musicvideo .active-player-local .selected.card:before, +.active-player-local .card-grid--episode .selected.card:before, +.card-grid--episode .active-player-local .selected.card:before { + border-color: #DB2464; +} +.card-grid--musicvideo .selected.card:before, +.card-grid--episode .selected.card:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.card-grid--musicvideo .selected.card .current-progress, +.card-grid--episode .selected.card .current-progress { + display: none; +} +.card-grid--musicvideo .card .dropdown-menu, +.card-grid--episode .card .dropdown-menu { + left: auto; + right: 0px; + top: -7px; +} +.card-grid--musicvideo .thumbs-up.card .actions .thumbs, +.card-grid--episode .thumbs-up.card .actions .thumbs { + color: #12B2E7; +} + +.card-grid--tall .card { + color: #888888; + width: 159px; + height: 300px; + margin: 5px; + background: #fff; + position: relative; + overflow: hidden; +} +.card-grid--tall .card a { + color: #888888; +} +.card-grid--tall .card .title a { + color: #2B2F30; +} +.card-grid--tall .card .subtitle { + font-size: 85%; + margin-top: 5px; +} +.card-grid--tall .card .dropdown i, +.card-grid--tall .card .actions li, +.card-grid--tall .card .play { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--tall .card .dropdown i:hover, +.card-grid--tall .card .actions li:hover, +.card-grid--tall .card .play:hover { + color: #fff; +} +.card-grid--tall .card .record { + color: rgba(255, 255, 255, 0.8); +} +.card-grid--tall .card .record:hover { + color: #bf0a07; +} +.card-grid--tall .ph.card { + opacity: 0.1; + -webkit-box-shadow: none; + box-shadow: none; +} +.card-grid--tall .card .artwork { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 159px; + height: 235px; + position: relative; + background: #ccc 50% 50% no-repeat; + background-size: cover; +} +.card-grid--tall .card .artwork img { + display: block; + vertical-align: middle; + width: 159px; + margin-top: 0; +} +.card-grid--tall .card .artwork .thumb { + width: 159px; + height: 235px; + background-position: 50% 0; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.card-grid--tall .card .artwork a { + display: block; +} +.card-grid--tall .card .artwork .thumb:after { + content: ""; + top: 0; + right: 0; + left: 0; + position: absolute; + height: 300px; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + opacity: 0; + -webkit-transition: 0.1s all linear; + -o-transition: 0.1s all linear; + transition: 0.1s all linear; +} +.card-grid--tall .card .entity-progress { + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: auto; + z-index: 20; +} +.card-grid--tall .card .entity-progress .current-progress { + height: 2px; + background: #12B2E7; +} +.card-grid--tall .card .watched-tick { + color: #12B2E7; + right: 10px; + bottom: 3px; + position: absolute; + font-size: 125%; + display: none; +} +.card-grid--tall .card .watched-tick:before { + content: "\e899"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .watched { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--tall .card .watched:before { + content: "\e8e2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .watched:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.thumbs-page .card-grid--tall .card .watched, .card-grid--tall .thumbs-page .card .watched { + display: none; +} +.card-grid--tall .is-watched.card .watched { + color: #12B2E7; +} +.card-grid--tall .is-watched.card .watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.card-grid--tall .card .meta { + position: relative; + padding: 8px 10px; + width: 159px; +} +.card-grid--tall .card .meta .title { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--tall .card .meta .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--tall .card .meta .subtitle { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-grid--tall .card .meta .subtitle:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-grid--tall .card .play { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + bottom: 0; + left: 0; + position: absolute; + font-size: 220%; + display: none; + z-index: 20; +} +.card-grid--tall .card .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .play:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--tall .card .record { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + right: 10px; + bottom: 7px; + position: absolute; + font-size: 150%; + display: none; + z-index: 20; +} +.card-grid--tall .card .record:before { + content: "\e7da"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .record:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--tall .card .dropdown { + top: 5px; + right: 0; + position: absolute; +} +.card-grid--tall .card .dropdown i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + z-index: 20; + font-size: 180%; + display: none; +} +.card-grid--tall .card .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-grid--tall .card .actions { + top: 10px; + right: 35px; + position: absolute; + display: table; + display: none; +} +.card-grid--tall .card .actions .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-grid--tall .card .actions .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-grid--tall .card .actions .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-grid--tall .card .actions .thumbs, .card-grid--tall .disable-thumbs .card .actions .thumbs { + display: none; +} +.card-grid--tall .card .actions li { + float: left; + margin-left: 3px; +} +.card-grid--tall .card .actions li:before { + display: table-cell !important; +} +.card-grid--tall .card:hover .artwork .thumb:after { + opacity: 1; +} +.card-grid--tall .card:hover .actions, +.card-grid--tall .card:hover .dropdown i, +.card-grid--tall .card:hover .play { + display: table; +} +.card-grid--tall .card:hover .record { + display: table; +} +.card-grid--tall .selected.card { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .card-grid--tall .selected.card, .card-grid--tall .active-player-local .selected.card { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .card-grid--tall .selected.card:before, .card-grid--tall .active-player-local .selected.card:before { + border-color: #DB2464; +} +.card-grid--tall .selected.card:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.card-grid--tall .selected.card .current-progress { + display: none; +} +.card-grid--tall .card .dropdown-menu { + left: auto; + right: 0px; + top: -7px; +} +.card-grid--tall .thumbs-up.card .actions .thumbs { + color: #12B2E7; +} + +/** + * The card grids. + */ +/** + * Extendables. + */ +.card-grid--tall .card, .card-grid--musicvideo .card, +.card-grid--episode .card, .card-grid--wide .card, .card-grid--square .card { + display: inline-block; +} + +body { + background: #fff; +} + +* { + box-sizing: border-box; +} + +img { + width: 100%; + max-width: auto; + height: auto; +} + +ul, ol { + margin: 0; + padding: 0; +} +ul li, ol li { + margin: 0; + padding: 0; + list-style: none; +} + +a { + color: #12B2E7; + cursor: pointer; +} + +.hidden { + display: none; +} + +input[type=date], +input[type=time], +input[type=datetime-local], +input[type=month] { + line-height: inherit; +} + +.form-control-wrapper textarea, .form-control-wrapper textarea.form-control, +textarea, +textarea.form-control { + resize: vertical; + height: auto !important; +} + +/** + * Material fonts. + */ +@font-face { + font-family: "Material-Design-Icons"; + src: url("../fonts/material/Material-Design-Icons.eot"); + src: url("../fonts/material/Material-Design-Icons.eot?#iefix") format("embedded-opentype"), url("../fonts/material/Material-Design-Icons.woff") format("woff"), url("../fonts/material/Material-Design-Icons.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} +.mdi-action-3d-rotation:before { + content: "\e600"; +} + +.mdi-action-accessibility:before { + content: "\e601"; +} + +.mdi-action-account-balance:before { + content: "\e602"; +} + +.mdi-action-account-balance-wallet:before { + content: "\e603"; +} + +.mdi-action-account-box:before { + content: "\e604"; +} + +.mdi-action-account-child:before { + content: "\e605"; +} + +.mdi-action-account-circle:before { + content: "\e606"; +} + +.mdi-action-add-shopping-cart:before { + content: "\e607"; +} + +.mdi-action-alarm:before { + content: "\e608"; +} + +.mdi-action-alarm-add:before { + content: "\e609"; +} + +.mdi-action-alarm-off:before { + content: "\e60a"; +} + +.mdi-action-alarm-on:before { + content: "\e60b"; +} + +.mdi-action-android:before { + content: "\e60c"; +} + +.mdi-action-announcement:before { + content: "\e60d"; +} + +.mdi-action-aspect-ratio:before { + content: "\e60e"; +} + +.mdi-action-assessment:before { + content: "\e60f"; +} + +.mdi-action-assignment:before { + content: "\e610"; +} + +.mdi-action-assignment-ind:before { + content: "\e611"; +} + +.mdi-action-assignment-late:before { + content: "\e612"; +} + +.mdi-action-assignment-return:before { + content: "\e613"; +} + +.mdi-action-assignment-returned:before { + content: "\e614"; +} + +.mdi-action-assignment-turned-in:before { + content: "\e615"; +} + +.mdi-action-autorenew:before { + content: "\e616"; +} + +.mdi-action-backup:before { + content: "\e617"; +} + +.mdi-action-book:before { + content: "\e618"; +} + +.mdi-action-bookmark:before { + content: "\e619"; +} + +.mdi-action-bookmark-outline:before { + content: "\e61a"; +} + +.mdi-action-bug-report:before { + content: "\e61b"; +} + +.mdi-action-cached:before { + content: "\e61c"; +} + +.mdi-action-class:before { + content: "\e61d"; +} + +.mdi-action-credit-card:before { + content: "\e61e"; +} + +.mdi-action-dashboard:before { + content: "\e61f"; +} + +.mdi-action-delete:before { + content: "\e620"; +} + +.mdi-action-description:before { + content: "\e621"; +} + +.mdi-action-dns:before { + content: "\e622"; +} + +.mdi-action-done:before { + content: "\e623"; +} + +.mdi-action-done-all:before { + content: "\e624"; +} + +.mdi-action-event:before { + content: "\e625"; +} + +.mdi-action-exit-to-app:before { + content: "\e626"; +} + +.mdi-action-explore:before { + content: "\e627"; +} + +.mdi-action-extension:before { + content: "\e628"; +} + +.mdi-action-face-unlock:before { + content: "\e629"; +} + +.mdi-action-favorite:before { + content: "\e62a"; +} + +.mdi-action-favorite-outline:before { + content: "\e62b"; +} + +.mdi-action-find-in-page:before { + content: "\e62c"; +} + +.mdi-action-find-replace:before { + content: "\e62d"; +} + +.mdi-action-flip-to-back:before { + content: "\e62e"; +} + +.mdi-action-flip-to-front:before { + content: "\e62f"; +} + +.mdi-action-get-app:before { + content: "\e630"; +} + +.mdi-action-grade:before { + content: "\e631"; +} + +.mdi-action-group-work:before { + content: "\e632"; +} + +.mdi-action-help:before { + content: "\e633"; +} + +.mdi-action-highlight-remove:before { + content: "\e634"; +} + +.mdi-action-history:before { + content: "\e635"; +} + +.mdi-action-home:before { + content: "\e636"; +} + +.mdi-action-https:before { + content: "\e637"; +} + +.mdi-action-info:before { + content: "\e638"; +} + +.mdi-action-info-outline:before { + content: "\e639"; +} + +.mdi-action-input:before { + content: "\e63a"; +} + +.mdi-action-invert-colors:before { + content: "\e63b"; +} + +.mdi-action-label:before { + content: "\e63c"; +} + +.mdi-action-label-outline:before { + content: "\e63d"; +} + +.mdi-action-language:before { + content: "\e63e"; +} + +.mdi-action-launch:before { + content: "\e63f"; +} + +.mdi-action-list:before { + content: "\e640"; +} + +.mdi-action-lock:before { + content: "\e641"; +} + +.mdi-action-lock-open:before { + content: "\e642"; +} + +.mdi-action-lock-outline:before { + content: "\e643"; +} + +.mdi-action-loyalty:before { + content: "\e644"; +} + +.mdi-action-markunread-mailbox:before { + content: "\e645"; +} + +.mdi-action-note-add:before { + content: "\e646"; +} + +.mdi-action-open-in-browser:before { + content: "\e647"; +} + +.mdi-action-open-in-new:before { + content: "\e648"; +} + +.mdi-action-open-with:before { + content: "\e649"; +} + +.mdi-action-pageview:before { + content: "\e64a"; +} + +.mdi-action-payment:before { + content: "\e64b"; +} + +.mdi-action-perm-camera-mic:before { + content: "\e64c"; +} + +.mdi-action-perm-contact-cal:before { + content: "\e64d"; +} + +.mdi-action-perm-data-setting:before { + content: "\e64e"; +} + +.mdi-action-perm-device-info:before { + content: "\e64f"; +} + +.mdi-action-perm-identity:before { + content: "\e650"; +} + +.mdi-action-perm-media:before { + content: "\e651"; +} + +.mdi-action-perm-phone-msg:before { + content: "\e652"; +} + +.mdi-action-perm-scan-wifi:before { + content: "\e653"; +} + +.mdi-action-picture-in-picture:before { + content: "\e654"; +} + +.mdi-action-polymer:before { + content: "\e655"; +} + +.mdi-action-print:before { + content: "\e656"; +} + +.mdi-action-query-builder:before { + content: "\e657"; +} + +.mdi-action-question-answer:before { + content: "\e658"; +} + +.mdi-action-receipt:before { + content: "\e659"; +} + +.mdi-action-redeem:before { + content: "\e65a"; +} + +.mdi-action-report-problem:before { + content: "\e65b"; +} + +.mdi-action-restore:before { + content: "\e65c"; +} + +.mdi-action-room:before { + content: "\e65d"; +} + +.mdi-action-schedule:before { + content: "\e65e"; +} + +.mdi-action-search:before { + content: "\e65f"; +} + +.mdi-action-settings:before { + content: "\e660"; +} + +.mdi-action-settings-applications:before { + content: "\e661"; +} + +.mdi-action-settings-backup-restore:before { + content: "\e662"; +} + +.mdi-action-settings-bluetooth:before { + content: "\e663"; +} + +.mdi-action-settings-cell:before { + content: "\e664"; +} + +.mdi-action-settings-display:before { + content: "\e665"; +} + +.mdi-action-settings-ethernet:before { + content: "\e666"; +} + +.mdi-action-settings-input-antenna:before { + content: "\e667"; +} + +.mdi-action-settings-input-component:before { + content: "\e668"; +} + +.mdi-action-settings-input-composite:before { + content: "\e669"; +} + +.mdi-action-settings-input-hdmi:before { + content: "\e66a"; +} + +.mdi-action-settings-input-svideo:before { + content: "\e66b"; +} + +.mdi-action-settings-overscan:before { + content: "\e66c"; +} + +.mdi-action-settings-phone:before { + content: "\e66d"; +} + +.mdi-action-settings-power:before { + content: "\e66e"; +} + +.mdi-action-settings-remote:before { + content: "\e66f"; +} + +.mdi-action-settings-voice:before { + content: "\e670"; +} + +.mdi-action-shop:before { + content: "\e671"; +} + +.mdi-action-shopping-basket:before { + content: "\e672"; +} + +.mdi-action-shopping-cart:before { + content: "\e673"; +} + +.mdi-action-shop-two:before { + content: "\e674"; +} + +.mdi-action-speaker-notes:before { + content: "\e675"; +} + +.mdi-action-spellcheck:before { + content: "\e676"; +} + +.mdi-action-star-rate:before { + content: "\e677"; +} + +.mdi-action-stars:before { + content: "\e678"; +} + +.mdi-action-store:before { + content: "\e679"; +} + +.mdi-action-subject:before { + content: "\e67a"; +} + +.mdi-action-swap-horiz:before { + content: "\e67b"; +} + +.mdi-action-swap-vert:before { + content: "\e67c"; +} + +.mdi-action-swap-vert-circle:before { + content: "\e67d"; +} + +.mdi-action-system-update-tv:before { + content: "\e67e"; +} + +.mdi-action-tab:before { + content: "\e67f"; +} + +.mdi-action-tab-unselected:before { + content: "\e680"; +} + +.mdi-action-theaters:before { + content: "\e681"; +} + +.mdi-action-thumb-down:before { + content: "\e682"; +} + +.mdi-action-thumbs-up-down:before { + content: "\e683"; +} + +.mdi-action-thumb-up:before { + content: "\e684"; +} + +.mdi-action-toc:before { + content: "\e685"; +} + +.mdi-action-today:before { + content: "\e686"; +} + +.mdi-action-track-changes:before { + content: "\e687"; +} + +.mdi-action-translate:before { + content: "\e688"; +} + +.mdi-action-trending-down:before { + content: "\e689"; +} + +.mdi-action-trending-neutral:before { + content: "\e68a"; +} + +.mdi-action-trending-up:before { + content: "\e68b"; +} + +.mdi-action-turned-in:before { + content: "\e68c"; +} + +.mdi-action-turned-in-not:before { + content: "\e68d"; +} + +.mdi-action-verified-user:before { + content: "\e68e"; +} + +.mdi-action-view-agenda:before { + content: "\e68f"; +} + +.mdi-action-view-array:before { + content: "\e690"; +} + +.mdi-action-view-carousel:before { + content: "\e691"; +} + +.mdi-action-view-column:before { + content: "\e692"; +} + +.mdi-action-view-day:before { + content: "\e693"; +} + +.mdi-action-view-headline:before { + content: "\e694"; +} + +.mdi-action-view-list:before { + content: "\e695"; +} + +.mdi-action-view-module:before { + content: "\e696"; +} + +.mdi-action-view-quilt:before { + content: "\e697"; +} + +.mdi-action-view-stream:before { + content: "\e698"; +} + +.mdi-action-view-week:before { + content: "\e699"; +} + +.mdi-action-visibility:before { + content: "\e69a"; +} + +.mdi-action-visibility-off:before { + content: "\e69b"; +} + +.mdi-action-wallet-giftcard:before { + content: "\e69c"; +} + +.mdi-action-wallet-membership:before { + content: "\e69d"; +} + +.mdi-action-wallet-travel:before { + content: "\e69e"; +} + +.mdi-action-work:before { + content: "\e69f"; +} + +.mdi-alert-error:before { + content: "\e6a0"; +} + +.mdi-alert-warning:before { + content: "\e6a1"; +} + +.mdi-av-album:before { + content: "\e6a2"; +} + +.mdi-av-timer:before { + content: "\e6a3"; +} + +.mdi-av-closed-caption:before { + content: "\e6a4"; +} + +.mdi-av-equalizer:before { + content: "\e6a5"; +} + +.mdi-av-explicit:before { + content: "\e6a6"; +} + +.mdi-av-fast-forward:before { + content: "\e6a7"; +} + +.mdi-av-fast-rewind:before { + content: "\e6a8"; +} + +.mdi-av-games:before { + content: "\e6a9"; +} + +.mdi-av-hearing:before { + content: "\e6aa"; +} + +.mdi-av-high-quality:before { + content: "\e6ab"; +} + +.mdi-av-loop:before { + content: "\e6ac"; +} + +.mdi-av-mic:before { + content: "\e6ad"; +} + +.mdi-av-mic-none:before { + content: "\e6ae"; +} + +.mdi-av-mic-off:before { + content: "\e6af"; +} + +.mdi-av-movie:before { + content: "\e6b0"; +} + +.mdi-av-my-library-add:before { + content: "\e6b1"; +} + +.mdi-av-my-library-books:before { + content: "\e6b2"; +} + +.mdi-av-my-library-music:before { + content: "\e6b3"; +} + +.mdi-av-new-releases:before { + content: "\e6b4"; +} + +.mdi-av-not-interested:before { + content: "\e6b5"; +} + +.mdi-av-pause:before { + content: "\e6b6"; +} + +.mdi-av-pause-circle-fill:before { + content: "\e6b7"; +} + +.mdi-av-pause-circle-outline:before { + content: "\e6b8"; +} + +.mdi-av-play-arrow:before { + content: "\e6b9"; +} + +.mdi-av-play-circle-fill:before { + content: "\e6ba"; +} + +.mdi-av-play-circle-outline:before { + content: "\e6bb"; +} + +.mdi-av-playlist-add:before { + content: "\e6bc"; +} + +.mdi-av-play-shopping-bag:before { + content: "\e6bd"; +} + +.mdi-av-queue:before { + content: "\e6be"; +} + +.mdi-av-queue-music:before { + content: "\e6bf"; +} + +.mdi-av-radio:before { + content: "\e6c0"; +} + +.mdi-av-recent-actors:before { + content: "\e6c1"; +} + +.mdi-av-repeat:before { + content: "\e6c2"; +} + +.mdi-av-repeat-one:before { + content: "\e6c3"; +} + +.mdi-av-replay:before { + content: "\e6c4"; +} + +.mdi-av-shuffle:before { + content: "\e6c5"; +} + +.mdi-av-skip-next:before { + content: "\e6c6"; +} + +.mdi-av-skip-previous:before { + content: "\e6c7"; +} + +.mdi-av-snooze:before { + content: "\e6c8"; +} + +.mdi-av-stop:before { + content: "\e6c9"; +} + +.mdi-av-subtitles:before { + content: "\e6ca"; +} + +.mdi-av-surround-sound:before { + content: "\e6cb"; +} + +.mdi-av-videocam:before { + content: "\e6cc"; +} + +.mdi-av-videocam-off:before { + content: "\e6cd"; +} + +.mdi-av-video-collection:before { + content: "\e6ce"; +} + +.mdi-av-volume-down:before { + content: "\e6cf"; +} + +.mdi-av-volume-mute:before { + content: "\e6d0"; +} + +.mdi-av-volume-off:before { + content: "\e6d1"; +} + +.mdi-av-volume-up:before { + content: "\e6d2"; +} + +.mdi-av-web:before { + content: "\e6d3"; +} + +.mdi-communication-business:before { + content: "\e6d4"; +} + +.mdi-communication-call:before { + content: "\e6d5"; +} + +.mdi-communication-call-end:before { + content: "\e6d6"; +} + +.mdi-communication-call-made:before { + content: "\e6d7"; +} + +.mdi-communication-call-merge:before { + content: "\e6d8"; +} + +.mdi-communication-call-missed:before { + content: "\e6d9"; +} + +.mdi-communication-call-received:before { + content: "\e6da"; +} + +.mdi-communication-call-split:before { + content: "\e6db"; +} + +.mdi-communication-chat:before { + content: "\e6dc"; +} + +.mdi-communication-clear-all:before { + content: "\e6dd"; +} + +.mdi-communication-comment:before { + content: "\e6de"; +} + +.mdi-communication-contacts:before { + content: "\e6df"; +} + +.mdi-communication-dialer-sip:before { + content: "\e6e0"; +} + +.mdi-communication-dialpad:before { + content: "\e6e1"; +} + +.mdi-communication-dnd-on:before { + content: "\e6e2"; +} + +.mdi-communication-email:before { + content: "\e6e3"; +} + +.mdi-communication-forum:before { + content: "\e6e4"; +} + +.mdi-communication-import-export:before { + content: "\e6e5"; +} + +.mdi-communication-invert-colors-off:before { + content: "\e6e6"; +} + +.mdi-communication-invert-colors-on:before { + content: "\e6e7"; +} + +.mdi-communication-live-help:before { + content: "\e6e8"; +} + +.mdi-communication-location-off:before { + content: "\e6e9"; +} + +.mdi-communication-location-on:before { + content: "\e6ea"; +} + +.mdi-communication-message:before { + content: "\e6eb"; +} + +.mdi-communication-messenger:before { + content: "\e6ec"; +} + +.mdi-communication-no-sim:before { + content: "\e6ed"; +} + +.mdi-communication-phone:before { + content: "\e6ee"; +} + +.mdi-communication-portable-wifi-off:before { + content: "\e6ef"; +} + +.mdi-communication-quick-contacts-dialer:before { + content: "\e6f0"; +} + +.mdi-communication-quick-contacts-mail:before { + content: "\e6f1"; +} + +.mdi-communication-ring-volume:before { + content: "\e6f2"; +} + +.mdi-communication-stay-current-landscape:before { + content: "\e6f3"; +} + +.mdi-communication-stay-current-portrait:before { + content: "\e6f4"; +} + +.mdi-communication-stay-primary-landscape:before { + content: "\e6f5"; +} + +.mdi-communication-stay-primary-portrait:before { + content: "\e6f6"; +} + +.mdi-communication-swap-calls:before { + content: "\e6f7"; +} + +.mdi-communication-textsms:before { + content: "\e6f8"; +} + +.mdi-communication-voicemail:before { + content: "\e6f9"; +} + +.mdi-communication-vpn-key:before { + content: "\e6fa"; +} + +.mdi-content-add:before { + content: "\e6fb"; +} + +.mdi-content-add-box:before { + content: "\e6fc"; +} + +.mdi-content-add-circle:before { + content: "\e6fd"; +} + +.mdi-content-add-circle-outline:before { + content: "\e6fe"; +} + +.mdi-content-archive:before { + content: "\e6ff"; +} + +.mdi-content-backspace:before { + content: "\e700"; +} + +.mdi-content-block:before { + content: "\e701"; +} + +.mdi-content-clear:before { + content: "\e702"; +} + +.mdi-content-content-copy:before { + content: "\e703"; +} + +.mdi-content-content-cut:before { + content: "\e704"; +} + +.mdi-content-content-paste:before { + content: "\e705"; +} + +.mdi-content-create:before { + content: "\e706"; +} + +.mdi-content-drafts:before { + content: "\e707"; +} + +.mdi-content-filter-list:before { + content: "\e708"; +} + +.mdi-content-flag:before { + content: "\e709"; +} + +.mdi-content-forward:before { + content: "\e70a"; +} + +.mdi-content-gesture:before { + content: "\e70b"; +} + +.mdi-content-inbox:before { + content: "\e70c"; +} + +.mdi-content-link:before { + content: "\e70d"; +} + +.mdi-content-mail:before { + content: "\e70e"; +} + +.mdi-content-markunread:before { + content: "\e70f"; +} + +.mdi-content-redo:before { + content: "\e710"; +} + +.mdi-content-remove:before { + content: "\e711"; +} + +.mdi-content-remove-circle:before { + content: "\e712"; +} + +.mdi-content-remove-circle-outline:before { + content: "\e713"; +} + +.mdi-content-reply:before { + content: "\e714"; +} + +.mdi-content-reply-all:before { + content: "\e715"; +} + +.mdi-content-report:before { + content: "\e716"; +} + +.mdi-content-save:before { + content: "\e717"; +} + +.mdi-content-select-all:before { + content: "\e718"; +} + +.mdi-content-send:before { + content: "\e719"; +} + +.mdi-content-sort:before { + content: "\e71a"; +} + +.mdi-content-text-format:before { + content: "\e71b"; +} + +.mdi-content-undo:before { + content: "\e71c"; +} + +.mdi-device-access-alarm:before { + content: "\e71d"; +} + +.mdi-device-access-alarms:before { + content: "\e71e"; +} + +.mdi-device-access-time:before { + content: "\e71f"; +} + +.mdi-device-add-alarm:before { + content: "\e720"; +} + +.mdi-device-airplanemode-off:before { + content: "\e721"; +} + +.mdi-device-airplanemode-on:before { + content: "\e722"; +} + +.mdi-device-battery-20:before { + content: "\e723"; +} + +.mdi-device-battery-30:before { + content: "\e724"; +} + +.mdi-device-battery-50:before { + content: "\e725"; +} + +.mdi-device-battery-60:before { + content: "\e726"; +} + +.mdi-device-battery-80:before { + content: "\e727"; +} + +.mdi-device-battery-90:before { + content: "\e728"; +} + +.mdi-device-battery-alert:before { + content: "\e729"; +} + +.mdi-device-battery-charging-20:before { + content: "\e72a"; +} + +.mdi-device-battery-charging-30:before { + content: "\e72b"; +} + +.mdi-device-battery-charging-50:before { + content: "\e72c"; +} + +.mdi-device-battery-charging-60:before { + content: "\e72d"; +} + +.mdi-device-battery-charging-80:before { + content: "\e72e"; +} + +.mdi-device-battery-charging-90:before { + content: "\e72f"; +} + +.mdi-device-battery-charging-full:before { + content: "\e730"; +} + +.mdi-device-battery-full:before { + content: "\e731"; +} + +.mdi-device-battery-std:before { + content: "\e732"; +} + +.mdi-device-battery-unknown:before { + content: "\e733"; +} + +.mdi-device-bluetooth:before { + content: "\e734"; +} + +.mdi-device-bluetooth-connected:before { + content: "\e735"; +} + +.mdi-device-bluetooth-disabled:before { + content: "\e736"; +} + +.mdi-device-bluetooth-searching:before { + content: "\e737"; +} + +.mdi-device-brightness-auto:before { + content: "\e738"; +} + +.mdi-device-brightness-high:before { + content: "\e739"; +} + +.mdi-device-brightness-low:before { + content: "\e73a"; +} + +.mdi-device-brightness-medium:before { + content: "\e73b"; +} + +.mdi-device-data-usage:before { + content: "\e73c"; +} + +.mdi-device-developer-mode:before { + content: "\e73d"; +} + +.mdi-device-devices:before { + content: "\e73e"; +} + +.mdi-device-dvr:before { + content: "\e73f"; +} + +.mdi-device-gps-fixed:before { + content: "\e740"; +} + +.mdi-device-gps-not-fixed:before { + content: "\e741"; +} + +.mdi-device-gps-off:before { + content: "\e742"; +} + +.mdi-device-location-disabled:before { + content: "\e743"; +} + +.mdi-device-location-searching:before { + content: "\e744"; +} + +.mdi-device-multitrack-audio:before { + content: "\e745"; +} + +.mdi-device-network-cell:before { + content: "\e746"; +} + +.mdi-device-network-wifi:before { + content: "\e747"; +} + +.mdi-device-nfc:before { + content: "\e748"; +} + +.mdi-device-now-wallpaper:before { + content: "\e749"; +} + +.mdi-device-now-widgets:before { + content: "\e74a"; +} + +.mdi-device-screen-lock-landscape:before { + content: "\e74b"; +} + +.mdi-device-screen-lock-portrait:before { + content: "\e74c"; +} + +.mdi-device-screen-lock-rotation:before { + content: "\e74d"; +} + +.mdi-device-screen-rotation:before { + content: "\e74e"; +} + +.mdi-device-sd-storage:before { + content: "\e74f"; +} + +.mdi-device-settings-system-daydream:before { + content: "\e750"; +} + +.mdi-device-signal-cellular-0-bar:before { + content: "\e751"; +} + +.mdi-device-signal-cellular-1-bar:before { + content: "\e752"; +} + +.mdi-device-signal-cellular-2-bar:before { + content: "\e753"; +} + +.mdi-device-signal-cellular-3-bar:before { + content: "\e754"; +} + +.mdi-device-signal-cellular-4-bar:before { + content: "\e755"; +} + +.mdi-device-signal-cellular-connected-no-internet-0-bar:before { + content: "\e756"; +} + +.mdi-device-signal-cellular-connected-no-internet-1-bar:before { + content: "\e757"; +} + +.mdi-device-signal-cellular-connected-no-internet-2-bar:before { + content: "\e758"; +} + +.mdi-device-signal-cellular-connected-no-internet-3-bar:before { + content: "\e759"; +} + +.mdi-device-signal-cellular-connected-no-internet-4-bar:before { + content: "\e75a"; +} + +.mdi-device-signal-cellular-no-sim:before { + content: "\e75b"; +} + +.mdi-device-signal-cellular-null:before { + content: "\e75c"; +} + +.mdi-device-signal-cellular-off:before { + content: "\e75d"; +} + +.mdi-device-signal-wifi-0-bar:before { + content: "\e75e"; +} + +.mdi-device-signal-wifi-1-bar:before { + content: "\e75f"; +} + +.mdi-device-signal-wifi-2-bar:before { + content: "\e760"; +} + +.mdi-device-signal-wifi-3-bar:before { + content: "\e761"; +} + +.mdi-device-signal-wifi-4-bar:before { + content: "\e762"; +} + +.mdi-device-signal-wifi-off:before { + content: "\e763"; +} + +.mdi-device-storage:before { + content: "\e764"; +} + +.mdi-device-usb:before { + content: "\e765"; +} + +.mdi-device-wifi-lock:before { + content: "\e766"; +} + +.mdi-device-wifi-tethering:before { + content: "\e767"; +} + +.mdi-editor-attach-file:before { + content: "\e768"; +} + +.mdi-editor-attach-money:before { + content: "\e769"; +} + +.mdi-editor-border-all:before { + content: "\e76a"; +} + +.mdi-editor-border-bottom:before { + content: "\e76b"; +} + +.mdi-editor-border-clear:before { + content: "\e76c"; +} + +.mdi-editor-border-color:before { + content: "\e76d"; +} + +.mdi-editor-border-horizontal:before { + content: "\e76e"; +} + +.mdi-editor-border-inner:before { + content: "\e76f"; +} + +.mdi-editor-border-left:before { + content: "\e770"; +} + +.mdi-editor-border-outer:before { + content: "\e771"; +} + +.mdi-editor-border-right:before { + content: "\e772"; +} + +.mdi-editor-border-style:before { + content: "\e773"; +} + +.mdi-editor-border-top:before { + content: "\e774"; +} + +.mdi-editor-border-vertical:before { + content: "\e775"; +} + +.mdi-editor-format-align-center:before { + content: "\e776"; +} + +.mdi-editor-format-align-justify:before { + content: "\e777"; +} + +.mdi-editor-format-align-left:before { + content: "\e778"; +} + +.mdi-editor-format-align-right:before { + content: "\e779"; +} + +.mdi-editor-format-bold:before { + content: "\e77a"; +} + +.mdi-editor-format-clear:before { + content: "\e77b"; +} + +.mdi-editor-format-color-fill:before { + content: "\e77c"; +} + +.mdi-editor-format-color-reset:before { + content: "\e77d"; +} + +.mdi-editor-format-color-text:before { + content: "\e77e"; +} + +.mdi-editor-format-indent-decrease:before { + content: "\e77f"; +} + +.mdi-editor-format-indent-increase:before { + content: "\e780"; +} + +.mdi-editor-format-italic:before { + content: "\e781"; +} + +.mdi-editor-format-line-spacing:before { + content: "\e782"; +} + +.mdi-editor-format-list-bulleted:before { + content: "\e783"; +} + +.mdi-editor-format-list-numbered:before { + content: "\e784"; +} + +.mdi-editor-format-paint:before { + content: "\e785"; +} + +.mdi-editor-format-quote:before { + content: "\e786"; +} + +.mdi-editor-format-size:before { + content: "\e787"; +} + +.mdi-editor-format-strikethrough:before { + content: "\e788"; +} + +.mdi-editor-format-textdirection-l-to-r:before { + content: "\e789"; +} + +.mdi-editor-format-textdirection-r-to-l:before { + content: "\e78a"; +} + +.mdi-editor-format-underline:before { + content: "\e78b"; +} + +.mdi-editor-functions:before { + content: "\e78c"; +} + +.mdi-editor-insert-chart:before { + content: "\e78d"; +} + +.mdi-editor-insert-comment:before { + content: "\e78e"; +} + +.mdi-editor-insert-drive-file:before { + content: "\e78f"; +} + +.mdi-editor-insert-emoticon:before { + content: "\e790"; +} + +.mdi-editor-insert-invitation:before { + content: "\e791"; +} + +.mdi-editor-insert-link:before { + content: "\e792"; +} + +.mdi-editor-insert-photo:before { + content: "\e793"; +} + +.mdi-editor-merge-type:before { + content: "\e794"; +} + +.mdi-editor-mode-comment:before { + content: "\e795"; +} + +.mdi-editor-mode-edit:before { + content: "\e796"; +} + +.mdi-editor-publish:before { + content: "\e797"; +} + +.mdi-editor-vertical-align-bottom:before { + content: "\e798"; +} + +.mdi-editor-vertical-align-center:before { + content: "\e799"; +} + +.mdi-editor-vertical-align-top:before { + content: "\e79a"; +} + +.mdi-editor-wrap-text:before { + content: "\e79b"; +} + +.mdi-file-attachment:before { + content: "\e79c"; +} + +.mdi-file-cloud:before { + content: "\e79d"; +} + +.mdi-file-cloud-circle:before { + content: "\e79e"; +} + +.mdi-file-cloud-done:before { + content: "\e79f"; +} + +.mdi-file-cloud-download:before { + content: "\e7a0"; +} + +.mdi-file-cloud-off:before { + content: "\e7a1"; +} + +.mdi-file-cloud-queue:before { + content: "\e7a2"; +} + +.mdi-file-cloud-upload:before { + content: "\e7a3"; +} + +.mdi-file-file-download:before { + content: "\e7a4"; +} + +.mdi-file-file-upload:before { + content: "\e7a5"; +} + +.mdi-file-folder:before { + content: "\e7a6"; +} + +.mdi-file-folder-open:before { + content: "\e7a7"; +} + +.mdi-file-folder-shared:before { + content: "\e7a8"; +} + +.mdi-hardware-cast:before { + content: "\e7a9"; +} + +.mdi-hardware-cast-connected:before { + content: "\e7aa"; +} + +.mdi-hardware-computer:before { + content: "\e7ab"; +} + +.mdi-hardware-desktop-mac:before { + content: "\e7ac"; +} + +.mdi-hardware-desktop-windows:before { + content: "\e7ad"; +} + +.mdi-hardware-dock:before { + content: "\e7ae"; +} + +.mdi-hardware-gamepad:before { + content: "\e7af"; +} + +.mdi-hardware-headset:before { + content: "\e7b0"; +} + +.mdi-hardware-headset-mic:before { + content: "\e7b1"; +} + +.mdi-hardware-keyboard:before { + content: "\e7b2"; +} + +.mdi-hardware-keyboard-alt:before { + content: "\e7b3"; +} + +.mdi-hardware-keyboard-arrow-down:before { + content: "\e7b4"; +} + +.mdi-hardware-keyboard-arrow-left:before { + content: "\e7b5"; +} + +.mdi-hardware-keyboard-arrow-right:before { + content: "\e7b6"; +} + +.mdi-hardware-keyboard-arrow-up:before { + content: "\e7b7"; +} + +.mdi-hardware-keyboard-backspace:before { + content: "\e7b8"; +} + +.mdi-hardware-keyboard-capslock:before { + content: "\e7b9"; +} + +.mdi-hardware-keyboard-control:before { + content: "\e7ba"; +} + +.mdi-hardware-keyboard-hide:before { + content: "\e7bb"; +} + +.mdi-hardware-keyboard-return:before { + content: "\e7bc"; +} + +.mdi-hardware-keyboard-tab:before { + content: "\e7bd"; +} + +.mdi-hardware-keyboard-voice:before { + content: "\e7be"; +} + +.mdi-hardware-laptop:before { + content: "\e7bf"; +} + +.mdi-hardware-laptop-chromebook:before { + content: "\e7c0"; +} + +.mdi-hardware-laptop-mac:before { + content: "\e7c1"; +} + +.mdi-hardware-laptop-windows:before { + content: "\e7c2"; +} + +.mdi-hardware-memory:before { + content: "\e7c3"; +} + +.mdi-hardware-mouse:before { + content: "\e7c4"; +} + +.mdi-hardware-phone-android:before { + content: "\e7c5"; +} + +.mdi-hardware-phone-iphone:before { + content: "\e7c6"; +} + +.mdi-hardware-phonelink:before { + content: "\e7c7"; +} + +.mdi-hardware-phonelink-off:before { + content: "\e7c8"; +} + +.mdi-hardware-security:before { + content: "\e7c9"; +} + +.mdi-hardware-sim-card:before { + content: "\e7ca"; +} + +.mdi-hardware-smartphone:before { + content: "\e7cb"; +} + +.mdi-hardware-speaker:before { + content: "\e7cc"; +} + +.mdi-hardware-tablet:before { + content: "\e7cd"; +} + +.mdi-hardware-tablet-android:before { + content: "\e7ce"; +} + +.mdi-hardware-tablet-mac:before { + content: "\e7cf"; +} + +.mdi-hardware-tv:before { + content: "\e7d0"; +} + +.mdi-hardware-watch:before { + content: "\e7d1"; +} + +.mdi-image-add-to-photos:before { + content: "\e7d2"; +} + +.mdi-image-adjust:before { + content: "\e7d3"; +} + +.mdi-image-assistant-photo:before { + content: "\e7d4"; +} + +.mdi-image-audiotrack:before { + content: "\e7d5"; +} + +.mdi-image-blur-circular:before { + content: "\e7d6"; +} + +.mdi-image-blur-linear:before { + content: "\e7d7"; +} + +.mdi-image-blur-off:before { + content: "\e7d8"; +} + +.mdi-image-blur-on:before { + content: "\e7d9"; +} + +.mdi-image-brightness-1:before { + content: "\e7da"; +} + +.mdi-image-brightness-2:before { + content: "\e7db"; +} + +.mdi-image-brightness-3:before { + content: "\e7dc"; +} + +.mdi-image-brightness-4:before { + content: "\e7dd"; +} + +.mdi-image-brightness-5:before { + content: "\e7de"; +} + +.mdi-image-brightness-6:before { + content: "\e7df"; +} + +.mdi-image-brightness-7:before { + content: "\e7e0"; +} + +.mdi-image-brush:before { + content: "\e7e1"; +} + +.mdi-image-camera:before { + content: "\e7e2"; +} + +.mdi-image-camera-alt:before { + content: "\e7e3"; +} + +.mdi-image-camera-front:before { + content: "\e7e4"; +} + +.mdi-image-camera-rear:before { + content: "\e7e5"; +} + +.mdi-image-camera-roll:before { + content: "\e7e6"; +} + +.mdi-image-center-focus-strong:before { + content: "\e7e7"; +} + +.mdi-image-center-focus-weak:before { + content: "\e7e8"; +} + +.mdi-image-collections:before { + content: "\e7e9"; +} + +.mdi-image-colorize:before { + content: "\e7ea"; +} + +.mdi-image-color-lens:before { + content: "\e7eb"; +} + +.mdi-image-compare:before { + content: "\e7ec"; +} + +.mdi-image-control-point:before { + content: "\e7ed"; +} + +.mdi-image-control-point-duplicate:before { + content: "\e7ee"; +} + +.mdi-image-crop:before { + content: "\e7ef"; +} + +.mdi-image-crop-3-2:before { + content: "\e7f0"; +} + +.mdi-image-crop-5-4:before { + content: "\e7f1"; +} + +.mdi-image-crop-7-5:before { + content: "\e7f2"; +} + +.mdi-image-crop-16-9:before { + content: "\e7f3"; +} + +.mdi-image-crop-din:before { + content: "\e7f4"; +} + +.mdi-image-crop-free:before { + content: "\e7f5"; +} + +.mdi-image-crop-landscape:before { + content: "\e7f6"; +} + +.mdi-image-crop-original:before { + content: "\e7f7"; +} + +.mdi-image-crop-portrait:before { + content: "\e7f8"; +} + +.mdi-image-crop-square:before { + content: "\e7f9"; +} + +.mdi-image-dehaze:before { + content: "\e7fa"; +} + +.mdi-image-details:before { + content: "\e7fb"; +} + +.mdi-image-edit:before { + content: "\e7fc"; +} + +.mdi-image-exposure:before { + content: "\e7fd"; +} + +.mdi-image-exposure-minus-1:before { + content: "\e7fe"; +} + +.mdi-image-exposure-minus-2:before { + content: "\e7ff"; +} + +.mdi-image-exposure-plus-1:before { + content: "\e800"; +} + +.mdi-image-exposure-plus-2:before { + content: "\e801"; +} + +.mdi-image-exposure-zero:before { + content: "\e802"; +} + +.mdi-image-filter:before { + content: "\e803"; +} + +.mdi-image-filter-1:before { + content: "\e804"; +} + +.mdi-image-filter-2:before { + content: "\e805"; +} + +.mdi-image-filter-3:before { + content: "\e806"; +} + +.mdi-image-filter-4:before { + content: "\e807"; +} + +.mdi-image-filter-5:before { + content: "\e808"; +} + +.mdi-image-filter-6:before { + content: "\e809"; +} + +.mdi-image-filter-7:before { + content: "\e80a"; +} + +.mdi-image-filter-8:before { + content: "\e80b"; +} + +.mdi-image-filter-9:before { + content: "\e80c"; +} + +.mdi-image-filter-9-plus:before { + content: "\e80d"; +} + +.mdi-image-filter-b-and-w:before { + content: "\e80e"; +} + +.mdi-image-filter-center-focus:before { + content: "\e80f"; +} + +.mdi-image-filter-drama:before { + content: "\e810"; +} + +.mdi-image-filter-frames:before { + content: "\e811"; +} + +.mdi-image-filter-hdr:before { + content: "\e812"; +} + +.mdi-image-filter-none:before { + content: "\e813"; +} + +.mdi-image-filter-tilt-shift:before { + content: "\e814"; +} + +.mdi-image-filter-vintage:before { + content: "\e815"; +} + +.mdi-image-flare:before { + content: "\e816"; +} + +.mdi-image-flash-auto:before { + content: "\e817"; +} + +.mdi-image-flash-off:before { + content: "\e818"; +} + +.mdi-image-flash-on:before { + content: "\e819"; +} + +.mdi-image-flip:before { + content: "\e81a"; +} + +.mdi-image-gradient:before { + content: "\e81b"; +} + +.mdi-image-grain:before { + content: "\e81c"; +} + +.mdi-image-grid-off:before { + content: "\e81d"; +} + +.mdi-image-grid-on:before { + content: "\e81e"; +} + +.mdi-image-hdr-off:before { + content: "\e81f"; +} + +.mdi-image-hdr-on:before { + content: "\e820"; +} + +.mdi-image-hdr-strong:before { + content: "\e821"; +} + +.mdi-image-hdr-weak:before { + content: "\e822"; +} + +.mdi-image-healing:before { + content: "\e823"; +} + +.mdi-image-image:before { + content: "\e824"; +} + +.mdi-image-image-aspect-ratio:before { + content: "\e825"; +} + +.mdi-image-iso:before { + content: "\e826"; +} + +.mdi-image-landscape:before { + content: "\e827"; +} + +.mdi-image-leak-add:before { + content: "\e828"; +} + +.mdi-image-leak-remove:before { + content: "\e829"; +} + +.mdi-image-lens:before { + content: "\e82a"; +} + +.mdi-image-looks:before { + content: "\e82b"; +} + +.mdi-image-looks-3:before { + content: "\e82c"; +} + +.mdi-image-looks-4:before { + content: "\e82d"; +} + +.mdi-image-looks-5:before { + content: "\e82e"; +} + +.mdi-image-looks-6:before { + content: "\e82f"; +} + +.mdi-image-looks-one:before { + content: "\e830"; +} + +.mdi-image-looks-two:before { + content: "\e831"; +} + +.mdi-image-loupe:before { + content: "\e832"; +} + +.mdi-image-movie-creation:before { + content: "\e833"; +} + +.mdi-image-nature:before { + content: "\e834"; +} + +.mdi-image-nature-people:before { + content: "\e835"; +} + +.mdi-image-navigate-:before { + content: "\e836"; +} + +.mdi-image-navigate-next:before { + content: "\e837"; +} + +.mdi-image-palette:before { + content: "\e838"; +} + +.mdi-image-panorama:before { + content: "\e839"; +} + +.mdi-image-panorama-fisheye:before { + content: "\e83a"; +} + +.mdi-image-panorama-horizontal:before { + content: "\e83b"; +} + +.mdi-image-panorama-vertical:before { + content: "\e83c"; +} + +.mdi-image-panorama-wide-angle:before { + content: "\e83d"; +} + +.mdi-image-photo:before { + content: "\e83e"; +} + +.mdi-image-photo-album:before { + content: "\e83f"; +} + +.mdi-image-photo-camera:before { + content: "\e840"; +} + +.mdi-image-photo-library:before { + content: "\e841"; +} + +.mdi-image-portrait:before { + content: "\e842"; +} + +.mdi-image-remove-red-eye:before { + content: "\e843"; +} + +.mdi-image-rotate-left:before { + content: "\e844"; +} + +.mdi-image-rotate-right:before { + content: "\e845"; +} + +.mdi-image-slideshow:before { + content: "\e846"; +} + +.mdi-image-straighten:before { + content: "\e847"; +} + +.mdi-image-style:before { + content: "\e848"; +} + +.mdi-image-switch-camera:before { + content: "\e849"; +} + +.mdi-image-switch-video:before { + content: "\e84a"; +} + +.mdi-image-tag-faces:before { + content: "\e84b"; +} + +.mdi-image-texture:before { + content: "\e84c"; +} + +.mdi-image-timelapse:before { + content: "\e84d"; +} + +.mdi-image-timer:before { + content: "\e84e"; +} + +.mdi-image-timer-3:before { + content: "\e84f"; +} + +.mdi-image-timer-10:before { + content: "\e850"; +} + +.mdi-image-timer-auto:before { + content: "\e851"; +} + +.mdi-image-timer-off:before { + content: "\e852"; +} + +.mdi-image-tonality:before { + content: "\e853"; +} + +.mdi-image-transform:before { + content: "\e854"; +} + +.mdi-image-tune:before { + content: "\e855"; +} + +.mdi-image-wb-auto:before { + content: "\e856"; +} + +.mdi-image-wb-cloudy:before { + content: "\e857"; +} + +.mdi-image-wb-incandescent:before { + content: "\e858"; +} + +.mdi-image-wb-iridescent:before { + content: "\e859"; +} + +.mdi-image-wb-sunny:before { + content: "\e85a"; +} + +.mdi-maps-beenhere:before { + content: "\e85b"; +} + +.mdi-maps-directions:before { + content: "\e85c"; +} + +.mdi-maps-directions-bike:before { + content: "\e85d"; +} + +.mdi-maps-directions-bus:before { + content: "\e85e"; +} + +.mdi-maps-directions-car:before { + content: "\e85f"; +} + +.mdi-maps-directions-ferry:before { + content: "\e860"; +} + +.mdi-maps-directions-subway:before { + content: "\e861"; +} + +.mdi-maps-directions-train:before { + content: "\e862"; +} + +.mdi-maps-directions-transit:before { + content: "\e863"; +} + +.mdi-maps-directions-walk:before { + content: "\e864"; +} + +.mdi-maps-flight:before { + content: "\e865"; +} + +.mdi-maps-hotel:before { + content: "\e866"; +} + +.mdi-maps-layers:before { + content: "\e867"; +} + +.mdi-maps-layers-clear:before { + content: "\e868"; +} + +.mdi-maps-local-airport:before { + content: "\e869"; +} + +.mdi-maps-local-atm:before { + content: "\e86a"; +} + +.mdi-maps-local-attraction:before { + content: "\e86b"; +} + +.mdi-maps-local-bar:before { + content: "\e86c"; +} + +.mdi-maps-local-cafe:before { + content: "\e86d"; +} + +.mdi-maps-local-car-wash:before { + content: "\e86e"; +} + +.mdi-maps-local-convenience-store:before { + content: "\e86f"; +} + +.mdi-maps-local-drink:before { + content: "\e870"; +} + +.mdi-maps-local-florist:before { + content: "\e871"; +} + +.mdi-maps-local-gas-station:before { + content: "\e872"; +} + +.mdi-maps-local-grocery-store:before { + content: "\e873"; +} + +.mdi-maps-local-hospital:before { + content: "\e874"; +} + +.mdi-maps-local-hotel:before { + content: "\e875"; +} + +.mdi-maps-local-laundry-service:before { + content: "\e876"; +} + +.mdi-maps-local-library:before { + content: "\e877"; +} + +.mdi-maps-local-mall:before { + content: "\e878"; +} + +.mdi-maps-local-movies:before { + content: "\e879"; +} + +.mdi-maps-local-offer:before { + content: "\e87a"; +} + +.mdi-maps-local-parking:before { + content: "\e87b"; +} + +.mdi-maps-local-pharmacy:before { + content: "\e87c"; +} + +.mdi-maps-local-phone:before { + content: "\e87d"; +} + +.mdi-maps-local-pizza:before { + content: "\e87e"; +} + +.mdi-maps-local-play:before { + content: "\e87f"; +} + +.mdi-maps-local-post-office:before { + content: "\e880"; +} + +.mdi-maps-local-print-shop:before { + content: "\e881"; +} + +.mdi-maps-local-restaurant:before { + content: "\e882"; +} + +.mdi-maps-local-see:before { + content: "\e883"; +} + +.mdi-maps-local-shipping:before { + content: "\e884"; +} + +.mdi-maps-local-taxi:before { + content: "\e885"; +} + +.mdi-maps-location-history:before { + content: "\e886"; +} + +.mdi-maps-map:before { + content: "\e887"; +} + +.mdi-maps-my-location:before { + content: "\e888"; +} + +.mdi-maps-navigation:before { + content: "\e889"; +} + +.mdi-maps-pin-drop:before { + content: "\e88a"; +} + +.mdi-maps-place:before { + content: "\e88b"; +} + +.mdi-maps-rate-review:before { + content: "\e88c"; +} + +.mdi-maps-restaurant-menu:before { + content: "\e88d"; +} + +.mdi-maps-satellite:before { + content: "\e88e"; +} + +.mdi-maps-store-mall-directory:before { + content: "\e88f"; +} + +.mdi-maps-terrain:before { + content: "\e890"; +} + +.mdi-maps-traffic:before { + content: "\e891"; +} + +.mdi-navigation-apps:before { + content: "\e892"; +} + +.mdi-navigation-arrow-back:before { + content: "\e893"; +} + +.mdi-navigation-arrow-drop-down:before { + content: "\e894"; +} + +.mdi-navigation-arrow-drop-down-circle:before { + content: "\e895"; +} + +.mdi-navigation-arrow-drop-up:before { + content: "\e896"; +} + +.mdi-navigation-arrow-forward:before { + content: "\e897"; +} + +.mdi-navigation-cancel:before { + content: "\e898"; +} + +.mdi-navigation-check:before { + content: "\e899"; +} + +.mdi-navigation-chevron-left:before { + content: "\e89a"; +} + +.mdi-navigation-chevron-right:before { + content: "\e89b"; +} + +.mdi-navigation-close:before { + content: "\e89c"; +} + +.mdi-navigation-expand-less:before { + content: "\e89d"; +} + +.mdi-navigation-expand-more:before { + content: "\e89e"; +} + +.mdi-navigation-fullscreen:before { + content: "\e89f"; +} + +.mdi-navigation-fullscreen-exit:before { + content: "\e8a0"; +} + +.mdi-navigation-menu:before { + content: "\e8a1"; +} + +.mdi-navigation-more-horiz:before { + content: "\e8a2"; +} + +.mdi-navigation-more-vert:before { + content: "\e8a3"; +} + +.mdi-navigation-refresh:before { + content: "\e8a4"; +} + +.mdi-navigation-unfold-less:before { + content: "\e8a5"; +} + +.mdi-navigation-unfold-more:before { + content: "\e8a6"; +} + +.mdi-notification-adb:before { + content: "\e8a7"; +} + +.mdi-notification-bluetooth-audio:before { + content: "\e8a8"; +} + +.mdi-notification-disc-full:before { + content: "\e8a9"; +} + +.mdi-notification-dnd-forwardslash:before { + content: "\e8aa"; +} + +.mdi-notification-do-not-disturb:before { + content: "\e8ab"; +} + +.mdi-notification-drive-eta:before { + content: "\e8ac"; +} + +.mdi-notification-event-available:before { + content: "\e8ad"; +} + +.mdi-notification-event-busy:before { + content: "\e8ae"; +} + +.mdi-notification-event-note:before { + content: "\e8af"; +} + +.mdi-notification-folder-special:before { + content: "\e8b0"; +} + +.mdi-notification-mms:before { + content: "\e8b1"; +} + +.mdi-notification-more:before { + content: "\e8b2"; +} + +.mdi-notification-network-locked:before { + content: "\e8b3"; +} + +.mdi-notification-phone-bluetooth-speaker:before { + content: "\e8b4"; +} + +.mdi-notification-phone-forwarded:before { + content: "\e8b5"; +} + +.mdi-notification-phone-in-talk:before { + content: "\e8b6"; +} + +.mdi-notification-phone-locked:before { + content: "\e8b7"; +} + +.mdi-notification-phone-missed:before { + content: "\e8b8"; +} + +.mdi-notification-phone-paused:before { + content: "\e8b9"; +} + +.mdi-notification-play-download:before { + content: "\e8ba"; +} + +.mdi-notification-play-install:before { + content: "\e8bb"; +} + +.mdi-notification-sd-card:before { + content: "\e8bc"; +} + +.mdi-notification-sim-card-alert:before { + content: "\e8bd"; +} + +.mdi-notification-sms:before { + content: "\e8be"; +} + +.mdi-notification-sms-failed:before { + content: "\e8bf"; +} + +.mdi-notification-sync:before { + content: "\e8c0"; +} + +.mdi-notification-sync-disabled:before { + content: "\e8c1"; +} + +.mdi-notification-sync-problem:before { + content: "\e8c2"; +} + +.mdi-notification-system-update:before { + content: "\e8c3"; +} + +.mdi-notification-tap-and-play:before { + content: "\e8c4"; +} + +.mdi-notification-time-to-leave:before { + content: "\e8c5"; +} + +.mdi-notification-vibration:before { + content: "\e8c6"; +} + +.mdi-notification-voice-chat:before { + content: "\e8c7"; +} + +.mdi-notification-vpn-lock:before { + content: "\e8c8"; +} + +.mdi-social-cake:before { + content: "\e8c9"; +} + +.mdi-social-domain:before { + content: "\e8ca"; +} + +.mdi-social-group:before { + content: "\e8cb"; +} + +.mdi-social-group-add:before { + content: "\e8cc"; +} + +.mdi-social-location-city:before { + content: "\e8cd"; +} + +.mdi-social-mood:before { + content: "\e8ce"; +} + +.mdi-social-notifications:before { + content: "\e8cf"; +} + +.mdi-social-notifications-none:before { + content: "\e8d0"; +} + +.mdi-social-notifications-off:before { + content: "\e8d1"; +} + +.mdi-social-notifications-on:before { + content: "\e8d2"; +} + +.mdi-social-notifications-paused:before { + content: "\e8d3"; +} + +.mdi-social-pages:before { + content: "\e8d4"; +} + +.mdi-social-party-mode:before { + content: "\e8d5"; +} + +.mdi-social-people:before { + content: "\e8d6"; +} + +.mdi-social-people-outline:before { + content: "\e8d7"; +} + +.mdi-social-person:before { + content: "\e8d8"; +} + +.mdi-social-person-add:before { + content: "\e8d9"; +} + +.mdi-social-person-outline:before { + content: "\e8da"; +} + +.mdi-social-plus-one:before { + content: "\e8db"; +} + +.mdi-social-poll:before { + content: "\e8dc"; +} + +.mdi-social-public:before { + content: "\e8dd"; +} + +.mdi-social-school:before { + content: "\e8de"; +} + +.mdi-social-share:before { + content: "\e8df"; +} + +.mdi-social-whatshot:before { + content: "\e8e0"; +} + +.mdi-toggle-check-box:before { + content: "\e8e1"; +} + +.mdi-toggle-check-box-outline-blank:before { + content: "\e8e2"; +} + +.mdi-toggle-radio-button-off:before { + content: "\e8e3"; +} + +.mdi-toggle-radio-button-on:before { + content: "\e8e4"; +} + +[class^=mdi-], [class*=" mdi-"], .mdi { + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} + +.player .control { + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} + +/** + * Icomoon custom fonts. + */ +@font-face { + font-family: "icomoon"; + src: url("../fonts/icomoon/fonts/icomoon.eot"); + src: url("../fonts/icomoon/fonts/icomoon.eot?#iefix") format("embedded-opentype"), url("../fonts/icomoon/fonts/icomoon.woff") format("woff"), url("../fonts/icomoon/fonts/icomoon.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} +.icomoon-google:before { + content: "\e900"; +} + +.icomoon-home:before { + content: "\e607"; +} + +.icomoon-pencil:before { + content: "\e608"; +} + +.icomoon-image:before { + content: "\e609"; +} + +.icomoon-music2:before { + content: "\e60a"; +} + +.icomoon-headphones:before { + content: "\e60b"; +} + +.icomoon-play:before { + content: "\e60c"; +} + +.icomoon-film:before { + content: "\e60d"; +} + +.icomoon-camera:before { + content: "\e60e"; +} + +.icomoon-pacman:before { + content: "\e60f"; +} + +.icomoon-tag:before { + content: "\e610"; +} + +.icomoon-tags:before { + content: "\e611"; +} + +.icomoon-location:before { + content: "\e612"; +} + +.icomoon-screen:before { + content: "\e613"; +} + +.icomoon-mobile:before { + content: "\e614"; +} + +.icomoon-tv:before { + content: "\e615"; +} + +.icomoon-bubble:before { + content: "\e616"; +} + +.icomoon-bubbles:before { + content: "\e617"; +} + +.icomoon-user:before { + content: "\e618"; +} + +.icomoon-spinner:before { + content: "\e619"; +} + +.icomoon-search:before { + content: "\e61a"; +} + +.icomoon-key:before { + content: "\e61b"; +} + +.icomoon-settings:before { + content: "\e61c"; +} + +.icomoon-cog:before { + content: "\e61d"; +} + +.icomoon-stats:before { + content: "\e61e"; +} + +.icomoon-switch:before { + content: "\e61f"; +} + +.icomoon-tree:before { + content: "\e620"; +} + +.icomoon-cloud:before { + content: "\e621"; +} + +.icomoon-earth:before { + content: "\e622"; +} + +.icomoon-link:before { + content: "\e623"; +} + +.icomoon-attachment:before { + content: "\e624"; +} + +.icomoon-star:before { + content: "\e625"; +} + +.icomoon-star2:before { + content: "\e626"; +} + +.icomoon-heart:before { + content: "\e627"; +} + +.icomoon-heart2:before { + content: "\e628"; +} + +.icomoon-smiley:before { + content: "\e629"; +} + +.icomoon-smiley2:before { + content: "\e62a"; +} + +.icomoon-info:before { + content: "\e62b"; +} + +.icomoon-checkmark:before { + content: "\e62c"; +} + +.icomoon-arrow-right:before { + content: "\e62d"; +} + +.icomoon-arrow-left:before { + content: "\e62e"; +} + +.icomoon-arrow-right2:before { + content: "\e62f"; +} + +.icomoon-arrow-left2:before { + content: "\e630"; +} + +.icomoon-share:before { + content: "\e631"; +} + +.icomoon-googleplus:before { + content: "\e632"; +} + +.icomoon-facebook:before { + content: "\e633"; +} + +.icomoon-twitter:before { + content: "\e634"; +} + +.icomoon-feed:before { + content: "\e635"; +} + +.icomoon-feed2:before { + content: "\e636"; +} + +.icomoon-youtube:before { + content: "\e637"; +} + +.icomoon-picasa:before { + content: "\e638"; +} + +.icomoon-github:before { + content: "\e639"; +} + +.icomoon-github2:before { + content: "\e63a"; +} + +.icomoon-github3:before { + content: "\e63b"; +} + +.icomoon-tux:before { + content: "\e63c"; +} + +.icomoon-apple:before { + content: "\e63d"; +} + +.icomoon-android:before { + content: "\e63e"; +} + +.icomoon-windows8:before { + content: "\e63f"; +} + +.icomoon-paypal:before { + content: "\e640"; +} + +.icomoon-file-zip:before { + content: "\e641"; +} + +.icomoon-file-css:before { + content: "\e642"; +} + +.icomoon-imdb:before { + content: "\e901"; +} + +.icomoon-flatscreen:before { + content: "\e600"; +} + +.icomoon-clapperboard:before { + content: "\e601"; +} + +.icomoon-kodi-symbol:before { + content: "\e602"; +} + +.icomoon-kodi-text:before { + content: "\e603"; +} + +.icomoon-linux:before { + content: "\e604"; +} + +.icomoon-music:before { + content: "\e605"; +} + +.icomoon-pi:before { + content: "\e606"; +} + +.icomoon-network:before { + content: "\e643"; +} + +.icomoon-rss:before { + content: "\e644"; +} + +.icomoon-statistics:before { + content: "\e645"; +} + +.icomoon-pie:before { + content: "\e646"; +} + +.icomoon-minus:before { + content: "\e647"; +} + +.icomoon-plus:before { + content: "\e648"; +} + +.icomoon-info2:before { + content: "\e649"; +} + +.icomoon-question:before { + content: "\e64a"; +} + +.icomoon-help:before { + content: "\e64b"; +} + +.icomoon-warning:before { + content: "\e64c"; +} + +.icomoon-list:before { + content: "\e64d"; +} + +.icomoon-flow-tree:before { + content: "\e64e"; +} + +.icomoon-arrow-left3:before { + content: "\e64f"; +} + +.icomoon-arrow-right3:before { + content: "\e650"; +} + +.icomoon-arrow-left4:before { + content: "\e651"; +} + +.icomoon-arrow-right4:before { + content: "\e652"; +} + +.icomoon-arrow-left5:before { + content: "\e653"; +} + +.icomoon-uniE654:before { + content: "\e654"; +} + +[class^=icomoon-], [class*=" icomoon-"], .icomoon { + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} + +#logo { + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} + +.songs-table tr.song.menu-open, .songs-table tr.song:hover, .table-hover > tbody > tr:hover { + background-color: rgba(255, 255, 255, 0.3); +} +.songs-table tr.song.menu-open .crop, .songs-table tr.song:hover .crop, .table-hover > tbody > tr:hover .crop { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.songs-table tr.song.menu-open .crop:after, .songs-table tr.song:hover .crop:after, .table-hover > tbody > tr:hover .crop:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00E7E7E7", endColorstr="#FFE7E7E7"); + background-image: -owg-linear-gradient(left, rgba(231, 231, 231, 0) 0%, #e7e7e7 100%); + background-image: -webkit-linear-gradient(left, rgba(231, 231, 231, 0) 0%, #e7e7e7 100%); + background-image: -moz-linear-gradient(left, rgba(231, 231, 231, 0) 0%, #e7e7e7 100%); + background-image: -o-linear-gradient(left, rgba(231, 231, 231, 0) 0%, #e7e7e7 100%); + background-image: linear-gradient(left, rgba(231, 231, 231, 0) 0%, #e7e7e7 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} + +/** + * Lighten the standard shadow. + */ +.shadow-z-1, .card, .snackbar, .landing-set .set__header, .landing-page .region-content h3, +.landing-page h3.set-header, .snackbar { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.shadow-z-2-hover, .btn:hover:not(.btn-link) { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.13); +} + +/** + * Tweak tables + */ +.table-striped > tbody > tr:nth-child(odd) { + background-color: rgba(255, 255, 255, 0.5); +} +.table-striped > tbody > tr > td { + border: 0; +} + +.table > tbody > tr > td { + border-top: none; +} + +/* + * The styles for a list of options commonly used in modal popups. + */ +.options-list { + padding-bottom: 0.5em; +} +.options-list > li { + border-bottom: 1px solid #ddd; +} +.options-list > li:last-child { + border: 0; +} +.options-list > li > span, +.options-list > li > a { + display: block; + padding: 0.5em 1em; + cursor: pointer; +} +.options-list > li > span:hover, +.options-list > li > a:hover { + background: #12B2E7; + color: #fff; +} +.options-list > li > span:hover small, +.options-list > li > a:hover small { + display: inline; +} +.options-list small { + font-size: 70%; + opacity: 0.7; + display: none; +} + +@media (min-width: 57em) { + .modal.style-options .modal-dialog { + width: 300px; + } +} +.modal.style-options .modal-footer { + display: none; +} + +.page-padding, +.api-method--execute, +.section-lab .page, +.settings-form .form-content-region { + padding: 1em; +} +@media (min-width: 57em) { + .page-padding, + .api-method--execute, + .section-lab .page, + .settings-form .form-content-region { + padding: 2em; + padding-left: 3em; + } +} + +.page, +.settings-form, +.help--page .region-content-wrapper .region-content, +.page-secondary, +.api-method--execute { + max-width: 58em; + margin-left: 0; + background: #fff; +} + +.page-secondary, +.api-method--execute { + background: rgba(255, 255, 255, 0.5); +} + +.page-wrapper, +.help--page .region-content-wrapper { + padding: 0; + margin-bottom: 4em; +} +.page-wrapper .region-content, +.help--page .region-content-wrapper .region-content { + padding: 0; +} + +.settings-page .region-first, .search-page-layout .region-first, .epg-page .region-first, .pvr-page .region-first, .local-playlist-list .region-first, .landing-page .region-first, .help--page .region-first, .filter-pane, .category-list .region-first, .browser-page .region-first, .addon-list .region-first { + padding: 1em 1.5em; +} + +.region-first .nav-sub h3, .local-playlist-list .region-first h3, .filters-container h3, .browser-page .region-first h3, .sidebar-section h3 { + font-size: 15px; + text-transform: uppercase; + margin: 1em 0; + color: #888888; + font-weight: bold; +} + +.region-first .nav-sub, .filters-container .nav-list, +.filters-container .selection-list, +.filters-container .active-list, .browser-page .region-first .source-set, .sidebar-section { + margin-bottom: 2em; +} + +.region-first .nav-sub .items, .local-playlist-list .region-first .lists, .filters-container .nav-list, +.filters-container .selection-list, .sidebar-section ul { + padding-left: 1em; +} +.region-first .nav-sub .items li, .local-playlist-list .region-first .lists li, .filters-container .nav-list li, +.filters-container .selection-list li, .sidebar-section ul li { + padding-bottom: 0.5em; + position: relative; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.region-first .nav-sub .items li:after, .local-playlist-list .region-first .lists li:after, .filters-container .nav-list li:after, +.filters-container .selection-list li:after, .sidebar-section ul li:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00F2F2F2", endColorstr="#FFF2F2F2"); + background-image: -owg-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -webkit-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -moz-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -o-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.region-first .nav-sub .items li:hover, .local-playlist-list .region-first .lists li:hover, .filters-container .nav-list li:hover, +.filters-container .selection-list li:hover, .sidebar-section ul li:hover { + color: #12B2E7; +} +.region-first .nav-sub .items li a, .local-playlist-list .region-first .lists li a, .filters-container .nav-list li a, +.filters-container .selection-list li a, .sidebar-section ul li a { + color: #2B2F30; +} +.region-first .nav-sub .items li a.active, .local-playlist-list .region-first .lists li a.active, .filters-container .nav-list li a.active, +.filters-container .selection-list li a.active, .sidebar-section ul li a.active { + color: #12B2E7; + font-weight: bold; +} +.active-player-local .region-first .nav-sub .items li a.active, .region-first .nav-sub .active-player-local .items li a.active, .active-player-local .local-playlist-list .region-first .lists li a.active, .local-playlist-list .region-first .active-player-local .lists li a.active, .active-player-local .filters-container .nav-list li a.active, .filters-container .active-player-local .nav-list li a.active, +.active-player-local .filters-container .selection-list li a.active, +.filters-container .active-player-local .selection-list li a.active, .active-player-local .sidebar-section ul li a.active, .sidebar-section .active-player-local ul li a.active { + color: #DB2464; +} + +.browser-page .region-first .sources { + padding-left: 1em; + padding-left: 0.5em; +} +.browser-page .region-first .sources li { + padding-bottom: 0.5em; + position: relative; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.browser-page .region-first .sources li:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00F2F2F2", endColorstr="#FFF2F2F2"); + background-image: -owg-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -webkit-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -moz-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: -o-linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + background-image: linear-gradient(left, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.browser-page .region-first .sources li:hover { + color: #12B2E7; +} +.browser-page .region-first .sources li a { + color: #2B2F30; +} +.browser-page .region-first .sources li a.active { + color: #12B2E7; + font-weight: bold; +} +.active-player-local .browser-page .region-first .sources li a.active, .browser-page .region-first .active-player-local .sources li a.active { + color: #DB2464; +} +.browser-page .region-first .sources li > div { + display: inline-block; + padding-left: 0.5em; +} +.browser-page .region-first .sources li:before { + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; + opacity: 0.3; + content: ""; + font-size: 0.9em; +} + +@font-face { + font-family: "opensans-light"; + src: url("../fonts/opensans/opensans-light-webfont.eot"); + src: url("../fonts/opensans/opensans-light-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/opensans/opensans-light-webfont.woff") format("woff"), url("../fonts/opensans/opensans-light-webfont.ttf") format("truetype"); + font-weight: "normal"; + font-style: normal; +} +@font-face { + font-family: "opensans"; + src: url("../fonts/opensans/opensans-regular-webfont.eot"); + src: url("../fonts/opensans/opensans-regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/opensans/opensans-regular-webfont.woff") format("woff"), url("../fonts/opensans/opensans-regular-webfont.ttf") format("truetype"); + font-weight: "normal"; + font-style: normal; +} +html, body { + font-family: "opensans", Helvetica, Arial, sans-serif; +} + +body { + zoom: 0.75; +} +@media (min-width: 25em) { + body { + zoom: 0.85; + } +} +@media (min-width: 37em) { + body { + zoom: 0.95; + } +} +@media (min-width: 45em) { + body { + zoom: 1; + } +} + +a { + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; +} +a:focus, a:hover { + text-decoration: none; + outline: none; +} + +h1, h2, h3, h4 { + font-family: "opensans-light", Helvetica, Arial, sans-serif; +} + +.inline-links { + margin-top: 1.5em; +} +.inline-links > li { + display: inline-block; + margin-right: 0.5em; +} + +.addon-list .nav-sub li { + text-transform: capitalize; +} +.addon-list .card .play { + display: none !important; +} +.addon-list .card .subtitle { + text-transform: capitalize; +} + +.album--with-songs { + position: relative; + margin-bottom: 20px; +} +@media (min-width: 57em) { + .album--with-songs .region-album-side { + position: absolute; + } +} +@media (min-width: 57em) and (min-width: 45em) { + .album--with-songs .region-album-side { + width: 190px; + } +} +@media (min-width: 57em) and (min-width: 75em) { + .album--with-songs .region-album-side { + width: 280px; + } +} +@media (min-width: 57em) { + .album--with-songs .region-album-content { + max-width: 1100px; + padding: 0 20px 0 0; + } +} +@media (min-width: 57em) and (min-width: 45em) { + .artist-show .album--with-songs .region-album-content { + margin-left: 190px; + } +} +@media (min-width: 57em) and (min-width: 75em) { + .artist-show .album--with-songs .region-album-content { + margin-left: 280px; + } +} +@media (min-width: 57em) and (min-width: 45em) { + .album--with-songs .region-album-content { + min-height: 190px; + } +} +@media (min-width: 57em) and (min-width: 75em) { + .album--with-songs .region-album-content { + min-height: 280px; + } +} +@media (min-width: 57em) { + .album--with-songs .card-minimal { + padding: 0 22px 0 0px; + } +} + +.dropdown-menu { + padding: 0.5em 0; + background: #1b1c1d; + color: #999999; + border-radius: 0; +} +.dropdown-menu li { + padding: 0.25em 1em; +} +.dropdown-menu li:hover { + background: rgba(255, 255, 255, 0.1); + color: #fff; + cursor: pointer; +} +.dropdown-menu li:hover.divider { + cursor: none; + background: none; +} +.dropdown-menu li.divider { + padding: 0; + margin: 0.25em 0; +} +.dropdown-menu li.dropdown-submenu { + position: relative; + overflow: visible; +} +.dropdown-menu li.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -4px; + white-space: nowrap; +} +.dropdown-menu li.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.browser-page .region-first .sources li.type-source:before { + content: "\e73e"; +} +.browser-page .region-first .sources li.type-addon:before { + content: "\e6b1"; +} +.browser-page .region-first .sources li.type-playlist:before { + content: "\e610"; +} +.browser-page .region-content { + padding: 0; +} +.browser-page .actions { + top: 1px; + right: 10px; + position: absolute; +} +.browser-page .actions .sort-toggle, .browser-page .actions .context-toggle { + display: table; + width: 30px; + text-align: center; + cursor: pointer; + font-size: 1.5em; + opacity: 0.6; +} +.browser-page .actions .sort-toggle:before, .browser-page .actions .context-toggle:before { + content: "\e71a"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.browser-page .actions .sort-toggle:before, .browser-page .actions .context-toggle:before { + display: table-cell; + vertical-align: middle; + height: 39px; +} +.browser-page .actions .sort-toggle:hover, .browser-page .actions .context-toggle:hover { + opacity: 1; +} +.browser-page .actions .context-toggle:before { + content: "\e8a3"; +} +.browser-page .actions > li { + display: inline-block; +} +.browser-page .actions .dropdown-menu { + text-transform: capitalize; +} +.browser-page .sort-wrapper li i:after { + content: "\e89e"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.browser-page .sort-wrapper li.order-descending i:after { + content: "\e89d"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.browser-page .sort-wrapper li.active { + color: #fff; +} + +.folder-layout .loading-bar, +.folder-layout .path { + height: 3em; + padding-right: 5em; + background: rgba(0, 0, 0, 0.05); +} +.loading .folder-layout .loading-bar, +.loading .folder-layout .path { + display: none; +} +.folder-layout .loading-bar ul, +.folder-layout .path ul { + display: table; +} +.folder-layout .loading-bar ul li, +.folder-layout .path ul li { + display: table-cell; + vertical-align: middle; + height: 3em; + padding: 0 1em; + cursor: pointer; + border-right: 1px dotted rgba(0, 0, 0, 0.05); + max-width: 300px; + overflow: hidden; + white-space: nowrap; +} +.folder-layout .loading-bar ul li:last-child, +.folder-layout .path ul li:last-child { + border: none; + font-weight: bold; +} +.folder-layout .loading-bar ul li:last-child:hover, +.folder-layout .path ul li:last-child:hover { + background: none; +} +.folder-layout .loading-bar ul li:hover, +.folder-layout .path ul li:hover { + background: rgba(0, 0, 0, 0.05); +} +.folder-layout .loading-bar { + display: none; +} +.loading .folder-layout .loading-bar { + display: block; +} +.folder-layout .loading-bar .inner { + display: table; +} +.folder-layout .loading-bar .inner span { + display: table-cell; + vertical-align: middle; + height: 3em; + padding: 0 1em; +} +.folder-layout .loading-bar .loader-small-inline { + margin: 0.7em 0 0 0.7em; +} +.folder-layout .folder-container .folders-pane, .folder-layout .folder-container .files { + padding: 1em; +} +.folder-layout .folder-container .folders-pane { + background: #F9F9F9; +} +@media (min-width: 75em) { + .folder-layout .folder-container .folders-pane { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 41.6666666667%; + float: left; + } + .folder-layout .folder-container .files { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 58.3333333333%; + float: right; + } +} +.folder-layout .folder, .folder-layout .file, .folder-layout .back-button, +.browser-file-list .folder, +.browser-file-list .file, +.browser-file-list .back-button, +.browser-folder-list .folder, +.browser-folder-list .file, +.browser-folder-list .back-button { + height: 42px; + position: relative; + border-bottom: 1px solid #eee; +} +.folder-layout .folder .thumb, .folder-layout .file .thumb, .folder-layout .back-button .thumb, +.browser-file-list .folder .thumb, +.browser-file-list .file .thumb, +.browser-file-list .back-button .thumb, +.browser-folder-list .folder .thumb, +.browser-folder-list .file .thumb, +.browser-folder-list .back-button .thumb { + width: 40px; + height: 40px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.folder-layout .folder .thumb, .folder-layout .file .thumb, .folder-layout .back-button .thumb, +.browser-file-list .folder .thumb, +.browser-file-list .file .thumb, +.browser-file-list .back-button .thumb, +.browser-folder-list .folder .thumb, +.browser-folder-list .file .thumb, +.browser-folder-list .back-button .thumb { + top: 1px; + bottom: 1px; + left: 0; + position: absolute; + z-index: 20; +} +.folder-layout .folder .thumb:hover .play, .folder-layout .file .thumb:hover .play, .folder-layout .back-button .thumb:hover .play, +.browser-file-list .folder .thumb:hover .play, +.browser-file-list .file .thumb:hover .play, +.browser-file-list .back-button .thumb:hover .play, +.browser-folder-list .folder .thumb:hover .play, +.browser-folder-list .file .thumb:hover .play, +.browser-folder-list .back-button .thumb:hover .play { + display: table; +} +.folder-layout .folder .title, .folder-layout .file .title, .folder-layout .back-button .title, +.browser-file-list .folder .title, +.browser-file-list .file .title, +.browser-file-list .back-button .title, +.browser-folder-list .folder .title, +.browser-folder-list .file .title, +.browser-folder-list .back-button .title { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: 0 7px; + padding-left: 50px; + cursor: pointer; + line-height: 40px; +} +.folder-layout .folder .play, .folder-layout .file .play, .folder-layout .back-button .play, +.browser-file-list .folder .play, +.browser-file-list .file .play, +.browser-file-list .back-button .play, +.browser-folder-list .folder .play, +.browser-folder-list .file .play, +.browser-folder-list .back-button .play { + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + display: table; + width: 40px; + text-align: center; + cursor: pointer; + display: none; + color: #fff; + font-size: 150%; +} +.folder-layout .folder .play:before, .folder-layout .file .play:before, .folder-layout .back-button .play:before, +.browser-file-list .folder .play:before, +.browser-file-list .file .play:before, +.browser-file-list .back-button .play:before, +.browser-folder-list .folder .play:before, +.browser-folder-list .file .play:before, +.browser-folder-list .back-button .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.folder-layout .folder .play:before, .folder-layout .file .play:before, .folder-layout .back-button .play:before, +.browser-file-list .folder .play:before, +.browser-file-list .file .play:before, +.browser-file-list .back-button .play:before, +.browser-folder-list .folder .play:before, +.browser-folder-list .file .play:before, +.browser-folder-list .back-button .play:before { + display: table-cell; + vertical-align: middle; + height: 40px; +} +.folder-layout .folder .play:before, .folder-layout .file .play:before, .folder-layout .back-button .play:before, +.browser-file-list .folder .play:before, +.browser-file-list .file .play:before, +.browser-file-list .back-button .play:before, +.browser-folder-list .folder .play:before, +.browser-folder-list .file .play:before, +.browser-folder-list .back-button .play:before { + padding-right: 5px; +} +.folder-layout .file .title, +.browser-file-list .file .title, +.browser-folder-list .file .title { + position: relative; + white-space: nowrap; + overflow: hidden; + margin-right: 3em; +} +.folder-layout .file .title:after, +.browser-file-list .file .title:after, +.browser-folder-list .file .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00E0DFDF", endColorstr="#FFE0DFDF"); + background-image: -owg-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -webkit-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -moz-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -o-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.folder-layout .folder, +.browser-file-list .folder, +.browser-folder-list .folder { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.folder-layout .folder:after, +.browser-file-list .folder:after, +.browser-folder-list .folder:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00F9F9F9", endColorstr="#FFF9F9F9"); + background-image: -owg-linear-gradient(left, rgba(249, 249, 249, 0) 0%, #f9f9f9 100%); + background-image: -webkit-linear-gradient(left, rgba(249, 249, 249, 0) 0%, #f9f9f9 100%); + background-image: -moz-linear-gradient(left, rgba(249, 249, 249, 0) 0%, #f9f9f9 100%); + background-image: -o-linear-gradient(left, rgba(249, 249, 249, 0) 0%, #f9f9f9 100%); + background-image: linear-gradient(left, rgba(249, 249, 249, 0) 0%, #f9f9f9 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.folder-layout .file .menu i, .folder-layout .folder .menu i, +.browser-file-list .file .menu i, +.browser-file-list .folder .menu i, +.browser-folder-list .file .menu i, +.browser-folder-list .folder .menu i { + font-size: 150%; +} +.folder-layout .file .menu i:before, .folder-layout .folder .menu i:before, +.browser-file-list .file .menu i:before, +.browser-file-list .folder .menu i:before, +.browser-folder-list .file .menu i:before, +.browser-folder-list .folder .menu i:before { + content: "\e8a2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.folder-layout .file .menu .dropdown-menu, .folder-layout .folder .menu .dropdown-menu, +.browser-file-list .file .menu .dropdown-menu, +.browser-file-list .folder .menu .dropdown-menu, +.browser-folder-list .file .menu .dropdown-menu, +.browser-folder-list .folder .menu .dropdown-menu { + top: 0; +} +.folder-layout .file .actions, .folder-layout .folder .actions, +.browser-file-list .file .actions, +.browser-file-list .folder .actions, +.browser-folder-list .file .actions, +.browser-folder-list .folder .actions { + top: 0; + right: 0px; + bottom: 0; + position: absolute; + display: none; + width: 30px; + display: block; + z-index: 50; +} +.folder-layout .file .actions > li, .folder-layout .folder .actions > li, +.browser-file-list .file .actions > li, +.browser-file-list .folder .actions > li, +.browser-folder-list .file .actions > li, +.browser-folder-list .folder .actions > li { + width: 30px; + text-align: center; + float: left; +} +.folder-layout .file .actions > li i:before, .folder-layout .file .actions > li:before, .folder-layout .folder .actions > li i:before, .folder-layout .folder .actions > li:before, +.browser-file-list .file .actions > li i:before, +.browser-file-list .file .actions > li:before, +.browser-file-list .folder .actions > li i:before, +.browser-file-list .folder .actions > li:before, +.browser-folder-list .file .actions > li i:before, +.browser-folder-list .file .actions > li:before, +.browser-folder-list .folder .actions > li i:before, +.browser-folder-list .folder .actions > li:before { + display: table-cell; + vertical-align: middle; + width: 30px; + height: 40px; + color: #999; + cursor: pointer; +} +.folder-layout .file .actions > li > i, .folder-layout .folder .actions > li > i, +.browser-file-list .file .actions > li > i, +.browser-file-list .folder .actions > li > i, +.browser-folder-list .file .actions > li > i, +.browser-folder-list .folder .actions > li > i { + opacity: 0.4; +} +.folder-layout .back-button i, +.browser-file-list .back-button i, +.browser-folder-list .back-button i { + display: table; + width: 39px; + text-align: center; + cursor: pointer; +} +.folder-layout .back-button i:before, +.browser-file-list .back-button i:before, +.browser-folder-list .back-button i:before { + content: "\e89a"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.folder-layout .back-button i:before, +.browser-file-list .back-button i:before, +.browser-folder-list .back-button i:before { + display: table-cell; + vertical-align: middle; + height: 39px; +} +.folder-layout .back-button i:before, +.browser-file-list .back-button i:before, +.browser-folder-list .back-button i:before { + background: #DBDBDB; + font-size: 150%; + color: #B5B5B5; + width: 40px; +} + +.card-detail { + position: relative; +} +.card-detail .entity-progress { + display: none; +} +.card-detail .meta { + display: none; +} +.card-detail .card-album, +.card-detail .card-artist { + width: 158px; +} +.card-detail .card-album .artwork, +.card-detail .card-album .artwork .thumb, +.card-detail .card-artist .artwork, +.card-detail .card-artist .artwork .thumb { + width: 158px; + height: 158px; +} +@media (min-width: 75em) { + .card-detail .card-album, + .card-detail .card-artist { + width: 238px; + } + .card-detail .card-album .artwork, + .card-detail .card-album .artwork .thumb, + .card-detail .card-artist .artwork, + .card-detail .card-artist .artwork .thumb { + width: 238px; + height: 238px; + } +} +.card-detail .card-movie, +.card-detail .card-tvshow, +.card-detail .card-season { + width: 158px; +} +.card-detail .card-movie .artwork, +.card-detail .card-movie .artwork .thumb, +.card-detail .card-tvshow .artwork, +.card-detail .card-tvshow .artwork .thumb, +.card-detail .card-season .artwork, +.card-detail .card-season .artwork .thumb { + width: 158px; + height: 236px; +} +@media (min-width: 75em) { + .card-detail .card-movie, + .card-detail .card-tvshow, + .card-detail .card-season { + width: 238px; + } + .card-detail .card-movie .artwork, + .card-detail .card-movie .artwork .thumb, + .card-detail .card-tvshow .artwork, + .card-detail .card-tvshow .artwork .thumb, + .card-detail .card-season .artwork, + .card-detail .card-season .artwork .thumb { + width: 238px; + height: 357px; + } +} +.card-detail .card-musicvideo, +.card-detail .card-episode { + width: 158px; +} +.card-detail .card-musicvideo .artwork, +.card-detail .card-musicvideo .artwork .thumb, +.card-detail .card-episode .artwork, +.card-detail .card-episode .artwork .thumb { + width: 158px; + height: 99px; +} +@media (min-width: 75em) { + .card-detail .card-musicvideo, + .card-detail .card-episode { + width: 238px; + } + .card-detail .card-musicvideo .artwork, + .card-detail .card-musicvideo .artwork .thumb, + .card-detail .card-episode .artwork, + .card-detail .card-episode .artwork .thumb { + width: 238px; + height: 150px; + } +} +.card-detail .actions { + top: 10px; + right: 10px; + position: absolute; + z-index: 50; +} +.card-detail .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 200%; + color: rgba(255, 255, 255, 0.8); + display: none; + text-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3); +} +.card-detail .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-detail .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-detail .thumbs { + display: none !important; +} +.card-detail.thumbs-up .thumbs { + color: rgba(255, 255, 255, 0.6); + opacity: 1; + display: table; +} +.card-detail:hover .thumbs { + display: table; +} +.card-detail:hover.thumbs-up .thumbs { + color: #12B2E7; +} + +.card-minimal { + color: #888888; + width: 199px; + height: auto; + margin: 5px; + background: #fff; + position: relative; + overflow: hidden; + width: 47px; + height: auto; + width: 100%; + margin: 2em 0 0.5em; + padding: 0; + overflow: visible; +} +.card-minimal a { + color: #888888; +} +.card-minimal .title a { + color: #2B2F30; +} +.card-minimal .subtitle { + font-size: 85%; + margin-top: 5px; +} +.card-minimal .dropdown i, +.card-minimal .actions li, +.card-minimal .play { + color: rgba(255, 255, 255, 0.8); +} +.card-minimal .dropdown i:hover, +.card-minimal .actions li:hover, +.card-minimal .play:hover { + color: #fff; +} +.card-minimal .record { + color: rgba(255, 255, 255, 0.8); +} +.card-minimal .record:hover { + color: #bf0a07; +} +.card-minimal.ph { + opacity: 0.1; + -webkit-box-shadow: none; + box-shadow: none; +} +.card-minimal .artwork { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 199px; + height: 199px; + position: relative; + background: #ccc 50% 50% no-repeat; + background-size: cover; +} +.card-minimal .artwork img { + display: block; + vertical-align: middle; + width: 199px; + margin-top: 0; +} +.card-minimal .artwork .thumb { + width: 199px; + height: 199px; + background-position: 50% 0; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.card-minimal .artwork a { + display: block; +} +.card-minimal .artwork .thumb:after { + content: ""; + top: 0; + right: 0; + left: 0; + position: absolute; + height: auto; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + opacity: 0; + -webkit-transition: 0.1s all linear; + -o-transition: 0.1s all linear; + transition: 0.1s all linear; +} +.card-minimal .entity-progress { + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: auto; + z-index: 20; +} +.card-minimal .entity-progress .current-progress { + height: 2px; + background: #12B2E7; +} +.card-minimal .watched-tick { + color: #12B2E7; + right: 10px; + bottom: 3px; + position: absolute; + font-size: 125%; + display: none; +} +.card-minimal .watched-tick:before { + content: "\e899"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .watched { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-minimal .watched:before { + content: "\e8e2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .watched:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.thumbs-page .card-minimal .watched { + display: none; +} +.card-minimal.is-watched .watched { + color: #12B2E7; +} +.card-minimal.is-watched .watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .thumb { + display: block; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.card-minimal .meta { + position: relative; + padding: 8px 10px; + width: 199px; +} +.card-minimal .meta .title { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-minimal .meta .title:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-minimal .meta .subtitle { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card-minimal .meta .subtitle:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card-minimal .play { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + bottom: 0; + left: 0; + position: absolute; + font-size: 220%; + display: none; + z-index: 20; +} +.card-minimal .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .play:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-minimal .record { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + right: 10px; + bottom: 7px; + position: absolute; + font-size: 150%; + display: none; + z-index: 20; +} +.card-minimal .record:before { + content: "\e7da"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .record:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-minimal .dropdown { + top: 5px; + right: 0; + position: absolute; +} +.card-minimal .dropdown i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + z-index: 20; + font-size: 180%; + display: none; +} +.card-minimal .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.card-minimal .actions { + top: 10px; + right: 35px; + position: absolute; + display: table; + display: none; +} +.card-minimal .actions .thumbs { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 135%; +} +.card-minimal .actions .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.card-minimal .actions .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.disable-thumbs .card-minimal .actions .thumbs { + display: none; +} +.card-minimal .actions li { + float: left; + margin-left: 3px; +} +.card-minimal .actions li:before { + display: table-cell !important; +} +.card-minimal:hover .artwork .thumb:after { + opacity: 1; +} +.card-minimal:hover .actions, +.card-minimal:hover .dropdown i, +.card-minimal:hover .play { + display: table; +} +.card-minimal:hover .record { + display: table; +} +.card-minimal.selected { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .card-minimal.selected { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .card-minimal.selected:before { + border-color: #DB2464; +} +.card-minimal.selected:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.card-minimal.selected .current-progress { + display: none; +} +.card-minimal .dropdown-menu { + left: auto; + right: 0px; + top: -7px; +} +.card-minimal.thumbs-up .actions .thumbs { + color: #12B2E7; +} +.card-minimal .artwork, +.card-minimal .artwork .thumb { + width: 47px; + height: 47px; +} +@media (min-width: 75em) { + .card-minimal { + width: 70px; + } + .card-minimal .artwork, + .card-minimal .artwork .thumb { + width: 70px; + height: 70px; + } +} +.card-minimal .artwork { + float: left; +} +.card-minimal .dropdown i, +.card-minimal ul.actions > li { + color: #ddd; +} +.card-minimal .dropdown i:hover, +.card-minimal ul.actions > li:hover { + color: #b1b1b1; +} +.card-minimal .meta { + padding: 4px 0 4px 60px; +} +.card-minimal .meta .title:after, .card-minimal .meta .subtitle:after { + display: none; +} +@media (min-width: 57em) { + .card-minimal { + width: 238px; + margin: 0; + width: 158px; + background: none; + } + .card-minimal .artwork, + .card-minimal .artwork .thumb { + width: 158px; + height: 158px; + } +} +@media (min-width: 57em) and (min-width: 75em) { + .card-minimal { + width: 238px; + } + .card-minimal .artwork, + .card-minimal .artwork .thumb { + width: 238px; + height: 238px; + } +} +@media (min-width: 57em) { + .card-minimal .artwork { + float: none; + } + .card-minimal .meta { + padding: 0.5em 0; + } +} + +.card.category { + height: 50px; + width: 185px; +} +.card.category a { + padding: 1em 0.5em; + display: block; + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card.category a:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.card.category:hover { + background: #e5e5e5; +} +.card.category:hover a { + position: relative; + white-space: nowrap; + overflow: hidden; +} +.card.category:hover a:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00E5E5E5", endColorstr="#FFE5E5E5"); + background-image: -owg-linear-gradient(left, rgba(229, 229, 229, 0) 0%, #e5e5e5 100%); + background-image: -webkit-linear-gradient(left, rgba(229, 229, 229, 0) 0%, #e5e5e5 100%); + background-image: -moz-linear-gradient(left, rgba(229, 229, 229, 0) 0%, #e5e5e5 100%); + background-image: -o-linear-gradient(left, rgba(229, 229, 229, 0) 0%, #e5e5e5 100%); + background-image: linear-gradient(left, rgba(229, 229, 229, 0) 0%, #e5e5e5 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} + +@media (min-width: 45em) { + .edit-form.with-tabs .form-groups, .edit-form .form-tabs { + height: 420px; + overflow-y: auto; + } +} + +.edit-form .form-item { + *zoom: 1; + margin-bottom: 1em; +} +.edit-form .form-item:after { + content: ""; + display: table; + clear: both; +} +.edit-form label { + color: #666; +} +.edit-form .form-control { + padding: 7px; + background: #FAFAFA; + height: auto !important; + border-bottom-color: #ddd; +} +.edit-form .form-control:focus { + border-bottom-color: #12B2E7; + background: #f0fafe; +} +.edit-form .form-control[type=date] { + padding-bottom: 5px; +} +.edit-form .form-groups { + padding: 1em; +} +.edit-form.with-tabs .group-title { + display: none; +} +@media (min-width: 45em) { + .edit-form.with-tabs .form-tabs { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 28.5714285714%; + float: left; + -webkit-box-shadow: inset 1px 1px 8px 0 rgba(43, 47, 48, 0.1); + box-shadow: inset 1px 1px 8px 0 rgba(43, 47, 48, 0.1); + padding: 1em 0 1em 0.5em; + margin-bottom: 0; + } + .edit-form.with-tabs .form-tabs li { + float: none; + } + .edit-form.with-tabs .form-tabs li.active { + -webkit-box-shadow: 1px 1px 8px 0 rgba(43, 47, 48, 0.1); + box-shadow: 1px 1px 8px 0 rgba(43, 47, 48, 0.1); + } + .edit-form.with-tabs .form-groups { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 71.4285714286%; + float: right; + padding-bottom: 0; + } +} +.edit-form textarea { + min-height: 115px; +} +.edit-form .form-edit-file textarea { + padding: 0.5em; + border: none; +} + +#modal-window.style-edit-form .modal-body { + padding: 0; +} +#modal-window.style-edit-form form footer { + margin-top: 0; +} +#modal-window.style-edit-form form footer .inline-list { + padding: 0 2em; +} +#modal-window.style-edit-form .modal-title span { + color: rgba(255, 255, 255, 0.5); +} +#modal-window.style-edit-form .modal-title span:after { + content: ": "; +} +@media (min-width: 45em) { + #modal-window.style-edit-form .modal-dialog { + width: 700px; + } +} + +.form-imageselect__tabs { + margin: -1em -1em 1em; + background: #e5e5e5; + padding-left: 1em; +} +.form-imageselect__panes .pane { + display: none; +} +.form-imageselect__panes .pane.active { + display: block; +} +.form-imageselect__thumbs li { + float: left; + margin: 0 0.5em 0.5em 0; + cursor: pointer; + overflow: hidden; + background: #a8a7a6 50% 50% no-repeat; + background-size: cover; +} +.form-imageselect__thumbs li.selected { + outline: 2px solid #12B2E7; + box-shadow: 0 0 10px 1px rgba(18, 178, 231, 0.5); + position: relative; +} +.active-player-local .form-imageselect__thumbs li.selected { + outline: 2px solid #DB2464; + box-shadow: 0 0 10px 1px rgba(219, 36, 100, 0.5); +} +.active-player-local .form-imageselect__thumbs li.selected:before { + border-color: #DB2464; +} +.form-imageselect__thumbs li.selected:before { + right: -10px; + bottom: -10px; + position: absolute; + transform: rotate(-45deg); + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-top-color: #12B2E7; +} +.form-imageselect__thumbs li.selected .current-progress { + display: none; +} +.form-imageselect__thumbs li, .form-item-poster-size .form-imageselect__thumbs li { + width: 106px; + height: 160px; +} +.form-item-fanart-size .form-imageselect__thumbs li, .form-edit-fanart .form-imageselect__thumbs li { + width: 222px; + height: 125px; +} +.form-imageselect__loader { + display: none; + margin: 1em 0; + border-radius: 3px; + padding: 0.5em; + color: #999; +} +.form-imageselect__loader .loader-small-inline { + margin-right: 0.5em; + float: left; +} +.form-imageselect__loader span { + display: inline-block; + line-height: 20px; + height: 20px; +} +.images-loading .form-imageselect__loader { + display: block; +} + +.empty-result { + text-align: center; +} +.empty-result .empty-actions { + margin-top: 1em; + font-size: 120%; +} + +.youtube-list .thumb { + width: 120px; + float: left; + margin-right: 1em; +} +.youtube-list li { + margin-bottom: 0.5em; +} +.youtube-list h3 { + font-size: 18px; + padding-top: 0.25em; + margin-bottom: 1em; +} +.youtube-list .flat-btn { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #BAC1C8; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + margin-right: 0.5em; + display: inline-block; + padding: 0.3em 1em; +} +.youtube-list .flat-btn .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.youtube-list .flat-btn .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00BAC1C8", endColorstr="#FFBAC1C8"); + background-image: -owg-linear-gradient(left, rgba(186, 193, 200, 0) 0%, #bac1c8 100%); + background-image: -webkit-linear-gradient(left, rgba(186, 193, 200, 0) 0%, #bac1c8 100%); + background-image: -moz-linear-gradient(left, rgba(186, 193, 200, 0) 0%, #bac1c8 100%); + background-image: -o-linear-gradient(left, rgba(186, 193, 200, 0) 0%, #bac1c8 100%); + background-image: linear-gradient(left, rgba(186, 193, 200, 0) 0%, #bac1c8 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.youtube-list .flat-btn:hover { + color: #fff; +} + +.with-filters .layout-container > .region-first { + overflow: hidden; +} +.filters-loading .with-filters .region-content-wrapper .region-content { + opacity: 0.3; +} + +.filters-container .nav-list a, .filters-container .nav-list .option, +.filters-container .selection-list a, +.filters-container .selection-list .option { + color: #2B2F30; + cursor: pointer; +} +.filters-container .nav-list a.active, .filters-container .nav-list .option.active, +.filters-container .selection-list a.active, +.filters-container .selection-list .option.active { + color: #12B2E7; + font-weight: bold; +} +.active-player-local .filters-container .nav-list a.active, .active-player-local .filters-container .nav-list .option.active, +.active-player-local .filters-container .selection-list a.active, +.active-player-local .filters-container .selection-list .option.active { + color: #DB2464; +} +.filters-container .selection-list a, .filters-container .selection-list .option { + text-transform: capitalize; +} +.filters-container .sortable.active { + position: relative; +} +.filters-container .sortable.active.order-asc:after { + content: "\e89e"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .sortable.active.order-desc:after { + content: "\e89d"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .sortable.active:after { + font-size: 130%; + padding-left: 0.25em; + position: absolute; + margin-top: 1px; +} +.filters-container .filter-btn { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #12B2E7; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; + display: block; +} +.filters-container .filter-btn .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.filters-container .filter-btn .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#0012B2E7", endColorstr="#FF12B2E7"); + background-image: -owg-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -webkit-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -moz-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -o-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.filters-container .filter-btn:hover { + color: #fff; +} +.filters-container .filter-btn:before { + content: "\e898"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .filter-btn:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.filters-container .filter-btn:hover:before { + color: white; +} +.filters-container .filter-btn.filterable-add { + display: inline-block; + background-color: #a8a7a6; +} +.filters-container .filter-btn.filterable-add:hover { + background-color: #12B2E7; +} +.active-player-local .filters-container .filter-btn.filterable-add:hover { + background-color: #DB2464; +} +.filters-container .filter-btn.filterable-add:before { + content: "\e6fd"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .filters-page h3, +.filters-container .filters-options h3 { + cursor: pointer; + padding-left: 1em; + position: relative; +} +.filters-container .filters-page h3:before, +.filters-container .filters-options h3:before { + content: "\e89a"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .filters-page h3:before, +.filters-container .filters-options h3:before { + font-size: 140%; + position: absolute; + left: -12px; + top: -3px; +} +.filters-container .filters-page h3:hover:before, +.filters-container .filters-options h3:hover:before { + color: #12B2E7; +} +.active-player-local .filters-container .filters-page h3:hover:before, +.active-player-local .filters-container .filters-options h3:hover:before { + color: #DB2464; +} +.filters-container .open-filters { + position: relative; +} +.filters-container .open-filters i { + top: -3px; + right: 3px; + position: absolute; + cursor: pointer; + font-size: 150%; + display: none; +} +.filters-container .open-filters i:before { + content: "\e6fb"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-container .open-filters:hover i { + color: #2B2F30; +} +.filters-container .deselect-all { + margin: 0 0 0.5em 1em; + cursor: pointer; +} + +.filters-active-bar { + -webkit-box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.15); + box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.15); + position: fixed; + margin-left: 0; + left: 0; + top: 50px; + right: 0; + background: #fff; + padding: 0.75em; + text-align: center; + z-index: 50; + display: none; +} +@media (min-width: 57em) { + .filters-active-bar { + margin-left: 50px; + } +} +@media (min-width: 57em) { + .filters-active-bar { + left: 190px; + } +} +@media (min-width: 75em) { + .filters-active-bar { + left: 250px; + } +} +.shell-playlist-closed .filters-active-bar { + right: 0; +} +@media (min-width: 57em) { + .filters-active-bar { + right: 310px; + } + .shell-playlist-closed .filters-active-bar { + right: 50px; + } +} +@media (min-width: 75em) { + .filters-active-bar { + right: 400px; + } + .shell-playlist-closed .filters-active-bar { + right: 50px; + } +} +.shell-playlist-closed .filters-active-bar { + right: 0; +} +@media (min-width: 57em) { + .shell-playlist-closed .filters-active-bar { + right: 50px; + } +} +@media (min-width: 75em) { + .shell-playlist-closed .filters-active-bar { + right: 50px; + } +} +.filters-active-bar .remove { + top: 0; + right: 0; + bottom: 0; + position: absolute; + display: table; + width: 2em; + text-align: center; + cursor: pointer; + font-size: 150%; + opacity: 0.5; +} +.filters-active-bar .remove:before { + content: "\e702"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.filters-active-bar .remove:before { + display: table-cell; + vertical-align: middle; + height: 2em; +} +.filters-active-bar .remove:hover { + opacity: 1; +} +.filters-active-bar .filters-active-all { + display: block; + margin: 0 2em; + position: relative; + white-space: nowrap; + overflow: hidden; + text-transform: capitalize; +} +.filters-active-bar .filters-active-all:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} + +.layout-container.filters-active .filters-active-bar { + display: block; +} +.layout-container.filters-active .region-content { + padding-top: 3.5em; +} +.layout-container.filters-active .filters-container .open-filters i { + display: block; +} + +.is-loading { + opacity: 0.5; +} + +.filter-pane { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + -webkit-transition: 0.2s all ease-out; + -o-transition: 0.2s all ease-out; + transition: 0.2s all ease-out; + overflow-y: auto; +} +.filter-pane.filters-current { + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.show-filters .filter-pane.filters-current { + -webkit-transform: translate(-240px, 0); + -moz-transform: translate(-240px, 0); + -ms-transform: translate(-240px, 0); + -o-transform: translate(-240px, 0); + transform: translate(-240px, 0); +} +.show-options .filter-pane.filters-current { + -webkit-transform: translate(-480px, 0); + -moz-transform: translate(-480px, 0); + -ms-transform: translate(-480px, 0); + -o-transform: translate(-480px, 0); + transform: translate(-480px, 0); +} +.filter-pane.filters-page { + -webkit-transform: translate(240px, 0); + -moz-transform: translate(240px, 0); + -ms-transform: translate(240px, 0); + -o-transform: translate(240px, 0); + transform: translate(240px, 0); +} +.show-filters .filter-pane.filters-page { + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.show-options .filter-pane.filters-page { + -webkit-transform: translate(-240px, 0); + -moz-transform: translate(-240px, 0); + -ms-transform: translate(-240px, 0); + -o-transform: translate(-240px, 0); + transform: translate(-240px, 0); +} +.filter-pane.filters-options { + -webkit-transform: translate(480px, 0); + -moz-transform: translate(480px, 0); + -ms-transform: translate(480px, 0); + -o-transform: translate(480px, 0); + transform: translate(480px, 0); +} +.show-filters .filter-pane.filters-options { + -webkit-transform: translate(240px, 0); + -moz-transform: translate(240px, 0); + -ms-transform: translate(240px, 0); + -o-transform: translate(240px, 0); + transform: translate(240px, 0); +} +.show-options .filter-pane.filters-options { + -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +form .form-control-wrapper .form-control:focus, +form .form-control-wrapper .form-control { + padding: 0.5em 0.25em; + height: auto; + margin-bottom: 0.5em; +} + +.help-block { + margin-top: 8px; + font-size: 90%; + color: #C0C0C0; +} + +.form-type-hidden { + display: none; +} + +form .inline-list li { + display: inline-block; + margin-right: 2em; + float: left; +} +form .inline-list .response { + padding-top: 18px; +} + +.form-type-hide { + display: none; +} + +.form-item-half-width { + width: 50%; + float: left; + padding-right: 0.5em; +} + +.active-player-kodi #header { + background: #1e2122; +} +.active-player-kodi #logo { + color: #12B2E7; + background: #1e2122; +} +.active-player-local #header { + background: #313233; +} +.active-player-local #logo { + color: #DB2464; + background: #313233; +} +#header { + color: rgba(255, 255, 255, 0.6); + position: fixed; + top: 0; + left: 0; + right: 0; + height: 50px; + z-index: 51; + right: 0; +} +.shell-playlist-closed #header { + right: 0; +} +@media (min-width: 57em) { + #header { + right: 310px; + } + .shell-playlist-closed #header { + right: 50px; + } +} +@media (min-width: 75em) { + #header { + right: 400px; + } + .shell-playlist-closed #header { + right: 50px; + } +} +.shell-playlist-closed #header { + right: 0; +} +@media (min-width: 57em) { + .shell-playlist-closed #header { + right: 50px; + } +} +@media (min-width: 75em) { + .shell-playlist-closed #header { + right: 50px; + } +} +#header .search-toggle { + top: 0; + right: 150px; + position: absolute; +} +#header .search-toggle i { + display: table; + width: 50px; + text-align: center; + cursor: pointer; +} +#header .search-toggle i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +#header .search-toggle i:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} + +#selected-region { + display: none; + position: absolute; + top: 0; + height: 50px; + right: 100%; +} +@media (min-width: 57em) { + #selected-region { + right: 200px; + } +} +#selected-region .menu-toggle { + font-size: 150%; + display: table; + width: 50px; + text-align: center; + cursor: pointer; + float: right; +} +#selected-region .menu-toggle:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +#selected-region .menu-toggle:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +#selected-region .dropdown-menu { + margin: 0; +} +#selected-region .selected-text { + display: inline-block; + height: 50px; + line-height: 50px; +} +#selected-region.media-video .selected-watched, +#selected-region.media-video .selected-unwatched { + display: block; +} +#selected-region.media-video .selected-localadd { + display: none; +} +#selected-region.media-audio .selected-watched, +#selected-region.media-audio .selected-unwatched { + display: none; +} +#selected-region.media-audio .selected-localadd { + display: block; +} + +/** + * Page title. + */ +#page-title { + margin: 0; + line-height: 50px; + font-size: 1.3em; +} +#page-title .context a, +#page-title .title { + padding: 0 0 0 0.5em; +} + +/** + * Search region. + */ +#search-region { + top: 50px; + right: 0; + left: 0; + position: absolute; + display: none; +} +body.section-search #search-region { + display: block; +} +@media (min-width: 57em) { + #search-region { + top: 0; + left: auto; + } +} + +/** + * Mobile menu structure. + */ +.mobile-menu { + top: 0; + right: 0; + position: absolute; +} +.mobile-menu li { + display: inline-block; + margin: 0; + width: 50px; + height: 50px; +} +.mobile-menu i { + display: table; + width: 50px; + text-align: center; + cursor: pointer; + color: rgba(255, 255, 255, 0.6); + font-size: 120%; +} +.mobile-menu i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.mobile-menu i:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +@media (min-width: 57em) { + .mobile-menu { + display: none; + } +} + +/** + * Mobile menu icons. + */ +.mobile-menu--link__remote i:before { + content: "\e66f"; +} +.section-remote .mobile-menu--link__remote i:before { + color: #fff; +} +.mobile-menu--link__search i:before { + content: "\e65f"; +} +.section-search .mobile-menu--link__search i:before { + color: #fff; +} +.mobile-menu--link__playlist i:before { + content: "\e783"; +} +.section-playlist .mobile-menu--link__playlist i:before { + color: #fff; +} + +.help--page .region-content-wrapper .region-content { + padding: 1em; +} +@media (min-width: 57em) { + .help--page .region-content-wrapper .region-content { + padding: 2em; + padding-left: 3em; + } +} +.help--page .help--overview--report ul { + margin: 0; + padding: 0; +} +.help--page .help--overview--report ul li { + margin: 0; + padding: 0; + list-style: none; +} +.help--page .help--overview--report ul li:nth-child(even) { + background: #f5f5f5; +} +.help--page .help--overview--report ul li.warning { + background: #ffeacc; +} +.help--page .help--overview--report ul strong, .help--page .help--overview--report ul span { + padding: 0.5em; + display: block; + width: 50%; + float: left; +} +@media (min-width: 57em) { + .help--page .help--overview--report ul span { + width: 70%; + } + .help--page .help--overview--report ul strong { + width: 30%; + } +} + +.landing-page .landing-section { + padding-bottom: 10px; +} +.landing-page .region-content { + padding: 0; +} +.landing-page .region-content h3 a, +.landing-page h3.set-header a { + font-size: 75%; + line-height: 1.4; + float: right; + color: #999; +} +.landing-page .region-content h3 a:hover, +.landing-page h3.set-header a:hover { + color: #12B2E7; +} +.landing-page .landing-sections { + position: relative; + z-index: 10; +} +.landing-loading .landing-page .landing-content { + min-height: 3000px; +} + +#landing-hero { + display: none; + background-color: #323537; + background-attachment: fixed; + background-repeat: no-repeat; + background-size: cover; + background-position: 50% 50%; + height: 600px; + position: relative; + z-index: 1; +} +@media (min-width: 57em) { + #landing-hero { + display: block; + } +} + +.active-player-kodi .details-header { + background: #323537; +} +.active-player-kodi .details-header .gradient { + background-image: -owg-linear-gradient(left, #323537 0%, rgba(50, 53, 55, 0.9) 30%, rgba(50, 53, 55, 0) 100%); + background-image: -webkit-linear-gradient(left, #323537 0%, rgba(50, 53, 55, 0.9) 30%, rgba(50, 53, 55, 0) 100%); + background-image: -moz-linear-gradient(left, #323537 0%, rgba(50, 53, 55, 0.9) 30%, rgba(50, 53, 55, 0) 100%); + background-image: -o-linear-gradient(left, #323537 0%, rgba(50, 53, 55, 0.9) 30%, rgba(50, 53, 55, 0) 100%); + background-image: linear-gradient(left, #323537 0%, rgba(50, 53, 55, 0.9) 30%, rgba(50, 53, 55, 0) 100%); +} + +.active-player-local .details-header { + background: #222425; +} +.active-player-local .details-header .gradient { + background-image: -owg-linear-gradient(left, #222425 0%, rgba(34, 36, 37, 0.9) 30%, rgba(34, 36, 37, 0) 100%); + background-image: -webkit-linear-gradient(left, #222425 0%, rgba(34, 36, 37, 0.9) 30%, rgba(34, 36, 37, 0) 100%); + background-image: -moz-linear-gradient(left, #222425 0%, rgba(34, 36, 37, 0.9) 30%, rgba(34, 36, 37, 0) 100%); + background-image: -o-linear-gradient(left, #222425 0%, rgba(34, 36, 37, 0.9) 30%, rgba(34, 36, 37, 0) 100%); + background-image: linear-gradient(left, #222425 0%, rgba(34, 36, 37, 0.9) 30%, rgba(34, 36, 37, 0) 100%); +} + +.details-header { + *zoom: 1; + position: relative; + min-height: 283px; + padding-bottom: 2em; +} +.details-header:after { + content: ""; + display: table; + clear: both; +} +.details-header a { + color: rgba(255, 255, 255, 0.6); +} +.details-header a:hover { + color: rgba(255, 255, 255, 0.9); +} +.details-header .region-details-side { + padding: 0.5em 0 0.5em 0.5em; + display: none; +} +@media (min-width: 45em) { + .details-header .region-details-side { + width: 190px; + } +} +@media (min-width: 75em) { + .details-header .region-details-side { + width: 280px; + } +} +@media (min-width: 45em) { + .details-header .region-details-side { + display: block; + padding: 1.5em; + position: absolute; + } +} +.details-header .region-details-meta-wrapper { + padding: 0.5em 2em; + color: rgba(255, 255, 255, 0.9); + position: relative; + z-index: 20; +} +@media (min-width: 45em) { + .details-header .region-details-meta-wrapper { + margin-left: 190px; + } +} +@media (min-width: 75em) { + .details-header .region-details-meta-wrapper { + margin-left: 280px; + } +} +@media (min-width: 45em) { + .details-header .region-details-meta-wrapper { + padding: 0.5em 1em 0 0.5em; + } +} +@media (min-width: 75em) { + .details-header .region-details-meta-wrapper { + padding-top: 1em; + } +} +@media (min-width: 90em) { + .details-header .region-details-meta-wrapper { + margin-right: 300px; + color: rgba(255, 255, 255, 0.9); + } + .shell-playlist-closed .details-header .region-details-meta-wrapper { + margin-right: 500px; + } +} +.details-header .region-details-title { + color: rgba(255, 255, 255, 0.95); + margin-bottom: 0.5em; +} +.details-header .region-details-title .sub { + font-weight: normal; + font-size: 14px; + color: rgba(255, 255, 255, 0.4); +} +@media (min-width: 45em) { + .details-header .region-details-title { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 75%; + float: left; + } +} +.details-header .region-details-rating { + width: 73px; + font-size: 170%; + color: rgba(255, 255, 255, 0.7); + white-space: nowrap; + margin-top: 0.8em; + padding-right: 2em; + position: relative; + text-align: right; +} +.details-header .region-details-rating i { + font-size: 150%; + top: -5px; + right: 0; + position: absolute; +} +.details-header .region-details-rating i:before { + content: "\e631"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +@media (min-width: 45em) { + .details-header .region-details-rating { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 25%; + float: right; + } +} +.details-header .region-details-subtext { + color: rgba(255, 255, 255, 0.6); + *zoom: 1; +} +.details-header .region-details-subtext:after { + content: ""; + display: table; + clear: both; +} +.details-header .region-details-fanart { + background-size: cover; + background-position: 50% 50%; + width: 100%; + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + z-index: 10; + opacity: 0.3; +} +@media (min-width: 57em) { + .details-header .region-details-fanart { + width: 600px; + margin-left: 50px; + } +} +@media (min-width: 75em) { + .details-header .region-details-fanart { + left: auto; + } +} +.details-header .region-details-fanart .gradient { + content: ""; + top: 0; + bottom: 0; + left: 0; + position: absolute; + width: 60%; +} +@media (min-width: 90em) { + .details-header .region-details-fanart { + opacity: 0.8; + } +} +.details-header .tagline, +.details-header .description { + margin-bottom: 0.5em; + max-height: 22px; + overflow: hidden; + cursor: pointer; + color: rgba(255, 255, 255, 0.6); +} +.details-header .tagline.expanded, +.details-header .description.expanded { + max-height: none; +} +@media (min-width: 75em) { + .details-header .tagline, + .details-header .description { + padding-right: 10%; + } +} +.details-header .tagline { + max-height: none; + cursor: default; + color: rgba(255, 255, 255, 0.8); +} +.details-header .meta { + margin: 1em 0; +} +.details-header .meta span { + color: rgba(255, 255, 255, 0.6); +} +.details-header .meta label { + text-transform: capitalize; +} +.details-header .runtime { + font-size: 120%; + margin-bottom: 0.6em; + float: left; +} +.details-header .genres { + float: right; +} +.details-header .streams span { + color: rgba(255, 255, 255, 0.6); + text-transform: uppercase; +} +.details-header .card-detail .artwork { + position: relative; + z-index: 20; +} +.details-header .card-detail .play { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + z-index: 20; + cursor: pointer; + opacity: 0; +} +.details-header .card-detail .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.details-header .card-detail .play:before { + font-size: 400%; + color: rgba(255, 255, 255, 0.8); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + margin: auto; + width: 55px; + height: 55px; +} +.details-header .card-detail:hover .play { + opacity: 1; +} +.details-header label { + font-weight: normal; +} +.details-header .dropdown > span { + cursor: pointer; +} +.tvshow-show .details-header, .season-details .details-header, .movie-show .details-header { + min-height: 315px; +} +@media (min-width: 75em) { + .tvshow-show .details-header, .season-details .details-header, .movie-show .details-header { + min-height: 405px; + } +} +.section-movie .details-header .region-details-meta-below, .section-tvshow .details-header .region-details-meta-below { + height: auto; + overflow: initial; +} + +.layout-container.with-sidebar-first > .region-first { + background: #F2F2F2; + position: fixed; + bottom: 70px; + top: 50px; + left: 0; + width: 0; + width: 250px; + left: -100%; + -webkit-box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.3); + box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.3); + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + overflow-y: auto; + z-index: 25; +} +@media (min-width: 57em) { + .layout-container.with-sidebar-first > .region-first { + bottom: 70px; + } +} +@media (min-width: 57em) { + .layout-container.with-sidebar-first > .region-first { + left: 50px; + } +} +@media (min-width: 57em) { + .layout-container.with-sidebar-first > .region-first { + width: 190px; + } +} +@media (min-width: 75em) { + .layout-container.with-sidebar-first > .region-first { + width: 250px; + } +} +@media (min-width: 57em) { + .layout-container.with-sidebar-first > .region-first { + display: block; + -webkit-box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.05); + box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.05); + left: 50px; + } +} +.region-first-open .layout-container.with-sidebar-first > .region-first { + left: 0; +} +@media (min-width: 57em) { + .region-first-open .layout-container.with-sidebar-first > .region-first { + left: 50px; + } +} +.layout-container.with-sidebar-first > .region-content-wrapper { + margin-left: 0; + margin-left: 0; +} +@media (min-width: 57em) { + .layout-container.with-sidebar-first > .region-content-wrapper { + margin-left: 190px; + } +} +@media (min-width: 75em) { + .layout-container.with-sidebar-first > .region-content-wrapper { + margin-left: 250px; + } +} +.layout-container.with-header > .region-content-wrapper { + position: relative; +} +.layout-container.with-header > .region-content-wrapper > .region-content, +.layout-container.with-header > .region-content { + background: #f5f5f5; + padding-top: 2em; + min-height: 500px; +} + +.region-first-toggle { + top: 0; + left: 50px; + position: fixed; + display: table; + width: 50px; + text-align: center; + cursor: pointer; + color: rgba(255, 255, 255, 0.6); + z-index: 100; + font-size: 150%; + opacity: 0.5; +} +.region-first-toggle:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.region-first-toggle:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +@media (min-width: 57em) { + .region-first-toggle { + display: none; + } +} +.region-first-open .region-first-toggle { + color: #fff; +} +.region-first-open .region-first-toggle:before { + content: "\e89a"; +} + +.content-container.with-sidebar .content-container-first { + float: left; + padding-right: 2em; + display: none; +} +@media (min-width: 45em) { + .content-container.with-sidebar .content-container-first { + width: 190px; + } +} +@media (min-width: 75em) { + .content-container.with-sidebar .content-container-first { + width: 280px; + } +} +@media (min-width: 45em) { + .content-container.with-sidebar .content-container-content-wrapper { + margin-left: 190px; + } +} +@media (min-width: 75em) { + .content-container.with-sidebar .content-container-content-wrapper { + margin-left: 280px; + } +} + +.section-content { + max-width: 1150px; + margin-bottom: 2em; + padding-bottom: 2em; +} +.section-content h2 { + margin-bottom: 1em; +} +.section-content.section-full-width { + max-width: none; +} + +.content-sections > .section-content:last-child { + border: none; +} + +#loading-page { + top: 0; + right: 0; + bottom: 150px; + left: 0; + position: fixed; + left: 0; + right: 0; +} +@media (min-width: 57em) { + #loading-page { + left: 50px; + } +} +.shell-playlist-closed #loading-page { + right: 0; +} +@media (min-width: 57em) { + #loading-page { + right: 310px; + } + .shell-playlist-closed #loading-page { + right: 50px; + } +} +@media (min-width: 75em) { + #loading-page { + right: 400px; + } + .shell-playlist-closed #loading-page { + right: 50px; + } +} +#loading-page.init { + left: 0 !important; + right: 0 !important; +} +.shell-playlist-closed #loading-page { + right: 0; +} +@media (min-width: 57em) { + .shell-playlist-closed #loading-page { + right: 50px; + } +} +@media (min-width: 75em) { + .shell-playlist-closed #loading-page { + right: 50px; + } +} +#loading-page h2 { + text-align: center; + margin-top: 18rem; + font-size: 1.5em; + color: #a8a7a6; +} +@media (min-width: 57em) { + #loading-page h2 { + margin-top: 33rem; + } +} +.loader-inline #loading-page { + position: relative; + bottom: 0; + left: 0 !important; + right: 0 !important; +} +.loader-inline #loading-page h2 { + margin-top: 10rem; +} +@media (min-width: 57em) { + .loader-inline #loading-page h2 { + margin-top: 12rem; + } +} +.search-page #loading-page { + position: static; + width: 100%; +} + +.loader { + position: absolute; + margin: 5rem auto 3rem auto; + overflow: hidden; +} + +.loader > div { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; +} + +.orbit { + height: 20rem; + width: 20rem; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: auto; + overflow: visible; + background-color: #ddd; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + -o-border-radius: 50%; + border-radius: 50%; +} +.orbit > div { + top: 2.5rem; + left: 2.5rem; + font-size: 1rem; + height: 15rem; + width: 15rem; + -webkit-transform-origin: center center; + -moz-transform-origin: center center; + -ms-transform-origin: center center; + transform-origin: center center; +} +.orbit > div::before { + position: absolute; + left: calc(50% - 0.5em); + display: block; + content: ""; + height: 1em; + width: 1em; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + -o-border-radius: 50%; + border-radius: 50%; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} +.orbit > div:nth-child(1)::before { + background-color: #a8a7a6; +} +.orbit > div:nth-child(2)::before { + background-color: #a8a7a6; +} +.orbit > div:nth-child(3)::before { + background-color: #a8a7a6; +} +.orbit > div:nth-child(4)::before { + background-color: #a8a7a6; +} + +@-moz-keyframes loading-orbit { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes loading-orbit { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-o-keyframes loading-orbit { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes loading-orbit { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes loading-orbit { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes loading-orbit-before { + 0% { + height: 1em; + width: 1em; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 5; + } + 5% { + height: 1.25em; + width: 1.25em; + } + 25% { + height: 2em; + width: 2em; + z-index: 10; + background-color: #12B2E7; + } + 50% { + -webkit-transform: translate3d(1rem, 15rem, 0); + -moz-transform: translate3d(1rem, 15rem, 0); + -ms-transform: translate3d(1rem, 15rem, 0); + -o-transform: translate3d(1rem, 15rem, 0); + transform: translate3d(1rem, 15rem, 0); + z-index: 0; + height: 1em; + width: 1em; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 0; + height: 1em; + width: 1em; + } +} +@-webkit-keyframes loading-orbit-before { + 0% { + height: 1em; + width: 1em; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 5; + } + 5% { + height: 1.25em; + width: 1.25em; + } + 25% { + height: 2em; + width: 2em; + z-index: 10; + background-color: #12B2E7; + } + 50% { + -webkit-transform: translate3d(1rem, 15rem, 0); + -moz-transform: translate3d(1rem, 15rem, 0); + -ms-transform: translate3d(1rem, 15rem, 0); + -o-transform: translate3d(1rem, 15rem, 0); + transform: translate3d(1rem, 15rem, 0); + z-index: 0; + height: 1em; + width: 1em; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 0; + height: 1em; + width: 1em; + } +} +@-o-keyframes loading-orbit-before { + 0% { + height: 1em; + width: 1em; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 5; + } + 5% { + height: 1.25em; + width: 1.25em; + } + 25% { + height: 2em; + width: 2em; + z-index: 10; + background-color: #12B2E7; + } + 50% { + -webkit-transform: translate3d(1rem, 15rem, 0); + -moz-transform: translate3d(1rem, 15rem, 0); + -ms-transform: translate3d(1rem, 15rem, 0); + -o-transform: translate3d(1rem, 15rem, 0); + transform: translate3d(1rem, 15rem, 0); + z-index: 0; + height: 1em; + width: 1em; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 0; + height: 1em; + width: 1em; + } +} +@-ms-keyframes loading-orbit-before { + 0% { + height: 1em; + width: 1em; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 5; + } + 5% { + height: 1.25em; + width: 1.25em; + } + 25% { + height: 2em; + width: 2em; + z-index: 10; + background-color: #12B2E7; + } + 50% { + -webkit-transform: translate3d(1rem, 15rem, 0); + -moz-transform: translate3d(1rem, 15rem, 0); + -ms-transform: translate3d(1rem, 15rem, 0); + -o-transform: translate3d(1rem, 15rem, 0); + transform: translate3d(1rem, 15rem, 0); + z-index: 0; + height: 1em; + width: 1em; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 0; + height: 1em; + width: 1em; + } +} +@keyframes loading-orbit-before { + 0% { + height: 1em; + width: 1em; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 5; + } + 5% { + height: 1.25em; + width: 1.25em; + } + 25% { + height: 2em; + width: 2em; + z-index: 10; + background-color: #12B2E7; + } + 50% { + -webkit-transform: translate3d(1rem, 15rem, 0); + -moz-transform: translate3d(1rem, 15rem, 0); + -ms-transform: translate3d(1rem, 15rem, 0); + -o-transform: translate3d(1rem, 15rem, 0); + transform: translate3d(1rem, 15rem, 0); + z-index: 0; + height: 1em; + width: 1em; + } + 100% { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 0; + height: 1em; + width: 1em; + } +} +.loader.orbit > div { + -webkit-animation: loading-orbit 6s infinite linear; + -o-animation: loading-orbit 6s infinite linear; + animation: loading-orbit 6s infinite linear; +} +.loader.orbit > div::before { + -webkit-animation: loading-orbit-before 2s infinite ease-in-out; + -o-animation: loading-orbit-before 2s infinite ease-in-out; + animation: loading-orbit-before 2s infinite ease-in-out; +} + +.loader.orbit > div:nth-child(1) { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} +.loader.orbit > div:nth-child(2) { + -webkit-animation-delay: -0.75s; + animation-delay: -0.75s; +} +.loader.orbit > div:nth-child(3) { + -webkit-animation-delay: -1.5s; + animation-delay: -1.5s; +} +.loader.orbit > div:nth-child(4) { + -webkit-animation-delay: -2.25s; + animation-delay: -2.25s; +} +.loader.orbit > div:nth-child(1)::before { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} +.loader.orbit > div:nth-child(2)::before { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} +.loader.orbit > div:nth-child(3)::before { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} +.loader.orbit > div:nth-child(4)::before { + -webkit-animation-delay: -1.5s; + animation-delay: -1.5s; +} + +.spinner-double-section-far, +.spinner-double-section { + top: 20em; + right: 0; + bottom: 0; + left: 0; + position: absolute; + margin: auto; + width: 80px; + height: 80px; + border-radius: 50%; + border: 4px solid rgba(170, 170, 170, 0.2); + -webkit-animation: spinner 3s linear infinite; + -o-animation: spinner 3s linear infinite; + animation: spinner 3s linear infinite; +} +.loader-inline .spinner-double-section-far, +.loader-inline .spinner-double-section { + top: 5em; +} + +@-moz-keyframes spinner { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} +@-webkit-keyframes spinner { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes spinner { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} +@-ms-keyframes spinner { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes spinner { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} +/* Sections */ +.spinner-double-section-far, +.spinner-double-section { + position: relative; +} +.spinner-double-section-far:before, +.spinner-double-section-far:after, +.spinner-double-section:before, +.spinner-double-section:after { + content: ""; + position: absolute; + top: -20px; + left: -20px; + display: block; + width: 80px; + height: 80px; + border-radius: 50%; + border: 4px solid transparent; + border-top-color: #12B2E7; +} +.spinner-double-section-far:after, +.spinner-double-section:after { + border-top-color: transparent; + border-bottom-color: #12B2E7; +} + +.spinner-double-section-far { + top: 11em; +} +.spinner-double-section-far:before, +.spinner-double-section-far:after { + top: -12px; + left: -12px; + width: 96px; + height: 96px; +} +@media (min-width: 57em) { + .spinner-double-section-far { + top: 20em; + } +} + +/* + * Other Loader styles. + */ +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.loader-small-inline { + border-radius: 50%; + width: 20px; + height: 20px; + border: 0.25rem solid rgba(0, 0, 0, 0.1); + border-top-color: #12B2E7; + animation: spin 1s infinite linear; + display: inline-block; +} + +.local-playlist-list .region-first .new-list { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #a8a7a6; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; + margin: 2em 0; +} +.local-playlist-list .region-first .new-list .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.local-playlist-list .region-first .new-list .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00A8A7A6", endColorstr="#FFA8A7A6"); + background-image: -owg-linear-gradient(left, rgba(168, 167, 166, 0) 0%, #a8a7a6 100%); + background-image: -webkit-linear-gradient(left, rgba(168, 167, 166, 0) 0%, #a8a7a6 100%); + background-image: -moz-linear-gradient(left, rgba(168, 167, 166, 0) 0%, #a8a7a6 100%); + background-image: -o-linear-gradient(left, rgba(168, 167, 166, 0) 0%, #a8a7a6 100%); + background-image: linear-gradient(left, rgba(168, 167, 166, 0) 0%, #a8a7a6 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.local-playlist-list .region-first .new-list:hover { + color: #fff; +} +.local-playlist-list .region-first .new-list:before { + content: "\e6fd"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.local-playlist-list .region-first .new-list:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.local-playlist-list .region-first .new-list:hover:before { + color: white; +} +.local-playlist-list .region-content { + padding: 0; +} + +.modal .playlist-selection-list h3 { + display: none; +} +.modal .playlist-selection-list .lists li:after { + display: none; +} +.local-playlist .local-playlist-header { + position: relative; + background: #fff; + padding: 1em; +} +.local-playlist .local-playlist-header h2 { + margin: 0; + font-size: 18px; + color: #888888; +} +.local-playlist .local-playlist-header .dropdown { + position: absolute; + right: 1em; + top: 0.5em; +} +.local-playlist .local-playlist-header .dropdown i { + color: #888888; + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + font-size: 150%; +} +.local-playlist .local-playlist-header .dropdown i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.local-playlist .local-playlist-header .dropdown i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.local-playlist .local-playlist-header .dropdown ul { + left: auto; + right: 0; +} +.local-playlist .item-container { + margin: 1em; +} +.local-playlist .empty-content { + color: #888888; + text-align: center; + font-size: 150%; + margin: 2em; +} + +#modal-window .close, #modal-window .close:hover, #modal-window .close:focus { + color: #fff; +} +#modal-window .modal-dialog { + -webkit-box-shadow: 0 2px 11px 2px rgba(0, 0, 0, 0.32); + box-shadow: 0 2px 11px 2px rgba(0, 0, 0, 0.32); +} +@media (min-width: 45em) { + #modal-window .modal-dialog { + min-width: 500px; + } +} +#modal-window .modal-header { + background: #2F3334; + color: #fff; +} +#modal-window .modal-header, #modal-window .modal-body { + padding: 15px 20px; +} +#modal-window .modal-footer { + background: rgba(0, 0, 0, 0.05); + padding: 5px 20px; +} +#modal-window.style-confirm .modal-body { + padding: 30px 20px; +} +@media (min-width: 57em) { + #modal-window.style-video .modal-dialog { + width: 800px; + } +} +#modal-window.style-video .modal-body { + padding: 0; + position: relative; + padding-bottom: 56.25%; + padding-top: 30px; + height: 0; + overflow: hidden; +} +#modal-window.style-video .modal-body iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +#modal-window.style-video .modal-footer { + display: none; +} +#modal-window.style-edit-form .modal-footer, #modal-window.style-form .modal-footer { + display: none; +} +#modal-window.style-edit-form footer, #modal-window.style-form footer { + margin: 15px -20px -15px; + padding: 5px 20px; + background: rgba(0, 0, 0, 0.05); + *zoom: 1; +} +#modal-window.style-edit-form footer:after, #modal-window.style-form footer:after { + content: ""; + display: table; + clear: both; +} +#modal-window.style-edit-form footer .inline-list li, #modal-window.style-form footer .inline-list li { + margin: 0 0 0 2em; + float: right; +} + +#nav-bar { + background: rgba(255, 255, 255, 0.9); + width: 50px; + padding: 0; + top: 0; + left: 0; + position: fixed; + margin: 0; + padding: 0; + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + z-index: 50; + -webkit-box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.05); + box-shadow: 1px 0 3px 0 rgba(134, 134, 134, 0.05); + display: none; +} +#nav-bar #nav-header { + height: 50px; + background: #1e2122 image-url("logo.png") 0 0 no-repeat; +} +.section-home #nav-bar { + display: block; +} +@media (min-width: 57em) { + #nav-bar { + display: block; + } +} +#nav-bar nav { + padding: 1em 0; +} +#nav-bar nav ul { + margin: 0; + padding: 0; +} +#nav-bar nav ul li { + margin: 0; + padding: 0; + list-style: none; +} +#nav-bar nav ul a { + display: block; + padding: 0.5em 0; + color: #2B2F30; + top: 0; + bottom: 0; + left: 0; + position: absolute; + white-space: nowrap; + -webkit-transition: none; + -o-transition: none; + transition: none; +} +#nav-bar nav ul a span { + display: none; + padding-right: 1em; + font-weight: bold; + padding-top: 2px; +} +#nav-bar nav ul a i { + font-size: 130%; + width: 50px; + text-align: center; +} +#nav-bar nav ul a i:before { + top: 10px; + left: 16px; + position: absolute; +} +#nav-bar nav ul ul { + display: none; +} +#nav-bar nav ul li { + position: relative; + height: 38px; +} +#nav-bar nav ul li:hover { + white-space: nowrap; +} +#nav-bar nav ul li:hover a { + background: #12B2E7; + color: #fff; +} +#nav-bar nav ul li:hover a span { + display: inline-block; +} +.active-player-local #nav-bar nav ul li:hover a { + background: #DB2464; +} + +#player-wrapper { + right: 0; + bottom: 0; + left: 0; + position: fixed; + height: 70px; + background: #18191A; + z-index: 501; +} +@media (min-width: 57em) { + #player-wrapper { + height: 70px; + } +} + +#player-local { + display: none; +} +.active-player-local #player-local { + display: block; +} + +#player-kodi { + display: block; +} +.active-player-local #player-kodi { + display: none; +} +#player-kodi .playing-thumb:hover .remote-toggle { + display: table; +} + +.player .controls-primary, +.player .controls-secondary { + background: rgba(255, 255, 255, 0.05); + height: 70px; +} +@media (min-width: 57em) { + .player .controls-primary, + .player .controls-secondary { + height: 70px; + } +} +.player .controls-primary .control, +.player .controls-secondary .control { + cursor: pointer; + height: 70px; + display: table; + font-size: 40px; + color: rgba(255, 255, 255, 0.5); +} +@media (min-width: 57em) { + .player .controls-primary .control, + .player .controls-secondary .control { + height: 70px; + } +} +.player .controls-primary .control:hover, +.player .controls-secondary .control:hover { + color: #fff; +} +.player .control { + text-align: center; +} +.player .control:before { + display: table-cell; + vertical-align: middle; +} +.player .controls-primary { + display: none; + width: 100%; +} +@media (min-width: 57em) { + .player .controls-primary { + width: 300px; + } +} +.player .controls-primary .control { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 33.33%; + float: left; +} +@media (min-width: 57em) { + .player .controls-primary { + float: left; + display: block; + } +} +.player .controls-secondary { + display: none; + width: 100%; +} +@media (min-width: 57em) { + .player .controls-secondary { + width: 300px; + } +} +.player .controls-secondary .control { + margin-top: -9px; + font-size: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 25%; + float: left; +} +@media (min-width: 57em) { + .player .controls-secondary { + float: right; + display: block; + } +} +.player .now-playing { + height: 70px; + position: relative; + font-size: 12px; + font-weight: bold; + color: #bac1c8; +} +@media (min-width: 57em) { + .player .now-playing { + height: 70px; + } +} +.player .now-playing a { + color: #bac1c8; +} +@media (min-width: 57em) { + .player .now-playing { + margin-right: 300px; + margin-left: 300px; + } +} +.player .thumb { + width: 70px; + height: 70px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.player .playing-thumb { + top: 0; + bottom: 0; + left: 0; + position: absolute; + width: 70px; + height: 70px; + z-index: 10; + overflow: hidden; + background-color: rgba(255, 255, 255, 0.2); + background-size: cover; + background-position: 50% 50%; +} +@media (min-width: 57em) { + .player .playing-thumb { + width: 70px; + } +} +@media (min-width: 57em) { + .player .playing-thumb { + height: 70px; + } +} +.player .remote-toggle { + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + display: table; + width: 100px; + text-align: center; + cursor: pointer; + display: none; + color: #fff; + font-size: 200%; + text-align: center; + height: 70px; + width: 70px; + font-size: 300%; + opacity: 0.8; +} +.player .remote-toggle:before { + content: "\e66f"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.player .remote-toggle:before { + display: table-cell; + vertical-align: middle; + height: 100px; +} +.player .remote-toggle:before { + padding-right: 5px; +} +@media (min-width: 57em) { + .player .remote-toggle { + height: 70px; + } +} +@media (min-width: 57em) { + .player .remote-toggle { + width: 70px; + } +} +.player .remote-toggle:before { + display: table-cell; + vertical-align: middle; + height: 70px; + width: 70px; + padding: 0; +} +@media (min-width: 57em) { + .player .remote-toggle:before { + height: 70px; + } +} +@media (min-width: 57em) { + .player .remote-toggle:before { + width: 70px; + } +} +.player .playing-info { + margin-left: 70px; +} +@media (min-width: 57em) { + .player .playing-info { + margin-left: 70px; + } +} +.player .playing-time { + right: 0; + bottom: 0; + position: absolute; + top: 20px; + margin: 7px 10px 0 0; + text-align: right; +} +.player .playing-meta { + margin: 7px 0 0 10px; +} +.player .playing-title a, +.player .playing-time-current { + color: #fff; + font-size: 14px; +} +.player .slider-bar { + height: 20px; + background: rgba(255, 255, 255, 0.1); + border-top: 4px solid rgba(255, 255, 255, 0); + margin: 0; + cursor: pointer; +} +.player .slider-bar .noUi-base, +.player .slider-bar .noUi-handle, +.player .slider-bar .noUi-origin { + height: 20px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + top: 0; + border: none; +} +.player .slider-bar .noUi-origin { + background: #1F1F20; + top: -4px; +} +.player .slider-bar .noUi-handle { + background: none; + width: 7px; + left: -5px; +} +.player .slider-bar:hover .noUi-handle { + background: #6B6B6B; +} +.player .volume { + background: #36393a; +} + +.control-prev:before { + content: "\e6a8"; +} + +.control-play:before { + content: "\e6b9"; + font-size: 150%; +} + +.control-next:before { + content: "\e6a7"; +} + +.control-mute:before { + content: "\e6d2"; +} + +.control-repeat:before { + content: "\e6c2"; +} + +.control-shuffle:before { + content: "\e6c5"; +} + +.control-menu:before { + content: "\e8a3"; +} + +.player-menu-wrapper { + right: 0; + position: fixed; + width: 100%; + bottom: 70px; + z-index: 50; +} +@media (min-width: 57em) { + .player-menu-wrapper { + width: 300px; + } +} +@media (min-width: 57em) { + .player-menu-wrapper { + bottom: 70px; + } +} +.player-menu-wrapper ul { + background: #fff; + -webkit-box-shadow: -1px -1px 8px rgba(0, 0, 0, 0.1); + box-shadow: -1px -1px 8px rgba(0, 0, 0, 0.1); + height: 0; + -webkit-transition: height 0.5s ease-in; + -o-transition: height 0.5s ease-in; + transition: height 0.5s ease-in; +} +.player-menu-wrapper ul li { + padding: 7px 13px; + cursor: pointer; +} +.player-menu-wrapper ul li:hover { + background: rgba(0, 0, 0, 0.1); +} +.player-menu-wrapper.opened ul { + height: auto; +} + +#player-kodi { + background: #18191A; +} +.kodi-playing #player-kodi .control-play:before { + content: "\e6b6"; +} +.kodi-playing #player-kodi .playing-progress { + border-top-color: #12B2E7; +} +.kodi-paused #player-kodi .control-play:before { + content: "\e6b9"; +} +.kodi-mute-on #player-kodi .control-mute:hover { + color: #12B2E7; +} +.kodi-mute-on #player-kodi .control-mute:before { + content: "\e6d0"; +} +.kodi-repeat-one #player-kodi .control-repeat { + color: #fff; +} +.kodi-repeat-one #player-kodi .control-repeat:before { + content: "\e6c3"; +} +.kodi-repeat-one #player-kodi .control-repeat:hover { + color: #12B2E7; +} +.kodi-repeat-all #player-kodi .control-repeat { + color: #fff; +} +.kodi-repeat-all #player-kodi .control-repeat:hover { + color: #12B2E7; +} +.kodi-shuffled-on #player-kodi .control-shuffle { + color: #fff; +} +.kodi-shuffled-on #player-kodi .control-shuffle:hover { + color: #12B2E7; +} +#player-kodi .slider-bar { + background: #2a2b2c; +} +#player-kodi .slider-bar .noUi-origin { + background: #161717; +} + +#player-local { + background: #313233; +} +.local-playing #player-local .control-play:before { + content: "\e6b6"; +} +.local-playing #player-local .playing-progress { + border-top-color: #DB2464; +} +.local-paused #player-local .control-play:before { + content: "\e6b9"; +} +.local-mute-on #player-local .control-mute:hover { + color: #DB2464; +} +.local-mute-on #player-local .control-mute:before { + content: "\e6d0"; +} +.local-repeat-one #player-local .control-repeat { + color: #fff; +} +.local-repeat-one #player-local .control-repeat:before { + content: "\e6c3"; +} +.local-repeat-one #player-local .control-repeat:hover { + color: #DB2464; +} +.local-repeat-all #player-local .control-repeat { + color: #fff; +} +.local-repeat-all #player-local .control-repeat:hover { + color: #DB2464; +} +.local-shuffled-on #player-local .control-shuffle { + color: #fff; +} +.local-shuffled-on #player-local .control-shuffle:hover { + color: #DB2464; +} +#player-local .slider-bar { + background: #414243; +} +#player-local .slider-bar .noUi-origin { + background: #2c2d2e; +} + +.playlist-items li { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + height: 34px; + position: relative; + color: #999999; +} +.playlist-items li a { + color: #999999; +} +.playlist-items li.sortable-ghost, .playlist-items li.row-playing, .playlist-items li.row-paused, .playlist-items li:hover { + height: 51px; + background-color: #0b0c0c; +} +.playlist-items li.sortable-ghost .thumb, .playlist-items li.row-playing .thumb, .playlist-items li.row-paused .thumb, .playlist-items li:hover .thumb { + width: 50px; + height: 50px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.playlist-items li.sortable-ghost .subtitle, +.playlist-items li.sortable-ghost .thumb, .playlist-items li.row-playing .subtitle, +.playlist-items li.row-playing .thumb, .playlist-items li.row-paused .subtitle, +.playlist-items li.row-paused .thumb, .playlist-items li:hover .subtitle, +.playlist-items li:hover .thumb { + display: block; +} +.playlist-items li.sortable-ghost .title a, .playlist-items li.row-playing .title a, .playlist-items li.row-paused .title a, .playlist-items li:hover .title a { + color: rgba(255, 255, 255, 0.95); +} +.playlist-items li.row-playing, .playlist-items li.row-paused { + height: 80px; + background-image: image-url("row-playing-white.gif"); + background-repeat: no-repeat; + background-position: 2px 1px; +} +.playlist-items li.row-playing .remove, .playlist-items li.row-paused .remove { + display: none !important; +} +.playlist-items li.row-playing .thumb, .playlist-items li.row-paused .thumb { + width: 80px; + height: 80px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.playlist-items li.row-playing .thumb, .playlist-items li.row-paused .thumb { + top: 0; + right: 0; + bottom: 0; + position: absolute; + margin: 0; +} +.playlist-items li.row-playing .thumb .play, .playlist-items li.row-paused .thumb .play { + display: none !important; +} +.playlist-items li.row-playing .thumb .thumbs, .playlist-items li.row-paused .thumb .thumbs { + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + display: table; + width: 50px; + text-align: center; + cursor: pointer; + display: none; + color: #fff; + font-size: 200%; + width: 80px; +} +.playlist-items li.row-playing .thumb .thumbs:before, .playlist-items li.row-paused .thumb .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.playlist-items li.row-playing .thumb .thumbs:before, .playlist-items li.row-paused .thumb .thumbs:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +.playlist-items li.row-playing .thumb .thumbs:before, .playlist-items li.row-paused .thumb .thumbs:before { + padding-right: 5px; +} +.playlist-items li.row-playing .thumb .thumbs:before, .playlist-items li.row-paused .thumb .thumbs:before { + width: 80px; + height: 80px; +} +.playlist-items li.row-playing .thumb:hover .thumbs, .playlist-items li.row-paused .thumb:hover .thumbs { + display: block; +} +.playlist-items li.row-playing .meta, .playlist-items li.row-paused .meta { + margin-right: 90px; + margin-left: 27px; +} +.playlist-items li.row-playing .meta .title, .playlist-items li.row-paused .meta .title { + margin-top: 5px; + font-size: 110%; +} +.playlist-items li.row-paused { + background-image: image-url("row-pause-white.png"); +} +.playlist-items li.sortable-ghost { + height: 50px; + background: rgba(255, 255, 255, 0.3); + opacity: 0.5; +} +.playlist-items li.thumbs-up .thumbs { + color: #12B2E7 !important; +} +.active-player-local .playlist-items li.thumbs-up .thumbs { + color: #DB2464 !important; +} +.playlist-items .thumb { + background: transparent; + overflow: hidden; + letter-spacing: -0.31em; + width: 50px; + height: 50px; + float: left; + margin-right: 10px; + display: none; + position: relative; +} +.playlist-items .thumb img { + display: block; + vertical-align: middle; + width: 50px; + margin-top: 50%; +} +.playlist-items .thumb .thumb { + width: 50px; + height: 50px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.playlist-items .thumb:hover .play { + display: table; +} +.playlist-items .play { + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + display: table; + width: 50px; + text-align: center; + cursor: pointer; + display: none; + color: #fff; + font-size: 200%; +} +.playlist-items .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.playlist-items .play:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +.playlist-items .play:before { + padding-right: 5px; +} +.playlist-items .meta { + margin: 0 30px 0 0px; + padding: 9px 10px 5px 15px; +} +.playlist-items .title, +.playlist-items .subtitle { + display: block; + overflow: hidden; + white-space: nowrap; +} +.playlist-items .title, .playlist-items .title a { + color: #bdc1c2; +} +.playlist-items .subtitle { + display: none; + font-size: 95%; + margin-top: 2px; +} +.playlist-items .remove { + top: 0; + right: 0; + bottom: 0; + position: absolute; + display: table; + width: 34px; + text-align: center; + cursor: pointer; + display: none; +} +.playlist-items .remove:before { + content: "\e89c"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.playlist-items .remove:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +.playlist-items .remove:hover { + font-size: 120%; + color: darkred; +} +.playlist-items li:hover .remove { + display: table; +} + +.playlists-wrapper { + padding: 1em; + font-size: 85%; + overflow-y: auto; + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: 50px; + z-index: 500; +} + +.media-toggle { + *zoom: 1; + background: rgba(255, 255, 255, 0.1); + margin-bottom: 0.5em; +} +.media-toggle:after { + content: ""; + display: table; + clear: both; +} +.media-toggle li { + float: left; + padding: 5px 15px; + color: #999999; + cursor: pointer; +} +.playlist-bar.media-audio .media-toggle li.audio { + color: #fff; + background: rgba(255, 255, 255, 0.1); +} +.playlist-bar.media-video .media-toggle li.video { + color: #fff; + background: rgba(255, 255, 255, 0.1); +} + +.playlist-header { + background: #313233; + height: 50px; +} +.playlist-header .player-toggle { + display: table; +} +.playlist-header .player-toggle li { + height: 50px; + display: table-cell; + vertical-align: middle; + padding: 0 2em 0 2em; + color: rgba(255, 255, 255, 0.8); + cursor: pointer; +} +.playlist-header .player-toggle li:before { + margin-right: 0.5em; + font-size: 90%; +} +.playlist-header .player-toggle li.kodi:before { + content: "\e602"; + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.playlist-header .player-toggle li.local:before { + content: "\e7b0"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.active-player-kodi .playlist-header .player-toggle li.kodi { + color: #12B2E7; + background: #1b1c1d; +} +.active-player-local .playlist-header .player-toggle li.local { + color: #DB2464; + background: #1b1c1d; +} +.playlist-header .playlist-menu { + top: 0; + right: 0; + position: absolute; +} +.playlist-header .playlist-menu .menu-toggle { + display: table; + width: 50px; + text-align: center; + cursor: pointer; + color: rgba(255, 255, 255, 0.5); + font-size: 150%; +} +.playlist-header .playlist-menu .menu-toggle:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.playlist-header .playlist-menu .menu-toggle:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +.playlist-header .playlist-menu .menu-toggle:hover { + color: #fff; +} +@media (min-width: 57em) { + .playlist-header .playlist-menu { + right: 50px; + } +} +.playlist-header .playlist-menu .dropdown-menu { + background: white; + padding: 0; + top: 50px; + margin-top: -5px; +} +.playlist-header .playlist-menu .dropdown-menu li { + padding: 0; + font-size: 12px; +} +.playlist-header .playlist-menu .dropdown-menu li.dropdown-header { + background: rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.6); +} +.playlist-header .playlist-menu .dropdown-menu li.dropdown-header, .playlist-header .playlist-menu .dropdown-menu li a { + padding: 0.6em 1em; +} +.playlist-header .playlist-menu .dropdown-menu li a { + color: rgba(0, 0, 0, 0.5); +} +.playlist-header .playlist-menu .dropdown-menu li .party-mode i { + display: none; +} +.active-player-local.local-partymode-on .playlist-header .playlist-menu .dropdown-menu li .party-mode i, .active-player-kodi.kodi-partymode-on .playlist-header .playlist-menu .dropdown-menu li .party-mode i { + display: inline-block; +} + +.active-player-kodi .kodi-playlists { + display: block; +} +.active-player-kodi .local-playlists { + display: none; +} + +.active-player-local .kodi-playlists { + display: none; +} +.active-player-local .local-playlists { + display: block; +} + +.playlist-page__empty { + text-align: right; + margin-right: 1em; +} +.playlist-page__empty h3 { + margin-bottom: 1em; +} + +.pvr-card { + background: #fff; + padding: 1em; + margin-bottom: 0.5em; + position: relative; +} +.pvr-card.aired { + background-color: #f0f0f0; +} +.pvr-card.airing { + background: #f4fcff; +} +.pvr-card .title { + margin-bottom: 0.5em; +} +.pvr-card .entity-progress { + top: auto; + bottom: 0; +} +.pvr-card .entity-progress .current-progress { + height: 4px; + background: #12b2e7; +} +.pvr-card .plot, +.pvr-card .title span { + color: #888888; + font-size: 90%; +} +.pvr-card .plot { + margin-top: 0.5em; +} +.pvr-card .actions { + top: 0.5em; + right: 0.5em; + position: absolute; +} +.pvr-card .actions li { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; + color: rgba(0, 0, 0, 0.3); + float: left; + font-size: 140%; +} +.pvr-card .actions li:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.pvr-card .actions li:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.pvr-card .actions li:hover { + color: rgba(0, 0, 0, 0.6); +} +.pvr-card .actions li.play { + font-size: 190%; + margin-top: -5px; +} +.pvr-card .actions li.record:before { + content: "\e7da"; +} +.pvr-card .actions li.toggle-timer:before { + content: "\e65e"; +} +.pvr-card.has-timer .actions li.toggle-timer, +.pvr-card.has-timer .actions li.record { + color: #bf0a07; +} + +#remote { + display: none; + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 70px; + top: 50px; + right: 0; + background-color: #18191A; + z-index: 500; + background-size: cover; +} +.section-remote #remote { + display: block; +} +@media (min-width: 57em) { + #remote { + bottom: 70px; + } +} +.shell-playlist-closed #remote { + right: 0; +} +@media (min-width: 57em) { + #remote { + right: 310px; + } + .shell-playlist-closed #remote { + right: 50px; + } +} +@media (min-width: 75em) { + #remote { + right: 400px; + } + .shell-playlist-closed #remote { + right: 50px; + } +} + +#remote-background { + top: 0; + right: 0; + bottom: 360px; + left: 0; + position: absolute; + background-color: #2B2F30; + background-position: 50% 50%; + background-size: cover; +} +@media (min-width: 57em) { + #remote-background { + bottom: 0; + z-index: 1; + background-color: #f5f5f5; + } +} + +.kodi-remote { + position: absolute; + bottom: 180px; + left: 0; + right: 0; + font-size: 1.7em; + color: #6F7374; + overflow: hidden; + z-index: 500; + width: auto; +} +@media (min-width: 57em) { + .kodi-remote { + bottom: 0; + } +} +@media (min-width: 57em) { + .kodi-remote { + width: 371px; + } +} +.kodi-remote .ibut { + background: #222324; +} +.kodi-remote .ibut:hover { + color: #ccc; + cursor: pointer; +} +.kodi-remote .main-controls { + background: #18191A; + *zoom: 1; +} +.kodi-remote .main-controls:after { + content: ""; + display: table; + clear: both; +} +.kodi-remote .direction { + background: #222324; + height: 155px; + margin-top: -12px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 75%; + float: left; + position: relative; + z-index: 10; +} +.kodi-remote .direction .pad { + margin: 5px auto; + width: 240px; + position: relative; + text-align: center; +} +.kodi-remote .direction .pad .ibut { + height: 145px; + position: absolute; + top: 0; + left: 80px; + width: 80px; + font-size: 125%; +} +.kodi-remote .direction .pad .ibut.up, .kodi-remote .direction .pad .ibut.down, .kodi-remote .direction .pad .ibut.ok { + height: 48.3333333333px; + line-height: 48.3333333333px; +} +.kodi-remote .direction .pad .ibut.down { + top: 96.6666666667px; +} +.kodi-remote .direction .pad .ibut.ok { + top: 48.3333333333px; + font-size: 12px; +} +.kodi-remote .direction .pad .ibut.left { + bottom: 0; + left: 0; + line-height: 145px; + padding-left: 20px; +} +.kodi-remote .direction .pad .ibut.right { + bottom: 0; + right: 0; + left: auto; + line-height: 145px; + padding-right: 20px; +} +.kodi-remote .buttons { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 25%; + float: right; + padding: 6px 8px 4px; + margin-top: -20px; +} +.kodi-remote .buttons .ibut { + display: block; + padding: 11px 0; + text-align: center; + margin: 1px 0 9px 0; +} +.kodi-remote .alt-controls .row, +.kodi-remote .secondary-controls { + clear: both; + background: #18191A; + height: 70px; +} +.kodi-remote .alt-controls .row .ibut, +.kodi-remote .secondary-controls .ibut { + background: #222324; + width: 33%; + padding: 0; + line-height: 70px; + font-size: 1.5em; + text-align: center; + float: left; + margin-bottom: 12px; +} +@media (min-width: 57em) { + .kodi-remote .alt-controls .row .ibut, + .kodi-remote .secondary-controls .ibut { + line-height: 70px; + } +} +.kodi-remote .secondary-controls { + height: auto; +} +.kodi-remote .alt-controls .row { + margin: 8px 0; +} +.kodi-remote .playing-area { + height: 150px; + position: relative; + font-size: 15px; + color: #838b8d; +} +.kodi-remote .playing-area .not-playing, +.kodi-remote .playing-area .playing { + padding: 10px 20px 35px; + text-align: right; +} +.kodi-remote .playing-area .playing { + background: #3b3f40 0 0 no-repeat; + background-size: cover; + display: none; +} +.kodi-remote .playing-area:after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 24px; + z-index: 5; +} + +.section-remote .player .now-playing .remote-toggle, +.section-remote .player .now-playing .thumb { + height: 75px; + width: 75px; +} + +.section-remote .player .now-playing, .section-remote .player .now-playing .thumb, .section-remote .player .controls-secondary, .section-remote .player .controls-secondary .control, +.section-remote .player .controls-primary, +.section-remote .player .controls-primary .control { + height: 75px; +} + +.section-remote #player-wrapper { + height: 250px; +} +.section-remote .player .controls-secondary, +.section-remote .player .controls-primary { + display: block; + margin-bottom: 12px; +} +.section-remote .player .now-playing { + margin: 10px 0 0 0; +} +.section-remote .player .playing-info { + margin-left: 75px; +} +@media (min-width: 57em) { + .section-remote #player-wrapper { + height: 70px; + } + .section-remote .player .now-playing, + .section-remote .player .controls-secondary, + .section-remote .player .controls-primary { + margin: 0; + } + .section-remote .player .now-playing, .section-remote .player .now-playing .control, + .section-remote .player .controls-secondary, + .section-remote .player .controls-secondary .control, + .section-remote .player .controls-primary, + .section-remote .player .controls-primary .control { + height: 70px; + } + .section-remote .player .now-playing, .section-remote .player .now-playing .thumb, + .section-remote .player .controls-secondary, + .section-remote .player .controls-secondary .thumb, + .section-remote .player .controls-primary, + .section-remote .player .controls-primary .thumb { + height: 70px; + } + .section-remote .player .now-playing .thumb, + .section-remote .player .controls-secondary .thumb, + .section-remote .player .controls-primary .thumb { + width: 70px; + } + .section-remote .player .now-playing .playing-info, + .section-remote .player .controls-secondary .playing-info, + .section-remote .player .controls-primary .playing-info { + margin-left: 70px; + } + .section-remote .player .now-playing { + margin-left: 300px; + margin-right: 300px; + } +} + +#modal-window.style-system .modal-dialog { + width: 300px; + min-width: 300px; +} + +/** + * Header Search component. + */ +#search-region { + background: rgba(255, 255, 255, 0.9); + height: 50px; + margin-left: 0; +} +@media (min-width: 57em) { + #search-region { + display: block; + } +} +#search-region:after { + content: ""; + height: 3px; + background: #12B2E7; + opacity: 0.3; + bottom: 0; + left: 0; + position: absolute; + width: 0%; +} +#search-region.pre-search:after { + display: block; + width: 100%; + -webkit-transition: 2s all linear; + -o-transition: 2s all linear; + transition: 2s all linear; +} + +#search { + background: none; + border: none; + height: 50px; + width: 100%; + outline: none; + padding: 0 0.5em 0 50px; + color: rgba(0, 0, 0, 0.4); +} +@media (min-width: 57em) { + #search { + width: 200px; + } +} + +#do-search { + width: 50px; + height: 50px; + display: table; + top: 0; + left: 0; + position: absolute; +} +#do-search:before { + content: "\e65f"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +#do-search:before { + font-size: 150%; + display: table-cell; + vertical-align: middle; + text-align: center; + color: rgba(0, 0, 0, 0.6); +} + +/** + * A Search result page. + */ +.search-page { + top: 50px; + position: relative; +} +@media (min-width: 57em) { + .search-page { + top: 0; + } +} +@media (min-width: 57em) { + .search-page__empty { + text-align: right; + } +} +.search-page h2.set-header { + padding-left: 5px; +} +.search-page .browser-folder-list { + background: rgba(255, 255, 255, 0.7); +} + +.search-page-layout .search-media-links a { + text-transform: capitalize; +} +.search-page-layout .region-content { + padding: 0; +} + +.set-page { + padding: 0.5em 1.5em 1em; +} +.set-page .entity-set .set-header { + margin: 1em 0 0.5em; + text-transform: capitalize; + font-size: 22px; +} +.set-page .entity-set .more a { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #12B2E7; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.set-page .entity-set .more a .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.set-page .entity-set .more a .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#0012B2E7", endColorstr="#FF12B2E7"); + background-image: -owg-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -webkit-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -moz-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -o-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.set-page .entity-set .more a:hover { + color: #fff; +} +.set-page .entity-set .more a:before { + content: "\e6d7"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.set-page .entity-set .more a:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.set-page .entity-set .more a:hover:before { + color: white; +} +.set-page .entity-set-song .set-results { + padding: 5px; +} +.set-page .entity-set-loading #loading-page { + left: 0; + right: 0; + position: relative; +} +.set-page .entity-set-loading .spinner-double-section-far, .set-page .entity-set-loading h2 { + top: 5em; +} +.set-page .entity-set-loading h2 { + margin-top: 5em !important; +} + +.landing-set .set__actions { + top: 0.75em; + right: 1em; + position: absolute; + z-index: 20; +} +.landing-set .set__actions i { + display: table; + width: 1.5em; + text-align: center; + cursor: pointer; +} +.landing-set .set__actions i:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.landing-set .set__actions i:before { + display: table-cell; + vertical-align: middle; + height: 1.5em; +} +.landing-set .set__more { + margin-top: -2em; +} +.landing-set .set__more a { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #12B2E7; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.landing-set .set__more a .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.landing-set .set__more a .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#0012B2E7", endColorstr="#FF12B2E7"); + background-image: -owg-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -webkit-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -moz-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -o-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.landing-set .set__more a:hover { + color: #fff; +} +.landing-set .set__more a:before { + content: "\e6d7"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.landing-set .set__more a:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.landing-set .set__more a:hover:before { + color: white; +} + +.section-content .set h2 { + margin-bottom: 0.25em; +} + +.settings-page .region-content { + padding: 0; + padding-bottom: 70px; +} +@media (min-width: 57em) { + .settings-page .region-content { + padding-bottom: 70px; + } +} + +.settings-form .form-group { + padding-bottom: 1.5em; + margin-bottom: 0; + *zoom: 1; +} +.settings-form .form-group:after { + content: ""; + display: table; + clear: both; +} +@media (min-width: 45em) { + .settings-form .form-group .control-label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 42.8571428571%; + float: left; + padding: 5px 2em 0.5em 0; + } + .settings-form .form-group .element { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 57.1428571429%; + float: right; + } +} +.settings-form .group-title { + margin-top: 0.5em; + margin-bottom: 1em; + padding-bottom: 0.5em; + color: #12B2E7; + display: inline-block; +} +.settings-form .group-title i { + color: rgba(136, 136, 136, 0.7); +} +@media (min-width: 57em) { + .settings-form .form-items { + margin: 0 4em 0 2em; + } +} +.settings-form footer { + color: rgba(255, 255, 255, 0.7); + border-top: 1px solid #C8C8C8; + background: #2B2E2F; + padding: 1em; +} +@media (min-width: 57em) { + .settings-form footer { + padding: 1em 2em; + } +} +.settings-form .togglebutton { + margin-top: 4px; +} +.settings-form .togglebutton label .toggle:after { + top: -3px; +} + +.settings-form-draggable .form-groups .draggable-row { + position: relative; + border-bottom: 1px solid rgba(221, 221, 221, 0.6); + padding: 1em 2em 0.5em 0.5em; +} +@media (min-width: 57em) { + .settings-form-draggable .form-groups .draggable-row { + cursor: move; + padding-right: 1em; + } +} +.settings-form-draggable .form-groups .draggable-row:nth-child(even) { + background: rgba(229, 229, 229, 0.2); +} +.settings-form-draggable .form-groups .draggable-row .form-group { + padding-bottom: 0.5em; +} +.settings-form-draggable .form-groups .draggable-row .control-label { + cursor: move; + position: relative; + display: block; +} +.settings-form-draggable .form-groups .draggable-row .control-label i { + margin-left: 0.5em; + font-weight: normal; + font-size: 1.3em; + position: absolute; + right: 0.5em; + top: 0.5em; + opacity: 0.9; +} +.settings-form-draggable .form-groups .draggable-row .remove-item { + top: 0; + right: 0; + position: absolute; + padding: 0.5em 0.5em 0.25em; + color: rgb(146, 18, 18); + font-size: 1.5em; + cursor: pointer; + opacity: 0.5; +} +@media (min-width: 57em) { + .settings-form-draggable .form-groups .draggable-row .remove-item { + display: none; + } +} +.settings-form-draggable .form-groups .draggable-row .remove-item:hover { + opacity: 0.9; +} +.settings-form-draggable .form-groups .draggable-row:hover .remove-item { + display: block; +} + +/** + * Webkit scrollbars! + */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-track { + border: #ddd; +} + +::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.2); + cursor: pointer; +} +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.4); +} + +body, +body.model-open { + overflow-y: scroll; +} + +#logo { + top: 0; + left: 0; + position: fixed; + height: 50px; + width: 50px; + display: table; + z-index: 100; + -webkit-perspective: 1000; + overflow: hidden; + text-align: center; + color: #12B2E7; + font-size: 2em; +} +#logo:before { + content: "\e602"; + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.loading #logo { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-animation: pulsate 2s linear; + -o-animation: pulsate 2s linear; + animation: pulsate 2s linear; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-font-smoothing: subpixel-antialiased; +} +#logo:before { + display: table-cell; + vertical-align: middle; +} + +#page-title .title { + padding-left: 50px; + display: none; +} +@media (min-width: 57em) { + #page-title .title { + display: inline-block; + } +} + +#fanart, +#fanart-overlay { + top: 50px; + bottom: 0; + position: fixed; + bottom: 70px; + right: 0; + left: 0; +} +@media (min-width: 57em) { + #fanart, + #fanart-overlay { + bottom: 70px; + } +} +.shell-playlist-closed #fanart, +.shell-playlist-closed #fanart-overlay { + right: 0; +} +@media (min-width: 57em) { + #fanart, + #fanart-overlay { + right: 310px; + } + .shell-playlist-closed #fanart, + .shell-playlist-closed #fanart-overlay { + right: 50px; + } +} +@media (min-width: 75em) { + #fanart, + #fanart-overlay { + right: 400px; + } + .shell-playlist-closed #fanart, + .shell-playlist-closed #fanart-overlay { + right: 50px; + } +} +@media (min-width: 57em) { + #fanart, + #fanart-overlay { + left: 50px; + } +} + +#fanart { + background-color: #E0DFDF; + background-size: cover; + background-position: 50% 50%; + z-index: -10; +} + +#fanart-overlay { + z-index: -9; + background-color: rgba(224, 223, 223, 0.7); +} +.section-home #fanart-overlay { + display: none; +} + +#main { + *zoom: 1; + margin: 50px 0 50px 0; + margin-right: 0; + padding-bottom: 70px; +} +#main:after { + content: ""; + display: table; + clear: both; +} +.shell-playlist-closed #main { + margin-right: 0; +} +@media (min-width: 57em) { + #main { + margin-right: 310px; + } + .shell-playlist-closed #main { + margin-right: 50px; + } +} +@media (min-width: 75em) { + #main { + margin-right: 400px; + } + .shell-playlist-closed #main { + margin-right: 50px; + } +} +@media (min-width: 57em) { + #main { + padding-bottom: 70px; + } +} +@media (min-width: 57em) { + #main { + margin-left: 50px; + margin-bottom: 0; + } +} +.shell-playlist-closed #main { + margin-right: 0; +} +@media (min-width: 57em) { + .shell-playlist-closed #main { + margin-right: 50px; + } +} +@media (min-width: 75em) { + .shell-playlist-closed #main { + margin-right: 50px; + } +} + +#sidebar-two { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: fixed; + background: #1b1c1d; + z-index: 50; + top: 50px; + display: none; + width: 0; + width: auto; + bottom: 70px; +} +body.page-playlist #sidebar-two { + display: block; +} +@media (min-width: 57em) { + #sidebar-two { + left: auto; + top: 0; + display: block; + } +} +.shell-playlist-closed #sidebar-two { + width: 0; +} +@media (min-width: 57em) { + #sidebar-two { + width: 310px; + } + .shell-playlist-closed #sidebar-two { + width: 50px; + } +} +@media (min-width: 75em) { + #sidebar-two { + width: 400px; + } + .shell-playlist-closed #sidebar-two { + width: 50px; + } +} +@media (min-width: 57em) { + #sidebar-two { + bottom: 70px; + } +} +#sidebar-two #playlist-summary { + display: none; +} +#sidebar-two .playlist-toggle-open { + top: 0; + right: 0; + position: absolute; + width: 50px; + height: 50px; + display: table; + width: 50px; + text-align: center; + cursor: pointer; + display: table; + cursor: pointer; + display: none; + text-align: center; +} +#sidebar-two .playlist-toggle-open:before { + content: "\e7b6"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +#sidebar-two .playlist-toggle-open:before { + display: table-cell; + vertical-align: middle; + height: 50px; +} +#sidebar-two .playlist-toggle-open:before { + -webkit-transition: all 0.4s linear; + -o-transition: all 0.4s linear; + transition: all 0.4s linear; + display: table-cell; + vertical-align: middle; + text-align: center; + font-size: 150%; + color: rgba(255, 255, 255, 0.5); +} +@media (min-width: 57em) { + #sidebar-two .playlist-toggle-open { + display: table; + } +} +.shell-playlist-closed #sidebar-two { + width: 0; +} +.shell-playlist-closed #sidebar-two .playlist-toggle-open:before { + -webkit-transform: rotate(-180deg); + -moz-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} +@media (min-width: 57em) { + .shell-playlist-closed #sidebar-two { + width: 50px; + } +} +@media (min-width: 75em) { + .shell-playlist-closed #sidebar-two { + width: 50px; + } +} +.shell-playlist-closed #sidebar-two #playlist-bar { + display: none; +} +.shell-playlist-closed #sidebar-two #playlist-summary { + display: block; +} + +#offscreen { + display: none; +} + +#disconnected { + top: 0; + right: 0; + bottom: 0; + left: 0; + position: fixed; + background: rgba(0, 0, 0, 0.7); + z-index: 9999999; + display: none; +} +.lost-connection #disconnected { + display: block; +} +#disconnected i { + font-size: 300%; + color: #12B2E7; + margin: 10px 0 5px; +} +#disconnected h2 { + margin: 0.5em 0; + font-size: 2em; +} +#disconnected .message { + max-width: 400px; + width: 95%; + margin: 10% auto 0; + background: #fff; + border-radius: 5px; + padding: 1em; + text-align: center; +} +#disconnected .btn { + color: #fff; +} +#disconnected .btn:hover { + background: #12B2E7; +} +.reconnecting #disconnected .try-connect { + display: none; +} +#disconnected .load-connect { + display: none; +} +.reconnecting #disconnected .load-connect { + display: block; +} + +#snackbar-container { + position: fixed; + z-index: 50; + right: 0; + bottom: 70px; + margin-bottom: -10px; +} +@media (min-width: 57em) { + #snackbar-container { + bottom: 70px; + } +} + +.snackbar { + overflow: hidden; + clear: both; + cursor: pointer; + opacity: 0; + min-width: 0; + max-width: 600px; +} +.shell-playlist-closed .snackbar { + min-width: 0; +} +@media (min-width: 57em) { + .snackbar { + min-width: 310px; + } + .shell-playlist-closed .snackbar { + min-width: 50px; + } +} +@media (min-width: 75em) { + .snackbar { + min-width: 400px; + } + .shell-playlist-closed .snackbar { + min-width: 50px; + } +} + +.snackbar.snackbar-opened { + height: auto; + opacity: 1; +} + +@media (max-width: 767px) { + #snackbar-container { + left: 0px !important; + right: 0px; + width: 100%; + } + #snackbar-container .snackbar { + min-width: 100%; + } + #snackbar-container [class="snackbar snackbar-opened"] ~ .snackbar.toast { + margin-top: 20px; + } + #snackbar-container [class="snackbar snackbar-opened"] { + border-radius: 0; + margin-bottom: 0; + } +} +.snackbar { + background-color: rgba(255, 255, 255, 0.95); + color: #2B2F30; + font-size: 14px; + border-radius: 0px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + height: 0; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + -moz-transform: translateY(200%); + -webkit-transform: translateY(200%); + transform: translateY(200%); +} + +.snackbar.snackbar-opened { + padding: 14px 15px; + margin: 0 0 10px 0; + height: auto; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s; + -moz-transform: none; + -webkit-transform: none; + transform: none; +} + +.songs-table tr.song { + cursor: pointer; + font-size: 13px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.songs-table tr.song.ph td { + height: 40px; +} +.songs-table tr.song td { + vertical-align: middle; + position: relative; + border-bottom: 1px solid rgba(139, 139, 139, 0.05); +} +.songs-table tr.song td.song-title { + width: 60%; +} +.songs-table tr.song td.song-artist { + width: 40%; +} +.songs-table tr.song .crop { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; + height: 18px; + white-space: normal; +} +.songs-table tr.song .crop:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00E0DFDF", endColorstr="#FFE0DFDF"); + background-image: -owg-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -webkit-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -moz-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: -o-linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + background-image: linear-gradient(left, rgba(224, 223, 223, 0) 0%, #e0dfdf 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.region-album-songs .songs-table tr.song .crop:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00F5F5F5", endColorstr="#FFF5F5F5"); + background-image: -owg-linear-gradient(left, rgba(245, 245, 245, 0) 0%, whitesmoke 100%); + background-image: -webkit-linear-gradient(left, rgba(245, 245, 245, 0) 0%, whitesmoke 100%); + background-image: -moz-linear-gradient(left, rgba(245, 245, 245, 0) 0%, whitesmoke 100%); + background-image: -o-linear-gradient(left, rgba(245, 245, 245, 0) 0%, whitesmoke 100%); + background-image: linear-gradient(left, rgba(245, 245, 245, 0) 0%, whitesmoke 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.songs-table tr.song a { + color: rgba(43, 47, 48, 0.7); +} +.songs-table tr.song a:hover { + color: #2B2F30; +} +.songs-table tr.song .play, +.songs-table tr.song .play:before, +.songs-table tr.song .cell-first { + width: 40px; + height: 40px; +} +.songs-table tr.song .play { + top: 0; + left: 0; + position: absolute; + display: table-cell; + vertical-align: middle; + text-align: center; + cursor: pointer; + display: none; + font-size: 200%; +} +.songs-table tr.song .play:before { + content: "\e6b9"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.songs-table tr.song .play:before { + display: table-cell; + vertical-align: middle; +} +.songs-table tr.song .play:hover { + color: #2B2F30; +} +.songs-table tr.song .thumb { + width: 39px; + height: 39px; + background-position: 50% 50%; + background-color: transparent; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.songs-table tr.song .thumb { + top: 0px; + bottom: 1px; + left: 0; + position: absolute; + display: none; +} +.songs-table tr.song .add { + font-size: 140%; +} +.songs-table tr.song .add:before { + content: "\e6fc"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.songs-table tr.song .thumbed-up, +.songs-table tr.song .thumbs { + font-size: 140%; +} +.songs-table tr.song .thumbed-up:before, +.songs-table tr.song .thumbs:before { + content: "\e684"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.disable-thumbs .songs-table tr.song .thumbed-up, +.disable-thumbs .songs-table tr.song .thumbs { + display: none; +} +.songs-table tr.song .thumbed-up { + top: 0px; + right: 90px; + position: absolute; + margin-right: -2px; + display: none; + opacity: 0.4; +} +.songs-table tr.song .thumbed-up:before { + display: table-cell; + vertical-align: middle; + width: 40px; + height: 40px; +} +.songs-table tr.song.thumbs-up .thumbed-up { + display: table; +} +.songs-table tr.song.thumbs-up .thumbs { + color: #12B2E7; +} +.songs-table tr.song .menu i { + font-size: 150%; +} +.songs-table tr.song .menu i:before { + content: "\e8a2"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.songs-table tr.song .menu .dropdown-menu { + top: 0; +} +.songs-table tr.song .actions { + top: 0; + right: 0px; + bottom: 0; + position: absolute; + display: none; + width: 90px; +} +.songs-table tr.song .actions > li { + width: 30px; + text-align: center; + float: left; +} +.songs-table tr.song .actions > li i:before, .songs-table tr.song .actions > li:before { + display: table-cell; + vertical-align: middle; + width: 30px; + height: 40px; + color: #999; + cursor: pointer; +} +.songs-table tr.song.menu-open .crop, .songs-table tr.song:hover .crop { + white-space: normal; +} +.songs-table tr.song.menu-open .duration, +.songs-table tr.song.menu-open .track, .songs-table tr.song:hover .duration, +.songs-table tr.song:hover .track { + display: none; +} +.songs-table tr.song.menu-open .play, +.songs-table tr.song.menu-open .actions, .songs-table tr.song:hover .play, +.songs-table tr.song:hover .actions { + display: block; +} +.songs-table tr.song.menu-open .thumbed-up, .songs-table tr.song:hover .thumbed-up { + display: none; +} +.songs-table tr.song .song-artist { + display: none; +} +@media (min-width: 57em) { + .songs-table tr.song .song-artist { + display: table-cell; + } +} +.songs-table tr.song .song-album { + display: none; +} +.songs-table tr.song.selected { + border-left: 1px solid #12B2E7; + background: #e2f6fd; +} +.songs-table tr.song.selected .crop:after { + display: none; +} +.active-player-local .songs-table tr.song.selected { + border-left: 1px solid #DB2464; + background: #fbe9f0; +} +.songs-table tr.song .cell-remove { + display: none; + padding-top: 12px; + padding-bottom: 0; +} +.songs-table tr.song.sortable-ghost { + height: 40px; + background: #ddd; +} +.songs-table tr.song.sortable-ghost td { + opacity: 0; +} +.songs-table tr.song.sortable-ghost .play { + display: none; +} +.songs-table.verbose .track { + margin-left: 47px; +} +.songs-table.verbose .play { + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + color: #fff; +} +.songs-table.verbose tr.song .thumb { + display: block; +} +.songs-table.verbose tr.song td.song-album { + width: 30%; +} +@media (min-width: 57em) { + .songs-table.verbose tr.song td.song-album { + display: table-cell; + } +} +.songs-table.verbose tr.song td.song-title { + width: 80%; +} +@media (min-width: 57em) { + .songs-table.verbose tr.song td.song-title { + width: 45%; + } +} +.songs-table.verbose tr.song td.song-artist { + width: 25%; +} +.songs-table.verbose tr.song:hover .play { + width: 39px; + height: 39px; +} +.songs-table.verbose tr.song:hover .play:hover { + color: #fff; +} +.songs-table.verbose tr.song:hover .track { + display: block; +} +.local-playlist .songs-table.verbose tr.song:hover .cell-remove { + opacity: 1; + color: darkred; +} +.local-playlist .songs-table.verbose tr.song:hover .cell-remove i:before { + content: "\e898"; +} +.songs-table.verbose tr.song.local-row-playing .track, .songs-table.verbose tr.song.local-row-paused .track, .songs-table.verbose tr.song.kodi-row-playing .track, .songs-table.verbose tr.song.kodi-row-paused .track { + text-indent: 0; + background: none; +} +.songs-table.verbose tr.song.local-row-playing .thumb, .songs-table.verbose tr.song.local-row-paused .thumb, .songs-table.verbose tr.song.kodi-row-playing .thumb, .songs-table.verbose tr.song.kodi-row-paused .thumb { + background: image-url("row-pause-blue.png") 0 50% no-repeat !important; + background-size: initial; +} +.songs-table.verbose tr.song.local-row-playing .play, .songs-table.verbose tr.song.local-row-paused .play, .songs-table.verbose tr.song.kodi-row-playing .play, .songs-table.verbose tr.song.kodi-row-paused .play { + display: none; +} +.songs-table.verbose tr.song.kodi-row-playing .thumb { + background-image: image-url("row-playing-blue.gif") !important; +} +.songs-table.verbose tr.song.local-row-playing .thumb { + background-image: image-url("row-playing-pink.gif") !important; +} +.songs-table.verbose tr.song.local-row-paused .thumb { + background-image: image-url("row-pause-pink.png") !important; +} +.local-playlist .songs-table.verbose tr.song .cell-remove { + display: block; + opacity: 0.3; +} +.songs-table.basic .thumb { + display: none; +} +.songs-table tr.song.local-row-playing, .songs-table tr.song.local-row-paused, .songs-table tr.song.kodi-row-playing, .songs-table tr.song.kodi-row-paused { + background: rgba(255, 255, 255, 0.9) !important; +} +.songs-table tr.song.local-row-playing:hover td .crop:after, +.songs-table tr.song.local-row-playing td .crop:after, .songs-table tr.song.local-row-paused:hover td .crop:after, +.songs-table tr.song.local-row-paused td .crop:after, .songs-table tr.song.kodi-row-playing:hover td .crop:after, +.songs-table tr.song.kodi-row-playing td .crop:after, .songs-table tr.song.kodi-row-paused:hover td .crop:after, +.songs-table tr.song.kodi-row-paused td .crop:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.songs-table tr.song.local-row-playing .track, .songs-table tr.song.local-row-paused .track, .songs-table tr.song.kodi-row-playing .track, .songs-table tr.song.kodi-row-paused .track { + background: image-url("row-pause-blue.png") 50% 50% no-repeat; + text-indent: -99999px; +} +.songs-table tr.song.local-row-paused .track { + background: image-url("row-pause-pink.png") 50% 50% no-repeat; +} +.songs-table tr.song.local-row-playing .track, .songs-table tr.song.kodi-row-playing .track { + background-image: image-url("row-playing-blue.gif"); +} +.songs-table tr.song.local-row-playing .track { + background-image: image-url("row-playing-pink.gif"); +} + +.box-loading { + max-width: 50em; + margin-left: auto; + margin-right: auto; + width: 95%; + background: #FAFAFA image-url("loading-box-bg.jpg") 0 bottom repeat-x; + -webkit-animation: wave 16s infinite linear; + -o-animation: wave 16s infinite linear; + animation: wave 16s infinite linear; + margin-top: 1em; + padding: 1em; + text-align: center; + font-size: 28px; +} +.box-loading:after { + content: " "; + display: block; + clear: both; +} + +/** + * Generic table listings for songs/files. + */ +.table-row .cell-first { + width: 40px; + min-width: 40px; + text-align: center; + color: rgba(43, 47, 48, 0.5); + font-size: 95%; +} +.table-row .cell-last { + width: 80px; + min-width: 80px; + text-align: right; + color: rgba(43, 47, 48, 0.5); + font-size: 95%; +} + +.content-tabs li { + display: inline-block; + padding: 1em 2em; +} +.content-tabs li.active { + background: rgba(43, 47, 48, 0.05); +} +.content-tabs li a { + color: rgba(102, 102, 102, 0.7); +} +.content-tabs li a.active { + color: #2B2F30; +} + +.tab-content { + background: rgba(43, 47, 48, 0.05); + padding: 2em; + margin-right: 20%; + color: #888888; +} + +.tvshow-show .card-season .thumbs { + display: none !important; +} + +.streams-short { + text-align: center; +} +.streams-short li { + display: inline-block; + font-size: 170%; + color: rgba(43, 47, 48, 0.4); + padding: 0 0.5em; +} + +.trailer { + position: relative; + cursor: pointer; +} +@media (min-width: 45em) { + .trailer { + max-width: 238px; + float: left; + margin-right: 2em; + } +} +.trailer:hover:after { + content: "Watch trailer"; + background: rgba(0, 0, 0, 0.55); + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; + color: #fff; + text-align: center; + padding-top: 30%; + font-size: 150%; +} + +.cast-full { + height: 141px; + white-space: nowrap; + overflow-y: auto; +} +.cast-full > li { + width: 80px; + display: inline-block; + margin: 0 0.6em 0 0; + position: relative; +} +.cast-full > li a { + color: #2B2F30; +} +.cast-full > li img { + -webkit-filter: grayscale(100%); + -moz-filter: grayscale(100%); + filter: grayscale(100%); + opacity: 0.8; +} +.cast-full > li .thumb { + background: #CBCBCB; + overflow: hidden; + letter-spacing: -0.31em; + width: 80px; + height: 105px; +} +.cast-full > li .thumb img { + display: block; + vertical-align: middle; + width: 80px; + margin-top: 0; +} +.cast-full > li .thumb .thumb { + width: 80px; + height: 105px; + background-position: 50% 0; + background-color: #CBCBCB; + display: block; + background-size: cover; + background-repeat: no-repeat; +} +.cast-full > li strong { + font-weight: normal; +} +.cast-full > li span { + font-size: 85%; + color: #666; +} +.cast-full > li span, .cast-full > li strong { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.cast-full > li span:after, .cast-full > li strong:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#FFFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.cast-full > li .meta { + position: absolute; + bottom: 0; + z-index: 20; + background: #fff; + padding: 4px; + right: 0; + left: 0; + display: none; +} +.cast-full > li:hover img { + -webkit-filter: grayscale(0%); + -moz-filter: grayscale(0%); + filter: grayscale(0%); + opacity: 1; +} +.cast-full > li:hover .actions { + display: block; +} +.cast-full > li .actions { + bottom: 4px; + left: 4px; + position: absolute; + display: none; +} +.cast-full > li .actions li { + border-radius: 3px; + float: left; + width: 15px; + height: 15px; + cursor: pointer; + font-size: 1.25em; + margin-right: 5px; + opacity: 0.7; +} +.cast-full > li .actions li:hover { + opacity: 1; +} +.cast-full > li .actions li:before { + display: block !important; +} +.cast-full > li .actions li.google { + color: #4285f4; + font-size: 1.15em; + background: #fff; +} +.cast-full > li .actions li.google:before { + content: "\e900"; + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.cast-full > li .actions li.imdb { + color: #e3b922; + background: #000; +} +.cast-full > li .actions li.imdb:before { + content: "\e901"; + display: inline-block; + font-family: "icomoon"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} + +.imdblink { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.imdblink .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.imdblink .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.imdblink:hover { + color: #fff; +} +.imdblink:before { + content: "\e63f"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.imdblink:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.imdblink:hover:before { + color: white; +} + +.btn-flat-play { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: #12B2E7; + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-play .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-play .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#0012B2E7", endColorstr="#FF12B2E7"); + background-image: -owg-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -webkit-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -moz-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: -o-linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + background-image: linear-gradient(left, rgba(18, 178, 231, 0) 0%, #12b2e7 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-play:hover { + color: #fff; +} +.btn-flat-play:before { + content: "\e6ba"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-play:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-play:hover:before { + color: white; +} + +.btn-flat-add { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-add .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-add .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-add:hover { + color: #fff; +} +.btn-flat-add:before { + content: "\e6fd"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-add:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-add:hover:before { + color: white; +} + +.btn-flat-stream { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-stream .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-stream .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-stream:hover { + color: #fff; +} +.btn-flat-stream:before { + content: "\e7aa"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-stream:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-stream:hover:before { + color: white; +} + +.btn-flat-download { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-download .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-download .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-download:hover { + color: #fff; +} +.btn-flat-download:before { + content: "\e6ff"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-download:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-download:hover:before { + color: white; +} + +.btn-flat-more { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-more .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-more .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-more:hover { + color: #fff; +} +.btn-flat-more:before { + content: "\e8a3"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-more:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-more:hover:before { + color: white; +} + +.btn-flat-watched { + display: inline-block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background: rgba(255, 255, 255, 0.1); + padding: 0.5em 1em; + position: relative; + cursor: pointer; + margin: 0 0.5em 0.5em 0; + color: #fff; + text-transform: capitalize; + padding-right: 2.5em; +} +.btn-flat-watched .text { + position: relative; + white-space: nowrap; + overflow: hidden; + display: block; +} +.btn-flat-watched .text:after { + content: ""; + *zoom: 1; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr="#00FFFFFF", endColorstr="#1AFFFFFF"); + background-image: -owg-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + background-image: linear-gradient(left, rgba(255, 255, 255, 0) 0%, white 100%); + top: 0; + right: 0; + bottom: 0; + position: absolute; + width: 1.5em; +} +.btn-flat-watched:hover { + color: #fff; +} +.btn-flat-watched:before { + content: "\e8e1"; + display: inline-block; + font-family: "Material-Design-Icons"; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + speak: none; + font-variant: normal; + text-transform: none; +} +.btn-flat-watched:before { + top: 9px; + right: 0.5em; + position: absolute; + color: rgba(255, 255, 255, 0.5); + font-size: 110%; +} +.btn-flat-watched:hover:before { + color: white; +} +.btn-flat-watched .action-watched { + display: inline; +} +.btn-flat-watched .action-unwatched { + display: none; +} +.is-watched .btn-flat-watched .action-watched { + display: none; +} +.is-watched .btn-flat-watched .action-unwatched { + display: inline; +} + +.entity-progress { + top: -2px; + right: 0; + left: 0; + position: absolute; + z-index: 10; +} +.entity-progress .current-progress { + -webkit-transition: width 0.3s linear; + -o-transition: width 0.3s linear; + transition: width 0.3s linear; + height: 3px; + background: #12B2E7; +} + +.season-show .card .show-name, +.season-show .card .ep-num { + display: none; +} + +.landing-page .card .ep-num-full { + display: none; +} + +.lab--items h3 { + margin-bottom: 2em; + font-size: 1.3em; + margin-top: 0; +} + +.lab-item { + padding: 1em; + background: rgba(0, 0, 0, 0.05); + display: block; + margin-bottom: 0.5em; +} +.lab-item p { + color: #2B2F30; +} +.lab-item:hover { + background: rgba(0, 0, 0, 0.1); +} + +.api-browser--methods { + padding: 1em; +} + +.api-browser--method { + padding: 0.5em 0 0; +} +.api-browser--method h4 { + font-size: 1.05em; + margin: 0 0 0.25em 0; +} +.api-browser--method p { + font-size: 90%; + opacity: 0.5; + height: 0; + overflow: hidden; + margin: 0 0 0.25em; +} +.api-browser--method .api-method--item { + border-bottom: 1px solid #ddd; + cursor: pointer; +} +.api-browser--method:hover h4 { + color: #12B2E7; + font-weight: 700; +} +.api-browser--method:hover p { + height: 100%; +} + +.api-browser--page { + padding: 0 0.5em; + margin-bottom: 2em; +} +.api-browser--page .description { + font-size: 90%; + opacity: 0.6; +} + +.api-method--execute { + max-width: 58em; +} +.api-method--execute textarea { + display: block; + width: 100%; + margin: 0.5em 0; + padding: 0.5em; + height: 200px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + border: 1px solid #ddd; +} + +.api-browser--content { + margin: 2em 0; +} + +.json-syntax-highlight { + background: rgba(245, 245, 245, 0.74); +} +.json-syntax-highlight .string { + color: green; +} +.json-syntax-highlight .number { + color: darkorange; +} +.json-syntax-highlight .boolean { + color: blue; +} +.json-syntax-highlight .null { + color: #bd09bd; +} +.json-syntax-highlight .key { + color: #bb1313; +} + +.icon-browser { + max-width: none; + background: rgba(255, 255, 255, 0.5); +} +.icon-browser h3 { + padding-bottom: 0.5em; + border-bottom: 1px solid #ddd; + margin-bottom: 0.5em; +} +.icon-browser i { + font-size: 3.1em; + margin-right: 0.25em; + float: left; +} +.icon-browser li { + border-radius: 5px; + width: 210px; + padding: 0.5em; + margin: 0.5em; + overflow: hidden; + float: left; + height: 65px; + position: relative; +} +.icon-browser li span { + display: block; + font-size: 85%; +} +.icon-browser li small { + right: 0; + bottom: 0; + left: 0; + position: absolute; + padding: 4px; + background: rgba(153, 153, 153, 0.5); + text-align: center; + display: none; +} +.icon-browser li:hover { + background: #fff; +} +.icon-browser li:hover small { + display: block; +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 60c41fe4..5c7ee14d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,196 +1,274 @@ { "name": "kodi-webinterface", - "version": "2.4.6", - "lockfileVersion": 1, + "version": "21.x-1.0.1", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "abbrev": { + "packages": { + "": { + "name": "kodi-webinterface", + "version": "21.x-1.0.1", + "license": "GPL-2.0", + "devDependencies": { + "bootstrap-sass": "^3.4.3", + "breakpoint-sass": "^2.7.1", + "compass-mixins": "^0.12.12", + "dotenv": "^16.4.5", + "grunt": "~0.4.5", + "grunt-browser-sync": "~2.2.0", + "grunt-cli": "^1.4.3", + "grunt-contrib-concat": "~1.0.1", + "grunt-contrib-copy": "~1.0.0", + "grunt-contrib-jshint": "~2.0.0", + "grunt-contrib-uglify": "~4.0.1", + "grunt-contrib-watch": "~1.1.0", + "grunt-eco": "~0.2.0-rc.0", + "grunt-execute": "~0.2.2", + "grunt-marked": "~0.1.3", + "grunt-po2json": "~0.3.0", + "grunt-shell": "2.1.0", + "node-sass-glob-importer": "^5.3.3", + "normalize-scss": "^8.0.0", + "sass": "^1.72.0", + "sass-toolkit": "^2.10.2", + "susy": "^2.2.14" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "accepts": { + "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, - "requires": { + "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, - "after": { + "node_modules/after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "dev": true }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "anymatch": { + "node_modules/anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "requires": { + "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" - }, + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "argparse": { + "node_modules/argparse": { "version": "0.1.16", "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", "dev": true, - "requires": { + "dependencies": { "underscore": "~1.7.0", "underscore.string": "~2.4.0" - }, - "dependencies": { - "underscore.string": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "dev": true - } } }, - "arr-diff": { + "node_modules/argparse/node_modules/underscore.string": { + "version": "2.4.0", + "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-flatten": { + "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-union": { + "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-unique": { + "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "arraybuffer.slice": { + "node_modules/arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, - "assign-symbols": { + "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "async": { + "node_modules/async": { "version": "0.1.22", "resolved": "http://registry.npmjs.org/async/-/async-0.1.22.tgz", "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "async-each": { + "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "async-each-series": { + "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "async-limiter": { + "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "atob": { + "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } }, - "axios": { + "node_modules/axios": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", "dev": true, - "requires": { + "dependencies": { "follow-redirects": "1.5.10", "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } } }, - "backo2": { + "node_modules/axios/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", "dev": true }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { + "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { + "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", @@ -199,167 +277,172 @@ "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "base64-arraybuffer": { + "node_modules/base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "base64id": { + "node_modules/base64id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "batch": { + "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "better-assert": { + "node_modules/better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", "dev": true, - "requires": { + "dependencies": { "callsite": "1.0.0" - } - }, - "bin-version": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", - "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", - "dev": true, - "requires": { - "find-versions": "^1.0.0" - } - }, - "bin-version-check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", - "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", - "dev": true, - "requires": { - "bin-version": "^1.0.0", - "minimist": "^1.1.0", - "semver": "^4.0.3", - "semver-truncate": "^1.0.0" }, - "dependencies": { - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - } + "engines": { + "node": "*" } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "blob": { + "node_modules/blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "body": { + "node_modules/body": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", "dev": true, - "requires": { + "dependencies": { "continuable-cache": "^0.3.1", "error": "^7.0.0", "raw-body": "~1.1.0", "safe-json-parse": "~1.0.1" - }, + } + }, + "node_modules/body/node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "node_modules/body/node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, "dependencies": { - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1", - "string_decoder": "0.10" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" } }, - "brace-expansion": { + "node_modules/body/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/bootstrap-sass": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.3.tgz", + "integrity": "sha512-vPgFnGMp1jWZZupOND65WS6mkR8rxhJxndT/AcMbqcq1hHMdkcH4sMPhznLzzoHOHkSCrd6J9F8pWBriPCKP2Q==", + "dev": true + }, + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "requires": { + "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", @@ -371,24 +454,34 @@ "split-string": "^3.0.2", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "browser-sync": { + "node_modules/breakpoint-sass": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/breakpoint-sass/-/breakpoint-sass-2.7.1.tgz", + "integrity": "sha512-99tYVacptnG6v3VnX62W07TnifrroDnWql+1wuTOfPCEGeNoMvpd0Mw+o+JZk50mAZ1CIHAr1I3GatHEZ2VZeQ==", + "dev": true + }, + "node_modules/browser-sync": { "version": "2.26.7", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz", "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==", "dev": true, - "requires": { + "dependencies": { "browser-sync-client": "^2.26.6", "browser-sync-ui": "^2.26.4", "bs-recipes": "1.3.4", @@ -419,26 +512,35 @@ "socket.io": "2.1.1", "ua-parser-js": "0.7.17", "yargs": "6.4.0" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 6.0.0" } }, - "browser-sync-client": { + "node_modules/browser-sync-client": { "version": "2.26.6", "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz", "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==", "dev": true, - "requires": { + "dependencies": { "etag": "1.8.1", "fresh": "0.5.2", "mitt": "^1.1.3", "rxjs": "^5.5.6" + }, + "engines": { + "node": ">=4.0.0" } }, - "browser-sync-ui": { + "node_modules/browser-sync-ui": { "version": "2.26.4", "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", "dev": true, - "requires": { + "dependencies": { "async-each-series": "0.1.1", "connect-history-api-fallback": "^1", "immutable": "^3", @@ -447,30 +549,33 @@ "stream-throttle": "^0.1.3" } }, - "bs-recipes": { + "node_modules/bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", "dev": true }, - "bs-snippet-injector": { + "node_modules/bs-snippet-injector": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", "dev": true }, - "bytes": { + "node_modules/bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "cache-base": { + "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "requires": { + "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", @@ -480,61 +585,91 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "callsite": { + "node_modules/callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "chalk": { + "node_modules/chalk": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "chokidar": { + "node_modules/change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, - "requires": { + "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "fsevents": "^1.2.7", "glob-parent": "^3.1.0", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", @@ -543,484 +678,573 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" } }, - "class-utils": { + "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "requires": { + "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "cli": { + "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", "dev": true, - "requires": { + "dependencies": { "exit": "0.1.2", "glob": "^7.1.1" + }, + "engines": { + "node": ">=0.2.5" } }, - "cliui": { + "node_modules/cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, - "requires": { + "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } }, - "code-point-at": { + "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "coffee-script": { + "node_modules/coffee-script": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", - "dev": true + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.4.0" + } }, - "collection-visit": { + "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "requires": { + "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { + "node_modules/colors": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.1.90" + } }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-bind": { + "node_modules/compass-mixins": { + "version": "0.12.12", + "resolved": "https://registry.npmjs.org/compass-mixins/-/compass-mixins-0.12.12.tgz", + "integrity": "sha512-wlTxz4lsIv/3o+rdyBOTZpQFFJeWPCRlYClaEXcaFe6QrAJ5qibTAgH53LyjfGQL6mmebTfjVHM0hLsxjGj+fw==", + "dev": true + }, + "node_modules/component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", "dev": true }, - "component-emitter": { + "node_modules/component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "component-inherit": { + "node_modules/component-inherit": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", "dev": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "connect": { + "node_modules/connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.0", "parseurl": "~1.3.2", "utils-merge": "1.0.1" }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "engines": { + "node": ">= 0.10.0" } }, - "connect-history-api-fallback": { + "node_modules/connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "console-browserify": { + "node_modules/console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, - "requires": { + "dependencies": { "date-now": "^0.1.4" } }, - "continuable-cache": { + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "dev": true, + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/continuable-cache": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", "dev": true }, - "cookie": { + "node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "copy-descriptor": { + "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "node_modules/css-node-extract": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-node-extract/-/css-node-extract-2.1.3.tgz", + "integrity": "sha512-E7CzbC0I4uAs2dI8mPCVe+K37xuja5kjIugOotpwICFL7vzhmFMAPHvS/MF9gFrmv8DDUANsxrgyT/I3OLukcw==", "dev": true, - "requires": { - "array-find-index": "^1.0.1" + "dependencies": { + "change-case": "^3.0.1", + "postcss": "^6.0.14" } }, - "dargs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-2.1.0.tgz", - "integrity": "sha1-RsJ/+rH/sTeO8hJZchNxn+YCvJM=", - "dev": true + "node_modules/css-selector-extract": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/css-selector-extract/-/css-selector-extract-3.3.6.tgz", + "integrity": "sha512-bBI8ZJKKyR9iHvxXb4t3E6WTMkis94eINopVg7y2FmmMjLXUVduD7mPEcADi4i9FX4wOypFMFpySX+0keuefxg==", + "dev": true, + "dependencies": { + "postcss": "^6.0.14" + } }, - "date-now": { + "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "dateformat": { + "node_modules/dateformat": { "version": "1.0.2-1.2.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "debug": { + "node_modules/debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, - "requires": { + "dependencies": { "ms": "^2.1.1" } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "decode-uri-component": { + "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "define-property": { + "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "requires": { + "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "engines": { + "node": ">=0.10.0" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "dev-ip": { + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", - "dev": true + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "dom-serializer": { + "node_modules/dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - }, - "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", - "dev": true - } } }, - "domelementtype": { + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + }, + "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, - "domhandler": { + "node_modules/domhandler": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, - "requires": { + "dependencies": { "domelementtype": "1" } }, - "domutils": { + "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, - "requires": { + "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, - "duplexer": { + "node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "easy-extender": { + "node_modules/easy-extender": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", "dev": true, - "requires": { + "dependencies": { "lodash": "^4.17.10" }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "engines": { + "node": ">= 4.0.0" } }, - "eazy-logger": { + "node_modules/easy-extender/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/eazy-logger": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", "dev": true, - "requires": { + "dependencies": { "tfunk": "^3.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "eco": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/eco/-/eco-1.0.3.tgz", - "integrity": "sha1-Yk6s0JyXle1l2D2oZTddxSRk5W0=", + "node_modules/eco": { + "version": "1.1.0-rc-3", + "resolved": "https://registry.npmjs.org/eco/-/eco-1.1.0-rc-3.tgz", + "integrity": "sha512-hZzEZlRhbVQ7gQ3aL4NQfpC1Nu7w1a2lHtgVN8SdxnY4wjEEFf7j7y3WXg8GJleUDOM+xhkSVHtzE0KhAQjxPQ==", "dev": true, - "requires": { - "coffee-script": ">=1.0.1", + "dependencies": { + "coffee-script": ">=1.2.0", "strscan": ">=1.0.1" + }, + "bin": { + "eco": "bin/eco" + }, + "engines": { + "node": "*" } }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "encoding": { + "node_modules/encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, - "requires": { + "dependencies": { "iconv-lite": "~0.4.13" - }, + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "engine.io": { + "node_modules/engine.io": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, - "requires": { + "dependencies": { "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", "debug": "~3.1.0", "engine.io-parser": "~2.1.0", "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } } }, - "engine.io-client": { + "node_modules/engine.io-client": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", "dev": true, - "requires": { + "dependencies": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", "debug": "~4.1.0", @@ -1034,12 +1258,34 @@ "yeast": "0.1.2" } }, - "engine.io-parser": { + "node_modules/engine.io-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", "dev": true, - "requires": { + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/engine.io/node_modules/engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "dependencies": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", @@ -1047,78 +1293,111 @@ "has-binary2": "~1.0.2" } }, - "entities": { + "node_modules/engine.io/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/engine.io/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/entities": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true }, - "error": { + "node_modules/error": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", "dev": true, - "requires": { + "dependencies": { "string-template": "~0.2.1" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "esprima": { + "node_modules/esprima": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "eventemitter2": { + "node_modules/eventemitter2": { "version": "0.4.14", "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "eventemitter3": { + "node_modules/eventemitter3": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", "dev": true }, - "exit": { + "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "expand-brackets": { + "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, - "requires": { + "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", @@ -1127,69 +1406,98 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "extend-shallow": { + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, - "requires": { + "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "extglob": { + "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "requires": { + "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", @@ -1199,110 +1507,138 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "faye-websocket": { + "node_modules/faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, - "requires": { + "dependencies": { "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "figures": { + "node_modules/figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "file-sync-cmp": { + "node_modules/file-sync-cmp": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", "dev": true }, - "fill-range": { + "node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.1", "escape-html": "~1.0.3", @@ -1311,799 +1647,971 @@ "statuses": "~1.3.1", "unpipe": "~1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" } }, - "find-up": { + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, - "requires": { + "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", - "dev": true, - "requires": { - "array-uniq": "^1.0.0", - "get-stdin": "^4.0.1", - "meow": "^3.5.0", - "semver-regex": "^1.0.0" - } - }, - "findup-sync": { + "node_modules/findup-sync": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", "dev": true, - "requires": { + "dependencies": { "glob": "~3.2.9", "lodash": "~2.4.1" }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/findup-sync/node_modules/glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } + "inherits": "2", + "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, - "follow-redirects": { + "node_modules/findup-sync/node_modules/lodash": { + "version": "2.4.2", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/findup-sync/node_modules/minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "dev": true, - "requires": { + "dependencies": { "debug": "=3.1.0" }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/follow-redirects/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" } }, - "for-in": { + "node_modules/follow-redirects/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "fragment-cache": { + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "requires": { + "dependencies": { "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "fs-extra": { + "node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^3.0.0", "universalify": "^0.1.0" + } + }, + "node_modules/fs-extra/node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "bundleDependencies": [ + "node-pre-gyp" + ], + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fsevents/node_modules/abbrev": { + "version": "1.1.1", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/ansi-regex": { + "version": "2.1.1", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/aproba": { + "version": "1.2.0", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/are-we-there-yet": { + "version": "1.1.5", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/fsevents/node_modules/balanced-match": { + "version": "1.0.0", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/brace-expansion": { + "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fsevents/node_modules/chownr": { + "version": "1.1.1", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/code-point-at": { + "version": "1.1.0", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/concat-map": { + "version": "0.0.1", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/console-control-strings": { + "version": "1.1.0", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/core-util-is": { + "version": "1.0.2", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/debug": { + "version": "4.1.1", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/fsevents/node_modules/deep-extend": { + "version": "0.6.0", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fsevents/node_modules/delegates": { + "version": "1.0.0", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/detect-libc": { + "version": "1.0.3", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "inBundle": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fsevents/node_modules/fs-minipass": { + "version": "1.2.5", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/fs.realpath": { + "version": "1.0.0", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/gauge": { + "version": "2.7.4", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/fsevents/node_modules/glob": { + "version": "7.1.3", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/has-unicode": { + "version": "2.0.1", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/iconv-lite": { + "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/ignore-walk": { + "version": "3.0.1", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/fsevents/node_modules/inflight": { + "version": "1.0.6", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/inherits": { + "version": "2.0.3", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/ini": { + "version": "1.3.5", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/isarray": { + "version": "1.0.0", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/minimatch": { + "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/minimist": { + "version": "0.0.8", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/minipass": { + "version": "2.3.5", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/fsevents/node_modules/minizlib": { + "version": "1.2.1", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/mkdirp": { + "version": "0.5.1", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fsevents/node_modules/ms": { + "version": "2.1.1", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/needle": { + "version": "2.3.0", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/fsevents/node_modules/node-pre-gyp": { + "version": "0.12.0", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/fsevents/node_modules/nopt": { + "version": "4.0.1", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/fsevents/node_modules/npm-bundled": { + "version": "1.0.6", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/npm-packlist": { + "version": "1.4.1", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npmlog": { + "version": "4.1.2", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/fsevents/node_modules/number-is-nan": { + "version": "1.0.1", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/object-assign": { + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/once": { + "version": "1.4.0", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/os-homedir": { + "version": "1.0.2", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/os-tmpdir": { + "version": "1.0.2", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/osenv": { + "version": "0.1.5", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/fsevents/node_modules/path-is-absolute": { + "version": "1.0.1", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/process-nextick-args": { + "version": "2.0.0", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/rc": { + "version": "1.2.8", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "version": "1.2.0", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/readable-stream": { + "version": "2.3.6", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fsevents/node_modules/rimraf": { + "version": "2.6.3", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fsevents/node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/safer-buffer": { + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/sax": { + "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/semver": { + "version": "5.7.0", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "inBundle": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fsevents/node_modules/set-blocking": { + "version": "2.0.0", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/signal-exit": { + "version": "3.0.2", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fsevents/node_modules/string-width": { + "version": "1.0.2", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-ansi": { + "version": "3.0.1", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-json-comments": { + "version": "2.0.1", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "inBundle": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/tar": { + "version": "4.4.8", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "inBundle": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/fsevents/node_modules/util-deprecate": { + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "inBundle": true, + "optional": true + }, + "node_modules/fsevents/node_modules/wide-align": { + "version": "1.1.3", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "inBundle": true, + "optional": true, "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } + "string-width": "^1.0.2 || 2" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/fsevents/node_modules/wrappy": { + "version": "1.0.2", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "inBundle": true, + "optional": true }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "node_modules/fsevents/node_modules/yallist": { + "version": "3.0.3", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": false, - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": false, - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": false, - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "resolved": false, - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": false, - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": false, - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": false, - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": false, - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": false, - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": false, - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": false, - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": false, - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": false, - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": false, - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minipass": { - "version": "2.3.5", - "resolved": false, - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": false, - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": false, - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "resolved": false, - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "resolved": false, - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": false, - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "resolved": false, - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "resolved": false, - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": false, - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": false, - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": false, - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "resolved": false, - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": false, - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": false, - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": false, - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": false, - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": false, - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "resolved": false, - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": false, - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "resolved": false, - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": false, - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": false, - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } + "inBundle": true, + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gaze": { + "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, - "requires": { + "dependencies": { "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-value": { + "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "getobject": { + "node_modules/getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "gettext-parser": { + "node_modules/gettext-parser": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.1.0.tgz", "integrity": "sha1-LFpmONiTk0ubVQN9CtgstwBLJnk=", "dev": true, - "requires": { + "dependencies": { "encoding": "^0.1.11" } }, - "glob": { + "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -2111,79 +2619,137 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "requires": { + "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "globule": { + "node_modules/globule": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, - "requires": { + "dependencies": { "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true + "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "grunt": { + "node_modules/grunt": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", "dev": true, - "requires": { + "dependencies": { "async": "~0.1.22", "coffee-script": "~1.3.3", "colors": "~0.6.2", @@ -2205,334 +2771,331 @@ "underscore.string": "~2.2.1", "which": "~1.0.5" }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } + "engines": { + "node": ">= 0.8.0" } }, - "grunt-browser-sync": { + "node_modules/grunt-browser-sync": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/grunt-browser-sync/-/grunt-browser-sync-2.2.0.tgz", "integrity": "sha1-oOnB/RzLXEVMJexRcBE///BqR3I=", "dev": true, - "requires": { + "dependencies": { "browser-sync": "^2.6.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "grunt-contrib-coffee": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-1.0.0.tgz", - "integrity": "sha1-2u6wSVTxTihovMm6bq+RBf3C2kw=", + "node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", "dev": true, - "requires": { - "chalk": "~1.0.0", - "coffee-script": "~1.10.0", - "lodash": "~4.3.0", - "uri-path": "~1.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", - "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", - "dev": true - }, - "chalk": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz", - "integrity": "sha1-s89O0P9Tl8mcdbj2edsvUoMfltw=", - "dev": true, - "requires": { - "ansi-styles": "^2.0.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^1.0.3", - "strip-ansi": "^2.0.1", - "supports-color": "^1.3.0" - } - }, - "coffee-script": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", - "dev": true - }, - "has-ansi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz", - "integrity": "sha1-wLWxYV2eOCsP9nFp2We0JeSMpTg=", - "dev": true, - "requires": { - "ansi-regex": "^1.1.0", - "get-stdin": "^4.0.1" - } - }, - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "strip-ansi": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", - "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", - "dev": true, - "requires": { - "ansi-regex": "^1.0.0" - } - }, - "supports-color": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", - "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", - "dev": true - } + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" } }, - "grunt-contrib-compass": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-compass/-/grunt-contrib-compass-1.1.1.tgz", - "integrity": "sha1-PCXSCeAYglqsn6gjFbvm38HGNtw=", - "dev": true, - "requires": { - "async": "^1.5.2", - "bin-version-check": "^2.0.0", - "dargs": "^2.0.3", - "onetime": "^1.0.0", - "tmp": "0.0.28", - "which": "^1.0.9" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } + "node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "grunt-contrib-concat": { + "node_modules/grunt-contrib-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.0.0", "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "grunt": ">=0.4.0" } }, - "grunt-contrib-copy": { + "node_modules/grunt-contrib-copy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.1", "file-sync-cmp": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "grunt-contrib-jshint": { + "node_modules/grunt-contrib-jshint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-2.0.0.tgz", "integrity": "sha512-4qR411I1bhvVrPkKBzCUcrWkTEtBuWioXi9ABWRXHoplRScg03jiMqLDpzS4pDhVsLOTx5F9l+0cnMc+Gd2MWg==", "dev": true, - "requires": { + "dependencies": { "chalk": "^2.4.1", "hooker": "^0.2.3", "jshint": "~2.9.6" }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "grunt": ">=0.4.0" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "grunt-contrib-uglify": { + "node_modules/grunt-contrib-jshint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz", "integrity": "sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg==", "dev": true, - "requires": { + "dependencies": { "chalk": "^2.4.1", "maxmin": "^2.1.0", "uglify-js": "^3.5.0", "uri-path": "^1.0.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "grunt-contrib-watch": { + "node_modules/grunt-contrib-watch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", "dev": true, - "requires": { + "dependencies": { "async": "^2.6.0", "gaze": "^1.1.0", "lodash": "^4.17.10", "tiny-lr": "^1.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-watch/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "lodash": "^4.17.14" } }, - "grunt-eco": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-eco/-/grunt-eco-0.1.3.tgz", - "integrity": "sha1-TmuoaUihEimQp+rmHFerlhp2ntY=", + "node_modules/grunt-contrib-watch/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/grunt-eco": { + "version": "0.2.0-rc.0", + "resolved": "https://registry.npmjs.org/grunt-eco/-/grunt-eco-0.2.0-rc.0.tgz", + "integrity": "sha512-gFTF4fzWtsMthX0Bg9EGRlyGnraTAKBgPbTApgU21RHc5b006uPlKhopvGI6YFxmY4dFC/YeH34hwpMwzBmvzw==", "dev": true, - "requires": { - "eco": "~1.0" + "dependencies": { + "eco": "1.1.0-rc-3" + }, + "engines": { + "node": ">=0.8" + }, + "peerDependencies": { + "grunt": ">=0.4.0" } }, - "grunt-execute": { + "node_modules/grunt-execute": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/grunt-execute/-/grunt-execute-0.2.2.tgz", "integrity": "sha1-TpRf5XlZzA3neZCDtrQq7ZYWNQo=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.1" + } + }, + "node_modules/grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "grunt-legacy-log": { + "node_modules/grunt-legacy-log": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", "dev": true, - "requires": { + "dependencies": { "colors": "~0.6.2", "grunt-legacy-log-utils": "~0.1.1", "hooker": "~0.2.3", "lodash": "~2.4.1", "underscore.string": "~2.3.3" }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } + "engines": { + "node": ">= 0.8.0" } }, - "grunt-legacy-log-utils": { + "node_modules/grunt-legacy-log-utils": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", "dev": true, - "requires": { + "dependencies": { "colors": "~0.6.2", "lodash": "~2.4.1", "underscore.string": "~2.3.3" }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/lodash": { + "version": "2.4.2", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log-utils/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-legacy-log/node_modules/lodash": { + "version": "2.4.2", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true, + "engines": { + "node": "*" } }, - "grunt-legacy-util": { + "node_modules/grunt-legacy-util": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", "dev": true, - "requires": { + "dependencies": { "async": "~0.1.22", "exit": "~0.1.1", "getobject": "~0.1.0", @@ -2540,475 +3103,706 @@ "lodash": "~0.9.2", "underscore.string": "~2.2.1", "which": "~1.0.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "grunt-marked": { + "node_modules/grunt-marked": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/grunt-marked/-/grunt-marked-0.1.3.tgz", "integrity": "sha1-bbVt64kGf1+nGuPwGt9D291HQAo=", "dev": true, - "requires": { + "dependencies": { "async": "~0.2.10", "highlight.js": "~8.0.0", "marked": "~0.3.1" }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": ">=0.4.2" } }, - "grunt-po2json": { + "node_modules/grunt-marked/node_modules/async": { + "version": "0.2.10", + "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "node_modules/grunt-po2json": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/grunt-po2json/-/grunt-po2json-0.3.0.tgz", "integrity": "sha1-y4hZOErUzFokTHfMAm846sayhMM=", "dev": true, - "requires": { + "dependencies": { "po2json": "*" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": "~0.4.1" } }, - "grunt-shell": { + "node_modules/grunt-shell": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz", "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.0.0", "npm-run-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "grunt": ">=0.4.0" + } + }, + "node_modules/grunt/node_modules/glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "dependencies": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + }, + "engines": { + "node": "*" } }, - "gzip-size": { + "node_modules/grunt/node_modules/inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "node_modules/gzip-size": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", "dev": true, - "requires": { + "dependencies": { "duplexer": "^0.1.1" + }, + "engines": { + "node": ">=0.12.0" } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-binary2": { + "node_modules/has-binary2": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, - "requires": { + "dependencies": { "isarray": "2.0.1" } }, - "has-color": { + "node_modules/has-color": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "has-cors": { + "node_modules/has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", "dev": true }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-value": { + "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, - "requires": { + "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-values": { + "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, - "requires": { + "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "highlight.js": { + "node_modules/highlight.js": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-8.0.0.tgz", "integrity": "sha1-uB21vo5vXFApxAtmtHMXDNPgh1o=", - "dev": true + "deprecated": "Version no longer supported. Upgrade to @latest", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "hooker": { + "node_modules/hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "hosted-git-info": { + "node_modules/hosted-git-info": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, - "requires": { + "dependencies": { "domelementtype": "1", "domhandler": "2.3", "domutils": "1.5", "entities": "1.0", "readable-stream": "1.1" - }, + } + }, + "node_modules/htmlparser2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "http-errors": { + "node_modules/htmlparser2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, - "requires": { + "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "http-parser-js": { + "node_modules/http-parser-js": { "version": "0.4.10", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", "dev": true }, - "http-proxy": { + "node_modules/http-proxy": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", "dev": true, - "requires": { + "dependencies": { "eventemitter3": "1.x.x", "requires-port": "1.x.x" + }, + "engines": { + "node": ">=0.10.0" } }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.2.11", "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "immutable": { + "node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, - "requires": { - "repeating": "^2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "indexof": { + "node_modules/indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "invert-kv": { + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", + "dev": true + }, + "node_modules/invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "is-accessor-descriptor": { + "node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-data-descriptor": { + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-descriptor": { + "node_modules/is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "requires": { + "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "is-extendable": { + "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, - "requires": { - "number-is-nan": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "requires": { + "dependencies": { "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.0" } }, - "is-number": { + "node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "engines": { + "node": ">=0.10.0" } }, - "is-number-like": { + "node_modules/is-number-like": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", "dev": true, - "requires": { + "dependencies": { "lodash.isfinite": "^3.3.2" } }, - "is-plain-object": { + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "dev": true, + "dependencies": { + "upper-case": "^1.1.0" } }, - "is-utf8": { + "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-windows": { + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-wsl": { + "node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "isarray": { + "node_modules/isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, - "isobject": { + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "js-yaml": { + "node_modules/js-yaml": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", "dev": true, - "requires": { + "dependencies": { "argparse": "~ 0.1.11", "esprima": "~ 1.0.2" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "engines": { + "node": ">= 0.6.0" } }, - "jshint": { + "node_modules/jshint": { "version": "2.9.7", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.7.tgz", "integrity": "sha512-Q8XN38hGsVQhdlM+4gd1Xl7OB1VieSuCJf+fEJjpo59JH99bVJhXRXAh26qQ15wfdd1VPMuDWNeSWoNl53T4YA==", "dev": true, - "requires": { + "dependencies": { "cli": "~1.0.0", "console-browserify": "1.1.x", "exit": "0.1.x", @@ -3018,216 +3812,330 @@ "shelljs": "0.3.x", "strip-json-comments": "1.0.x" }, + "bin": { + "jshint": "bin/jshint" + } + }, + "node_modules/jshint/node_modules/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "node_modules/jshint/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "jsonfile": { + "node_modules/jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, - "requires": { + "optionalDependencies": { "graceful-fs": "^4.1.6" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true, - "optional": true - } } }, - "kind-of": { + "node_modules/jsonfile/node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true, + "optional": true + }, + "node_modules/kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/liftup/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/liftup/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/liftup/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "node_modules/liftup/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "invert-kv": "^1.0.0" + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "limiter": { + "node_modules/limiter": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", "dev": true }, - "livereload-js": { + "node_modules/livereload-js": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", "dev": true }, - "load-json-file": { + "node_modules/load-json-file": { "version": "1.1.0", "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "localtunnel": { + "node_modules/load-json-file/node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "node_modules/localtunnel": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz", "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==", "dev": true, - "requires": { + "dependencies": { "axios": "0.19.0", "debug": "4.1.1", "openurl": "1.1.1", "yargs": "6.6.0" }, + "bin": { + "lt": "bin/client" + } + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "6.6.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, "dependencies": { - "yargs": { - "version": "6.6.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" - } - } + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" } }, - "lodash": { + "node_modules/lodash": { "version": "0.9.2", "resolved": "http://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", - "dev": true + "dev": true, + "engines": [ + "node", + "rhino" + ] }, - "lodash.isfinite": { + "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "dependencies": { + "lower-case": "^1.1.2" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", "dev": true }, - "map-cache": { + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "map-visit": { + "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, - "requires": { + "dependencies": { "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "marked": { + "node_modules/marked": { "version": "0.3.19", "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } }, - "maxmin": { + "node_modules/maxmin": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.0.0", "figures": "^1.0.1", "gzip-size": "^3.0.0", "pretty-bytes": "^3.0.0" + }, + "engines": { + "node": ">=0.12" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "micromatch": { + "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "requires": { + "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", @@ -3241,91 +4149,123 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "mime": { + "node_modules/mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "dev": true, + "bin": { + "mime": "cli.js" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.42.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.25", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", "dev": true, - "requires": { + "dependencies": { "mime-db": "1.42.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimatch": { + "node_modules/minimatch": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", "dev": true, - "requires": { + "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mitt": { + "node_modules/mitt": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "dev": true }, - "mixin-deep": { + "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, - "requires": { + "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "nan": { + "node_modules/nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, - "nanomatch": { + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, - "requires": { + "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", @@ -3337,441 +4277,927 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-sass-glob-importer": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/node-sass-glob-importer/-/node-sass-glob-importer-5.3.3.tgz", + "integrity": "sha512-888UlmX8fiGMCQ+8/w6e3VjPlmuIPBQfbupAGnG0kfQbpto9OtofULN1xCmlvKD5e38Sz+PpETXqgogheqAMqQ==", + "dev": true, + "dependencies": { + "node-sass-magic-importer": "^5.3.3" + }, + "engines": { + "node": ">=6.11.1", + "npm": ">=3.0.0" + } + }, + "node_modules/node-sass-magic-importer": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/node-sass-magic-importer/-/node-sass-magic-importer-5.3.3.tgz", + "integrity": "sha512-xB4yH7laj00SBIZO9Hwke3XDSqMcz+6IM7TgcxU9Ri6m6Pn8MBWwgG5HLmgZkQX3W2osUhx+k7WSOzzunuTKVw==", + "dev": true, + "dependencies": { + "css-node-extract": "^2.1.3", + "css-selector-extract": "^3.3.6", + "findup-sync": "^4.0.0", + "glob": "^7.1.6", + "object-hash": "^2.0.3", + "postcss-scss": "^3.0.2", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">=6.11.1", + "npm": ">=3.0.0" + } + }, + "node_modules/node-sass-magic-importer/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass-magic-importer/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass-magic-importer/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-sass-magic-importer/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/node-sass-magic-importer/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/node-sass-magic-importer/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "nomnom": { + "node_modules/nomnom": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "deprecated": "Package no longer supported. Contact support@npmjs.com for more info.", "dev": true, - "requires": { + "dependencies": { "chalk": "~0.4.0", "underscore": "~1.6.0" - }, + } + }, + "node_modules/nomnom/node_modules/ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/nomnom/node_modules/chalk": { + "version": "0.4.0", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/nomnom/node_modules/strip-ansi": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true, + "bin": { + "strip-ansi": "cli.js" + }, + "engines": { + "node": ">=0.8.0" } }, - "nopt": { + "node_modules/nomnom/node_modules/underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, - "requires": { + "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "normalize-package-data": { + "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "requires": { + "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-scss": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-scss/-/normalize-scss-8.0.0.tgz", + "integrity": "sha512-C6GXIxQ2LOYWrde27xWbONavmybobxp+V6TY8BiBJw5M+yMNEg2R0WjaeDtmP5JsunFYKvFOvgMAIC0/OxZuJQ==", "dev": true }, - "npm-run-path": { + "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, - "requires": { + "dependencies": { "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "number-is-nan": { + "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-component": { + "node_modules/object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", "dev": true }, - "object-copy": { + "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, - "requires": { + "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "object-path": { + "node_modules/object-path": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "object-visit": { + "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, - "requires": { + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.pick": { + "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "openurl": { + "node_modules/openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", "dev": true }, - "opn": { + "node_modules/opn": { "version": "5.3.0", "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, - "requires": { + "dependencies": { "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "os-locale": { + "node_modules/os-locale": { "version": "1.4.0", "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, - "requires": { + "dependencies": { "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "os-tmpdir": { + "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } }, - "parse-json": { + "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, - "requires": { + "dependencies": { "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "parseqs": { + "node_modules/parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, - "requires": { + "dependencies": { "better-assert": "~1.0.0" } }, - "parseuri": { + "node_modules/parseuri": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, - "requires": { + "dependencies": { "better-assert": "~1.0.0" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } }, - "pascalcase": { + "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } }, - "path-dirname": { + "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "path-exists": { + "node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, - "requires": { + "dependencies": { "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type/node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, - "requires": { + "dependencies": { "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "po2json": { + "node_modules/po2json": { "version": "0.4.5", "resolved": "http://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz", "integrity": "sha1-R7spUtoy1Yob4vJWpZjuvAt0URg=", "dev": true, - "requires": { + "dependencies": { "gettext-parser": "1.1.0", "nomnom": "1.8.1" + }, + "bin": { + "po2json": "bin/po2json" + }, + "engines": { + "node": ">= 0.8.0" } }, - "portscanner": { + "node_modules/portscanner": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", "dev": true, - "requires": { + "dependencies": { "async": "1.5.2", "is-number-like": "^1.0.3" }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" } }, - "posix-character-classes": { + "node_modules/portscanner/node_modules/async": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-scss": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.5.tgz", + "integrity": "sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==", + "dev": true, + "dependencies": { + "postcss": "^8.2.7" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-scss/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "pretty-bytes": { + "node_modules/pretty-bytes": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", "dev": true, - "requires": { + "dependencies": { "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "qs": { + "node_modules/qs": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "dev": true, - "requires": { + "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.3", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "read-pkg": { + "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, - "requires": { + "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "read-pkg-up": { + "node_modules/read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, - "requires": { + "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.6", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -3779,232 +5205,432 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } } }, - "readdirp": { + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - } + "engines": { + "node": ">=0.10" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "node_modules/readdirp/node_modules/graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "regex-not": { + "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "remove-trailing-separator": { + "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "repeat-element": { + "node_modules/repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "repeat-string": { + "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, - "requires": { - "is-finite": "^1.0.0" + "engines": { + "node": ">=0.10" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "requires-port": { + "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "path-parse": "^1.0.6" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "resolve-url": { + "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "resp-modifier": { + "node_modules/resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", "dev": true, - "requires": { + "dependencies": { "debug": "^2.2.0", "minimatch": "^3.0.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/resp-modifier/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/resp-modifier/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/resp-modifier/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "2.2.8", + "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "node_modules/rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "dependencies": { + "symbol-observable": "1.0.1" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", + "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-toolkit": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/sass-toolkit/-/sass-toolkit-2.10.2.tgz", + "integrity": "sha512-gJoSeNIY72bBUVzaC3Zi0JuazbYRoEtPvxwGruZw9Np4d4sAsQwBG9uMZjg1G9RbLGvVcnNxJrJedQeThpJyCg==", + "dev": true + }, + "node_modules/sass/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sass/node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sass/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sass/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "node_modules/sass/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "rimraf": { - "version": "2.2.8", - "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true + "node_modules/sass/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "node_modules/sass/node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "node_modules/sass/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { - "symbol-observable": "1.0.1" + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true + "node_modules/sass/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/sass/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "ret": "~0.1.10" + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/sass/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "semver": { + "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", "dev": true, - "requires": { - "semver": "^5.3.0" + "bin": { + "semver": "bin/semver" } }, - "send": { + "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", @@ -4019,54 +5645,71 @@ "range-parser": "~1.2.0", "statuses": "~1.4.0" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "serve-index": { + "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, - "requires": { + "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", @@ -4075,125 +5718,148 @@ "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "server-destroy": { + "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", "dev": true }, - "set-blocking": { + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { + "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "shelljs": { + "node_modules/shelljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true + "dev": true, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "sigmund": { + "node_modules/sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "dev": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } }, - "snapdragon": { + "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, - "requires": { + "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", @@ -4203,288 +5869,323 @@ "source-map-resolve": "^0.5.0", "use": "^3.1.0" }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "snapdragon-node": { + "node_modules/snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, - "requires": { + "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "snapdragon-util": { + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.2.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "dependencies": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "dev": true, + "dependencies": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "dev": true, + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "ms": "2.0.0" } }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "node_modules/socket.io/node_modules/engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, - "requires": { + "dependencies": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - }, + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/socket.io/node_modules/engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" } }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "node_modules/socket.io/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "node_modules/socket.io/node_modules/socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, - "requires": { + "dependencies": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" } }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "node_modules/socket.io/node_modules/socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, - "requires": { + "dependencies": { "component-emitter": "1.2.1", "debug": "~3.1.0", "isarray": "2.0.1" - }, + } + }, + "node_modules/socket.io/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "source-map": { + "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-resolve": { + "node_modules/source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "requires": { + "dependencies": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", @@ -4492,513 +6193,687 @@ "urix": "^0.1.0" } }, - "source-map-url": { + "node_modules/source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "spdx-correct": { + "node_modules/spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { + "node_modules/spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { + "node_modules/spdx-license-ids": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "split-string": { + "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "static-extend": { + "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, - "requires": { + "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "statuses": { + "node_modules/statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "stream-throttle": { + "node_modules/stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", "dev": true, - "requires": { + "dependencies": { "commander": "^2.2.0", "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "string-template": { + "node_modules/string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, - "string-width": { + "node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "requires": { + "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, - "requires": { + "dependencies": { "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true + "dev": true, + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } }, - "strscan": { + "node_modules/strscan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strscan/-/strscan-1.0.1.tgz", - "integrity": "sha1-Ry2bwAxo6QbvL8Is33Yr58YazE0=", - "dev": true + "integrity": "sha512-sn8BaYGFCVFMZxPI7fkZulqXdskwg2tGl7JqQNsvVR/jCNCZhXUADKtAEDiMxoMwMxVGasiPdyI9Wmu8JtLb1w==", + "dev": true, + "engines": { + "node": "*" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/susy": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/susy/-/susy-2.2.14.tgz", + "integrity": "sha512-4I7Cb4Cjw2TF6ZEMxT8W9/Ap35Kn/r6y3LIO+NzaMRBxfbmT+w2KvbrANG/JCqJjlPgqvwLfLF9vmndSMGZuLg==", "dev": true }, - "symbol-observable": { + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "tfunk": { + "node_modules/tfunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.1", "object-path": "^0.9.0" } }, - "tiny-lr": { + "node_modules/tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, - "requires": { + "dependencies": { "body": "^5.1.0", "debug": "^3.1.0", "faye-websocket": "~0.10.0", "livereload-js": "^2.3.0", "object-assign": "^4.1.0", "qs": "^6.4.0" - }, + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", - "dev": true - } + "ms": "^2.1.1" + } + }, + "node_modules/tiny-lr/node_modules/qs": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", + "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, - "to-array": { + "node_modules/to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, - "to-object-path": { + "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-regex": { + "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, - "requires": { + "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, - "requires": { + "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "ua-parser-js": { + "node_modules/ua-parser-js": { "version": "0.7.17", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.6.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", "dev": true, - "requires": { + "dependencies": { "commander": "~2.20.3", "source-map": "~0.6.1" }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "ultron": { + "node_modules/ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, - "underscore": { + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/underscore": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", "dev": true }, - "underscore.string": { + "node_modules/underscore.string": { "version": "2.2.1", "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "union-value": { + "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, - "requires": { + "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "universalify": { + "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "unset-value": { + "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, - "requires": { + "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "upath": { + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", "dev": true }, - "uri-path": { + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dev": true, + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "urix": { + "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, - "use": { + "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "dev": true, - "requires": { + "dependencies": { "http-parser-js": ">=0.4.0 <0.4.11", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "which": { + "node_modules/which": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true + "dev": true, + "bin": { + "which": "bin/which" + } }, - "which-module": { + "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "window-size": { + "node_modules/window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true + "dev": true, + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, - "requires": { + "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "ws": { + "node_modules/ws": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "dev": true, - "requires": { + "dependencies": { "async-limiter": "~1.0.0" } }, - "xmlhttprequest-ssl": { + "node_modules/xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "y18n": { + "node_modules/y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "6.4.0", "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", "dev": true, - "requires": { + "dependencies": { "camelcase": "^3.0.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", @@ -5015,16 +6890,16 @@ "yargs-parser": "^4.1.0" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "4.2.1", "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, - "requires": { + "dependencies": { "camelcase": "^3.0.0" } }, - "yeast": { + "node_modules/yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", diff --git a/package.json b/package.json index 87e0c47d..ccac4d97 100644 --- a/package.json +++ b/package.json @@ -8,22 +8,29 @@ "type": "git", "url": "git@github.com:xbmc/chorus2.git" }, - "dependencies": {}, "devDependencies": { + "bootstrap-sass": "^3.4.3", + "breakpoint-sass": "^2.7.1", + "compass-mixins": "^0.12.12", + "dotenv": "^16.4.5", "grunt": "~0.4.5", "grunt-browser-sync": "~2.2.0", - "grunt-contrib-coffee": "~1.0.0", - "grunt-contrib-compass": "~1.1.1", + "grunt-cli": "^1.4.3", "grunt-contrib-concat": "~1.0.1", "grunt-contrib-copy": "~1.0.0", "grunt-contrib-jshint": "~2.0.0", "grunt-contrib-uglify": "~4.0.1", "grunt-contrib-watch": "~1.1.0", - "grunt-eco": "~0.1.2", + "grunt-eco": "~0.2.0-rc.0", "grunt-execute": "~0.2.2", "grunt-marked": "~0.1.3", "grunt-po2json": "~0.3.0", - "grunt-shell": "2.1.0" + "grunt-shell": "2.1.0", + "node-sass-glob-importer": "^5.3.3", + "normalize-scss": "^8.0.0", + "sass": "^1.72.0", + "sass-toolkit": "^2.10.2", + "susy": "^2.2.14" }, "engines": { "node": ">=0.8.0" diff --git a/src/js/app.coffee b/src/js/app.coffee deleted file mode 100644 index 9c034a5f..00000000 --- a/src/js/app.coffee +++ /dev/null @@ -1,60 +0,0 @@ -## Our global objects -@helpers = {} -@config = { - static: - appTitle: 'Kodi' - jsonRpcEndpoint: 'jsonrpc' - socketsHost: location.hostname - socketsPort: 9090 - ajaxTimeout: 5000 - connected: true - hashKey: 'kodi' - defaultPlayer: 'auto' - ignoreArticle: true - pollInterval: 10000 - reverseProxy: false - albumArtistsOnly: true - searchIndexCacheExpiry: (24 * 60 * 60) # 1 day - collectionCacheExpiry: (7 * 24 * 60 * 60) # 1 week (gets wiped on library update) - addOnsLoaded: false - vibrantHeaders: false - lang: "en" - kodiSettingsLevel: 'standard' - playlistFocusPlaying: true - keyboardControl: 'kodi' - disableThumbs: false - showDeviceName: false - refreshIgnoreNFO: true - largeBreakpoint: 910 - apiKeyTMDB: '' - apiKeyTVDB: '' - apiKeyFanartTv: '' - apiKeyYouTube: '' -} - -## The App Instance -@Kodi = do (Backbone, Marionette) -> - - App = new Backbone.Marionette.Application() - - App.addRegions - root: "body" - - ## Load custom config settings. - App.on "before:start", -> - config.static = _.extend config.static, config.get('app', 'config:local', config.static) - - App.vent.on "shell:ready", (options) => - App.startHistory() - - App - -$(document).ready => - # Initialise language support - helpers.translate.init -> - # Start the app - Kodi.start() - # Start material - $.material.init() - # Bind to scroll/resize for redraw trigger - helpers.ui.bindOnScrollResize() diff --git a/src/js/app.js b/src/js/app.js new file mode 100644 index 00000000..eb7bfad1 --- /dev/null +++ b/src/js/app.js @@ -0,0 +1,72 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +//# Our global objects +this.helpers = {}; +this.config = { + static: { + appTitle: 'Kodi', + jsonRpcEndpoint: 'jsonrpc', + socketsHost: location.hostname, + socketsPort: 9090, + ajaxTimeout: 5000, + connected: true, + hashKey: 'kodi', + defaultPlayer: 'auto', + ignoreArticle: true, + pollInterval: 10000, + reverseProxy: false, + albumArtistsOnly: true, + searchIndexCacheExpiry: (24 * 60 * 60), // 1 day + collectionCacheExpiry: (7 * 24 * 60 * 60), // 1 week (gets wiped on library update) + addOnsLoaded: false, + vibrantHeaders: false, + lang: "en", + kodiSettingsLevel: 'standard', + playlistFocusPlaying: true, + keyboardControl: 'kodi', + disableThumbs: false, + showDeviceName: false, + refreshIgnoreNFO: true, + largeBreakpoint: 910, + apiKeyTMDB: '', + apiKeyTVDB: '', + apiKeyFanartTv: '', + apiKeyYouTube: '' + } +}; + +//# The App Instance +this.Kodi = (function(Backbone, Marionette) { + + const App = new Backbone.Marionette.Application(); + + App.addRegions({ + root: "body"}); + + //# Load custom config settings. + App.on("before:start", () => config.static = _.extend(config.static, config.get('app', 'config:local', config.static))); + + App.vent.on("shell:ready", options => { + return App.startHistory(); + }); + + return App; +})(Backbone, Marionette); + +$(document).ready(() => { + // Initialise language support + return helpers.translate.init(function() { + // Start the app + Kodi.start(); + // Start material + $.material.init(); + // Bind to scroll/resize for redraw trigger + return helpers.ui.bindOnScrollResize(); + }); +}); diff --git a/src/js/apps/addon/addon_app.js b/src/js/apps/addon/addon_app.js new file mode 100644 index 00000000..4209d388 --- /dev/null +++ b/src/js/apps/addon/addon_app.js @@ -0,0 +1,125 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp", function(AddonApp, App, Backbone, Marionette, $, _) { + + const Cls = (AddonApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "addons/:type" : "list", + "addon/execute/:id" : "execute" + }; + } + }); + Cls.initClass(); + + var API = { + + // Get list page + list(type) { + return new AddonApp.List.Controller({ + type}); + }, + + // Execute addon + execute(id) { + API.addonController().executeAddon(id, helpers.url.params(), () => Kodi.execute("notification:show", tr('Executed addon'))); + return App.navigate("addons/executable", {trigger: true}); + }, + + // Get the addon controller + addonController() { + return App.request("command:kodi:controller", 'auto', 'AddOn'); + }, + + // Get all enabled addons + getEnabledAddons(callback) { + let addons = []; + // If loaded, return from static + if (config.getLocal("addOnsLoaded", false) === true) { + addons = config.getLocal("addOnsEnabled", []); + if (callback) { + callback(addons); + } + } else { + // Not loaded, lookup and set to static + this.addonController().getEnabledAddons(true, function(addons) { + config.setLocal("addOnsEnabled", addons); + config.setLocal("addOnsLoaded", true); + config.set('app', "addOnsSearchSettings", API.getSearchSettings(addons)); + if (callback) { + return callback(addons); + } + }); + } + return addons; + }, + + //# Get search settings + getSearchSettings(addons) { + const searchSettings = []; + for (var addon of addons) { + var searchSetting = App.request("addon:search:settings:" + addon.addonid); + if (searchSetting) { + if (!_.isArray(searchSetting)) { + searchSetting = [searchSetting]; + } + for (var i in searchSetting) { + var set = searchSetting[i]; + set.id = addon.addonid + '.' + i; + searchSettings.push(set); + } + } + } + return searchSettings; + }, + + // Given a filter check if addon is enabled, if addons not loaded returns false. + isAddOnEnabled(filter = {}, callback) { + const addons = this.getEnabledAddons(callback); + return _.findWhere(addons, filter); + } + }; + + + App.on("before:start", function() { + new AddonApp.Router({ + controller: API}); + // Store enabled addons. + return API.getEnabledAddons(resp => App.vent.trigger("navMain:refresh")); + }); + // Addons loaded to cache, hopefully before required + + + // Request is addon enabled. + App.reqres.setHandler('addon:isEnabled', (filter, callback) => API.isAddOnEnabled(filter, function(enabled) { if (callback) { return callback(enabled); } })); + + // Request is addon enabled. + App.reqres.setHandler('addon:enabled:addons', callback => API.getEnabledAddons(function(addons) { if (callback) { return callback(addons); } })); + + // Request excluded breadcrumb paths + App.reqres.setHandler('addon:excludedPaths', function(addonId) { + let excludedPaths; + if (addonId != null) { + excludedPaths = App.request("addon:excludedPaths:" + addonId); + } + if ((excludedPaths == null)) { + excludedPaths = []; + } + return excludedPaths; + }); + + // Request excluded breadcrumb paths + return App.reqres.setHandler('addon:search:enabled', function() { + let settings = config.get('app', "addOnsSearchSettings", []); + settings = settings.concat(App.request('searchAddons:entities').toJSON()); + return settings; + }); +}); diff --git a/src/js/apps/addon/addon_app.js.coffee b/src/js/apps/addon/addon_app.js.coffee deleted file mode 100644 index 6554fd74..00000000 --- a/src/js/apps/addon/addon_app.js.coffee +++ /dev/null @@ -1,91 +0,0 @@ -@Kodi.module "AddonApp", (AddonApp, App, Backbone, Marionette, $, _) -> - - class AddonApp.Router extends App.Router.Base - appRoutes: - "addons/:type" : "list" - "addon/execute/:id" : "execute" - - API = - - # Get list page - list: (type) -> - new AddonApp.List.Controller - type: type - - # Execute addon - execute: (id) -> - API.addonController().executeAddon id, helpers.url.params(), () -> - Kodi.execute "notification:show", tr('Executed addon') - App.navigate "addons/executable", {trigger: true} - - # Get the addon controller - addonController: -> - App.request "command:kodi:controller", 'auto', 'AddOn' - - # Get all enabled addons - getEnabledAddons: (callback) -> - addons = [] - # If loaded, return from static - if config.getLocal("addOnsLoaded", false) is true - addons = config.getLocal("addOnsEnabled", []) - if callback - callback addons - else - # Not loaded, lookup and set to static - @addonController().getEnabledAddons true, (addons) -> - config.setLocal "addOnsEnabled", addons - config.setLocal "addOnsLoaded", true - config.set 'app', "addOnsSearchSettings", API.getSearchSettings(addons) - if callback - callback addons - addons - - ## Get search settings - getSearchSettings: (addons) -> - searchSettings = [] - for addon in addons - searchSetting = App.request("addon:search:settings:" + addon.addonid) - if searchSetting - if not _.isArray(searchSetting) - searchSetting = [searchSetting] - for i, set of searchSetting - set.id = addon.addonid + '.' + i - searchSettings.push set - searchSettings - - # Given a filter check if addon is enabled, if addons not loaded returns false. - isAddOnEnabled: (filter = {}, callback) -> - addons = @getEnabledAddons callback - _.findWhere addons, filter - - - App.on "before:start", -> - new AddonApp.Router - controller: API - # Store enabled addons. - API.getEnabledAddons (resp) -> - App.vent.trigger "navMain:refresh" - # Addons loaded to cache, hopefully before required - - - # Request is addon enabled. - App.reqres.setHandler 'addon:isEnabled', (filter, callback) -> - API.isAddOnEnabled filter, (enabled) -> if callback then callback(enabled) - - # Request is addon enabled. - App.reqres.setHandler 'addon:enabled:addons', (callback) -> - API.getEnabledAddons (addons) -> if callback then callback(addons) - - # Request excluded breadcrumb paths - App.reqres.setHandler 'addon:excludedPaths', (addonId) -> - if addonId? - excludedPaths = App.request "addon:excludedPaths:" + addonId - if not excludedPaths? - excludedPaths = [] - excludedPaths - - # Request excluded breadcrumb paths - App.reqres.setHandler 'addon:search:enabled', -> - settings = config.get 'app', "addOnsSearchSettings", [] - settings = settings.concat App.request('searchAddons:entities').toJSON() - settings diff --git a/src/js/apps/addon/googlemusic/addon_googlemusic_app.js b/src/js/apps/addon/googlemusic/addon_googlemusic_app.js new file mode 100644 index 00000000..8d81d332 --- /dev/null +++ b/src/js/apps/addon/googlemusic/addon_googlemusic_app.js @@ -0,0 +1,26 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.GoogleMusic", function(GoogleMusic, App, Backbone, Marionette, $, _) { + + const API = { + + addonId: 'plugin.audio.googlemusic.exp', + + searchAddon: { + id: this.addonId, + url: 'plugin://plugin.audio.googlemusic.exp/?path=search_result&type=track&query=[QUERY]', + title: 'GoogleMusic', + media: 'music' + } + }; + + + //# Provide search settings + return App.reqres.setHandler("addon:search:settings:" + API.addonId, () => API.searchAddon); +}); diff --git a/src/js/apps/addon/googlemusic/addon_googlemusic_app.js.coffee b/src/js/apps/addon/googlemusic/addon_googlemusic_app.js.coffee deleted file mode 100644 index 50248ebf..00000000 --- a/src/js/apps/addon/googlemusic/addon_googlemusic_app.js.coffee +++ /dev/null @@ -1,16 +0,0 @@ -@Kodi.module "AddonApp.GoogleMusic", (GoogleMusic, App, Backbone, Marionette, $, _) -> - - API = - - addonId: 'plugin.audio.googlemusic.exp' - - searchAddon: - id: @addonId - url: 'plugin://plugin.audio.googlemusic.exp/?path=search_result&type=track&query=[QUERY]' - title: 'GoogleMusic' - media: 'music' - - - ## Provide search settings - App.reqres.setHandler "addon:search:settings:" + API.addonId, -> - API.searchAddon diff --git a/src/js/apps/addon/list/list_controller.js b/src/js/apps/addon/list/list_controller.js new file mode 100644 index 00000000..893f6b6c --- /dev/null +++ b/src/js/apps/addon/list/list_controller.js @@ -0,0 +1,49 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.List", function(List, App, Backbone, Marionette, $, _) { + + + //# Main controller + return List.Controller = class Controller extends App.Controllers.Base { + + //# Setup + initialize(options) { + this.type = options.type; + return App.request("addon:entities", this.type, collection => { + collection.sortCollection('name'); + this.layout = this.getLayoutView(collection); + this.listenTo(this.layout, "show", () => { + this.renderList(collection); + return this.renderSidebar(); + }); + return App.regionContent.show(this.layout); + }); + } + + //# Render items + renderList(collection) { + const view = new List.Addons({ + collection}); + return this.layout.regionContent.show(view); + } + + //# Get the base layout + getLayoutView(collection) { + return new List.ListLayout({ + collection}); + } + + //# Add side nav + renderSidebar() { + const settingsNavView = App.request("navMain:children:show", 'addons/all', 'Add-ons'); + return this.layout.regionSidebarFirst.show(settingsNavView); + } + }; +}); + diff --git a/src/js/apps/addon/list/list_controller.js.coffee b/src/js/apps/addon/list/list_controller.js.coffee deleted file mode 100644 index fbbbe52b..00000000 --- a/src/js/apps/addon/list/list_controller.js.coffee +++ /dev/null @@ -1,33 +0,0 @@ -@Kodi.module "AddonApp.List", (List, App, Backbone, Marionette, $, _) -> - - - ## Main controller - class List.Controller extends App.Controllers.Base - - ## Setup - initialize: (options) -> - @type = options.type - App.request "addon:entities", @type, (collection) => - collection.sortCollection 'name' - @layout = @getLayoutView collection - @listenTo @layout, "show", => - @renderList collection - @renderSidebar() - App.regionContent.show @layout - - ## Render items - renderList: (collection) -> - view = new List.Addons - collection: collection - @layout.regionContent.show view - - ## Get the base layout - getLayoutView: (collection) -> - new List.ListLayout - collection: collection - - ## Add side nav - renderSidebar: -> - settingsNavView = App.request "navMain:children:show", 'addons/all', 'Add-ons' - @layout.regionSidebarFirst.show settingsNavView - diff --git a/src/js/apps/addon/list/list_view.js b/src/js/apps/addon/list/list_view.js new file mode 100644 index 00000000..477e7885 --- /dev/null +++ b/src/js/apps/addon/list/list_view.js @@ -0,0 +1,39 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.ListLayout = class ListLayout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "addon-list"; + } + }); + Cls.initClass(); + + Cls = (List.Teaser = class Teaser extends App.Views.CardView { + static initClass() { + this.prototype.tagName = "li"; + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.Addons = class Addons extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = List.Teaser; + this.prototype.emptyView = App.Views.EmptyViewResults; + this.prototype.tagName = "ul"; + this.prototype.sort = 'name'; + this.prototype.className = "card-grid--square"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/addon/list/list_view.js.coffee b/src/js/apps/addon/list/list_view.js.coffee deleted file mode 100644 index d80b0f99..00000000 --- a/src/js/apps/addon/list/list_view.js.coffee +++ /dev/null @@ -1,14 +0,0 @@ -@Kodi.module "AddonApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.ListLayout extends App.Views.LayoutWithSidebarFirstView - className: "addon-list" - - class List.Teaser extends App.Views.CardView - tagName: "li" - - class List.Addons extends App.Views.CollectionView - childView: List.Teaser - emptyView: App.Views.EmptyViewResults - tagName: "ul" - sort: 'name' - className: "card-grid--square" diff --git a/src/js/apps/addon/mixcloud/addon_mixcloud_app.js b/src/js/apps/addon/mixcloud/addon_mixcloud_app.js new file mode 100644 index 00000000..e9b97159 --- /dev/null +++ b/src/js/apps/addon/mixcloud/addon_mixcloud_app.js @@ -0,0 +1,25 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.MixCloud", function(MixCloud, App, Backbone, Marionette, $, _) { + + const API = { + + addonId: 'plugin.audio.mixcloud', + + searchAddon: { + id: this.addonId, + url: 'plugin://plugin.audio.mixcloud/?mode=30&key=cloudcast&offset=0&query=[QUERY]', + title: 'MixCloud', + media: 'music' + } + }; + + //# Provide search settings + return App.reqres.setHandler("addon:search:settings:" + API.addonId, () => API.searchAddon); +}); diff --git a/src/js/apps/addon/mixcloud/addon_mixcloud_app.js.coffee b/src/js/apps/addon/mixcloud/addon_mixcloud_app.js.coffee deleted file mode 100644 index 452d8650..00000000 --- a/src/js/apps/addon/mixcloud/addon_mixcloud_app.js.coffee +++ /dev/null @@ -1,15 +0,0 @@ -@Kodi.module "AddonApp.MixCloud", (MixCloud, App, Backbone, Marionette, $, _) -> - - API = - - addonId: 'plugin.audio.mixcloud' - - searchAddon: - id: @addonId - url: 'plugin://plugin.audio.mixcloud/?mode=30&key=cloudcast&offset=0&query=[QUERY]' - title: 'MixCloud' - media: 'music' - - ## Provide search settings - App.reqres.setHandler "addon:search:settings:" + API.addonId, -> - API.searchAddon diff --git a/src/js/apps/addon/pvr/addons_pvr_ap.js b/src/js/apps/addon/pvr/addons_pvr_ap.js new file mode 100644 index 00000000..79f29dc3 --- /dev/null +++ b/src/js/apps/addon/pvr/addons_pvr_ap.js @@ -0,0 +1,20 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.Pvr", function(Pvr, App, Backbone, Marionette, $, _) { + + const API = { + + isEnabled() { + return App.request("addon:isEnabled", {type: 'kodi.pvrclient'}); + } + }; + + //# Is a pvr client enabled (used for menu visibility). + return App.reqres.setHandler("addon:pvr:enabled", () => API.isEnabled()); +}); diff --git a/src/js/apps/addon/pvr/addons_pvr_ap.js.coffee b/src/js/apps/addon/pvr/addons_pvr_ap.js.coffee deleted file mode 100644 index 311b9968..00000000 --- a/src/js/apps/addon/pvr/addons_pvr_ap.js.coffee +++ /dev/null @@ -1,10 +0,0 @@ -@Kodi.module "AddonApp.Pvr", (Pvr, App, Backbone, Marionette, $, _) -> - - API = - - isEnabled: -> - App.request "addon:isEnabled", {type: 'kodi.pvrclient'} - - ## Is a pvr client enabled (used for menu visibility). - App.reqres.setHandler "addon:pvr:enabled", -> - API.isEnabled() diff --git a/src/js/apps/addon/radio/addon_radio_app.js b/src/js/apps/addon/radio/addon_radio_app.js new file mode 100644 index 00000000..85744d1a --- /dev/null +++ b/src/js/apps/addon/radio/addon_radio_app.js @@ -0,0 +1,26 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.Radio", function(Radio, App, Backbone, Marionette, $, _) { + + const API = { + + addonId: 'plugin.audio.radio_de', + + searchAddon: { + id: this.addonId, + url: 'plugin://plugin.audio.radio_de/stations/search/[QUERY]', + title: 'Radio', + media: 'music' + } + }; + + + //# Provide search settings + return App.reqres.setHandler("addon:search:settings:" + API.addonId, () => API.searchAddon); +}); diff --git a/src/js/apps/addon/radio/addon_radio_app.js.coffee b/src/js/apps/addon/radio/addon_radio_app.js.coffee deleted file mode 100644 index db168f14..00000000 --- a/src/js/apps/addon/radio/addon_radio_app.js.coffee +++ /dev/null @@ -1,16 +0,0 @@ -@Kodi.module "AddonApp.Radio", (Radio, App, Backbone, Marionette, $, _) -> - - API = - - addonId: 'plugin.audio.radio_de' - - searchAddon: - id: @addonId - url: 'plugin://plugin.audio.radio_de/stations/search/[QUERY]' - title: 'Radio' - media: 'music' - - - ## Provide search settings - App.reqres.setHandler "addon:search:settings:" + API.addonId, -> - API.searchAddon diff --git a/src/js/apps/addon/soundcloud/addon_soundcloud_app.js b/src/js/apps/addon/soundcloud/addon_soundcloud_app.js new file mode 100644 index 00000000..081175a2 --- /dev/null +++ b/src/js/apps/addon/soundcloud/addon_soundcloud_app.js @@ -0,0 +1,25 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.SoundCloud", function(Soundcloud, App, Backbone, Marionette, $, _) { + + const API = { + + addonId: 'plugin.audio.soundcloud', + + searchAddon: { + id: this.addonId, + url: 'plugin://plugin.audio.soundcloud/search/?query=[QUERY]', + title: 'SoundCloud', + media: 'music' + } + }; + + //# Provide search settings + return App.reqres.setHandler("addon:search:settings:" + API.addonId, () => API.searchAddon); +}); diff --git a/src/js/apps/addon/soundcloud/addon_soundcloud_app.js.coffee b/src/js/apps/addon/soundcloud/addon_soundcloud_app.js.coffee deleted file mode 100644 index 4c72c390..00000000 --- a/src/js/apps/addon/soundcloud/addon_soundcloud_app.js.coffee +++ /dev/null @@ -1,15 +0,0 @@ -@Kodi.module "AddonApp.SoundCloud", (Soundcloud, App, Backbone, Marionette, $, _) -> - - API = - - addonId: 'plugin.audio.soundcloud' - - searchAddon: - id: @addonId - url: 'plugin://plugin.audio.soundcloud/search/?query=[QUERY]' - title: 'SoundCloud' - media: 'music' - - ## Provide search settings - App.reqres.setHandler "addon:search:settings:" + API.addonId, -> - API.searchAddon diff --git a/src/js/apps/addon/youtube/addon_youtube_app.js b/src/js/apps/addon/youtube/addon_youtube_app.js new file mode 100644 index 00000000..97af4312 --- /dev/null +++ b/src/js/apps/addon/youtube/addon_youtube_app.js @@ -0,0 +1,42 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AddonApp.YouTube", function(Soundcloud, App, Backbone, Marionette, $, _) { + + const API = { + + addonId: 'plugin.video.youtube', + + searchAddon: { + url: 'plugin://plugin.video.youtube/search/?q=[QUERY]', + title: 'YouTube', + media: 'video' + } + }; + + //# Provide search settings + App.reqres.setHandler("addon:search:settings:" + API.addonId, () => API.searchAddon); + + //# + //# Get any excluded paths that should not appear in breadcrumbs. + //# + //# Called via App.request("addon:excludedPaths", addonId) + //# + //# Eg. the youtube path "special" and "kodion" is used but both are + //# invalid paths when requesting that url, yet they appear in breadcrumbs + //# because they are part of the base url for other pages. + //# + //# Note the naming convention of the handler has the plugin id in it. + //# + return App.reqres.setHandler("addon:excludedPaths:" + API.addonId, () => [ + 'plugin://plugin.video.youtube/special/', + 'plugin://plugin.video.youtube/kodion/search/', + 'plugin://plugin.video.youtube/kodion/', + 'plugin://plugin.video.youtube/channel/', + ]); +}); diff --git a/src/js/apps/addon/youtube/addon_youtube_app.js.coffee b/src/js/apps/addon/youtube/addon_youtube_app.js.coffee deleted file mode 100644 index fe8be27c..00000000 --- a/src/js/apps/addon/youtube/addon_youtube_app.js.coffee +++ /dev/null @@ -1,33 +0,0 @@ -@Kodi.module "AddonApp.YouTube", (Soundcloud, App, Backbone, Marionette, $, _) -> - - API = - - addonId: 'plugin.video.youtube' - - searchAddon: - url: 'plugin://plugin.video.youtube/search/?q=[QUERY]' - title: 'YouTube' - media: 'video' - - ## Provide search settings - App.reqres.setHandler "addon:search:settings:" + API.addonId, -> - API.searchAddon - - ## - ## Get any excluded paths that should not appear in breadcrumbs. - ## - ## Called via App.request("addon:excludedPaths", addonId) - ## - ## Eg. the youtube path "special" and "kodion" is used but both are - ## invalid paths when requesting that url, yet they appear in breadcrumbs - ## because they are part of the base url for other pages. - ## - ## Note the naming convention of the handler has the plugin id in it. - ## - App.reqres.setHandler "addon:excludedPaths:" + API.addonId, -> - [ - 'plugin://plugin.video.youtube/special/', - 'plugin://plugin.video.youtube/kodion/search/', - 'plugin://plugin.video.youtube/kodion/', - 'plugin://plugin.video.youtube/channel/', - ] diff --git a/src/js/apps/album/album_app.js b/src/js/apps/album/album_app.js new file mode 100644 index 00000000..094c0c38 --- /dev/null +++ b/src/js/apps/album/album_app.js @@ -0,0 +1,72 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp", function(AlbumApp, App, Backbone, Marionette, $, _) { + + const Cls = (AlbumApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "music/albums" : "list", + "music/album/:id" : "view" + }; + } + }); + Cls.initClass(); + + const API = { + + list() { + return new AlbumApp.List.Controller(); + }, + + view(id) { + return new AlbumApp.Show.Controller({ + id}); + }, + + action(op, view) { + const { + model + } = view; + const playlist = App.request("command:kodi:controller", 'audio', 'PlayList'); + switch (op) { + case 'play': + return App.execute("command:audio:play", 'albumid', model.get('albumid')); + case 'add': + return playlist.add('albumid', model.get('albumid')); + case 'localadd': + return App.execute("localplaylist:addentity", 'albumid', model.get('albumid')); + case 'localplay': + var localPlaylist = App.request("command:local:controller", 'audio', 'PlayList'); + return localPlaylist.play('albumid', model.get('albumid')); + default: + } + } + }; + //# nothing + + + App.on("before:start", () => new AlbumApp.Router({ + controller: API})); + + App.commands.setHandler('album:action', (op, model) => API.action(op, model)); + + App.reqres.setHandler('album:action:items', () => ({ + actions: {thumbs: 'Thumbs up'}, + menu: {add: tr('Queue in Kodi'), 'divider-1': '', localadd: tr('Add to playlist'), localplay: tr('Play in browser'), 'divider-2': '', edit: tr('Edit')} + })); + + return App.commands.setHandler('album:edit', function(model) { + const loadedModel = App.request("album:entity", model.get('id')); + return App.execute("when:entity:fetched", loadedModel, () => { + return new AlbumApp.Edit.Controller({ + model: loadedModel}); + }); + }); +}); diff --git a/src/js/apps/album/album_app.js.coffee b/src/js/apps/album/album_app.js.coffee deleted file mode 100644 index c15642f6..00000000 --- a/src/js/apps/album/album_app.js.coffee +++ /dev/null @@ -1,51 +0,0 @@ -@Kodi.module "AlbumApp", (AlbumApp, App, Backbone, Marionette, $, _) -> - - class AlbumApp.Router extends App.Router.Base - appRoutes: - "music/albums" : "list" - "music/album/:id" : "view" - - API = - - list: -> - new AlbumApp.List.Controller() - - view: (id) -> - new AlbumApp.Show.Controller - id: id - - action: (op, view) -> - model = view.model - playlist = App.request "command:kodi:controller", 'audio', 'PlayList' - switch op - when 'play' - App.execute "command:audio:play", 'albumid', model.get('albumid') - when 'add' - playlist.add 'albumid', model.get('albumid') - when 'localadd' - App.execute "localplaylist:addentity", 'albumid', model.get('albumid') - when 'localplay' - localPlaylist = App.request "command:local:controller", 'audio', 'PlayList' - localPlaylist.play 'albumid', model.get('albumid') - else - ## nothing - - - App.on "before:start", -> - new AlbumApp.Router - controller: API - - App.commands.setHandler 'album:action', (op, model) -> - API.action op, model - - App.reqres.setHandler 'album:action:items', -> - { - actions: {thumbs: 'Thumbs up'} - menu: {add: tr('Queue in Kodi'), 'divider-1': '', localadd: tr('Add to playlist'), localplay: tr('Play in browser'), 'divider-2': '', edit: tr('Edit')} - } - - App.commands.setHandler 'album:edit', (model) -> - loadedModel = App.request "album:entity", model.get('id') - App.execute "when:entity:fetched", loadedModel, => - new AlbumApp.Edit.Controller - model: loadedModel diff --git a/src/js/apps/album/edit/edit_controller.js b/src/js/apps/album/edit/edit_controller.js new file mode 100644 index 00000000..f27a92b8 --- /dev/null +++ b/src/js/apps/album/edit/edit_controller.js @@ -0,0 +1,68 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp.Edit", function(Edit, App, Backbone, Marionette, $, _) { + + return Edit.Controller = class Controller extends App.Controllers.Base { + + initialize() { + let form; + this.model = this.getOption('model'); + const options = { + titleHtml: '' + tr('Edit') + '' + this.model.escape('title'), + form: this.getStructure(), + formState: this.model.attributes, + config: { + attributes: {class: 'edit-form'}, + editForm: true, + tabs: true, + callback: (data, formView) => { + return this.saveCallback(data, formView); + } + } + }; + return form = App.request("form:popup:wrapper", options); + } + + getStructure() { + return [ + { + title: 'General', + id: 'general', + children:[ + {id: 'title', title: tr('Title'), type: 'textfield'}, + {id: 'artist', title: tr('Artist'), type: 'textfield', format: 'array.string'}, + {id: 'description', title: tr('Description'), type: 'textarea'}, + {id: 'albumlabel', title: tr('Label'), type: 'textfield'}, + {id: 'year', title: tr('Year'), type: 'number', format: 'integer', attributes: {class: 'half-width', step: 1, min: 0, max: 9999}}, + {id: 'rating', title: tr('Rating'), type: 'number', format: 'float', attributes: {class: 'half-width', step: 0.1, min: 0, max: 10}, suffix: '
'}, + ] + }, + { + title: 'Tags', + id: 'tags', + children:[ + {id: 'genre', title: tr('Genres'), type: 'textfield', format: 'array.string'}, + {id: 'style', title: tr('Styles'), type: 'textfield', format: 'array.string'}, + {id: 'theme', title: tr('Themes'), type: 'textarea', format: 'array.string'}, + {id: 'mood', title: tr('Moods'), type: 'textarea', format: 'array.string'}, + ] + } + ]; + } + + //# Save the settings to Kodi + saveCallback(data, formView) { + const controller = App.request("command:kodi:controller", 'audio', 'AudioLibrary'); + return controller.setAlbumDetails(this.model.get('id'), data, () => { + Kodi.vent.trigger('entity:kodi:update', this.model.get('uid')); + return Kodi.execute("notification:show", t.sprintf(tr("Updated %1$s details"), 'album')); + }); + } + }; +}); diff --git a/src/js/apps/album/edit/edit_controller.js.coffee b/src/js/apps/album/edit/edit_controller.js.coffee deleted file mode 100644 index 7f60614f..00000000 --- a/src/js/apps/album/edit/edit_controller.js.coffee +++ /dev/null @@ -1,51 +0,0 @@ -@Kodi.module "AlbumApp.Edit", (Edit, App, Backbone, Marionette, $, _) -> - - class Edit.Controller extends App.Controllers.Base - - initialize: -> - @model = @getOption('model') - options = { - titleHtml: '' + tr('Edit') + '' + @model.escape('title') - form: @getStructure() - formState: @model.attributes - config: - attributes: {class: 'edit-form'} - editForm: true - tabs: true - callback: (data, formView) => - @saveCallback(data, formView) - } - form = App.request "form:popup:wrapper", options - - getStructure: -> - [ - { - title: 'General' - id: 'general' - children:[ - {id: 'title', title: tr('Title'), type: 'textfield'}, - {id: 'artist', title: tr('Artist'), type: 'textfield', format: 'array.string'}, - {id: 'description', title: tr('Description'), type: 'textarea'}, - {id: 'albumlabel', title: tr('Label'), type: 'textfield'}, - {id: 'year', title: tr('Year'), type: 'number', format: 'integer', attributes: {class: 'half-width', step: 1, min: 0, max: 9999}}, - {id: 'rating', title: tr('Rating'), type: 'number', format: 'float', attributes: {class: 'half-width', step: 0.1, min: 0, max: 10}, suffix: '
'}, - ] - } - { - title: 'Tags' - id: 'tags' - children:[ - {id: 'genre', title: tr('Genres'), type: 'textfield', format: 'array.string'}, - {id: 'style', title: tr('Styles'), type: 'textfield', format: 'array.string'}, - {id: 'theme', title: tr('Themes'), type: 'textarea', format: 'array.string'}, - {id: 'mood', title: tr('Moods'), type: 'textarea', format: 'array.string'}, - ] - } - ] - - ## Save the settings to Kodi - saveCallback: (data, formView) -> - controller = App.request "command:kodi:controller", 'audio', 'AudioLibrary' - controller.setAlbumDetails @model.get('id'), data, => - Kodi.vent.trigger 'entity:kodi:update', @model.get('uid') - Kodi.execute "notification:show", t.sprintf(tr("Updated %1$s details"), 'album') diff --git a/src/js/apps/album/list/list_controller.js b/src/js/apps/album/list/list_controller.js new file mode 100644 index 00000000..0aa6e958 --- /dev/null +++ b/src/js/apps/album/list/list_controller.js @@ -0,0 +1,93 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp.List", function(List, App, Backbone, Marionette, $, _) { + + var API = { + + bindTriggers(view) { + App.listenTo(view, 'childview:album:play', (list, item) => App.execute('album:action', 'play', item)); + App.listenTo(view, 'childview:album:add', (list, item) => App.execute('album:action', 'add', item)); + App.listenTo(view, 'childview:album:localadd', (list, item) => App.execute('album:action', 'localadd', item)); + App.listenTo(view, 'childview:album:localplay', (list, item) => App.execute('album:action', 'localplay', item)); + return App.listenTo(view, 'childview:album:edit', (parent, item) => App.execute('album:edit', item.model)); + }, + + getAlbumsList(collection) { + const view = new List.Albums({ + collection}); + API.bindTriggers(view); + return view; + } + }; + + + //# Main controller + List.Controller = class Controller extends App.Controllers.Base { + + initialize() { + const collection = App.request("album:entities"); + return App.execute("when:entity:fetched", collection, () => { + + //# Set available filters + collection.availableFilters = this.getAvailableFilters(); + + //# Top level menu path for filters + collection.sectionId = 'music'; + + //# If present set initial filter via url + App.request('filter:init', this.getAvailableFilters()); + + this.layout = this.getLayoutView(collection); + + //# Render subviews on show + this.listenTo(this.layout, "show", () => { + this.renderList(collection); + return this.getFiltersView(collection); + }); + return App.regionContent.show(this.layout); + }); + } + + getLayoutView(collection) { + return new List.ListLayout({ + collection}); + } + + //# Available sort and filter options + //# See filter_app.js for available options + getAvailableFilters() { + return { + sort: ['label', 'year', 'rating', 'artist', 'dateadded', 'random'], + filter: ['year', 'genre', 'style', 'albumlabel', 'thumbsUp'] + }; + } + + //# Apply filter view and provide a handler for applying changes + getFiltersView(collection) { + const filters = App.request('filter:show', collection); + this.layout.regionSidebarFirst.show(filters); + //# Listen to when the filters change and re-render. + return this.listenTo(filters, "filter:changed", () => { + return this.renderList(collection); + }); + } + + //# Get the list view with filters applied. + renderList(collection) { + App.execute("loading:show:view", this.layout.regionContent); + const filteredCollection = App.request('filter:apply:entities', collection); + const view = API.getAlbumsList(filteredCollection); + return this.layout.regionContent.show(view); + } + }; + + + //# handler for other modules to get a list view. + return App.reqres.setHandler("album:list:view", collection => API.getAlbumsList(collection)); +}); diff --git a/src/js/apps/album/list/list_controller.js.coffee b/src/js/apps/album/list/list_controller.js.coffee deleted file mode 100644 index 43c77e0d..00000000 --- a/src/js/apps/album/list/list_controller.js.coffee +++ /dev/null @@ -1,76 +0,0 @@ -@Kodi.module "AlbumApp.List", (List, App, Backbone, Marionette, $, _) -> - - API = - - bindTriggers: (view) -> - App.listenTo view, 'childview:album:play', (list, item) -> - App.execute 'album:action', 'play', item - App.listenTo view, 'childview:album:add', (list, item) -> - App.execute 'album:action', 'add', item - App.listenTo view, 'childview:album:localadd', (list, item) -> - App.execute 'album:action', 'localadd', item - App.listenTo view, 'childview:album:localplay', (list, item) -> - App.execute 'album:action', 'localplay', item - App.listenTo view, 'childview:album:edit', (parent, item) -> - App.execute 'album:edit', item.model - - getAlbumsList: (collection) -> - view = new List.Albums - collection: collection - API.bindTriggers(view) - view - - - ## Main controller - class List.Controller extends App.Controllers.Base - - initialize: -> - collection = App.request "album:entities" - App.execute "when:entity:fetched", collection, => - - ## Set available filters - collection.availableFilters = @getAvailableFilters() - - ## Top level menu path for filters - collection.sectionId = 'music' - - ## If present set initial filter via url - App.request 'filter:init', @getAvailableFilters() - - @layout = @getLayoutView collection - - ## Render subviews on show - @listenTo @layout, "show", => - @renderList collection - @getFiltersView collection - App.regionContent.show @layout - - getLayoutView: (collection) -> - new List.ListLayout - collection: collection - - ## Available sort and filter options - ## See filter_app.js for available options - getAvailableFilters: -> - sort: ['label', 'year', 'rating', 'artist', 'dateadded', 'random'] - filter: ['year', 'genre', 'style', 'albumlabel', 'thumbsUp'] - - ## Apply filter view and provide a handler for applying changes - getFiltersView: (collection) -> - filters = App.request 'filter:show', collection - @layout.regionSidebarFirst.show filters - ## Listen to when the filters change and re-render. - @listenTo filters, "filter:changed", => - @renderList collection - - ## Get the list view with filters applied. - renderList: (collection) -> - App.execute "loading:show:view", @layout.regionContent - filteredCollection = App.request 'filter:apply:entities', collection - view = API.getAlbumsList filteredCollection - @layout.regionContent.show view - - - ## handler for other modules to get a list view. - App.reqres.setHandler "album:list:view", (collection) -> - API.getAlbumsList collection diff --git a/src/js/apps/album/list/list_view.js b/src/js/apps/album/list/list_view.js new file mode 100644 index 00000000..6892310a --- /dev/null +++ b/src/js/apps/album/list/list_view.js @@ -0,0 +1,66 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.ListLayout = class ListLayout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "album-list with-filters"; + } + }); + Cls.initClass(); + + Cls = (List.AlbumTeaser = class AlbumTeaser extends App.Views.CardView { + static initClass() { + this.prototype.triggers = { + "click .play" : "album:play", + "click .dropdown .add" : "album:add", + "click .dropdown .localadd" : "album:localadd", + "click .dropdown .localplay" : "album:localplay", + "click .dropdown .edit" : "album:edit" + }; + } + initialize() { + super.initialize(...arguments); + if (this.model != null) { + this.setMeta(); + return this.model.set(App.request('album:action:items')); + } + } + setMeta() { + if (this.model) { + return this.model.set({subtitleHtml: this.themeLink(this.model.get('artist'), helpers.url.get('artist', this.model.get('artistid')))}); + } + } + }); + Cls.initClass(); + + Cls = (List.Empty = class Empty extends App.Views.EmptyViewResults { + static initClass() { + this.prototype.tagName = "li"; + this.prototype.className = "album-empty-result"; + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.Albums = class Albums extends App.Views.VirtualListView { + static initClass() { + this.prototype.childView = List.AlbumTeaser; + this.prototype.emptyView = List.Empty; + this.prototype.tagName = "ul"; + this.prototype.sort = 'artist'; + this.prototype.className = "card-grid--square"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/album/list/list_view.js.coffee b/src/js/apps/album/list/list_view.js.coffee deleted file mode 100644 index e5f4f3cd..00000000 --- a/src/js/apps/album/list/list_view.js.coffee +++ /dev/null @@ -1,31 +0,0 @@ -@Kodi.module "AlbumApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.ListLayout extends App.Views.LayoutWithSidebarFirstView - className: "album-list with-filters" - - class List.AlbumTeaser extends App.Views.CardView - triggers: - "click .play" : "album:play" - "click .dropdown .add" : "album:add" - "click .dropdown .localadd" : "album:localadd" - "click .dropdown .localplay" : "album:localplay" - "click .dropdown .edit" : "album:edit" - initialize: -> - super arguments... - if @model? - @setMeta() - @model.set(App.request('album:action:items')) - setMeta: -> - if @model - @model.set subtitleHtml: @themeLink @model.get('artist'), helpers.url.get('artist', @model.get('artistid')) - - class List.Empty extends App.Views.EmptyViewResults - tagName: "li" - className: "album-empty-result" - - class List.Albums extends App.Views.VirtualListView - childView: List.AlbumTeaser - emptyView: List.Empty - tagName: "ul" - sort: 'artist' - className: "card-grid--square" diff --git a/src/js/apps/album/show/show_controller.js b/src/js/apps/album/show/show_controller.js new file mode 100644 index 00000000..8abed772 --- /dev/null +++ b/src/js/apps/album/show/show_controller.js @@ -0,0 +1,126 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + var API = { + + bindTriggers(view) { + App.listenTo(view, 'album:play', item => App.execute('album:action', 'play', item)); + App.listenTo(view, 'album:add', item => App.execute('album:action', 'add', item)); + App.listenTo(view, 'album:localadd', item => App.execute('album:action', 'localadd', item)); + App.listenTo(view, 'album:localplay', item => App.execute('album:action', 'localplay', item)); + return App.listenTo(view, 'album:edit', item => App.execute('album:edit', item.model)); + }, + + //# Return a set of albums with songs. + //# Songs is expected to be an array of song collections + //# keyed by albumid. The only thing that should be calling this is artists. + getAlbumsFromSongs(songs) { + const albumsCollectionView = new Show.WithSongsCollection(); + //# What happens when we add a child to this mofo + albumsCollectionView.on("add:child", albumView => { + return App.execute("when:entity:fetched", album, () => { + const { + model + } = albumView; + //# Add the teaser. + const teaser = new Show.AlbumTeaser({model}); + API.bindTriggers(teaser); + albumView.regionMeta.show(teaser); + //# Add the songs. + const songSet = _.findWhere(songs, {albumid: model.get('albumid')}); + const songView = App.request("song:list:view", songSet.songs); + return albumView.regionSongs.show(songView); + }); + }); + //# Loop over albums/song collections + for (var albumSet of songs) { + //# Get the album. + var album = App.request("album:entity", albumSet.albumid, { success(album) { + return albumsCollectionView.addChild(album, Show.WithSongsLayout); + } + } + ); + } + //# Return the collection view + return albumsCollectionView; + } + }; + + + //# When viewing a full page we call the controller + Show.Controller = class Controller extends App.Controllers.Base { + + //# The Album page. + initialize(options) { + const id = parseInt(options.id); + const album = App.request("album:entity", id); + //# Fetch the artist + return App.execute("when:entity:fetched", album, () => { + //# Get the layout. + this.layout = this.getLayoutView(album); + //# Ensure background removed when we leave. + this.listenTo(this.layout, "destroy", () => { + return App.execute("images:fanart:set", 'none'); + }); + //# Listen to the show of our layout. + this.listenTo(this.layout, "show", () => { + this.getMusic(id); + return this.getDetailsLayoutView(album); + }); + //# Add the layout to content. + return App.regionContent.show(this.layout); + }); + } + + //# Get the base layout + getLayoutView(album) { + return new Show.PageLayout({ + model: album}); + } + + //# Build the details layout. + getDetailsLayoutView(album) { + const headerLayout = new Show.HeaderLayout({model: album}); + this.listenTo(headerLayout, "show", () => { + const teaser = new Show.AlbumDetailTeaser({model: album}); + API.bindTriggers(teaser); + const detail = new Show.Details({model: album}); + this.listenTo(detail, "show", () => { + return API.bindTriggers(detail); + }); + headerLayout.regionSide.show(teaser); + return headerLayout.regionMeta.show(detail); + }); + return this.layout.regionHeader.show(headerLayout); + } + + + //# Get a list of all the music for this artist parsed into albums. + getMusic(id) { + const options = + {filter: {albumid: id}}; + //# Get all the songs and parse them into separate album collections. + const songs = App.request("song:entities", options); + return App.execute("when:entity:fetched", songs, () => { + const albumView = new Show.WithSongsLayout(); + const songView = App.request("song:list:view", songs); + this.listenTo(albumView, "show", () => { + return albumView.regionSongs.show(songView); + }); + return this.layout.regionContent.show(albumView); + }); + } + }; + + + //# Return a set of albums with songs. + return App.reqres.setHandler("albums:withsongs:view", songs => API.getAlbumsFromSongs(songs)); +}); + diff --git a/src/js/apps/album/show/show_controller.js.coffee b/src/js/apps/album/show/show_controller.js.coffee deleted file mode 100644 index 5894411d..00000000 --- a/src/js/apps/album/show/show_controller.js.coffee +++ /dev/null @@ -1,100 +0,0 @@ -@Kodi.module "AlbumApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - API = - - bindTriggers: (view) -> - App.listenTo view, 'album:play', (item) -> - App.execute 'album:action', 'play', item - App.listenTo view, 'album:add', (item) -> - App.execute 'album:action', 'add', item - App.listenTo view, 'album:localadd', (item) -> - App.execute 'album:action', 'localadd', item - App.listenTo view, 'album:localplay', (item) -> - App.execute 'album:action', 'localplay', item - App.listenTo view, 'album:edit', (item) -> - App.execute 'album:edit', item.model - - ## Return a set of albums with songs. - ## Songs is expected to be an array of song collections - ## keyed by albumid. The only thing that should be calling this is artists. - getAlbumsFromSongs: (songs) -> - albumsCollectionView = new Show.WithSongsCollection() - ## What happens when we add a child to this mofo - albumsCollectionView.on "add:child", (albumView) => - App.execute "when:entity:fetched", album, => - model = albumView.model - ## Add the teaser. - teaser = new Show.AlbumTeaser model: model - API.bindTriggers teaser - albumView.regionMeta.show teaser - ## Add the songs. - songSet = _.findWhere songs, {albumid: model.get('albumid')} - songView = App.request "song:list:view", songSet.songs - albumView.regionSongs.show songView - ## Loop over albums/song collections - for albumSet in songs - ## Get the album. - album = App.request "album:entity", albumSet.albumid, success: (album) -> - albumsCollectionView.addChild album, Show.WithSongsLayout - ## Return the collection view - albumsCollectionView - - - ## When viewing a full page we call the controller - class Show.Controller extends App.Controllers.Base - - ## The Album page. - initialize: (options) -> - id = parseInt options.id - album = App.request "album:entity", id - ## Fetch the artist - App.execute "when:entity:fetched", album, => - ## Get the layout. - @layout = @getLayoutView album - ## Ensure background removed when we leave. - @listenTo @layout, "destroy", => - App.execute "images:fanart:set", 'none' - ## Listen to the show of our layout. - @listenTo @layout, "show", => - @getMusic id - @getDetailsLayoutView album - ## Add the layout to content. - App.regionContent.show @layout - - ## Get the base layout - getLayoutView: (album) -> - new Show.PageLayout - model: album - - ## Build the details layout. - getDetailsLayoutView: (album) -> - headerLayout = new Show.HeaderLayout model: album - @listenTo headerLayout, "show", => - teaser = new Show.AlbumDetailTeaser model: album - API.bindTriggers teaser - detail = new Show.Details model: album - @listenTo detail, "show", => - API.bindTriggers detail - headerLayout.regionSide.show teaser - headerLayout.regionMeta.show detail - @layout.regionHeader.show headerLayout - - - ## Get a list of all the music for this artist parsed into albums. - getMusic: (id) -> - options = - filter: {albumid: id} - ## Get all the songs and parse them into separate album collections. - songs = App.request "song:entities", options - App.execute "when:entity:fetched", songs, => - albumView = new Show.WithSongsLayout() - songView = App.request "song:list:view", songs - @listenTo albumView, "show", => - albumView.regionSongs.show songView - @layout.regionContent.show albumView - - - ## Return a set of albums with songs. - App.reqres.setHandler "albums:withsongs:view", (songs) -> - API.getAlbumsFromSongs songs - diff --git a/src/js/apps/album/show/show_view.js b/src/js/apps/album/show/show_view.js new file mode 100644 index 00000000..fbc03a5e --- /dev/null +++ b/src/js/apps/album/show/show_view.js @@ -0,0 +1,89 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("AlbumApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + //# Album with songs. + + let Cls = (Show.WithSongsLayout = class WithSongsLayout extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/album/show/album_with_songs'; + this.prototype.className = 'album-wrapper'; + this.prototype.regions = { + regionMeta: '.region-album-meta', + regionSongs: '.region-album-songs' + }; + } + }); + Cls.initClass(); + + Cls = (Show.WithSongsCollection = class WithSongsCollection extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = Show.WithSongsLayout; + this.prototype.tagName = "div"; + this.prototype.sort = 'year'; + this.prototype.className = "albums-wrapper"; + } + }); + Cls.initClass(); + + //# Full page views. + + Cls = (Show.PageLayout = class PageLayout extends App.Views.LayoutWithHeaderView { + static initClass() { + this.prototype.className = 'album-show detail-container'; + } + }); + Cls.initClass(); + + Cls = (Show.HeaderLayout = class HeaderLayout extends App.Views.LayoutDetailsHeaderView { + static initClass() { + this.prototype.className = 'album-details'; + } + }); + Cls.initClass(); + + Cls = (Show.Details = class Details extends App.Views.DetailsItem { + static initClass() { + this.prototype.template = 'apps/album/show/details_meta'; + this.prototype.triggers = { + "click .play" : "album:play", + "click .add" : "album:add", + "click .localadd" : "album:localadd", + "click .localplay" : "album:localplay", + "click .edit" : "album:edit" + }; + } + }); + Cls.initClass(); + + Cls = (Show.AlbumTeaser = class AlbumTeaser extends App.AlbumApp.List.AlbumTeaser { + static initClass() { + this.prototype.tagName = "div"; + } + initialize() { + this.setMeta(); + return this.model.set(App.request('album:action:items')); + } + setMeta() { + return this.model.set({ + subtitleHtml: this.themeLink(this.model.get('year'), 'music/albums?year=' + this.model.get('year'))}); + } + attributes() { + return this.watchedAttributes('card-minimal'); + } + }); + Cls.initClass(); + + return (Show.AlbumDetailTeaser = class AlbumDetailTeaser extends Show.AlbumTeaser { + attributes() { + return this.watchedAttributes('card-detail'); + } + }); +}); diff --git a/src/js/apps/album/show/show_view.js.coffee b/src/js/apps/album/show/show_view.js.coffee deleted file mode 100644 index d760ad05..00000000 --- a/src/js/apps/album/show/show_view.js.coffee +++ /dev/null @@ -1,48 +0,0 @@ -@Kodi.module "AlbumApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - ## Album with songs. - - class Show.WithSongsLayout extends App.Views.LayoutView - template: 'apps/album/show/album_with_songs' - className: 'album-wrapper' - regions: - regionMeta: '.region-album-meta' - regionSongs: '.region-album-songs' - - class Show.WithSongsCollection extends App.Views.CollectionView - childView: Show.WithSongsLayout - tagName: "div" - sort: 'year' - className: "albums-wrapper" - - ## Full page views. - - class Show.PageLayout extends App.Views.LayoutWithHeaderView - className: 'album-show detail-container' - - class Show.HeaderLayout extends App.Views.LayoutDetailsHeaderView - className: 'album-details' - - class Show.Details extends App.Views.DetailsItem - template: 'apps/album/show/details_meta' - triggers: - "click .play" : "album:play" - "click .add" : "album:add" - "click .localadd" : "album:localadd" - "click .localplay" : "album:localplay" - "click .edit" : "album:edit" - - class Show.AlbumTeaser extends App.AlbumApp.List.AlbumTeaser - tagName: "div" - initialize: -> - @setMeta() - @model.set(App.request('album:action:items')) - setMeta: -> - @model.set - subtitleHtml: @themeLink @model.get('year'), 'music/albums?year=' + @model.get('year') - attributes: -> - @watchedAttributes 'card-minimal' - - class Show.AlbumDetailTeaser extends Show.AlbumTeaser - attributes: -> - @watchedAttributes 'card-detail' diff --git a/src/js/apps/artist/artist_app.js b/src/js/apps/artist/artist_app.js new file mode 100644 index 00000000..36482a02 --- /dev/null +++ b/src/js/apps/artist/artist_app.js @@ -0,0 +1,72 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp", function(ArtistApp, App, Backbone, Marionette, $, _) { + + const Cls = (ArtistApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "music/artists" : "list", + "music/artist/:id" : "view" + }; + } + }); + Cls.initClass(); + + const API = { + + list() { + return new ArtistApp.List.Controller(); + }, + + view(id) { + return new ArtistApp.Show.Controller({ + id}); + }, + + action(op, view) { + const { + model + } = view; + const playlist = App.request("command:kodi:controller", 'audio', 'PlayList'); + switch (op) { + case 'play': + return App.execute("command:audio:play", 'artistid', model.get('artistid')); + case 'add': + return playlist.add('artistid', model.get('artistid')); + case 'localadd': + return App.execute("localplaylist:addentity", 'artistid', model.get('artistid')); + case 'localplay': + var localPlaylist = App.request("command:local:controller", 'audio', 'PlayList'); + return localPlaylist.play('artistid', model.get('artistid')); + default: + } + } + }; + //# nothing + + + App.on("before:start", () => new ArtistApp.Router({ + controller: API})); + + App.commands.setHandler('artist:action', (op, model) => API.action(op, model)); + + App.reqres.setHandler('artist:action:items', () => ({ + actions: {thumbs: tr('Thumbs up')}, + menu: {add: tr('Queue in Kodi'), 'divider-1': '', localadd: tr('Add to playlist'), localplay: tr('Play in browser'), 'divider-1': '', edit: tr('Edit')} + })); + + return App.commands.setHandler('artist:edit', function(model) { + const loadedModel = App.request("artist:entity", model.get('id')); + return App.execute("when:entity:fetched", loadedModel, () => { + return new ArtistApp.Edit.Controller({ + model: loadedModel}); + }); + }); +}); diff --git a/src/js/apps/artist/artist_app.js.coffee b/src/js/apps/artist/artist_app.js.coffee deleted file mode 100644 index 09591c23..00000000 --- a/src/js/apps/artist/artist_app.js.coffee +++ /dev/null @@ -1,51 +0,0 @@ -@Kodi.module "ArtistApp", (ArtistApp, App, Backbone, Marionette, $, _) -> - - class ArtistApp.Router extends App.Router.Base - appRoutes: - "music/artists" : "list" - "music/artist/:id" : "view" - - API = - - list: -> - new ArtistApp.List.Controller() - - view: (id) -> - new ArtistApp.Show.Controller - id: id - - action: (op, view) -> - model = view.model - playlist = App.request "command:kodi:controller", 'audio', 'PlayList' - switch op - when 'play' - App.execute "command:audio:play", 'artistid', model.get('artistid') - when 'add' - playlist.add 'artistid', model.get('artistid') - when 'localadd' - App.execute "localplaylist:addentity", 'artistid', model.get('artistid') - when 'localplay' - localPlaylist = App.request "command:local:controller", 'audio', 'PlayList' - localPlaylist.play 'artistid', model.get('artistid') - else - ## nothing - - - App.on "before:start", -> - new ArtistApp.Router - controller: API - - App.commands.setHandler 'artist:action', (op, model) -> - API.action op, model - - App.reqres.setHandler 'artist:action:items', -> - { - actions: {thumbs: tr('Thumbs up')} - menu: {add: tr('Queue in Kodi'), 'divider-1': '', localadd: tr('Add to playlist'), localplay: tr('Play in browser'), 'divider-1': '', edit: tr('Edit')} - } - - App.commands.setHandler 'artist:edit', (model) -> - loadedModel = App.request "artist:entity", model.get('id') - App.execute "when:entity:fetched", loadedModel, => - new ArtistApp.Edit.Controller - model: loadedModel diff --git a/src/js/apps/artist/edit/edit_controller.js b/src/js/apps/artist/edit/edit_controller.js new file mode 100644 index 00000000..e4a8a79e --- /dev/null +++ b/src/js/apps/artist/edit/edit_controller.js @@ -0,0 +1,69 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp.Edit", function(Edit, App, Backbone, Marionette, $, _) { + + return Edit.Controller = class Controller extends App.Controllers.Base { + + initialize() { + let form; + this.model = this.getOption('model'); + const options = { + titleHtml: '' + tr('Edit') + '' + this.model.escape('artist'), + form: this.getStructure(), + formState: this.model.attributes, + config: { + attributes: {class: 'edit-form'}, + editForm: true, + tabs: true, + callback: (data, formView) => { + return this.saveCallback(data, formView); + } + } + }; + return form = App.request("form:popup:wrapper", options); + } + + getStructure() { + return [ + { + title: 'General', + id: 'general', + children:[ + {id: 'artist', title: tr('Title'), type: 'textfield'}, + {id: 'description', title: tr('Description'), type: 'textarea'}, + {id: 'formed', title: tr('Formed'), type: 'textfield', attributes: {class: 'half-width'}}, + {id: 'disbanded', title: tr('Disbanded'), type: 'textfield', attributes: {class: 'half-width'}, suffix: '
'}, + {id: 'born', title: tr('Born'), type: 'textfield', attributes: {class: 'half-width'}}, + {id: 'died', title: tr('Died'), type: 'textfield', attributes: {class: 'half-width'}, suffix: '
'}, + {id: 'yearsactive', title: tr('Years Active'), type: 'textfield', format: 'array.string'}, + ] + }, + { + title: 'Tags', + id: 'tags', + children:[ + {id: 'genre', title: tr('Genres'), type: 'textfield', format: 'array.string'}, + {id: 'style', title: tr('Styles'), type: 'textfield', format: 'array.string'}, + {id: 'instrument', title: tr('Instruments'), type: 'textarea', format: 'array.string'}, + {id: 'mood', title: tr('Moods'), type: 'textarea', format: 'array.string'}, + ] + } + ]; + } + + //# Save the settings to Kodi + saveCallback(data, formView) { + const controller = App.request("command:kodi:controller", 'audio', 'AudioLibrary'); + return controller.setArtistDetails(this.model.get('id'), data, () => { + Kodi.vent.trigger('entity:kodi:update', this.model.get('uid')); + return Kodi.execute("notification:show", t.sprintf(tr("Updated %1$s details"), 'album')); + }); + } + }; +}); diff --git a/src/js/apps/artist/edit/edit_controller.js.coffee b/src/js/apps/artist/edit/edit_controller.js.coffee deleted file mode 100644 index 77d217fb..00000000 --- a/src/js/apps/artist/edit/edit_controller.js.coffee +++ /dev/null @@ -1,52 +0,0 @@ -@Kodi.module "ArtistApp.Edit", (Edit, App, Backbone, Marionette, $, _) -> - - class Edit.Controller extends App.Controllers.Base - - initialize: -> - @model = @getOption('model') - options = { - titleHtml: '' + tr('Edit') + '' + @model.escape('artist') - form: @getStructure() - formState: @model.attributes - config: - attributes: {class: 'edit-form'} - editForm: true - tabs: true - callback: (data, formView) => - @saveCallback(data, formView) - } - form = App.request "form:popup:wrapper", options - - getStructure: -> - [ - { - title: 'General' - id: 'general' - children:[ - {id: 'artist', title: tr('Title'), type: 'textfield'}, - {id: 'description', title: tr('Description'), type: 'textarea'}, - {id: 'formed', title: tr('Formed'), type: 'textfield', attributes: {class: 'half-width'}}, - {id: 'disbanded', title: tr('Disbanded'), type: 'textfield', attributes: {class: 'half-width'}, suffix: '
'}, - {id: 'born', title: tr('Born'), type: 'textfield', attributes: {class: 'half-width'}}, - {id: 'died', title: tr('Died'), type: 'textfield', attributes: {class: 'half-width'}, suffix: '
'}, - {id: 'yearsactive', title: tr('Years Active'), type: 'textfield', format: 'array.string'}, - ] - } - { - title: 'Tags' - id: 'tags' - children:[ - {id: 'genre', title: tr('Genres'), type: 'textfield', format: 'array.string'}, - {id: 'style', title: tr('Styles'), type: 'textfield', format: 'array.string'}, - {id: 'instrument', title: tr('Instruments'), type: 'textarea', format: 'array.string'}, - {id: 'mood', title: tr('Moods'), type: 'textarea', format: 'array.string'}, - ] - } - ] - - ## Save the settings to Kodi - saveCallback: (data, formView) -> - controller = App.request "command:kodi:controller", 'audio', 'AudioLibrary' - controller.setArtistDetails @model.get('id'), data, => - Kodi.vent.trigger 'entity:kodi:update', @model.get('uid') - Kodi.execute "notification:show", t.sprintf(tr("Updated %1$s details"), 'album') diff --git a/src/js/apps/artist/list/list_controller.js b/src/js/apps/artist/list/list_controller.js new file mode 100644 index 00000000..31b8f416 --- /dev/null +++ b/src/js/apps/artist/list/list_controller.js @@ -0,0 +1,93 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp.List", function(List, App, Backbone, Marionette, $, _) { + + var API = { + + bindTriggers(view) { + App.listenTo(view, 'childview:artist:play', (list, item) => App.execute('artist:action', 'play', item)); + App.listenTo(view, 'childview:artist:add', (list, item) => App.execute('artist:action', 'add', item)); + App.listenTo(view, 'childview:artist:localadd', (list, item) => App.execute('artist:action', 'localadd', item)); + App.listenTo(view, 'childview:artist:localplay', (list, item) => App.execute('artist:action', 'localplay', item)); + return App.listenTo(view, 'childview:artist:edit', (parent, item) => App.execute('artist:edit', item.model)); + }, + + getArtistList(collection) { + const view = new List.Artists({ + collection}); + API.bindTriggers(view); + return view; + } + }; + + + //# Main controller + List.Controller = class Controller extends App.Controllers.Base { + + initialize() { + const collection = App.request("artist:entities"); + return App.execute("when:entity:fetched", collection, () => { + + //# Set available filters + collection.availableFilters = this.getAvailableFilters(); + + //# Top level menu path for filters + collection.sectionId = 'music'; + + //# If present set initial filter via url + App.request('filter:init', this.getAvailableFilters()); + + this.layout = this.getLayoutView(collection); + + this.listenTo(this.layout, "show", () => { + this.renderList(collection); + return this.getFiltersView(collection); + }); + + return App.regionContent.show(this.layout); + }); + } + + getLayoutView(collection) { + return new List.ListLayout({ + collection}); + } + + //# Available sort and filter options + //# See filter_app.js for available options + getAvailableFilters() { + return { + sort: ['label', 'random'], + filter: ['mood', 'genre', 'style', 'thumbsUp'] + }; + } + + //# Apply filter view and provide a handler for applying changes + getFiltersView(collection) { + const filters = App.request('filter:show', collection); + this.layout.regionSidebarFirst.show(filters); + //# Listen to when the filters change and re-render. + return this.listenTo(filters, "filter:changed", () => { + return this.renderList(collection); + }); + } + + //# Get the list view with filters applied. + renderList(collection) { + App.execute("loading:show:view", this.layout.regionContent); + const filteredCollection = App.request('filter:apply:entities', collection); + const view = API.getArtistList(filteredCollection); + return this.layout.regionContent.show(view); + } + }; + + + //# handler for other modules to get a list view. + return App.reqres.setHandler("artist:list:view", collection => API.getArtistList(collection)); +}); diff --git a/src/js/apps/artist/list/list_controller.js.coffee b/src/js/apps/artist/list/list_controller.js.coffee deleted file mode 100644 index 46c87bb6..00000000 --- a/src/js/apps/artist/list/list_controller.js.coffee +++ /dev/null @@ -1,76 +0,0 @@ -@Kodi.module "ArtistApp.List", (List, App, Backbone, Marionette, $, _) -> - - API = - - bindTriggers: (view) -> - App.listenTo view, 'childview:artist:play', (list, item) -> - App.execute 'artist:action', 'play', item - App.listenTo view, 'childview:artist:add', (list, item) -> - App.execute 'artist:action', 'add', item - App.listenTo view, 'childview:artist:localadd', (list, item) -> - App.execute 'artist:action', 'localadd', item - App.listenTo view, 'childview:artist:localplay', (list, item) -> - App.execute 'artist:action', 'localplay', item - App.listenTo view, 'childview:artist:edit', (parent, item) -> - App.execute 'artist:edit', item.model - - getArtistList: (collection) -> - view = new List.Artists - collection: collection - API.bindTriggers view - view - - - ## Main controller - class List.Controller extends App.Controllers.Base - - initialize: -> - collection = App.request "artist:entities" - App.execute "when:entity:fetched", collection, => - - ## Set available filters - collection.availableFilters = @getAvailableFilters() - - ## Top level menu path for filters - collection.sectionId = 'music' - - ## If present set initial filter via url - App.request 'filter:init', @getAvailableFilters() - - @layout = @getLayoutView collection - - @listenTo @layout, "show", => - @renderList collection - @getFiltersView collection - - App.regionContent.show @layout - - getLayoutView: (collection) -> - new List.ListLayout - collection: collection - - ## Available sort and filter options - ## See filter_app.js for available options - getAvailableFilters: -> - sort: ['label', 'random'] - filter: ['mood', 'genre', 'style', 'thumbsUp'] - - ## Apply filter view and provide a handler for applying changes - getFiltersView: (collection) -> - filters = App.request 'filter:show', collection - @layout.regionSidebarFirst.show filters - ## Listen to when the filters change and re-render. - @listenTo filters, "filter:changed", => - @renderList collection - - ## Get the list view with filters applied. - renderList: (collection) -> - App.execute "loading:show:view", @layout.regionContent - filteredCollection = App.request 'filter:apply:entities', collection - view = API.getArtistList filteredCollection - @layout.regionContent.show view - - - ## handler for other modules to get a list view. - App.reqres.setHandler "artist:list:view", (collection) -> - API.getArtistList collection diff --git a/src/js/apps/artist/list/list_view.js b/src/js/apps/artist/list/list_view.js new file mode 100644 index 00000000..5471929f --- /dev/null +++ b/src/js/apps/artist/list/list_view.js @@ -0,0 +1,60 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.ListLayout = class ListLayout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "artist-list with-filters"; + } + }); + Cls.initClass(); + + Cls = (List.ArtistTeaser = class ArtistTeaser extends App.Views.CardView { + static initClass() { + this.prototype.triggers = { + "click .play" : "artist:play", + "click .dropdown .add" : "artist:add", + "click .dropdown .localadd" : "artist:localadd", + "click .dropdown .localplay" : "artist:localplay", + "click .dropdown .edit" : "artist:edit" + }; + } + + initialize() { + super.initialize(...arguments); + if (this.model != null) { + return this.model.set(App.request('album:action:items')); + } + } + }); + Cls.initClass(); + + Cls = (List.Empty = class Empty extends App.Views.EmptyViewResults { + static initClass() { + this.prototype.tagName = "li"; + this.prototype.className = "artist-empty-result"; + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.Artists = class Artists extends App.Views.VirtualListView { + static initClass() { + this.prototype.childView = List.ArtistTeaser; + this.prototype.emptyView = List.Empty; + this.prototype.tagName = "ul"; + this.prototype.className = "card-grid--wide"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/artist/list/list_view.js.coffee b/src/js/apps/artist/list/list_view.js.coffee deleted file mode 100644 index 4f5b6dd5..00000000 --- a/src/js/apps/artist/list/list_view.js.coffee +++ /dev/null @@ -1,27 +0,0 @@ -@Kodi.module "ArtistApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.ListLayout extends App.Views.LayoutWithSidebarFirstView - className: "artist-list with-filters" - - class List.ArtistTeaser extends App.Views.CardView - triggers: - "click .play" : "artist:play" - "click .dropdown .add" : "artist:add" - "click .dropdown .localadd" : "artist:localadd" - "click .dropdown .localplay" : "artist:localplay" - "click .dropdown .edit" : "artist:edit" - - initialize: -> - super arguments... - if @model? - @model.set(App.request('album:action:items')) - - class List.Empty extends App.Views.EmptyViewResults - tagName: "li" - className: "artist-empty-result" - - class List.Artists extends App.Views.VirtualListView - childView: List.ArtistTeaser - emptyView: List.Empty - tagName: "ul" - className: "card-grid--wide" diff --git a/src/js/apps/artist/show/show_controller.js b/src/js/apps/artist/show/show_controller.js new file mode 100644 index 00000000..d36f6b34 --- /dev/null +++ b/src/js/apps/artist/show/show_controller.js @@ -0,0 +1,88 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + + const API = { + + bindTriggers(view) { + App.listenTo(view, 'artist:play', item => App.execute('artist:action', 'play', item)); + App.listenTo(view, 'artist:add', item => App.execute('artist:action', 'add', item)); + App.listenTo(view, 'artist:localadd', item => App.execute('artist:action', 'localadd', item)); + App.listenTo(view, 'artist:localplay', item => App.execute('artist:action', 'localplay', item)); + return App.listenTo(view, 'artist:edit', item => App.execute('artist:edit', item.model)); + } + }; + + return Show.Controller = class Controller extends App.Controllers.Base { + + //# The Artist page. + initialize(options) { + const id = parseInt(options.id); + const artist = App.request("artist:entity", id); + + //# Fetch the artist + return App.execute("when:entity:fetched", artist, () => { + //# Get the layout. + this.layout = this.getLayoutView(artist); + //# Ensure background removed when we leave. + this.listenTo(this.layout, "destroy", () => { + return App.execute("images:fanart:set", 'none'); + }); + //# Listen to the show of our layout. + this.listenTo(this.layout, "show", () => { + this.getMusic(id); + return this.getDetailsLayoutView(artist); + }); + //# Add the layout to content. + return App.regionContent.show(this.layout); + }); + } + + //# Get the base layout + getLayoutView(artist) { + return new Show.PageLayout({ + model: artist}); + } + + //# Build the details layout. + getDetailsLayoutView(artist) { + const headerLayout = new Show.HeaderLayout({model: artist}); + this.listenTo(headerLayout, "show", () => { + const teaser = new Show.ArtistTeaser({model: artist}); + API.bindTriggers(teaser); + const detail = new Show.Details({model: artist}); + this.listenTo(detail, "show", () => { + return API.bindTriggers(detail); + }); + headerLayout.regionSide.show(teaser); + return headerLayout.regionMeta.show(detail); + }); + return this.layout.regionHeader.show(headerLayout); + } + + //# Get a list of all the music for this artist parsed into albums. + getMusic(id) { + // Might take a while so show loader + const loading = App.request("loading:get:view", tr('Loading albums')); + this.layout.regionContent.show(loading); + // Set artist id for fetch + const options = + {filter: {artistid: id}}; + // Get all the songs and parse them into separate album collections. + const songs = App.request("song:entities", options); + return App.execute("when:entity:fetched", songs, () => { + const songsCollections = App.request("song:albumparse:entities", songs); + const albumsCollection = App.request("albums:withsongs:view", songsCollections); + return this.layout.regionContent.show(albumsCollection); + }); + } + }; +}); + diff --git a/src/js/apps/artist/show/show_controller.js.coffee b/src/js/apps/artist/show/show_controller.js.coffee deleted file mode 100644 index f372d949..00000000 --- a/src/js/apps/artist/show/show_controller.js.coffee +++ /dev/null @@ -1,71 +0,0 @@ -@Kodi.module "ArtistApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - - API = - - bindTriggers: (view) -> - App.listenTo view, 'artist:play', (item) -> - App.execute 'artist:action', 'play', item - App.listenTo view, 'artist:add', (item) -> - App.execute 'artist:action', 'add', item - App.listenTo view, 'artist:localadd', (item) -> - App.execute 'artist:action', 'localadd', item - App.listenTo view, 'artist:localplay', (item) -> - App.execute 'artist:action', 'localplay', item - App.listenTo view, 'artist:edit', (item) -> - App.execute 'artist:edit', item.model - - class Show.Controller extends App.Controllers.Base - - ## The Artist page. - initialize: (options) -> - id = parseInt options.id - artist = App.request "artist:entity", id - - ## Fetch the artist - App.execute "when:entity:fetched", artist, => - ## Get the layout. - @layout = @getLayoutView artist - ## Ensure background removed when we leave. - @listenTo @layout, "destroy", => - App.execute "images:fanart:set", 'none' - ## Listen to the show of our layout. - @listenTo @layout, "show", => - @getMusic id - @getDetailsLayoutView artist - ## Add the layout to content. - App.regionContent.show @layout - - ## Get the base layout - getLayoutView: (artist) -> - new Show.PageLayout - model: artist - - ## Build the details layout. - getDetailsLayoutView: (artist) -> - headerLayout = new Show.HeaderLayout model: artist - @listenTo headerLayout, "show", => - teaser = new Show.ArtistTeaser model: artist - API.bindTriggers teaser - detail = new Show.Details model: artist - @listenTo detail, "show", => - API.bindTriggers detail - headerLayout.regionSide.show teaser - headerLayout.regionMeta.show detail - @layout.regionHeader.show headerLayout - - ## Get a list of all the music for this artist parsed into albums. - getMusic: (id) -> - # Might take a while so show loader - loading = App.request "loading:get:view", tr('Loading albums') - @layout.regionContent.show loading - # Set artist id for fetch - options = - filter: {artistid: id} - # Get all the songs and parse them into separate album collections. - songs = App.request "song:entities", options - App.execute "when:entity:fetched", songs, => - songsCollections = App.request "song:albumparse:entities", songs - albumsCollection = App.request "albums:withsongs:view", songsCollections - @layout.regionContent.show albumsCollection - diff --git a/src/js/apps/artist/show/show_view.js b/src/js/apps/artist/show/show_view.js new file mode 100644 index 00000000..f7c01bf9 --- /dev/null +++ b/src/js/apps/artist/show/show_view.js @@ -0,0 +1,55 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ArtistApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + let Cls = (Show.PageLayout = class PageLayout extends App.Views.LayoutWithHeaderView { + static initClass() { + this.prototype.className = 'artist-show detail-container'; + } + }); + Cls.initClass(); + + Cls = (Show.HeaderLayout = class HeaderLayout extends App.Views.LayoutDetailsHeaderView { + static initClass() { + this.prototype.className = 'artist-details'; + } + }); + Cls.initClass(); + + Cls = (Show.Details = class Details extends App.Views.DetailsItem { + static initClass() { + this.prototype.template = 'apps/artist/show/details_meta'; + this.prototype.triggers = { + "click .play" : "artist:play", + "click .add" : "artist:add", + "click .localadd" : "artist:localadd", + "click .localplay" : "artist:localplay", + "click .edit" : "artist:edit" + }; + } + }); + Cls.initClass(); + + return (function() { + Cls = (Show.ArtistTeaser = class ArtistTeaser extends App.ArtistApp.List.ArtistTeaser { + static initClass() { + this.prototype.tagName = "div"; + } + initialize() { + return this.model.set({actions: {thumbs: tr('Thumbs up')}}); + } + attributes() { + return this.watchedAttributes('card-detail'); + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/artist/show/show_view.js.coffee b/src/js/apps/artist/show/show_view.js.coffee deleted file mode 100644 index ef39d96f..00000000 --- a/src/js/apps/artist/show/show_view.js.coffee +++ /dev/null @@ -1,23 +0,0 @@ -@Kodi.module "ArtistApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - class Show.PageLayout extends App.Views.LayoutWithHeaderView - className: 'artist-show detail-container' - - class Show.HeaderLayout extends App.Views.LayoutDetailsHeaderView - className: 'artist-details' - - class Show.Details extends App.Views.DetailsItem - template: 'apps/artist/show/details_meta' - triggers: - "click .play" : "artist:play" - "click .add" : "artist:add" - "click .localadd" : "artist:localadd" - "click .localplay" : "artist:localplay" - "click .edit" : "artist:edit" - - class Show.ArtistTeaser extends App.ArtistApp.List.ArtistTeaser - tagName: "div" - initialize: -> - @model.set(actions: {thumbs: tr('Thumbs up')}) - attributes: -> - @watchedAttributes 'card-detail' diff --git a/src/js/apps/audioStream/init.js b/src/js/apps/audioStream/init.js new file mode 100644 index 00000000..18c8f3fa --- /dev/null +++ b/src/js/apps/audioStream/init.js @@ -0,0 +1,33 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ + +//# Soundmanager config. +//# Must be run before app init + +soundManager.setup({ + url: 'lib/soundmanager/swf/', + flashVersion: 9, + preferFlash: true, + useHTML5Audio: true, + useFlashBlock: false, + flashLoadTimeout: 3000, + debugMode: false, + noSWFCache: true, + debugFlash: false, + flashPollingInterval: 1000, + html5PollingInterval: 1000, + onready() { + return $(window).trigger('audiostream:ready'); + }, + ontimeout() { + $(window).trigger('audiostream:timeout'); + soundManager.flashLoadTimeout = 0; // When restarting, wait indefinitely for flash + soundManager.onerror = {}; // Prevent an infinite loop, in case it's not flashblock + return soundManager.reboot(); + } // Reboot +}); diff --git a/src/js/apps/audioStream/init.js.coffee b/src/js/apps/audioStream/init.js.coffee deleted file mode 100644 index 2a8a748f..00000000 --- a/src/js/apps/audioStream/init.js.coffee +++ /dev/null @@ -1,24 +0,0 @@ - -## Soundmanager config. -## Must be run before app init - -soundManager.setup({ - url: 'lib/soundmanager/swf/' - flashVersion: 9 - preferFlash: true - useHTML5Audio: true - useFlashBlock: false - flashLoadTimeout: 3000 - debugMode: false - noSWFCache: true - debugFlash: false - flashPollingInterval: 1000 - html5PollingInterval: 1000 - onready: -> - $(window).trigger 'audiostream:ready' - ontimeout: -> - $(window).trigger 'audiostream:timeout' - soundManager.flashLoadTimeout = 0 # When restarting, wait indefinitely for flash - soundManager.onerror = {} # Prevent an infinite loop, in case it's not flashblock - soundManager.reboot() # Reboot -}) diff --git a/src/js/apps/browser/browser_app.js b/src/js/apps/browser/browser_app.js new file mode 100644 index 00000000..bc65092a --- /dev/null +++ b/src/js/apps/browser/browser_app.js @@ -0,0 +1,41 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("BrowserApp", function(BrowserApp, App, Backbone, Marionette, $, _) { + + const Cls = (BrowserApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "browser" : "list", + "browser/:media/:id" : "view" + }; + } + }); + Cls.initClass(); + + const API = { + + list() { + return new BrowserApp.List.Controller; + }, + + view(media, id) { + return new BrowserApp.List.Controller({ + media, + id + }); + } + }; + + + return App.on("before:start", () => new BrowserApp.Router({ + controller: API})); +}); + + diff --git a/src/js/apps/browser/browser_app.js.coffee b/src/js/apps/browser/browser_app.js.coffee deleted file mode 100644 index 463c57d3..00000000 --- a/src/js/apps/browser/browser_app.js.coffee +++ /dev/null @@ -1,23 +0,0 @@ -@Kodi.module "BrowserApp", (BrowserApp, App, Backbone, Marionette, $, _) -> - - class BrowserApp.Router extends App.Router.Base - appRoutes: - "browser" : "list" - "browser/:media/:id" : "view" - - API = - - list: -> - new BrowserApp.List.Controller - - view: (media, id) -> - new BrowserApp.List.Controller - media: media - id: id - - - App.on "before:start", -> - new BrowserApp.Router - controller: API - - diff --git a/src/js/apps/browser/list/list_controller.js b/src/js/apps/browser/list/list_controller.js new file mode 100644 index 00000000..2db24b27 --- /dev/null +++ b/src/js/apps/browser/list/list_controller.js @@ -0,0 +1,234 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("BrowserApp.List", function(List, App, Backbone, Marionette, $, _) { + + var API = { + + bindFileTriggers(view) { + App.listenTo(view, 'childview:file:play', (set, item) => { + const playlist = App.request("command:kodi:controller", item.model.get('player'), 'PlayList'); + return playlist.play('file', item.model.get('file')); + }); + App.listenTo(view, 'childview:file:queue', (set, item) => { + const playlist = App.request("command:kodi:controller", item.model.get('player'), 'PlayList'); + return playlist.add('file', item.model.get('file')); + }); + return App.listenTo(view, 'childview:file:download', (set, item) => { + return App.request("command:kodi:controller", 'auto', 'Files').downloadFile(item.model.get('file')); + }); + }, + + bindFolderTriggers(view) { + App.listenTo(view, 'childview:folder:play', (set, item) => { + return App.request("command:kodi:controller", item.model.get('player'), 'PlayList').play('directory', item.model.get('file')); + }); + return App.listenTo(view, 'childview:folder:queue', (set, item) => { + return App.request("command:kodi:controller", item.model.get('player'), 'PlayList').add('directory', item.model.get('file')); + }); + }, + + getFileListView(collection) { + const fileView = new List.FileList({ + collection}); + API.bindFileTriggers(fileView); + return fileView; + }, + + getFolderListView(collection) { + const folderView = new List.FolderList({ + collection}); + App.listenTo(folderView, 'childview:folder:open', (set, item) => { + return App.navigate(item.model.get('url'), {trigger: true}); + }); + API.bindFolderTriggers(folderView); + return folderView; + } + }; + + + + const Cls = (List.Controller = class Controller extends App.Controllers.Base { + static initClass() { + + this.prototype.sourceCollection = {}; + this.prototype.backButtonModel = {}; + } + + initialize(options = {}) { + this.layout = this.getLayout(); + this.listenTo(this.layout, "show", () => { + this.getSources(options); + return this.getFolderLayout(); + }); + return App.regionContent.show(this.layout); + } + + getLayout() { + return new List.ListLayout(); + } + + getFolderLayout() { + const options = {sortSettings: this.getSort()}; + this.folderLayout = new List.FolderLayout(options); + this.listenTo(this.folderLayout, 'browser:sort', (sort, $el) => { + return this.setSort(sort, $el); + }); + this.listenTo(this.folderLayout, 'browser:play', view => { + if (this.model) { + return App.request("command:kodi:controller", this.model.get('player'), 'PlayList').play('directory', this.model.get('file')); + } + }); + this.listenTo(this.folderLayout, 'browser:queue', view => { + if (this.model) { + return App.request("command:kodi:controller", this.model.get('player'), 'PlayList').add('directory', this.model.get('file')); + } + }); + return this.layout.regionContent.show(this.folderLayout); + } + + setSort(sort, $el) { + const sortSettings = this.getSort(); + if (sortSettings.method === sort) { + sortSettings.order = sortSettings.order === 'ascending' ? 'descending' : 'ascending'; + } + if ($el) { + $el.removeClassStartsWith('order-').addClass('order-' + sortSettings.order).addClass('active'); + } + sortSettings.method = sort; + if (sortSettings.method) { + config.set('app', 'browserSort', sortSettings); + } + if (this.model) { + return this.getFolder(this.model); + } + } + + getSort() { + return config.get('app', 'browserSort', {method: 'none', order: 'ascending'}); + } + + + //# Get the source lists + getSources(options) { + const sources = App.request("file:source:entities", 'video'); + return App.execute("when:entity:fetched", sources, () => { + //# Store the sources collection for later + this.sourceCollection = sources; + //# Parse into sets + const sets = App.request("file:source:media:entities", sources); + const setView = new List.SourcesSet({collection: sets}); + this.layout.regionSidebarFirst.show(setView); + this.listenTo(setView, 'childview:childview:source:open', (set, item) => { + return this.getFolder(item.model); + }); + return this.loadFromUrl(options); + }); + } + + loadFromUrl(options) { + if (options.media && options.id) { + const model = App.request("file:url:entity", options.media, options.id); + return this.getFolder(model); + } + } + + getFolder(model) { + this.model = model; + //# Do a virtual navigate and load up the folder view + App.navigate(model.get('url')); + //# Get the collection + const sortSettings = this.getSort(); + const collection = App.request("file:entities", {file: model.get('file'), media: model.get('media'), sort: sortSettings}); + const pathCollection = App.request("file:path:entities", model.get('file'), this.sourceCollection); + this.getPathList(pathCollection); + return App.execute("when:entity:fetched", collection, () => { + //# parse and render + const collections = App.request("file:parsed:entities", collection); + this.getFolderList(collections.directory); + return this.getFileList(collections.file); + }); + } + + getFolderListView(collection) { + const folderView = new List.FolderList({ + collection}); + this.listenTo(folderView, 'childview:folder:open', (set, item) => { + return this.getFolder(item.model); + }); + API.bindFolderTriggers(folderView); + return folderView; + } + + getFolderList(collection) { + this.folderLayout.regionFolders.show(this.getFolderListView(collection)); + return this.getBackButton(); + } + + getFileListView(collection) { + return API.getFileListView(collection); + } + + getFileList(collection) { + return this.folderLayout.regionFiles.show(this.getFileListView(collection)); + } + + getPathList(collection) { + const pathView = new List.PathList({ + collection}); + this.folderLayout.regionPath.show(pathView); + this.setBackModel(collection); + return this.listenTo(pathView, 'childview:folder:open', (set, item) => { + return this.getFolder(item.model); + }); + } + + setBackModel(pathCollection) { + // Back button should be the second last model + if (pathCollection.length >= 2) { + return this.backButtonModel = pathCollection.models[pathCollection.length - 2]; + } else { + return this.backButtonModel = {}; + } + } + + getBackButton() { + if (this.backButtonModel.attributes) { + const backView = new List.Back({ + model: this.backButtonModel}); + this.folderLayout.regionBack.show(backView); + return this.listenTo(backView, 'folder:open', model => { + return this.getFolder(model.model); + }); + } else { + return this.folderLayout.regionBack.empty(); + } + } + + // Get view with a collection of files only + getFileViewByPath(path, media, callback) { + const collection = App.request("file:entities", {file: path, media}); + return App.execute("when:entity:fetched", collection, () => { + const view = this.getFileListView(collection); + if (callback) { + return callback(view); + } + }); + } + }); + Cls.initClass(); + + + // Get view with a collection of files only + App.reqres.setHandler("browser:file:view", collection => API.getFileListView(collection)); + + // Get view with a collection of files only + return App.reqres.setHandler("browser:directory:view", collection => API.getFolderListView(collection)); +}); + diff --git a/src/js/apps/browser/list/list_controller.js.coffee b/src/js/apps/browser/list/list_controller.js.coffee deleted file mode 100644 index 538d8499..00000000 --- a/src/js/apps/browser/list/list_controller.js.coffee +++ /dev/null @@ -1,174 +0,0 @@ -@Kodi.module "BrowserApp.List", (List, App, Backbone, Marionette, $, _) -> - - API = - - bindFileTriggers: (view) -> - App.listenTo view, 'childview:file:play', (set, item) => - playlist = App.request "command:kodi:controller", item.model.get('player'), 'PlayList' - playlist.play 'file', item.model.get('file') - App.listenTo view, 'childview:file:queue', (set, item) => - playlist = App.request "command:kodi:controller", item.model.get('player'), 'PlayList' - playlist.add 'file', item.model.get('file') - App.listenTo view, 'childview:file:download', (set, item) => - App.request("command:kodi:controller", 'auto', 'Files').downloadFile item.model.get('file') - - bindFolderTriggers: (view) -> - App.listenTo view, 'childview:folder:play', (set, item) => - App.request("command:kodi:controller", item.model.get('player'), 'PlayList').play 'directory', item.model.get('file') - App.listenTo view, 'childview:folder:queue', (set, item) => - App.request("command:kodi:controller", item.model.get('player'), 'PlayList').add 'directory', item.model.get('file') - - getFileListView: (collection) -> - fileView = new List.FileList - collection: collection - API.bindFileTriggers(fileView) - fileView - - getFolderListView: (collection) -> - folderView = new List.FolderList - collection: collection - App.listenTo folderView, 'childview:folder:open', (set, item) => - App.navigate item.model.get('url'), {trigger: true} - API.bindFolderTriggers folderView - folderView - - - - class List.Controller extends App.Controllers.Base - - sourceCollection: {} - backButtonModel: {} - - initialize: (options = {}) -> - @layout = @getLayout() - @listenTo @layout, "show", => - @getSources(options) - @getFolderLayout() - App.regionContent.show @layout - - getLayout: -> - new List.ListLayout() - - getFolderLayout: -> - options = {sortSettings: @getSort()} - @folderLayout = new List.FolderLayout options - @listenTo @folderLayout, 'browser:sort', (sort, $el) => - @setSort sort, $el - @listenTo @folderLayout, 'browser:play', (view) => - if @model - App.request("command:kodi:controller", @model.get('player'), 'PlayList').play 'directory', @model.get('file') - @listenTo @folderLayout, 'browser:queue', (view) => - if @model - App.request("command:kodi:controller", @model.get('player'), 'PlayList').add 'directory', @model.get('file') - @layout.regionContent.show @folderLayout - - setSort: (sort, $el) -> - sortSettings = @getSort() - if sortSettings.method is sort - sortSettings.order = if sortSettings.order is 'ascending' then 'descending' else 'ascending' - if $el - $el.removeClassStartsWith('order-').addClass('order-' + sortSettings.order).addClass 'active' - sortSettings.method = sort - if sortSettings.method - config.set 'app', 'browserSort', sortSettings - if @model - @getFolder @model - - getSort: -> - config.get('app', 'browserSort', {method: 'none', order: 'ascending'}) - - - ## Get the source lists - getSources: (options) -> - sources = App.request "file:source:entities", 'video' - App.execute "when:entity:fetched", sources, => - ## Store the sources collection for later - @sourceCollection = sources - ## Parse into sets - sets = App.request "file:source:media:entities", sources - setView = new List.SourcesSet({collection: sets}) - @layout.regionSidebarFirst.show setView - @listenTo setView, 'childview:childview:source:open', (set, item) => - @getFolder(item.model) - @loadFromUrl(options) - - loadFromUrl: (options) -> - if options.media and options.id - model = App.request "file:url:entity", options.media, options.id - @getFolder model - - getFolder: (model) -> - @model = model - ## Do a virtual navigate and load up the folder view - App.navigate model.get('url') - ## Get the collection - sortSettings = @getSort() - collection = App.request "file:entities", {file: model.get('file'), media: model.get('media'), sort: sortSettings} - pathCollection = App.request "file:path:entities", model.get('file'), @sourceCollection - @getPathList pathCollection - App.execute "when:entity:fetched", collection, => - ## parse and render - collections = App.request "file:parsed:entities", collection - @getFolderList(collections.directory) - @getFileList(collections.file) - - getFolderListView: (collection) -> - folderView = new List.FolderList - collection: collection - @listenTo folderView, 'childview:folder:open', (set, item) => - @getFolder item.model - API.bindFolderTriggers folderView - folderView - - getFolderList: (collection) -> - @folderLayout.regionFolders.show @getFolderListView(collection) - @getBackButton() - - getFileListView: (collection) -> - API.getFileListView collection - - getFileList: (collection) -> - @folderLayout.regionFiles.show @getFileListView(collection) - - getPathList: (collection) -> - pathView = new List.PathList - collection: collection - @folderLayout.regionPath.show pathView - @setBackModel collection - @listenTo pathView, 'childview:folder:open', (set, item) => - @getFolder item.model - - setBackModel: (pathCollection) -> - # Back button should be the second last model - if pathCollection.length >= 2 - @backButtonModel = pathCollection.models[pathCollection.length - 2] - else - @backButtonModel = {} - - getBackButton: -> - if @backButtonModel.attributes - backView = new List.Back - model: @backButtonModel - @folderLayout.regionBack.show backView - @listenTo backView, 'folder:open', (model) => - @getFolder model.model - else - @folderLayout.regionBack.empty() - - # Get view with a collection of files only - getFileViewByPath: (path, media, callback) -> - collection = App.request "file:entities", {file: path, media: media} - App.execute "when:entity:fetched", collection, => - view = @getFileListView collection - if callback - callback view - - - # Get view with a collection of files only - App.reqres.setHandler "browser:file:view", (collection) -> - API.getFileListView collection - - # Get view with a collection of files only - App.reqres.setHandler "browser:directory:view", (collection) -> - API.getFolderListView collection - diff --git a/src/js/apps/browser/list/list_view.js b/src/js/apps/browser/list/list_view.js new file mode 100644 index 00000000..280a8c88 --- /dev/null +++ b/src/js/apps/browser/list/list_view.js @@ -0,0 +1,226 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("BrowserApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.ListLayout = class ListLayout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "browser-page"; + } + }); + Cls.initClass(); + + + /* + Sources + */ + + Cls = (List.Source = class Source extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/browser/list/source'; + this.prototype.tagName = 'li'; + this.prototype.triggers = + {'click .source' : 'source:open'}; + } + attributes() { + return { + class: 'type-' + this.model.get('sourcetype') + }; + } + }); + Cls.initClass(); + + //# Our composite view allows adding another view via the 'childViewContainer' el + //# which is in the template + Cls = (List.Sources = class Sources extends App.Views.CompositeView { + static initClass() { + this.prototype.template = 'apps/browser/list/source_set'; + this.prototype.childView = List.Source; + this.prototype.tagName = "div"; + this.prototype.childViewContainer = 'ul.sources'; + this.prototype.className = "source-set"; + } + initialize() { + //# We need to tell the child view where to get its collection + return this.collection = this.model.get('sources'); + } + }); + Cls.initClass(); + + Cls = (List.SourcesSet = class SourcesSet extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = List.Sources; + this.prototype.tagName = "div"; + this.prototype.className = "sources-sets"; + } + }); + Cls.initClass(); + + + /* + Folder + */ + + Cls = (List.FolderLayout = class FolderLayout extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/browser/list/folder_layout'; + this.prototype.className = "folder-page-wrapper"; + this.prototype.regions = { + regionPath: '.path', + regionFolders: '.folders', + regionFiles: '.files', + regionBack: '.back' + }; + this.prototype.triggers = { + 'click .play' : 'browser:play', + 'click .queue' : 'browser:queue' + }; + this.prototype.events = + {'click .sorts li' : 'sortList'}; + } + sortList(e) { + $('.sorts li', this.$el).removeClass('active'); + return this.trigger('browser:sort', $(e.target).data('sort'), $(e.target)); + } + onRender() { + $('.sorts li', this.$el).addClass('order-' + this.options.sortSettings.order); + return $('.sorts li[data-sort=' + this.options.sortSettings.method + ']', this.$el).addClass('active'); + } + }); + Cls.initClass(); + + + Cls = (List.Item = class Item extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/browser/list/file'; + this.prototype.tagName = 'li'; + } + initialize() { + // Parse title text + return this.model.set({labelHtml: this.formatText(this.model.get('label'))}); + } + + onBeforeRender() { + if (!this.model.get('labelHtml')) { + return this.model.set({labelHtml: this.model.escape('label')}); + } + } + }); + Cls.initClass(); + + Cls = (List.Folder = class Folder extends List.Item { + static initClass() { + this.prototype.className = 'folder'; + this.prototype.triggers = { + 'click .title' : 'folder:open', + 'dblclick .title' : 'file:play', + 'click .play' : 'folder:play', + 'click .queue' : 'folder:queue' + }; + this.prototype.events = + {"click .dropdown > i": "populateModelMenu"}; + } + initialize() { + const menu = {queue: tr('Queue in Kodi')}; + return this.model.set({menu}); + } + }); + Cls.initClass(); + + Cls = (List.EmptyFiles = class EmptyFiles extends App.Views.EmptyViewPage { + static initClass() { + this.prototype.tagName = 'li'; + } + initialize() { + return this.model.set({id: 'empty', content: t.gettext('no media in this folder')}); + } + }); + Cls.initClass(); + + Cls = (List.File = class File extends List.Item { + static initClass() { + this.prototype.className = 'file'; + this.prototype.triggers = { + 'click .play' : 'file:play', + 'dblclick .title' : 'file:play', + 'click .queue' : 'file:queue', + 'click .download' : 'file:download' + }; + this.prototype.events = + {"click .dropdown > i": "populateModelMenu"}; + } + initialize() { + const menu = {queue: tr('Queue in Kodi')}; + if ((this.model.get('filetype') === 'file') && (this.model.get('file').lastIndexOf('plugin://', 0) !== 0)) { + menu.download = tr('Download'); + } + return this.model.set({menu}); + } + }); + Cls.initClass(); + + + Cls = (List.FolderList = class FolderList extends App.Views.CollectionView { + static initClass() { + this.prototype.tagName = 'ul'; + this.prototype.className = 'browser-folder-list'; + this.prototype.childView = List.Folder; + } + }); + Cls.initClass(); + + Cls = (List.FileList = class FileList extends App.Views.CollectionView { + static initClass() { + this.prototype.tagName = 'ul'; + this.prototype.className = 'browser-file-list'; + this.prototype.childView = List.File; + this.prototype.emptyView = List.EmptyFiles; + } + }); + Cls.initClass(); + + /* + Path + */ + + Cls = (List.Path = class Path extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/browser/list/path'; + this.prototype.tagName = 'li'; + this.prototype.triggers = + {'click .title' : 'folder:open'}; + } + }); + Cls.initClass(); + + Cls = (List.PathList = class PathList extends App.Views.CollectionView { + static initClass() { + this.prototype.tagName = 'ul'; + this.prototype.childView = List.Path; + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.Back = class Back extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/browser/list/back_button'; + this.prototype.tagName = 'div'; + this.prototype.className = 'back-button'; + this.prototype.triggers = { + 'click .title' : 'folder:open', + 'click i' : 'folder:open' + }; + } + }); + Cls.initClass(); + return Cls; + })(); +}); + diff --git a/src/js/apps/browser/list/list_view.js.coffee b/src/js/apps/browser/list/list_view.js.coffee deleted file mode 100644 index bbe8bdbd..00000000 --- a/src/js/apps/browser/list/list_view.js.coffee +++ /dev/null @@ -1,141 +0,0 @@ -@Kodi.module "BrowserApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.ListLayout extends App.Views.LayoutWithSidebarFirstView - className: "browser-page" - - - ### - Sources - ### - - class List.Source extends App.Views.ItemView - template: 'apps/browser/list/source' - tagName: 'li' - triggers: - 'click .source' : 'source:open' - attributes: -> - { - class: 'type-' + @model.get('sourcetype') - } - - ## Our composite view allows adding another view via the 'childViewContainer' el - ## which is in the template - class List.Sources extends App.Views.CompositeView - template: 'apps/browser/list/source_set' - childView: List.Source - tagName: "div" - childViewContainer: 'ul.sources' - className: "source-set" - initialize: -> - ## We need to tell the child view where to get its collection - @collection = @model.get('sources') - - class List.SourcesSet extends App.Views.CollectionView - childView: List.Sources - tagName: "div" - className: "sources-sets" - - - ### - Folder - ### - - class List.FolderLayout extends App.Views.LayoutView - template: 'apps/browser/list/folder_layout' - className: "folder-page-wrapper" - regions: - regionPath: '.path' - regionFolders: '.folders' - regionFiles: '.files' - regionBack: '.back' - triggers: - 'click .play' : 'browser:play' - 'click .queue' : 'browser:queue' - events: - 'click .sorts li' : 'sortList' - sortList: (e) -> - $('.sorts li', @$el).removeClass 'active' - @trigger 'browser:sort', $(e.target).data('sort'), $(e.target) - onRender: -> - $('.sorts li', @$el).addClass 'order-' + @options.sortSettings.order - $('.sorts li[data-sort=' + @options.sortSettings.method + ']', @$el).addClass 'active' - - - class List.Item extends App.Views.ItemView - template: 'apps/browser/list/file' - tagName: 'li' - initialize: -> - # Parse title text - @model.set {labelHtml: @formatText(@model.get('label'))} - - onBeforeRender: -> - if !@model.get('labelHtml') - @model.set {labelHtml: @model.escape('label')} - - class List.Folder extends List.Item - className: 'folder' - triggers: - 'click .title' : 'folder:open' - 'dblclick .title' : 'file:play' - 'click .play' : 'folder:play' - 'click .queue' : 'folder:queue' - events: - "click .dropdown > i": "populateModelMenu" - initialize: -> - menu = {queue: tr('Queue in Kodi')} - @model.set({menu: menu}) - - class List.EmptyFiles extends App.Views.EmptyViewPage - tagName: 'li' - initialize: -> - @model.set({id: 'empty', content: t.gettext('no media in this folder')}) - - class List.File extends List.Item - className: 'file' - triggers: - 'click .play' : 'file:play' - 'dblclick .title' : 'file:play' - 'click .queue' : 'file:queue' - 'click .download' : 'file:download' - events: - "click .dropdown > i": "populateModelMenu" - initialize: -> - menu = {queue: tr('Queue in Kodi')} - if @model.get('filetype') is 'file' and @model.get('file').lastIndexOf('plugin://', 0) isnt 0 - menu.download = tr('Download') - @model.set({menu: menu}) - - - class List.FolderList extends App.Views.CollectionView - tagName: 'ul' - className: 'browser-folder-list' - childView: List.Folder - - class List.FileList extends App.Views.CollectionView - tagName: 'ul' - className: 'browser-file-list' - childView: List.File - emptyView: List.EmptyFiles - - ### - Path - ### - - class List.Path extends App.Views.ItemView - template: 'apps/browser/list/path' - tagName: 'li' - triggers: - 'click .title' : 'folder:open' - - class List.PathList extends App.Views.CollectionView - tagName: 'ul' - childView: List.Path - - class List.Back extends App.Views.ItemView - template: 'apps/browser/list/back_button' - tagName: 'div' - className: 'back-button' - triggers: - 'click .title' : 'folder:open' - 'click i' : 'folder:open' - diff --git a/src/js/apps/cast/cast_app.js b/src/js/apps/cast/cast_app.js new file mode 100644 index 00000000..347864d9 --- /dev/null +++ b/src/js/apps/cast/cast_app.js @@ -0,0 +1,32 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CastApp", function(CastApp, App, Backbone, Marionette, $, _) { + + + const API = { + + getCastCollection(cast, origin) { + return App.request("cast:entities", cast, origin); + }, + + getCastView(collection) { + const view = new CastApp.List.CastList({ + collection}); + App.listenTo(view, 'childview:cast:google', (parent, child) => window.open('https://www.google.com/webhp?#q=' + encodeURIComponent(child.model.get('name')))); + App.listenTo(view, 'childview:cast:imdb', (parent, child) => window.open('http://www.imdb.com/find?s=nm&q=' + encodeURIComponent(child.model.get('name')))); + return view; + } + }; + + + return App.reqres.setHandler('cast:list:view', function(cast, origin) { + const collection = API.getCastCollection(cast, origin); + return API.getCastView(collection); + }); +}); diff --git a/src/js/apps/cast/cast_app.js.coffee b/src/js/apps/cast/cast_app.js.coffee deleted file mode 100644 index 5e181e7e..00000000 --- a/src/js/apps/cast/cast_app.js.coffee +++ /dev/null @@ -1,21 +0,0 @@ -@Kodi.module "CastApp", (CastApp, App, Backbone, Marionette, $, _) -> - - - API = - - getCastCollection: (cast, origin) -> - App.request "cast:entities", cast, origin - - getCastView: (collection) -> - view = new CastApp.List.CastList - collection: collection - App.listenTo view, 'childview:cast:google', (parent, child) -> - window.open('https://www.google.com/webhp?#q=' + encodeURIComponent(child.model.get('name'))) - App.listenTo view, 'childview:cast:imdb', (parent, child) -> - window.open('http://www.imdb.com/find?s=nm&q=' + encodeURIComponent(child.model.get('name'))) - view - - - App.reqres.setHandler 'cast:list:view', (cast, origin) -> - collection = API.getCastCollection cast, origin - API.getCastView collection diff --git a/src/js/apps/cast/list/list_view.js b/src/js/apps/cast/list/list_view.js new file mode 100644 index 00000000..c6f06340 --- /dev/null +++ b/src/js/apps/cast/list/list_view.js @@ -0,0 +1,44 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CastApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.CastTeaser = class CastTeaser extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/cast/list/cast'; + this.prototype.tagName = "li"; + this.prototype.triggers = { + "click .imdb" : "cast:imdb", + "click .google" : "cast:google" + }; + } + onRender() { + return _.defer(function() { + // Prevent broken images + const defaultThumb = App.request("images:path:get", ''); + return $('img', this.$el).on('error', function(e) { + return $(this).attr('src', defaultThumb); + }); + }); + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.CastList = class CastList extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = List.CastTeaser; + this.prototype.tagName = "ul"; + this.prototype.className = "cast-full"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/cast/list/list_view.js.coffee b/src/js/apps/cast/list/list_view.js.coffee deleted file mode 100644 index 3a774545..00000000 --- a/src/js/apps/cast/list/list_view.js.coffee +++ /dev/null @@ -1,19 +0,0 @@ -@Kodi.module "CastApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.CastTeaser extends App.Views.ItemView - template: 'apps/cast/list/cast' - tagName: "li" - triggers: - "click .imdb" : "cast:imdb" - "click .google" : "cast:google" - onRender: -> - _.defer () -> - # Prevent broken images - defaultThumb = App.request "images:path:get", '' - $('img', @$el).on 'error', (e) -> - $(@).attr 'src', defaultThumb - - class List.CastList extends App.Views.CollectionView - childView: List.CastTeaser - tagName: "ul" - className: "cast-full" diff --git a/src/js/apps/category/category_app.js b/src/js/apps/category/category_app.js new file mode 100644 index 00000000..f98cccd3 --- /dev/null +++ b/src/js/apps/category/category_app.js @@ -0,0 +1,39 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CategoryApp", function(CategoryApp, App, Backbone, Marionette, $, _) { + + //# This is a generic app for category listings (eg Genres) + + const Cls = (CategoryApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = + {"music/genres" : "musicGenres"}; + } + }); + Cls.initClass(); + + + const API = { + + musicGenres() { + return new CategoryApp.List.Controller({ + entityKey: 'genre:entities', + media: 'audio', + subNavParent: 'music' + }); + } + }; + + + + return App.on("before:start", () => new CategoryApp.Router({ + controller: API})); +}); + diff --git a/src/js/apps/category/category_app.js.coffee b/src/js/apps/category/category_app.js.coffee deleted file mode 100644 index 538b0efb..00000000 --- a/src/js/apps/category/category_app.js.coffee +++ /dev/null @@ -1,23 +0,0 @@ -@Kodi.module "CategoryApp", (CategoryApp, App, Backbone, Marionette, $, _) -> - - ## This is a generic app for category listings (eg Genres) - - class CategoryApp.Router extends App.Router.Base - appRoutes: - "music/genres" : "musicGenres" - - - API = - - musicGenres: -> - new CategoryApp.List.Controller - entityKey: 'genre:entities' - media: 'audio' - subNavParent: 'music' - - - - App.on "before:start", -> - new CategoryApp.Router - controller: API - diff --git a/src/js/apps/category/list/list_controller.js b/src/js/apps/category/list/list_controller.js new file mode 100644 index 00000000..9a75748a --- /dev/null +++ b/src/js/apps/category/list/list_controller.js @@ -0,0 +1,45 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CategoryApp.List", function(List, App, Backbone, Marionette, $, _) { + + + //# Main controller + return List.Controller = class Controller extends App.Controllers.Base { + + initialize(options) { + const collection = App.request(this.getOption('entityKey'), this.getOption('media')); + return App.execute("when:entity:fetched", collection, () => { + + this.layout = this.getLayoutView(collection); + this.listenTo(this.layout, "show", () => { + this.renderList(collection); + return this.getSubNav(); + }); + + return App.regionContent.show(this.layout); + }); + } + + getLayoutView(collection) { + return new List.Layout({ + collection}); + } + + renderList(collection) { + const view = new List.CategoryList({ + collection}); + return this.layout.regionContent.show(view); + } + + getSubNav() { + const subNav = App.request("navMain:children:show", this.getOption('subNavParent'), 'Sections'); + return this.layout.regionSidebarFirst.show(subNav); + } + }; +}); diff --git a/src/js/apps/category/list/list_controller.js.coffee b/src/js/apps/category/list/list_controller.js.coffee deleted file mode 100644 index dc2cfe36..00000000 --- a/src/js/apps/category/list/list_controller.js.coffee +++ /dev/null @@ -1,29 +0,0 @@ -@Kodi.module "CategoryApp.List", (List, App, Backbone, Marionette, $, _) -> - - - ## Main controller - class List.Controller extends App.Controllers.Base - - initialize: (options) -> - collection = App.request @getOption('entityKey'), @getOption('media') - App.execute "when:entity:fetched", collection, => - - @layout = @getLayoutView collection - @listenTo @layout, "show", => - @renderList collection - @getSubNav() - - App.regionContent.show @layout - - getLayoutView: (collection) -> - new List.Layout - collection: collection - - renderList: (collection) -> - view = new List.CategoryList - collection: collection - @layout.regionContent.show view - - getSubNav: -> - subNav = App.request "navMain:children:show", @getOption('subNavParent'), 'Sections' - @layout.regionSidebarFirst.show subNav diff --git a/src/js/apps/category/list/list_view.js b/src/js/apps/category/list/list_view.js new file mode 100644 index 00000000..dae9e690 --- /dev/null +++ b/src/js/apps/category/list/list_view.js @@ -0,0 +1,39 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CategoryApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "category-list"; + } + }); + Cls.initClass(); + + Cls = (List.Item = class Item extends App.Views.CardView { + static initClass() { + this.prototype.template = 'apps/category/list/item'; + this.prototype.tagName = "li"; + this.prototype.className = "card category"; + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.CategoryList = class CategoryList extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = List.Item; + this.prototype.tagName = "ul"; + this.prototype.className = "card-grid--square"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/category/list/list_view.js.coffee b/src/js/apps/category/list/list_view.js.coffee deleted file mode 100644 index dc2f8790..00000000 --- a/src/js/apps/category/list/list_view.js.coffee +++ /dev/null @@ -1,14 +0,0 @@ -@Kodi.module "CategoryApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.Layout extends App.Views.LayoutWithSidebarFirstView - className: "category-list" - - class List.Item extends App.Views.CardView - template: 'apps/category/list/item' - tagName: "li" - className: "card category" - - class List.CategoryList extends App.Views.CollectionView - childView: List.Item - tagName: "ul" - className: "card-grid--square" diff --git a/src/js/apps/command/command_app.js b/src/js/apps/command/command_app.js new file mode 100644 index 00000000..4c4d97b2 --- /dev/null +++ b/src/js/apps/command/command_app.js @@ -0,0 +1,92 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp", function(CommandApp, App, Backbone, Marionette, $, _) { + + const API = { + // Return current playlist controller. + currentAudioPlaylistController() { + const stateObj = App.request("state:current"); + return App.request("command:" + stateObj.getPlayer() + ":controller", 'audio', 'PlayList'); + }, + + // Return current playlist controller. + currentVideoPlayerController() { + const stateObj = App.request("state:current"); + // Switch method depending on player + const method = stateObj.getPlayer() === 'local' ? 'VideoPlayer' : 'PlayList'; + return App.request("command:" + stateObj.getPlayer() + ":controller", 'video', method); + } + }; + + /* + Kodi. + */ + + //# Kodi: Execute a command + App.reqres.setHandler("command:kodi:player", function(method, params, callback) { + const commander = new CommandApp.Kodi.Player('auto'); + return commander.sendCommand(method, params, callback); + }); + + //# Kodi: Get a controller for a specific player type and media + App.reqres.setHandler("command:kodi:controller", (media = 'auto', controller) => new (CommandApp.Kodi[controller])(media)); + + /* + Local. + */ + + //# Local: Execute a command + App.reqres.setHandler("command:local:player", function(method, params, callback) { + const commander = new CommandApp.Local.Player('audio'); + return commander.sendCommand(method, params, callback); + }); + + //# Local: Get a controller for a specific player type and media + App.reqres.setHandler("command:local:controller", (media = 'auto', controller) => new (CommandApp.Local[controller])(media)); + + /* + Wrappers single command for playing in kodi and local. + */ + + //# Play Audio in kodi or local depending on active player. + App.commands.setHandler("command:audio:play", (type, value) => API.currentAudioPlaylistController().play(type, value)); + + //# Queue Audio in kodi or local depending on active player. + App.commands.setHandler("command:audio:add", (type, value) => API.currentAudioPlaylistController().add(type, value)); + + //# Play Video in kodi or local depending on active player. + App.commands.setHandler("command:video:play", function(model, type, resume = 0, callback) { + const value = model.get(type); + return API.currentVideoPlayerController().play(type, value, model, resume, function(resp) { + // Problem: Home OSD to display when you 'add to playlist and play' when it is not empty + // This might cause other issues but tested ok for me, so hack implemented! + // TODO: Investigate, feels like a Kodi bug, but maybe not also. + const stateObj = App.request("state:current"); + if (stateObj.getPlayer() === 'kodi') { + // If player is kodi, force full screen to full. This hides the home OSD. + const kodiVideo = App.request("command:kodi:controller", 'video', 'GUI'); + return kodiVideo.setFullScreen(true, callback); + } + }); + }); + + /* + Commands that are generally used by settings pages. + */ + + //# Clean audio library. + App.commands.setHandler("command:kodi:audio:clean", () => App.request("command:kodi:controller", 'auto', 'AudioLibrary').clean()); + + //# Clean audio library. + App.commands.setHandler("command:kodi:video:clean", () => App.request("command:kodi:controller", 'auto', 'VideoLibrary').clean()); + + + //# Startup tasks. + return App.addInitializer(function() {}); +}); diff --git a/src/js/apps/command/command_app.js.coffee b/src/js/apps/command/command_app.js.coffee deleted file mode 100644 index 790f8c09..00000000 --- a/src/js/apps/command/command_app.js.coffee +++ /dev/null @@ -1,81 +0,0 @@ -@Kodi.module "CommandApp", (CommandApp, App, Backbone, Marionette, $, _) -> - - API = - # Return current playlist controller. - currentAudioPlaylistController: -> - stateObj = App.request "state:current" - App.request "command:" + stateObj.getPlayer() + ":controller", 'audio', 'PlayList' - - # Return current playlist controller. - currentVideoPlayerController: -> - stateObj = App.request "state:current" - # Switch method depending on player - method = if stateObj.getPlayer() is 'local' then 'VideoPlayer' else 'PlayList' - App.request "command:" + stateObj.getPlayer() + ":controller", 'video', method - - ### - Kodi. - ### - - ## Kodi: Execute a command - App.reqres.setHandler "command:kodi:player", (method, params, callback) -> - commander = new CommandApp.Kodi.Player('auto') - commander.sendCommand method, params, callback - - ## Kodi: Get a controller for a specific player type and media - App.reqres.setHandler "command:kodi:controller", (media = 'auto', controller) -> - new CommandApp.Kodi[controller](media) - - ### - Local. - ### - - ## Local: Execute a command - App.reqres.setHandler "command:local:player", (method, params, callback) -> - commander = new CommandApp.Local.Player('audio') - commander.sendCommand method, params, callback - - ## Local: Get a controller for a specific player type and media - App.reqres.setHandler "command:local:controller", (media = 'auto', controller) -> - new CommandApp.Local[controller](media) - - ### - Wrappers single command for playing in kodi and local. - ### - - ## Play Audio in kodi or local depending on active player. - App.commands.setHandler "command:audio:play", (type, value) -> - API.currentAudioPlaylistController().play type, value - - ## Queue Audio in kodi or local depending on active player. - App.commands.setHandler "command:audio:add", (type, value) -> - API.currentAudioPlaylistController().add type, value - - ## Play Video in kodi or local depending on active player. - App.commands.setHandler "command:video:play", (model, type, resume = 0, callback) -> - value = model.get(type) - API.currentVideoPlayerController().play type, value, model, resume, (resp) -> - # Problem: Home OSD to display when you 'add to playlist and play' when it is not empty - # This might cause other issues but tested ok for me, so hack implemented! - # TODO: Investigate, feels like a Kodi bug, but maybe not also. - stateObj = App.request "state:current" - if stateObj.getPlayer() is 'kodi' - # If player is kodi, force full screen to full. This hides the home OSD. - kodiVideo = App.request "command:kodi:controller", 'video', 'GUI' - kodiVideo.setFullScreen true, callback - - ### - Commands that are generally used by settings pages. - ### - - ## Clean audio library. - App.commands.setHandler "command:kodi:audio:clean", () -> - App.request("command:kodi:controller", 'auto', 'AudioLibrary').clean() - - ## Clean audio library. - App.commands.setHandler "command:kodi:video:clean", () -> - App.request("command:kodi:controller", 'auto', 'VideoLibrary').clean() - - - ## Startup tasks. - App.addInitializer -> diff --git a/src/js/apps/command/kodi/_base/_base.js b/src/js/apps/command/kodi/_base/_base.js new file mode 100644 index 00000000..79c1e362 --- /dev/null +++ b/src/js/apps/command/kodi/_base/_base.js @@ -0,0 +1,84 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => (function() { + const Cls = (Api.Base = class Base extends Marionette.Object { + static initClass() { + + this.prototype.ajaxOptions = {}; + } + + initialize(options = {}) { + $.jsonrpc.defaultUrl = helpers.url.baseKodiUrl("Base"); + return this.setOptions(options); + } + + setOptions(options) { + return this.ajaxOptions = options; + } + + multipleCommands(commands, callback, fail) { + const obj = $.jsonrpc(commands, this.ajaxOptions); + obj.fail(error => { + this.doCallback(fail, error); + return this.onError(commands, error); + }); + obj.done(response => { + response = this.parseResponse(commands, response); + this.triggerMethod("response:ready", response); + if (callback != null) { + return this.doCallback(callback, response); + } + }); + return obj; + } + + singleCommand(command, params, callback, fail) { + command = {method: command, url: helpers.url.baseKodiUrl(command)}; + if ((params != null) && ((params.length > 0) || _.isObject(params))) { + command.params = params; + } + const obj = this.multipleCommands([command], callback, fail); + return obj; + } + + parseResponse(commands, response) { + let results = []; + for (var i in response) { + var result = response[i]; + if (result.result || (result.result === false)) { + results.push(result.result); + } else { + this.onError(commands[i], result); + } + } + if ((commands.length === 1) && (results.length === 1)) { + results = results[0]; + } + return results; + } + + paramObj(key, val) { + return helpers.global.paramObj(key, val); + } + + doCallback(callback, response) { + if (callback != null) { + return callback(response); + } + } + + onError(commands, error) { + return helpers.debug.rpcError(commands, error); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/_base/_base.js.coffee b/src/js/apps/command/kodi/_base/_base.js.coffee deleted file mode 100644 index 44a8dc17..00000000 --- a/src/js/apps/command/kodi/_base/_base.js.coffee +++ /dev/null @@ -1,52 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - class Api.Base extends Marionette.Object - - ajaxOptions: {} - - initialize: (options = {}) -> - $.jsonrpc.defaultUrl = helpers.url.baseKodiUrl "Base" - @setOptions(options) - - setOptions: (options) -> - @ajaxOptions = options - - multipleCommands: (commands, callback, fail) -> - obj = $.jsonrpc commands, @ajaxOptions - obj.fail (error) => - @doCallback fail, error - @onError commands, error - obj.done (response) => - response = @parseResponse commands, response - @triggerMethod "response:ready", response - if callback? - @doCallback callback, response - obj - - singleCommand: (command, params, callback, fail) -> - command = {method: command, url: helpers.url.baseKodiUrl(command)} - if params? and (params.length > 0 or _.isObject(params)) - command.params = params - obj = @multipleCommands [command], callback, fail - obj - - parseResponse: (commands, response) -> - results = [] - for i, result of response - if result.result or result.result is false - results.push result.result - else - @onError commands[i], result - if commands.length is 1 and results.length is 1 - results = results[0] - results - - paramObj: (key, val) -> - helpers.global.paramObj key, val - - doCallback: (callback, response) -> - if callback? - callback response - - onError: (commands, error) -> - helpers.debug.rpcError commands, error diff --git a/src/js/apps/command/kodi/_base/api.js b/src/js/apps/command/kodi/_base/api.js new file mode 100644 index 00000000..a4fdb43b --- /dev/null +++ b/src/js/apps/command/kodi/_base/api.js @@ -0,0 +1,174 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", function(Api, App, Backbone, Marionette, $, _) { + + + //# Base commander with shared functionality. + let Cls = (Api.Commander = class Commander extends Api.Base { + static initClass() { + + this.prototype.playerActive = 0; //# default to audio + this.prototype.playerName = 'music'; + this.prototype.playerForced = false; //# If false will check active player before a command + + //# Applies to player and playlists. + this.prototype.playerIds = { + audio: 0, + video: 1 + }; + + + //# Namespace should be added in each extending class + this.prototype.commandNameSpace = 'JSONRPC'; + } + + setPlayer(player) { + if ((player === 'audio') || (player === 'video')) { + this.playerActive = this.playerIds[player]; + this.playerName = player; + return this.playerForced = true; + } + } + + getPlayer() { + return this.playerActive; + } + + getPlayerName() { + return this.playerName; + } + + //# get the player name via the id (eg return audio, video) + playerIdToName(playerId) { + let playerName; + playerName; + for (var name in this.playerIds) { + var id = this.playerIds[name]; + if (id === playerId) { + playerName = name; + } + } + return playerName; + } + + //# Namespace can be overridden when called + getCommand(command, namespace = this.commandNameSpace) { + return namespace + '.' + command; + } + + //# Send a command + sendCommand(command, params, callback, fail) { + return this.singleCommand(this.getCommand(command), params, (resp => { + return this.doCallback(callback, resp); + } + ), err => { + return this.doCallback(fail, err); + }); + } + }); + Cls.initClass(); + + + //# Player commander. + return (function() { + Cls = (Api.Player = class Player extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'Player'; + this.prototype.playlistApi = {}; + } + + initialize(media = 'audio') { + this.setPlayer(media); + return this.playlistApi = App.request("playlist:kodi:entity:api"); + } + + getParams(params = [], callback) { + let defaultParams; + if (this.playerForced) { + defaultParams = [this.playerActive]; + return this.doCallback(callback, defaultParams.concat(params)); + } else { + return this.getActivePlayers(activeId => { + defaultParams = [activeId]; + return this.doCallback(callback, defaultParams.concat(params)); + }); + } + } + + getActivePlayers(callback) { + return this.singleCommand(this.getCommand("GetActivePlayers"), {}, resp => { + if (resp.length > 0) { + this.playerActive = resp[0].playerid; + this.playerName = this.playerIdToName(this.playerActive); + this.triggerMethod("player:ready", this.playerActive); + return this.doCallback(callback, this.playerActive); + } else { + return this.doCallback(callback, this.playerActive); + } + }); + } + + sendCommand(command, params = [], callback, fail) { + return this.getParams(params, playerParams => { + return this.singleCommand(this.getCommand(command), playerParams, (resp => { + return this.doCallback(callback, resp); + } + ), err => { + return this.doCallback(fail, err); + }); + }); + } + + playEntity(type, value, options = {}, callback) { + const params = {'item': this.paramObj(type, value), 'options': options}; + if (type === 'position') { + params.item.playlistid = this.getPlayer(); + } + return this.singleCommand(this.getCommand('Open', 'Player'), params, resp => { + if (!App.request('sockets:active')) { + // App.request 'player:kodi:timer', 'start' + App.request('state:kodi:update'); + } + return this.doCallback(callback, resp); + }); + } + + setPartyMode(op = 'toggle', callback) { + return this.sendCommand('SetPartymode', [op], resp => { + return this.doCallback(callback, resp); + }); + } + + getPlaying(callback) { + const obj = {active: false, properties: false, item: false}; + return this.singleCommand(this.getCommand('GetActivePlayers'), {}, resp => { + if (resp.length > 0) { + obj.active = resp[0]; //# Only use the first active player (cant think of 2 running at the same time?) + const commands = []; + const itemFields = helpers.entities.getFields(this.playlistApi.fields, 'full'); + const playerFields = ["playlistid", "speed", "position", "totaltime", "time", "percentage", "shuffled", "repeat", "canrepeat", "canshuffle", "canseek", "partymode"]; + commands.push({method: this.getCommand('GetProperties'), params: [obj.active.playerid, playerFields]}); + commands.push({method: this.getCommand('GetItem'), params: [obj.active.playerid, itemFields]}); + return this.multipleCommands(commands, playing => { + obj.properties = playing[0]; + obj.item = playing[1].item; + return this.doCallback(callback, obj); + }); + } else { + return this.doCallback(callback, false); + } + }); + } + }); + Cls.initClass(); + return Cls; + })(); +}); //# nothing playing diff --git a/src/js/apps/command/kodi/_base/api.js.coffee b/src/js/apps/command/kodi/_base/api.js.coffee deleted file mode 100644 index 9e60c1dc..00000000 --- a/src/js/apps/command/kodi/_base/api.js.coffee +++ /dev/null @@ -1,116 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - - ## Base commander with shared functionality. - class Api.Commander extends Api.Base - - playerActive: 0 ## default to audio - playerName: 'music' - playerForced: false ## If false will check active player before a command - - ## Applies to player and playlists. - playerIds: - audio: 0 - video: 1 - - setPlayer: (player) -> - if player is 'audio' or player is 'video' - @playerActive = @playerIds[player] - @playerName = player - @playerForced = true - - getPlayer: -> - @playerActive - - getPlayerName: -> - @playerName - - ## get the player name via the id (eg return audio, video) - playerIdToName: (playerId) -> - playerName - for name, id of @playerIds when id is playerId - playerName = name - playerName - - - ## Namespace should be added in each extending class - commandNameSpace: 'JSONRPC' - - ## Namespace can be overridden when called - getCommand: (command, namespace = @commandNameSpace) -> - namespace + '.' + command - - ## Send a command - sendCommand: (command, params, callback, fail) -> - @singleCommand @getCommand(command), params, ((resp) => - @doCallback callback, resp - ), (err) => - @doCallback fail, err - - - ## Player commander. - class Api.Player extends Api.Commander - - commandNameSpace: 'Player' - playlistApi: {} - - initialize: (media = 'audio') -> - @setPlayer media - @playlistApi = App.request "playlist:kodi:entity:api" - - getParams: (params = [], callback) -> - if @playerForced - defaultParams = [@playerActive] - @doCallback callback, defaultParams.concat(params) - else - @getActivePlayers (activeId) => - defaultParams = [activeId] - @doCallback callback, defaultParams.concat(params) - - getActivePlayers: (callback) -> - @singleCommand @getCommand("GetActivePlayers"), {}, (resp) => - if resp.length > 0 - @playerActive = resp[0].playerid - @playerName = @playerIdToName(@playerActive) - @triggerMethod "player:ready", @playerActive - @doCallback callback, @playerActive - else - @doCallback callback, @playerActive - - sendCommand: (command, params = [], callback, fail) -> - @getParams params, (playerParams) => - @singleCommand @getCommand(command), playerParams, ((resp) => - @doCallback callback, resp - ), (err) => - @doCallback fail, err - - playEntity: (type, value, options = {}, callback) -> - params = {'item': @paramObj(type, value), 'options': options} - if type is 'position' - params.item.playlistid = @getPlayer() - @singleCommand @getCommand('Open', 'Player'), params, (resp) => - if not App.request 'sockets:active' - # App.request 'player:kodi:timer', 'start' - App.request 'state:kodi:update' - @doCallback callback, resp - - setPartyMode: (op = 'toggle', callback) -> - @sendCommand 'SetPartymode', [op], (resp) => - @doCallback callback, resp - - getPlaying: (callback) -> - obj = {active: false, properties: false, item: false} - @singleCommand @getCommand('GetActivePlayers'), {}, (resp) => - if resp.length > 0 - obj.active = resp[0] ## Only use the first active player (cant think of 2 running at the same time?) - commands = [] - itemFields = helpers.entities.getFields(@playlistApi.fields, 'full') - playerFields = ["playlistid", "speed", "position", "totaltime", "time", "percentage", "shuffled", "repeat", "canrepeat", "canshuffle", "canseek", "partymode"] - commands.push {method: @getCommand('GetProperties'), params: [obj.active.playerid, playerFields]} - commands.push {method: @getCommand('GetItem'), params: [obj.active.playerid, itemFields]} - @multipleCommands commands, (playing) => - obj.properties = playing[0] - obj.item = playing[1].item - @doCallback callback, obj - else - @doCallback callback, false ## nothing playing diff --git a/src/js/apps/command/kodi/helpers/addon.js b/src/js/apps/command/kodi/helpers/addon.js new file mode 100644 index 00000000..465951d0 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/addon.js @@ -0,0 +1,76 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Application commander. +(function() { + const Cls = (Api.AddOn = class AddOn extends Api.Commander { + constructor(...args) { + super(...args); + this.getEnabledAddons = this.getEnabledAddons.bind(this); + this.getAllAddons = this.getAllAddons.bind(this); + } + + static initClass() { + + this.prototype.commandNameSpace = 'Addons'; + + this.prototype.addonAllFields = [ + "name", + "version", + "summary", + "description", + "path", + "author", + "thumbnail", + "disclaimer", + "fanart", + "dependencies", + "broken", + "extrainfo", + "rating", + "enabled" + ]; + } + + // Get an array of addons from the api + getAddons(type = "unknown", enabled = true, fields = [], callback) { + return this.singleCommand(this.getCommand('GetAddons'), [type, "unknown", enabled, fields], resp => { + return this.doCallback(callback, resp.addons); + }); + } + + // If load set then get all the addon fields else get basics + getEnabledAddons(load = true, callback) { + const fields = load ? this.addonAllFields : ["name"]; + return this.getAddons("unknown", true, fields, resp => { + return this.doCallback(callback, resp); + }); + } + + // If load set then get all the addon fields else get basics + getAllAddons(callback) { + return this.getAddons("unknown", "all", this.addonAllFields, resp => { + return this.doCallback(callback, resp); + }); + } + + // Execute an addon + executeAddon(addonId, params = {}, callback) { + const opts = {addonid: addonId}; + if (!_.isEmpty(params)) { + opts.params = params; + } + return this.singleCommand(this.getCommand('ExecuteAddon'), opts, resp => { + return this.doCallback(callback, resp.addons); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/addon.js.coffee b/src/js/apps/command/kodi/helpers/addon.js.coffee deleted file mode 100644 index f5d4b350..00000000 --- a/src/js/apps/command/kodi/helpers/addon.js.coffee +++ /dev/null @@ -1,47 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Application commander. - class Api.AddOn extends Api.Commander - - commandNameSpace: 'Addons' - - addonAllFields: [ - "name", - "version", - "summary", - "description", - "path", - "author", - "thumbnail", - "disclaimer", - "fanart", - "dependencies", - "broken", - "extrainfo", - "rating", - "enabled" - ] - - # Get an array of addons from the api - getAddons: (type = "unknown", enabled = true, fields = [], callback) -> - @singleCommand @getCommand('GetAddons'), [type, "unknown", enabled, fields], (resp) => - @doCallback callback, resp.addons - - # If load set then get all the addon fields else get basics - getEnabledAddons: (load = true, callback) => - fields = if load then @addonAllFields else ["name"] - @getAddons "unknown", true, fields, (resp) => - @doCallback callback, resp - - # If load set then get all the addon fields else get basics - getAllAddons: (callback) => - @getAddons "unknown", "all", @addonAllFields, (resp) => - @doCallback callback, resp - - # Execute an addon - executeAddon: (addonId, params = {}, callback) -> - opts = {addonid: addonId} - if not _.isEmpty params - opts.params = params - @singleCommand @getCommand('ExecuteAddon'), opts, (resp) => - @doCallback callback, resp.addons diff --git a/src/js/apps/command/kodi/helpers/application.js b/src/js/apps/command/kodi/helpers/application.js new file mode 100644 index 00000000..07ceec9d --- /dev/null +++ b/src/js/apps/command/kodi/helpers/application.js @@ -0,0 +1,45 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Application commander. +(function() { + const Cls = (Api.Application = class Application extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'Application'; + } + + getProperties(callback) { + return this.singleCommand(this.getCommand('GetProperties'), [["volume", "muted", "version"]], resp => { + return this.doCallback(callback, resp); + }); + } + + setVolume(volume, callback) { + return this.singleCommand(this.getCommand('SetVolume'), [volume], resp => { + return this.doCallback(callback, resp); + }); + } + + toggleMute(callback) { + const stateObj = App.request("state:kodi"); + return this.singleCommand(this.getCommand('SetMute'), [!stateObj.getState('muted')], resp => { + return this.doCallback(callback, resp); + }); + } + + quit(callback) { + return this.singleCommand(this.getCommand('Quit'), [], resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/application.js.coffee b/src/js/apps/command/kodi/helpers/application.js.coffee deleted file mode 100644 index ef3c3c9b..00000000 --- a/src/js/apps/command/kodi/helpers/application.js.coffee +++ /dev/null @@ -1,23 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Application commander. - class Api.Application extends Api.Commander - - commandNameSpace: 'Application' - - getProperties: (callback) -> - @singleCommand @getCommand('GetProperties'), [["volume", "muted", "version"]], (resp) => - @doCallback callback, resp - - setVolume: (volume, callback) -> - @singleCommand @getCommand('SetVolume'), [volume], (resp) => - @doCallback callback, resp - - toggleMute: (callback) -> - stateObj = App.request "state:kodi" - @singleCommand @getCommand('SetMute'), [!stateObj.getState('muted')], (resp) => - @doCallback callback, resp - - quit: (callback) -> - @singleCommand @getCommand('Quit'), [], (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/kodi/helpers/audiolibrary.js b/src/js/apps/command/kodi/helpers/audiolibrary.js new file mode 100644 index 00000000..0c1e9895 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/audiolibrary.js @@ -0,0 +1,61 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Audio Library +(function() { + const Cls = (Api.AudioLibrary = class AudioLibrary extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'AudioLibrary'; + } + + //# Set a album value + setAlbumDetails(id, fields = {}, callback) { + let params = {albumid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetAlbumDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a artist value + setArtistDetails(id, fields = {}, callback) { + let params = {artistid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetArtistDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a song value + setSongDetails(id, fields = {}, callback) { + let params = {songid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetSongDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Scan library + scan(callback) { + return this.singleCommand(this.getCommand('Scan'), resp => { + return this.doCallback(callback, resp); + }); + } + + //# Clean library + clean(callback) { + return this.singleCommand(this.getCommand('Clean'), {showdialogs: false}, resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/audiolibrary.js.coffee b/src/js/apps/command/kodi/helpers/audiolibrary.js.coffee deleted file mode 100644 index 72de8d66..00000000 --- a/src/js/apps/command/kodi/helpers/audiolibrary.js.coffee +++ /dev/null @@ -1,37 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Audio Library - class Api.AudioLibrary extends Api.Commander - - commandNameSpace: 'AudioLibrary' - - ## Set a album value - setAlbumDetails: (id, fields = {}, callback) -> - params = {albumid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetAlbumDetails'), params, (resp) => - @doCallback callback, resp - - ## Set a artist value - setArtistDetails: (id, fields = {}, callback) -> - params = {artistid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetArtistDetails'), params, (resp) => - @doCallback callback, resp - - ## Set a song value - setSongDetails: (id, fields = {}, callback) -> - params = {songid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetSongDetails'), params, (resp) => - @doCallback callback, resp - - ## Scan library - scan: (callback) -> - @singleCommand @getCommand('Scan'), (resp) => - @doCallback callback, resp - - ## Clean library - clean: (callback) -> - @singleCommand @getCommand('Clean'), {showdialogs: false}, (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/kodi/helpers/file.js b/src/js/apps/command/kodi/helpers/file.js new file mode 100644 index 00000000..794fd223 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/file.js @@ -0,0 +1,46 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Input commander +(function() { + const Cls = (Api.Files = class Files extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'Files'; + } + + //# Prepare a file for download + prepareDownload(file, callback) { + return this.singleCommand(this.getCommand('PrepareDownload'), [file], resp => { + return this.doCallback(callback, resp); + }); + } + + //# Returns a download path for a file + downloadPath(file, callback) { + return this.prepareDownload(file, resp => { + return this.doCallback(callback, resp.details.path); + }); + } + + //# Callback for a download button, will initiate a download + downloadFile(file) { + const dl = window.open('about:blank', 'download'); + return this.downloadPath(file, path => dl.location = path); + } + + //# Callback for video stream popup + videoStream(file, background = '', player = 'html5') { + const st = helpers.global.localVideoPopup('about:blank'); + return this.downloadPath(file, path => st.location = "videoPlayer.html?player=" + player + '&src=' + encodeURIComponent(path) + '&bg=' + encodeURIComponent(background)); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/file.js.coffee b/src/js/apps/command/kodi/helpers/file.js.coffee deleted file mode 100644 index 17fdb29e..00000000 --- a/src/js/apps/command/kodi/helpers/file.js.coffee +++ /dev/null @@ -1,29 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - - ## Input commander - class Api.Files extends Api.Commander - - commandNameSpace: 'Files' - - ## Prepare a file for download - prepareDownload: (file, callback) -> - @singleCommand @getCommand('PrepareDownload'), [file], (resp) => - @doCallback callback, resp - - ## Returns a download path for a file - downloadPath: (file, callback) -> - @prepareDownload file, (resp) => - @doCallback callback, resp.details.path - - ## Callback for a download button, will initiate a download - downloadFile: (file) -> - dl = window.open('about:blank', 'download') - @downloadPath file, (path) -> - dl.location = path - - ## Callback for video stream popup - videoStream: (file, background = '', player = 'html5') -> - st = helpers.global.localVideoPopup 'about:blank' - @downloadPath file, (path) -> - st.location = "videoPlayer.html?player=" + player + '&src=' + encodeURIComponent(path) + '&bg=' + encodeURIComponent(background) diff --git a/src/js/apps/command/kodi/helpers/gui.coffee b/src/js/apps/command/kodi/helpers/gui.coffee deleted file mode 100644 index cb7e2d14..00000000 --- a/src/js/apps/command/kodi/helpers/gui.coffee +++ /dev/null @@ -1,15 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## GUI - class Api.GUI extends Api.Commander - - commandNameSpace: 'GUI' - - setFullScreen: (fullscreen = true, callback) -> - @sendCommand "SetFullscreen", [fullscreen], (resp) => - @doCallback callback, resp - - ## See http://kodi.wiki/view/JSON-RPC_API/v6#GUI.Window for types - activateWindow: (window, params = [], callback) -> - @sendCommand "ActivateWindow", [window, params], (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/kodi/helpers/gui.js b/src/js/apps/command/kodi/helpers/gui.js new file mode 100644 index 00000000..6d03d842 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/gui.js @@ -0,0 +1,33 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# GUI +(function() { + const Cls = (Api.GUI = class GUI extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'GUI'; + } + + setFullScreen(fullscreen = true, callback) { + return this.sendCommand("SetFullscreen", [fullscreen], resp => { + return this.doCallback(callback, resp); + }); + } + + //# See http://kodi.wiki/view/JSON-RPC_API/v6#GUI.Window for types + activateWindow(window, params = [], callback) { + return this.sendCommand("ActivateWindow", [window, params], resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/input.js b/src/js/apps/command/kodi/helpers/input.js new file mode 100644 index 00000000..62a4fa6a --- /dev/null +++ b/src/js/apps/command/kodi/helpers/input.js @@ -0,0 +1,37 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Input commander +(function() { + const Cls = (Api.Input = class Input extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'Input'; + } + + //# Send a text string + sendText(text, callback) { + return this.singleCommand(this.getCommand('SendText'), [text], resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a single input + sendInput(type, params = [], callback) { + return this.singleCommand(this.getCommand(type), params, resp => { + this.doCallback(callback, resp); + if (!App.request('sockets:active')) { + return App.request('state:kodi:update', callback); + } + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/input.js.coffee b/src/js/apps/command/kodi/helpers/input.js.coffee deleted file mode 100644 index c11b52bd..00000000 --- a/src/js/apps/command/kodi/helpers/input.js.coffee +++ /dev/null @@ -1,19 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - - ## Input commander - class Api.Input extends Api.Commander - - commandNameSpace: 'Input' - - ## Send a text string - sendText: (text, callback) -> - @singleCommand @getCommand('SendText'), [text], (resp) => - @doCallback callback, resp - - ## Set a single input - sendInput: (type, params = [], callback) -> - @singleCommand @getCommand(type), params, (resp) => - @doCallback callback, resp - if not App.request 'sockets:active' - App.request 'state:kodi:update', callback diff --git a/src/js/apps/command/kodi/helpers/playlist.js b/src/js/apps/command/kodi/helpers/playlist.js new file mode 100644 index 00000000..8d726781 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/playlist.js @@ -0,0 +1,188 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Playlist requires some player functionality but is also its +//# own thing so it extends the player. +(function() { + const Cls = (Api.PlayList = class PlayList extends Api.Player { + static initClass() { + + this.prototype.commandNameSpace = 'Playlist'; + } + + //# Play an item. Rules: + //# - If in the playlist already, play that item + //# - If currently playing, insert it next and play + //# - If not playing clear playlist, add and play + //# - If resume > 0 will resume from that point + play(type, value, model, resume = 0, callback) { + // Get items in the playlist + return this.getItems(currentPlaylist => { + // If item is already in th playlist, play that + const plItem = {type: type.replace('id', ''), id: value}; + const inPlaylist = currentPlaylist.items ? _.findWhere(currentPlaylist.items, plItem) : false; + if (inPlaylist) { + return this.playPosition(inPlaylist.position, resume, callback); + } else { + // Item needs to be added to playlist + const stateObj = App.request("state:kodi"); + //# If playing, queue up next. + if (stateObj.isPlaying(this.getPlayerName())) { + const pos = currentPlaylist.items ? (stateObj.getPlaying('position') + 1) : 0; + return this.insertAndPlay(type, value, pos, resume, callback); + } else { + return this.clear(() => { + return this.insertAndPlay(type, value, 0, resume, callback); + }); + } + } + }); + } + + //# Add a collection of models wrapper, will clear if not playing + addCollection(collection, position = 0, callback) { + const stateObj = App.request("state:kodi"); + //# If playing, queue up next. + if (stateObj.isPlaying(this.getPlayerName())) { + position = (stateObj.getPlaying('position') + 1); + this.addCollectionItems(collection, position, callback); + } else { + this.clear(() => { + return this.addCollectionItems(collection, position, callback); + }); + } + return position; + } + + //# Add a collection of models + addCollectionItems(collection, position = 0, callback) { + App.execute("notification:show", t.gettext("Adding items to the queue")); + const models = collection.getRawCollection(); + const player = this.getPlayer(); + const commands = []; + //# build a set of commands so we can add all the models with one request. + for (var i in models) { + var model = models[i]; + var pos = parseInt(position) + parseInt(i); + var type = model.type === 'file' ? 'file' : model.type + 'id'; + var params = [player, pos, this.paramObj(type, model[type])]; + commands.push({method: this.getCommand('Insert'), params}); + } + return this.multipleCommands(commands, resp => { + this.doCallback(callback, resp); + return this.refreshPlaylistView(); + }); + } + + // Add a collection of models. + playCollection(collection, position = 0) { + let pos; + return pos = this.addCollection(collection, position, resp => { + this.playEntity('position', parseInt(pos), {}, () => {}); + return this.refreshPlaylistView(); + }); + } + + //# Add a item to the end of the playlist + add(type, value) { + return this.playlistSize(size => { + return this.insert(type, value, size); + }); + } + + //# Remove an item from the list + remove(position, callback) { + return this.singleCommand(this.getCommand('Remove'), [this.getPlayer(), parseInt(position)], resp => { + this.refreshPlaylistView(); + return this.doCallback(callback, resp); + }); + } + + //# Clear a playlist. + clear(callback) { + return this.singleCommand(this.getCommand('Clear'), [this.getPlayer()], resp => { + return this.doCallback(callback, resp); + }); + } + + //# Insert a song at a position + insert(type, value, position = 0, callback) { + return this.singleCommand(this.getCommand('Insert'), [this.getPlayer(), parseInt(position), this.paramObj(type,value)], resp => { + this.refreshPlaylistView(); + return this.doCallback(callback, resp); + }); + } + + //# Get items in a playlist + getItems(callback) { + return this.singleCommand(this.getCommand('GetItems'), [this.getPlayer(), ['title']], resp => { + return this.doCallback(callback, this.parseItems(resp)); + }); + } + + //# Add position to each item in the playlist + parseItems(resp) { + if (resp.items) { + resp.items = _.map(resp.items, function(item, idx) { + item.position = parseInt(idx); + return item; + }); + } + return resp; + } + + //# Insert a song at a position and play it + insertAndPlay(type, value, position = 0, resume = 0, callback) { + return this.insert(type, value, position, resp => { + return this.playPosition(position, resume, callback); + }); + } + + //# Play a position in the playlist with optional resume + playPosition(position = 0, resume = 0, callback) { + return this.playEntity('position', parseInt(position), {}, () => { + if (resume > 0) { + // Seek to resume point if not 0. Setting option {resume: true} does not work :( + App.execute("player:kodi:progress:update", resume); + } + return this.doCallback(callback); + }); + } + + //# Get the size of the current playlist + playlistSize(callback) { + return this.getItems(resp => { + const position = (resp.items != null) ? resp.items.length : 0; + return this.doCallback(callback, position); + }); + } + + //# Refresh playlist + refreshPlaylistView() { + const wsActive = App.request("sockets:active"); + if (!wsActive) { + return App.execute("playlist:refresh", 'kodi', this.playerName); + } + } + + //# Move Item + moveItem(media, id, position1, position2, callback) { + const idProp = media === 'file' ? 'file' : media + 'id'; + return this.singleCommand(this.getCommand('Remove'), [this.getPlayer(), parseInt(position1)], resp => { + return this.insert(idProp, id, position2, () => { + return this.doCallback(callback, position2); + }); + }); + } + }); + Cls.initClass(); + return Cls; +})()); + diff --git a/src/js/apps/command/kodi/helpers/playlist.js.coffee b/src/js/apps/command/kodi/helpers/playlist.js.coffee deleted file mode 100644 index c2137e99..00000000 --- a/src/js/apps/command/kodi/helpers/playlist.js.coffee +++ /dev/null @@ -1,133 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Playlist requires some player functionality but is also its - ## own thing so it extends the player. - class Api.PlayList extends Api.Player - - commandNameSpace: 'Playlist' - - ## Play an item. Rules: - ## - If in the playlist already, play that item - ## - If currently playing, insert it next and play - ## - If not playing clear playlist, add and play - ## - If resume > 0 will resume from that point - play: (type, value, model, resume = 0, callback) -> - # Get items in the playlist - @getItems (currentPlaylist) => - # If item is already in th playlist, play that - plItem = {type: type.replace('id', ''), id: value} - inPlaylist = if currentPlaylist.items then _.findWhere(currentPlaylist.items, plItem) else false - if inPlaylist - @playPosition inPlaylist.position, resume, callback - else - # Item needs to be added to playlist - stateObj = App.request "state:kodi" - ## If playing, queue up next. - if stateObj.isPlaying(@getPlayerName()) - pos = if currentPlaylist.items then (stateObj.getPlaying('position') + 1) else 0 - @insertAndPlay type, value, pos, resume, callback - else - @clear => - @insertAndPlay type, value, 0, resume, callback - - ## Add a collection of models wrapper, will clear if not playing - addCollection: (collection, position = 0, callback) -> - stateObj = App.request "state:kodi" - ## If playing, queue up next. - if stateObj.isPlaying(@getPlayerName()) - position = (stateObj.getPlaying('position') + 1) - @addCollectionItems collection, position, callback - else - @clear => - @addCollectionItems collection, position, callback - position - - ## Add a collection of models - addCollectionItems: (collection, position = 0, callback) -> - App.execute "notification:show", t.gettext("Adding items to the queue") - models = collection.getRawCollection() - player = @getPlayer() - commands = [] - ## build a set of commands so we can add all the models with one request. - for i, model of models - pos = parseInt(position) + parseInt(i) - type = if model.type is 'file' then 'file' else model.type + 'id' - params = [player, pos, @paramObj(type, model[type])] - commands.push {method: @getCommand('Insert'), params: params} - @multipleCommands commands, (resp) => - @doCallback callback, resp - @refreshPlaylistView() - - # Add a collection of models. - playCollection: (collection, position = 0) -> - pos = @addCollection collection, position, (resp) => - @playEntity 'position', parseInt(pos), {}, => - @refreshPlaylistView() - - ## Add a item to the end of the playlist - add: (type, value) -> - @playlistSize (size) => - @insert type, value, size - - ## Remove an item from the list - remove: (position, callback) -> - @singleCommand @getCommand('Remove'), [@getPlayer(), parseInt(position)], (resp) => - @refreshPlaylistView() - @doCallback callback, resp - - ## Clear a playlist. - clear: (callback) -> - @singleCommand @getCommand('Clear'), [@getPlayer()], (resp) => - @doCallback callback, resp - - ## Insert a song at a position - insert: (type, value, position = 0, callback) -> - @singleCommand @getCommand('Insert'), [@getPlayer(), parseInt(position), @paramObj(type,value)], (resp) => - @refreshPlaylistView() - @doCallback callback, resp - - ## Get items in a playlist - getItems: (callback) -> - @singleCommand @getCommand('GetItems'), [@getPlayer(), ['title']], (resp) => - @doCallback callback, @parseItems(resp) - - ## Add position to each item in the playlist - parseItems: (resp) -> - if resp.items - resp.items = _.map resp.items, (item, idx) -> - item.position = parseInt(idx) - item - resp - - ## Insert a song at a position and play it - insertAndPlay: (type, value, position = 0, resume = 0, callback) -> - @insert type, value, position, (resp) => - @playPosition position, resume, callback - - ## Play a position in the playlist with optional resume - playPosition: (position = 0, resume = 0, callback) -> - @playEntity 'position', parseInt(position), {}, => - if resume > 0 - # Seek to resume point if not 0. Setting option {resume: true} does not work :( - App.execute "player:kodi:progress:update", resume - @doCallback callback - - ## Get the size of the current playlist - playlistSize: (callback) -> - @getItems (resp) => - position = if resp.items? then resp.items.length else 0 - @doCallback callback, position - - ## Refresh playlist - refreshPlaylistView: -> - wsActive = App.request "sockets:active" - if not wsActive - App.execute "playlist:refresh", 'kodi', @playerName - - ## Move Item - moveItem: (media, id, position1, position2, callback) -> - idProp = if media is 'file' then 'file' else media + 'id' - @singleCommand @getCommand('Remove'), [@getPlayer(), parseInt(position1)], (resp) => - @insert idProp, id, position2, => - @doCallback callback, position2 - diff --git a/src/js/apps/command/kodi/helpers/pvr.js b/src/js/apps/command/kodi/helpers/pvr.js new file mode 100644 index 00000000..607a4d18 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/pvr.js @@ -0,0 +1,53 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# PVR +(function() { + const Cls = (Api.PVR = class PVR extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'PVR'; + } + + //# Start recording a channel + setRecord(id, fields = {}, callback) { + let params = {channel: id, record: 'toggle'}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('Record'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Toggle timer on a broadcast + toggleTimer(id, timerRule = false, callback) { + const params = {broadcastid: id, timerrule: timerRule}; + return this.singleCommand(this.getCommand('ToggleTimer'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Add timer on a broadcast + addTimer(id, timerRule = false, callback) { + const params = {broadcastid: id, timerrule: timerRule}; + return this.singleCommand(this.getCommand('AddTimer'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Remove a timer id + deleteTimer(id, callback) { + const params = {timerid: id}; + return this.singleCommand(this.getCommand('DeleteTimer'), params, resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/pvr.js.coffee b/src/js/apps/command/kodi/helpers/pvr.js.coffee deleted file mode 100644 index cbb1599a..00000000 --- a/src/js/apps/command/kodi/helpers/pvr.js.coffee +++ /dev/null @@ -1,31 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## PVR - class Api.PVR extends Api.Commander - - commandNameSpace: 'PVR' - - ## Start recording a channel - setRecord: (id, fields = {}, callback) -> - params = {channel: id, record: 'toggle'} - params = _.extend params, fields - @singleCommand @getCommand('Record'), params, (resp) => - @doCallback callback, resp - - ## Toggle timer on a broadcast - toggleTimer: (id, timerRule = false, callback) -> - params = {broadcastid: id, timerrule: timerRule} - @singleCommand @getCommand('ToggleTimer'), params, (resp) => - @doCallback callback, resp - - ## Add timer on a broadcast - addTimer: (id, timerRule = false, callback) -> - params = {broadcastid: id, timerrule: timerRule} - @singleCommand @getCommand('AddTimer'), params, (resp) => - @doCallback callback, resp - - ## Remove a timer id - deleteTimer: (id, callback) -> - params = {timerid: id} - @singleCommand @getCommand('DeleteTimer'), params, (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/kodi/helpers/settings.coffee b/src/js/apps/command/kodi/helpers/settings.coffee deleted file mode 100644 index c60e91b8..00000000 --- a/src/js/apps/command/kodi/helpers/settings.coffee +++ /dev/null @@ -1,10 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## GUI - class Api.Settings extends Api.Commander - - commandNameSpace: 'Settings' - - getSettingValue: (value, callback) -> - @sendCommand "getSettingValue", [value], (resp) => - @doCallback callback, resp.value diff --git a/src/js/apps/command/kodi/helpers/settings.js b/src/js/apps/command/kodi/helpers/settings.js new file mode 100644 index 00000000..66ed1c1e --- /dev/null +++ b/src/js/apps/command/kodi/helpers/settings.js @@ -0,0 +1,26 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# GUI +(function() { + const Cls = (Api.Settings = class Settings extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'Settings'; + } + + getSettingValue(value, callback) { + return this.sendCommand("getSettingValue", [value], resp => { + return this.doCallback(callback, resp.value); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/system.js b/src/js/apps/command/kodi/helpers/system.js new file mode 100644 index 00000000..b0c17a94 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/system.js @@ -0,0 +1,51 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Application commander. +(function() { + const Cls = (Api.System = class System extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'System'; + } + + getProperties(callback) { + const properties = ["canshutdown", "cansuspend", "canhibernate", "canreboot"]; + return this.singleCommand(this.getCommand('GetProperties'), [properties], resp => { + return this.doCallback(callback, resp); + }); + } + + hibernate(callback) { + return this.singleCommand(this.getCommand('Hibernate'), [], resp => { + return this.doCallback(callback, resp); + }); + } + + reboot(callback) { + return this.singleCommand(this.getCommand('Reboot'), [], resp => { + return this.doCallback(callback, resp); + }); + } + + shutdown(callback) { + return this.singleCommand(this.getCommand('Shutdown'), [], resp => { + return this.doCallback(callback, resp); + }); + } + + suspend(callback) { + return this.singleCommand(this.getCommand('Suspend'), [], resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/system.js.coffee b/src/js/apps/command/kodi/helpers/system.js.coffee deleted file mode 100644 index 4a69bb8b..00000000 --- a/src/js/apps/command/kodi/helpers/system.js.coffee +++ /dev/null @@ -1,27 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Application commander. - class Api.System extends Api.Commander - - commandNameSpace: 'System' - - getProperties: (callback) -> - properties = ["canshutdown", "cansuspend", "canhibernate", "canreboot"] - @singleCommand @getCommand('GetProperties'), [properties], (resp) => - @doCallback callback, resp - - hibernate: (callback) -> - @singleCommand @getCommand('Hibernate'), [], (resp) => - @doCallback callback, resp - - reboot: (callback) -> - @singleCommand @getCommand('Reboot'), [], (resp) => - @doCallback callback, resp - - shutdown: (callback) -> - @singleCommand @getCommand('Shutdown'), [], (resp) => - @doCallback callback, resp - - suspend: (callback) -> - @singleCommand @getCommand('Suspend'), [], (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/kodi/helpers/videolibrary.js b/src/js/apps/command/kodi/helpers/videolibrary.js new file mode 100644 index 00000000..f4caa602 --- /dev/null +++ b/src/js/apps/command/kodi/helpers/videolibrary.js @@ -0,0 +1,128 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) => //# Video Library +(function() { + const Cls = (Api.VideoLibrary = class VideoLibrary extends Api.Commander { + static initClass() { + + this.prototype.commandNameSpace = 'VideoLibrary'; + } + + //# Set a episode value + setEpisodeDetails(id, fields = {}, callback) { + let params = {episodeid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetEpisodeDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a movie value + setMovieDetails(id, fields = {}, callback) { + let params = {movieid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetMovieDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a tvshow value + setTVShowDetails(id, fields = {}, callback) { + let params = {tvshowid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetTVShowDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Set a music video value + setMusicVideoDetails(id, fields = {}, callback) { + let params = {musicvideoid: id}; + params = _.extend(params, fields); + return this.singleCommand(this.getCommand('SetMusicVideoDetails'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Scan library + scan(callback) { + return this.singleCommand(this.getCommand('Scan'), resp => { + return this.doCallback(callback, resp); + }); + } + + //# Clean library + clean(callback) { + return this.singleCommand(this.getCommand('Clean'), {showdialogs: false}, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Toggle watched on a collection. op is 'watched' or 'unwatched' + toggleWatchedCollection(collection, op, callback) { + for (var i in collection.models) { + var model = collection.models[i]; + this.toggleWatched(model, op); + } + return this.doCallback(callback, true); + } + + //# Toggle watched status. op is 'watched' or 'unwatched' + toggleWatched(model, op = 'auto', callback) { + let setPlaycount; + if (op === 'auto') { + setPlaycount = model.get('playcount') > 0 ? 0 : 1; + } else if (op === 'watched') { + setPlaycount = 1; + } else if (op === 'unwatched') { + setPlaycount = 0; + } + const fields = helpers.global.paramObj('playcount', setPlaycount); + if (model.get('type') === 'movie') { + this.setMovieDetails(model.get('id'), fields, () => { + App.vent.trigger('entity:kodi:update', model.get('uid')); + return this.doCallback(callback, setPlaycount); + }); + } + if (model.get('type') === 'episode') { + return this.setEpisodeDetails(model.get('id'), fields, () => { + App.vent.trigger('entity:kodi:update', model.get('uid')); + return this.doCallback(callback, setPlaycount); + }); + } + } + + //# Refresh a movie + refreshMovie(id, params, callback) { + params = _.extend({movieid: id, ignorenfo: false}, params); + return this.singleCommand(this.getCommand('RefreshMovie'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Refresh a tvshow + refreshTVShow(id, params, callback) { + params = _.extend({tvshowid: id, ignorenfo: false}, params); + return this.singleCommand(this.getCommand('RefreshTVShow'), params, resp => { + return this.doCallback(callback, resp); + }); + } + + //# Refresh an episode + refreshEpisode(id, params, callback) { + params = _.extend({episodeid: id, ignorenfo: false}, params); + return this.singleCommand(this.getCommand('RefreshEpisode'), params, resp => { + return this.doCallback(callback, resp); + }); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/command/kodi/helpers/videolibrary.js.coffee b/src/js/apps/command/kodi/helpers/videolibrary.js.coffee deleted file mode 100644 index a4bb6206..00000000 --- a/src/js/apps/command/kodi/helpers/videolibrary.js.coffee +++ /dev/null @@ -1,86 +0,0 @@ -@Kodi.module "CommandApp.Kodi", (Api, App, Backbone, Marionette, $, _) -> - - ## Video Library - class Api.VideoLibrary extends Api.Commander - - commandNameSpace: 'VideoLibrary' - - ## Set a episode value - setEpisodeDetails: (id, fields = {}, callback) -> - params = {episodeid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetEpisodeDetails'), params, (resp) => - @doCallback callback, resp - - ## Set a movie value - setMovieDetails: (id, fields = {}, callback) -> - params = {movieid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetMovieDetails'), params, (resp) => - @doCallback callback, resp - - ## Set a tvshow value - setTVShowDetails: (id, fields = {}, callback) -> - params = {tvshowid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetTVShowDetails'), params, (resp) => - @doCallback callback, resp - - ## Set a music video value - setMusicVideoDetails: (id, fields = {}, callback) -> - params = {musicvideoid: id} - params = _.extend params, fields - @singleCommand @getCommand('SetMusicVideoDetails'), params, (resp) => - @doCallback callback, resp - - ## Scan library - scan: (callback) -> - @singleCommand @getCommand('Scan'), (resp) => - @doCallback callback, resp - - ## Clean library - clean: (callback) -> - @singleCommand @getCommand('Clean'), {showdialogs: false}, (resp) => - @doCallback callback, resp - - ## Toggle watched on a collection. op is 'watched' or 'unwatched' - toggleWatchedCollection: (collection, op, callback) -> - for i, model of collection.models - @toggleWatched model, op - @doCallback callback, true - - ## Toggle watched status. op is 'watched' or 'unwatched' - toggleWatched: (model, op = 'auto', callback) -> - if op is 'auto' - setPlaycount = if model.get('playcount') > 0 then 0 else 1 - else if op is 'watched' - setPlaycount = 1 - else if op is 'unwatched' - setPlaycount = 0 - fields = helpers.global.paramObj 'playcount', setPlaycount - if model.get('type') is 'movie' - @setMovieDetails model.get('id'), fields, => - App.vent.trigger 'entity:kodi:update', model.get('uid') - @doCallback callback, setPlaycount - if model.get('type') is 'episode' - @setEpisodeDetails model.get('id'), fields, => - App.vent.trigger 'entity:kodi:update', model.get('uid') - @doCallback callback, setPlaycount - - ## Refresh a movie - refreshMovie: (id, params, callback) -> - params = _.extend {movieid: id, ignorenfo: false}, params - @singleCommand @getCommand('RefreshMovie'), params, (resp) => - @doCallback callback, resp - - ## Refresh a tvshow - refreshTVShow: (id, params, callback) -> - params = _.extend {tvshowid: id, ignorenfo: false}, params - @singleCommand @getCommand('RefreshTVShow'), params, (resp) => - @doCallback callback, resp - - ## Refresh an episode - refreshEpisode: (id, params, callback) -> - params = _.extend {episodeid: id, ignorenfo: false}, params - @singleCommand @getCommand('RefreshEpisode'), params, (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/local/_base/_base.js b/src/js/apps/command/local/_base/_base.js new file mode 100644 index 00000000..846a805b --- /dev/null +++ b/src/js/apps/command/local/_base/_base.js @@ -0,0 +1,263 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Local", function(Api, App, Backbone, Marionette, $, _) { + + return Api.Base = class Base extends Marionette.Object { + + localLoad(model, callback) { + + //# Local state obj + const stateObj = App.request("state:local"); + + //# If no valid model passed tell the UI we have stopped + if ((model == null)) { + stateObj.setPlaying('playing', false); + this.localStateUpdate(); + return; + } + + //# Unique browser playback id + stateObj.setState('currentPlaybackId', 'browser-' + model.get('id')); + + //# Get the download path for the file. + const files = App.request("command:kodi:controller", 'video', 'Files'); + return files.downloadPath(model.get('file'), path => { + + //# Clone soundmanager + const sm = soundManager; + + //# Stop anything currently playing + this.localStop(); + + //# Create a sm object and load it into the state + stateObj.setState('localPlay', sm.createSound({ + id: stateObj.getState('currentPlaybackId'), + url: path, + autoplay: false, + autoLoad: true, + stream: true, + volume: stateObj.getState('volume'), + onerror() { + return console.log('SM ERROR!'); + }, + onplay: () => { + stateObj.setPlayer('local'); + stateObj.setPlaying('playing', true); + stateObj.setPlaying('paused', false); + stateObj.setPlaying('playState', 'playing'); + stateObj.setPlaying('position', model.get('position')); + stateObj.setPlaying('itemChanged', true); + stateObj.setPlaying('item', model.attributes); + stateObj.setPlaying('totaltime', helpers.global.secToTime( model.get('duration') )); + //# Set volume + //# Trigger listeners + return this.localStateUpdate(); + }, + onstop: () => { + stateObj.setPlaying('playing', false); + //# trigger listeners (remove classes, etc) + return this.localStateUpdate(); + }, + onpause: () => { + stateObj.setPlaying('paused', true); + stateObj.setPlaying('playState', 'paused'); + //# trigger listeners + return this.localStateUpdate(); + }, + onresume: () => { + stateObj.setPlaying('paused', false); + stateObj.setPlaying('playState', 'playing'); + //# trigger listeners + return this.localStateUpdate(); + }, + onfinish: () => { + return this.localFinished(); + }, + whileplaying() { + const pos = parseInt(this.position) / 1000; + const dur = parseInt( model.get('duration') ); //# @duration is also available (represents loaded not total) + const percentage = Math.round((pos / dur) * 100); + stateObj.setPlaying('time', helpers.global.secToTime(pos)); + stateObj.setPlaying('percentage', percentage); + return App.execute('player:local:progress:update', percentage, helpers.global.secToTime(pos)); + } + }) + ); + + //# stuff after load + return this.doCallback(callback); + }); + } + + + //# What to do when finished. + localFinished() { + return this.localGoTo('next'); + } + + //# Wrapper for playing current item. + localPlay() { + return this.localCommand('play'); + } + + //# Wrapper for stopping current item. + localStop() { + return this.localCommand('stop'); + } + + //# Wrapper for pausing current item. + localPause() { + return this.localCommand('pause'); + } + + localPlayPause() { + const stateObj = App.request("state:local"); + if (stateObj.getPlaying('paused')) { + return this.localCommand('play'); + } else { + return this.localCommand('pause'); + } + } + + //# Set volume + localSetVolume(volume) { + return this.localCommand('setVolume', volume); + } + + //# Wrapper for calling a command on the current soundmanager sound. + localCommand(command, param) { + const stateObj = App.request("state:local"); + const currentItem = stateObj.getState('localPlay'); + if (currentItem !== false) { + currentItem[command](param); + } + return this.localStateUpdate(); + } + + //# Go to next/prev item adhering to repeat and shuffle + localGoTo(param) { + //# Get current playlist and state + const collection = App.request("localplayer:get:entities"); + const stateObj = App.request("state:local"); + const currentPos = stateObj.getPlaying('position'); + let posToPlay = false; + //# Need songs to continue. + if (collection.length > 0) { + //# Repeat this item + if (stateObj.getState('repeat') === 'one') { + posToPlay = currentPos; + } else if (stateObj.getState('shuffled') === true) { + //# Shuffle + //# TODO: store what positions have been played so we dont repeat + posToPlay = helpers.global.getRandomInt(0, collection.length - 1); + } else { + //# Next action + if (param === 'next') { + //# repeat all, back to the start + if ((currentPos === (collection.length - 1)) && (stateObj.getState('repeat') === 'all')) { + posToPlay = 0; + } else if (currentPos < collection.length) { + //# Standard next + posToPlay = currentPos + 1; + } + this.localStateNext(); + } + //# Prev action + if (param === 'previous') { + //# repeat all, go to the end + if ((currentPos === 0) && (stateObj.getState('repeat') === 'all')) { + posToPlay = collection.length - 1; + } else if (currentPos > 0) { + //# Standard prev + posToPlay = currentPos - 1; + } + } + } + } + //# Check we have a position to play, if so, play it. + if (posToPlay !== false) { + const model = collection.findWhere({position: parseInt(posToPlay)}); + return this.localLoad(model, () => { + this.localPlay(); + return this.localStateUpdate(); + }); + } + } + + //# Seek to a percentage in the song + localSeek(param) { + const stateObj = App.request("state:local"); + const localPlay = stateObj.getState('localPlay'); + if (localPlay !== false) { + const newPos = (param.percentage / 100) * localPlay.duration; + const sound = soundManager.getSoundById(stateObj.getState('currentPlaybackId')); + return sound.setPosition(newPos); + } + } + + //# Set repeat state (cycle is available). + localRepeat(param) { + const stateObj = App.request("state:local"); + if (param !== 'cycle') { + return stateObj.setState('repeat', param); + } else { + let newState = false; + const states = ['off', 'all', 'one']; + for (var i in states) { + var state = states[i]; + i = parseInt(i); + if (newState !== false) { + continue; + } + if (stateObj.getState('repeat') === state) { + if (i !== (states.length - 1)) { + var key = i + 1; + newState = states[key]; + } else { + newState = 'off'; + } + } + } + return stateObj.setState('repeat', newState); + } + } + + //# Toggle shuffle + localShuffle() { + const stateObj = App.request("state:local"); + const currentShuffle = stateObj.getState('shuffled'); + return stateObj.setState('shuffled', !currentShuffle); + } + + //# Triggers when something changes in the player. + localStateUpdate() { + return App.vent.trigger("state:local:changed"); + } + + //# Trigger when we have moved to the next song + localStateNext() { + return App.vent.trigger("state:local:next"); + } + + paramObj(key, val) { + return helpers.global.paramObj(key, val); + } + + doCallback(callback, response) { + if (typeof callback === 'function') { + return callback(response); + } + } + + onError(commands, error) { + return helpers.debug.rpcError(commands, error); + } + }; +}); diff --git a/src/js/apps/command/local/_base/_base.js.coffee b/src/js/apps/command/local/_base/_base.js.coffee deleted file mode 100644 index 2a2a14c1..00000000 --- a/src/js/apps/command/local/_base/_base.js.coffee +++ /dev/null @@ -1,206 +0,0 @@ -@Kodi.module "CommandApp.Local", (Api, App, Backbone, Marionette, $, _) -> - - class Api.Base extends Marionette.Object - - localLoad: (model, callback) -> - - ## Local state obj - stateObj = App.request "state:local" - - ## If no valid model passed tell the UI we have stopped - if not model? - stateObj.setPlaying 'playing', false - @localStateUpdate() - return - - ## Unique browser playback id - stateObj.setState 'currentPlaybackId', 'browser-' + model.get('id') - - ## Get the download path for the file. - files = App.request "command:kodi:controller", 'video', 'Files' - files.downloadPath model.get('file'), (path) => - - ## Clone soundmanager - sm = soundManager; - - ## Stop anything currently playing - @localStop() - - ## Create a sm object and load it into the state - stateObj.setState 'localPlay', sm.createSound - id: stateObj.getState('currentPlaybackId') - url: path - autoplay: false - autoLoad: true - stream: true - volume: stateObj.getState('volume') - onerror: -> - console.log 'SM ERROR!' - onplay: => - stateObj.setPlayer 'local' - stateObj.setPlaying 'playing', true - stateObj.setPlaying 'paused', false - stateObj.setPlaying 'playState', 'playing' - stateObj.setPlaying 'position', model.get('position') - stateObj.setPlaying 'itemChanged', true - stateObj.setPlaying 'item', model.attributes - stateObj.setPlaying 'totaltime', helpers.global.secToTime( model.get('duration') ) - ## Set volume - ## Trigger listeners - @localStateUpdate() - onstop: => - stateObj.setPlaying 'playing', false - ## trigger listeners (remove classes, etc) - @localStateUpdate() - onpause: => - stateObj.setPlaying 'paused', true - stateObj.setPlaying 'playState', 'paused' - ## trigger listeners - @localStateUpdate() - onresume: => - stateObj.setPlaying 'paused', false - stateObj.setPlaying 'playState', 'playing' - ## trigger listeners - @localStateUpdate() - onfinish: => - @localFinished() - whileplaying: -> - pos = parseInt(@position) / 1000 - dur = parseInt( model.get('duration') ) ## @duration is also available (represents loaded not total) - percentage = Math.round((pos / dur) * 100) - stateObj.setPlaying 'time', helpers.global.secToTime(pos) - stateObj.setPlaying 'percentage', percentage - App.execute 'player:local:progress:update', percentage, helpers.global.secToTime(pos) - - ## stuff after load - @doCallback callback - - - ## What to do when finished. - localFinished: -> - @localGoTo('next') - - ## Wrapper for playing current item. - localPlay: -> - @localCommand 'play' - - ## Wrapper for stopping current item. - localStop: -> - @localCommand 'stop' - - ## Wrapper for pausing current item. - localPause: -> - @localCommand 'pause' - - localPlayPause: -> - stateObj = App.request "state:local" - if stateObj.getPlaying 'paused' - @localCommand 'play' - else - @localCommand 'pause' - - ## Set volume - localSetVolume: (volume) -> - @localCommand 'setVolume', volume - - ## Wrapper for calling a command on the current soundmanager sound. - localCommand: (command, param) -> - stateObj = App.request "state:local" - currentItem = stateObj.getState 'localPlay' - if currentItem isnt false - currentItem[command](param) - @localStateUpdate() - - ## Go to next/prev item adhering to repeat and shuffle - localGoTo: (param) -> - ## Get current playlist and state - collection = App.request "localplayer:get:entities" - stateObj = App.request "state:local" - currentPos = stateObj.getPlaying 'position' - posToPlay = false - ## Need songs to continue. - if collection.length > 0 - ## Repeat this item - if stateObj.getState('repeat') is 'one' - posToPlay = currentPos - else if stateObj.getState('shuffled') is true - ## Shuffle - ## TODO: store what positions have been played so we dont repeat - posToPlay = helpers.global.getRandomInt 0, collection.length - 1 - else - ## Next action - if param is 'next' - ## repeat all, back to the start - if currentPos is collection.length - 1 and stateObj.getState('repeat') is 'all' - posToPlay = 0 - else if currentPos < collection.length - ## Standard next - posToPlay = currentPos + 1 - @localStateNext() - ## Prev action - if param is 'previous' - ## repeat all, go to the end - if currentPos is 0 and stateObj.getState('repeat') is 'all' - posToPlay = collection.length - 1 - else if currentPos > 0 - ## Standard prev - posToPlay = currentPos - 1 - ## Check we have a position to play, if so, play it. - if posToPlay isnt false - model = collection.findWhere {position: parseInt(posToPlay)} - @localLoad model, => - @localPlay() - @localStateUpdate() - - ## Seek to a percentage in the song - localSeek: (param) -> - stateObj = App.request "state:local" - localPlay = stateObj.getState 'localPlay' - if localPlay isnt false - newPos = (param.percentage / 100) * localPlay.duration - sound = soundManager.getSoundById stateObj.getState('currentPlaybackId') - sound.setPosition newPos - - ## Set repeat state (cycle is available). - localRepeat: (param) -> - stateObj = App.request "state:local" - if param isnt 'cycle' - stateObj.setState('repeat', param) - else - newState = false - states = ['off', 'all', 'one'] - for i, state of states - i = parseInt(i) - if newState isnt false - continue - if stateObj.getState('repeat') is state - if i isnt (states.length - 1) - key = i + 1 - newState = states[key] - else - newState = 'off' - stateObj.setState('repeat', newState) - - ## Toggle shuffle - localShuffle: -> - stateObj = App.request "state:local" - currentShuffle = stateObj.getState 'shuffled' - stateObj.setState 'shuffled', !currentShuffle - - ## Triggers when something changes in the player. - localStateUpdate: -> - App.vent.trigger "state:local:changed" - - ## Trigger when we have moved to the next song - localStateNext: -> - App.vent.trigger "state:local:next" - - paramObj: (key, val) -> - helpers.global.paramObj key, val - - doCallback: (callback, response) -> - if typeof callback is 'function' - callback response - - onError: (commands, error) -> - helpers.debug.rpcError commands, error diff --git a/src/js/apps/command/local/_base/api.js b/src/js/apps/command/local/_base/api.js new file mode 100644 index 00000000..d2d1871e --- /dev/null +++ b/src/js/apps/command/local/_base/api.js @@ -0,0 +1,65 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Local", function(Api, App, Backbone, Marionette, $, _) { + + + //# Base commander with shared functionality. + Api.Commander = class Commander extends Api.Base {}; + //# See Api.Base for soundmanager abstraction + + //# Player commander. + return Api.Player = class Player extends Api.Commander { + + playEntity(type = 'position', position, callback) { + const collection = App.request("localplayer:get:entities"); + const model = collection.findWhere({position}); + return this.localLoad(model, () => { + this.localPlay(); + //# Start playback of playlist position x + return this.doCallback(callback, position); + }); + } + + //# Mimics Kodi Player Commands. + sendCommand(command, param) { + switch (command) { + case 'GoTo': + this.localGoTo(param); + break; + case 'PlayPause': + this.localPlayPause(); + break; + case 'Seek': + this.localSeek(param); + break; + case 'SetRepeat': + //# param can be 'cycle', 'off', 'all' or 'one' + this.localRepeat(param); + break; + case 'SetShuffle': + //# Toggles shuffle + this.localShuffle(); + break; + case 'Stop': + this.localStop(); + break; + default: + } + //# nothing + return this.localStateUpdate(); + } + + //# Start, stop, toggle local party mode + setPartyMode(op = 'toggle', callback) { + return App.execute('playlist:local:partymode', op, resp => { + return this.doCallback(callback, resp); + }); + } + }; +}); diff --git a/src/js/apps/command/local/_base/api.js.coffee b/src/js/apps/command/local/_base/api.js.coffee deleted file mode 100644 index dd11e74b..00000000 --- a/src/js/apps/command/local/_base/api.js.coffee +++ /dev/null @@ -1,43 +0,0 @@ -@Kodi.module "CommandApp.Local", (Api, App, Backbone, Marionette, $, _) -> - - - ## Base commander with shared functionality. - class Api.Commander extends Api.Base - ## See Api.Base for soundmanager abstraction - - ## Player commander. - class Api.Player extends Api.Commander - - playEntity: (type = 'position', position, callback) -> - collection = App.request "localplayer:get:entities" - model = collection.findWhere {position: position} - @localLoad model, => - @localPlay() - ## Start playback of playlist position x - @doCallback callback, position - - ## Mimics Kodi Player Commands. - sendCommand: (command, param) -> - switch command - when 'GoTo' - @localGoTo param - when 'PlayPause' - @localPlayPause() - when 'Seek' - @localSeek param - when 'SetRepeat' - ## param can be 'cycle', 'off', 'all' or 'one' - @localRepeat param - when 'SetShuffle' - ## Toggles shuffle - @localShuffle() - when 'Stop' - @localStop() - else - ## nothing - @localStateUpdate() - - ## Start, stop, toggle local party mode - setPartyMode: (op = 'toggle', callback) -> - App.execute 'playlist:local:partymode', op, (resp) => - @doCallback callback, resp diff --git a/src/js/apps/command/local/helpers/application.js b/src/js/apps/command/local/helpers/application.js new file mode 100644 index 00000000..44059acd --- /dev/null +++ b/src/js/apps/command/local/helpers/application.js @@ -0,0 +1,47 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Local", function(Api, App, Backbone, Marionette, $, _) { + + //# Application commander. + return Api.Application = class Application extends Api.Commander { + + getProperties(callback) { + const stateObj = App.request("state:local"); + const resp = { + volume: stateObj.getState('volume'), + muted: stateObj.getState('muted') + }; + return this.doCallback(callback, resp); + } + + setVolume(volume, callback) { + const stateObj = App.request("state:local"); + stateObj.setState('volume', volume); + this.localSetVolume(volume); + return this.doCallback(callback, volume); + } + + toggleMute(callback) { + const stateObj = App.request("state:local"); + let volume = 0; + if (stateObj.getState('muted')) { + //# unmute (last vol) + volume = stateObj.getState('lastVolume'); + stateObj.setState('muted', false); + } else { + //# set mute + stateObj.setState('lastVolume', stateObj.getState('volume')); + stateObj.setState('muted', true); + volume = 0; + } + this.localSetVolume(volume); + return this.doCallback(callback, volume); + } + }; +}); diff --git a/src/js/apps/command/local/helpers/application.js.coffee b/src/js/apps/command/local/helpers/application.js.coffee deleted file mode 100644 index af4db812..00000000 --- a/src/js/apps/command/local/helpers/application.js.coffee +++ /dev/null @@ -1,33 +0,0 @@ -@Kodi.module "CommandApp.Local", (Api, App, Backbone, Marionette, $, _) -> - - ## Application commander. - class Api.Application extends Api.Commander - - getProperties: (callback) -> - stateObj = App.request "state:local" - resp = { - volume: stateObj.getState 'volume' - muted: stateObj.getState 'muted' - } - @doCallback callback, resp - - setVolume: (volume, callback) -> - stateObj = App.request "state:local" - stateObj.setState 'volume', volume - @localSetVolume(volume) - @doCallback callback, volume - - toggleMute: (callback) -> - stateObj = App.request "state:local" - volume = 0 - if stateObj.getState 'muted' - ## unmute (last vol) - volume = stateObj.getState('lastVolume') - stateObj.setState 'muted', false - else - ## set mute - stateObj.setState 'lastVolume', stateObj.getState('volume') - stateObj.setState 'muted', true - volume = 0 - @localSetVolume(volume) - @doCallback callback, volume diff --git a/src/js/apps/command/local/helpers/playlist.js b/src/js/apps/command/local/helpers/playlist.js new file mode 100644 index 00000000..4262b01e --- /dev/null +++ b/src/js/apps/command/local/helpers/playlist.js @@ -0,0 +1,203 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Local", function(Api, App, Backbone, Marionette, $, _) { + + + //# Playlist requires some player functionality but is also its + //# own thing so it extends the player. + return Api.PlayList = class PlayList extends Api.Player { + + //# Play an item. + play(type, value, resume = 0) { + return this.getSongs(type, value, songs => { + return this.playCollection(songs); + }); + } + + //# Queue an item. + add(type, value) { + return this.getSongs(type, value, songs => { + return this.addCollection(songs); + }); + } + + //# Play a collection of song models. + playCollection(models) { + models = this.itemsJson(models); + //# TODO: Add logic for if something is already playing (like kodi controller) + return this.clear(() => { + return this.insertAndPlay(models, 0); + }); + } + + //# Add a item to the end of the playlist + addCollection(models) { + models = this.itemsJson(models); + return this.playlistSize(size => { + return this.insert(models, size); + }); + } + + //# Remove an item from the list + remove(position, callback) { + return this.getItems(collection => { + const raw = this.itemsJson(collection); + const ret = []; + for (var pos in raw) { + var item = raw[pos]; + if (parseInt(pos) !== parseInt(position)) { + ret.push(item); + } + } + return this.clear(() => { + collection = this.addItems(ret); + return this.doCallback(callback, collection); + }); + }); + } + + //# Clear a playlist. + clear(callback) { + const collection = App.execute("localplayer:clear:entities"); + this.refreshPlaylistView(); + return this.doCallback(callback, collection); + } + + //# Insert a song at a position models can be a sing model or an array. Expects raw json (not collection) + insert(models, position = 0, callback) { + return this.getItems(collection => { + let model, ret; + const raw = this.itemsJson(collection); + if (raw.length === 0) { + //# Empty list + ret = _.flatten( [models] ); + } else if (parseInt(position) >= raw.length) { + //# Adding to the end of a list + ret = raw; + for (model of _.flatten( [models] )) { + ret.push(model); + } + } else { + //# Insert in the middle of a list + ret = []; + for (var pos in raw) { + var item = raw[pos]; + if (parseInt(pos) === parseInt(position)) { + for (model of _.flatten( [models] )) { + ret.push(model); + } + } + ret.push(item); + } + } + return this.clear(() => { + collection = this.addItems(ret); + return this.doCallback(callback, collection); + }); + }); + } + + //# Add items to the end of a list + addItems(items) { + App.request("localplayer:item:add:entities", items); + this.updatePlayingPosition(items); + this.refreshPlaylistView(); + return items; + } + + //# Get the songs in a collection based on type type/value. + getSongs(type, value, callback) { + //# If a single song. + if (type === 'songid') { + return App.request("song:byid:entities", [value], songs => { + return this.doCallback(callback, songs.getRawCollection()); + }); + } else { + //# Else it's a filtered collection (artist, album, etc) + const songs = App.request("song:entities", {filter: helpers.global.paramObj(type, value)}); + return App.execute("when:entity:fetched", songs, () => { + return this.doCallback(callback, songs.getRawCollection()); + }); + } + } + + //# Get items in a playlist + getItems(callback) { + const collection = App.request("localplayer:get:entities"); + return this.doCallback(callback, collection); + } + + //# If collection, normalise to JSON, if JSON pass through. + itemsJson(collection) { + const items = _.isArray(collection) ? collection : collection.toJSON(); + return items; + } + + //# Insert a song at a position and play it + insertAndPlay(models, position = 0, callback) { + return this.insert(models, position, resp => { + return this.playEntity('position', parseInt(position), {}, () => { + return this.doCallback(callback, position); + }); + }); + } + + //# Get the size of the current playlist + playlistSize(callback) { + return this.getItems(resp => { + return this.doCallback(callback, resp.length); + }); + } + + //# Refresh playlist + refreshPlaylistView() { + return App.execute("playlist:refresh", 'local', 'audio'); + } + + //# Move Item + moveItem(media, id, position1, position2, callback) { + return this.getItems(collection => { + const raw = collection.getRawCollection(); + const item = raw[position1]; + return this.remove(position1, () => { + return this.insert(item, position2, () => { + return this.doCallback(callback, position2); + }); + }); + }); + } + + //# After items in playlist have changed, this updates the playing position + //# TODO: Make this less buggy, does weird things when tracks changed in party mode + updatePlayingPosition(collection) { + const stateObj = App.request("state:local"); + if (stateObj.isPlaying()) { + const model = stateObj.getPlaying('item'); + if (model.uid) { + let set = false; + let pos = 0; + const object = this.itemsJson(collection); + for (var i in object) { + var m = object[i]; + if (set === true) { + continue; + } + if (m.uid === model.uid) { + pos = parseInt(i); + set = true; + } + } + model.position = pos; + stateObj.setPlaying('item', model); + return stateObj.setPlaying('position', pos); + } + } + } + }; +}); diff --git a/src/js/apps/command/local/helpers/playlist.js.coffee b/src/js/apps/command/local/helpers/playlist.js.coffee deleted file mode 100644 index 9c25b19b..00000000 --- a/src/js/apps/command/local/helpers/playlist.js.coffee +++ /dev/null @@ -1,143 +0,0 @@ -@Kodi.module "CommandApp.Local", (Api, App, Backbone, Marionette, $, _) -> - - - ## Playlist requires some player functionality but is also its - ## own thing so it extends the player. - class Api.PlayList extends Api.Player - - ## Play an item. - play: (type, value, resume = 0) -> - @getSongs type, value, (songs) => - @playCollection songs - - ## Queue an item. - add: (type, value) -> - @getSongs type, value, (songs) => - @addCollection songs - - ## Play a collection of song models. - playCollection: (models) -> - models = @itemsJson models - ## TODO: Add logic for if something is already playing (like kodi controller) - @clear => - @insertAndPlay models, 0 - - ## Add a item to the end of the playlist - addCollection: (models) -> - models = @itemsJson models - @playlistSize (size) => - @insert models, size - - ## Remove an item from the list - remove: (position, callback) -> - @getItems (collection) => - raw = @itemsJson collection - ret = [] - for pos, item of raw - if parseInt(pos) isnt parseInt(position) - ret.push item - @clear => - collection = @addItems ret - @doCallback callback, collection - - ## Clear a playlist. - clear: (callback) -> - collection = App.execute "localplayer:clear:entities" - @refreshPlaylistView() - @doCallback callback, collection - - ## Insert a song at a position models can be a sing model or an array. Expects raw json (not collection) - insert: (models, position = 0, callback) -> - @getItems (collection) => - raw = @itemsJson collection - if raw.length is 0 - ## Empty list - ret = _.flatten( [models] ) - else if parseInt(position) >= raw.length - ## Adding to the end of a list - ret = raw - for model in _.flatten( [models] ) - ret.push model - else - ## Insert in the middle of a list - ret = [] - for pos, item of raw - if parseInt(pos) is parseInt(position) - for model in _.flatten( [models] ) - ret.push model - ret.push item - @clear => - collection = @addItems ret - @doCallback callback, collection - - ## Add items to the end of a list - addItems: (items) -> - App.request "localplayer:item:add:entities", items - @updatePlayingPosition items - @refreshPlaylistView() - items - - ## Get the songs in a collection based on type type/value. - getSongs: (type, value, callback) -> - ## If a single song. - if type is 'songid' - App.request "song:byid:entities", [value], (songs) => - @doCallback callback, songs.getRawCollection() - else - ## Else it's a filtered collection (artist, album, etc) - songs = App.request "song:entities", {filter: helpers.global.paramObj(type, value)} - App.execute "when:entity:fetched", songs, => - @doCallback callback, songs.getRawCollection() - - ## Get items in a playlist - getItems: (callback) -> - collection = App.request "localplayer:get:entities" - @doCallback callback, collection - - ## If collection, normalise to JSON, if JSON pass through. - itemsJson: (collection) -> - items = if _.isArray(collection) then collection else collection.toJSON() - items - - ## Insert a song at a position and play it - insertAndPlay: (models, position = 0, callback) -> - @insert models, position, (resp) => - @playEntity 'position', parseInt(position), {}, => - @doCallback callback, position - - ## Get the size of the current playlist - playlistSize: (callback) -> - @getItems (resp) => - @doCallback callback, resp.length - - ## Refresh playlist - refreshPlaylistView: -> - App.execute "playlist:refresh", 'local', 'audio' - - ## Move Item - moveItem: (media, id, position1, position2, callback) -> - @getItems (collection) => - raw = collection.getRawCollection() - item = raw[position1] - @remove position1, => - @insert item, position2, => - @doCallback callback, position2 - - ## After items in playlist have changed, this updates the playing position - ## TODO: Make this less buggy, does weird things when tracks changed in party mode - updatePlayingPosition: (collection) -> - stateObj = App.request "state:local" - if stateObj.isPlaying() - model = stateObj.getPlaying('item') - if model.uid - set = false - pos = 0 - for i, m of @itemsJson(collection) - if set is true - continue - if m.uid is model.uid - pos = parseInt(i) - set = true - model.position = pos - stateObj.setPlaying 'item', model - stateObj.setPlaying 'position', pos diff --git a/src/js/apps/command/local/helpers/videoplayer.js b/src/js/apps/command/local/helpers/videoplayer.js new file mode 100644 index 00000000..3abed18d --- /dev/null +++ b/src/js/apps/command/local/helpers/videoplayer.js @@ -0,0 +1,29 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("CommandApp.Local", function(Api, App, Backbone, Marionette, $, _) { + + return Api.VideoPlayer = class VideoPlayer extends Api.Player { + + // files controller + getKodiFilesController() { + return new App.CommandApp.Kodi.Files; + } + + // Play wrapper to match kodi controller + play(type, value, model) { + return this.videoStream(model.get('file'), model.get('fanart')); + } + + // Callback for video stream popup + videoStream(file, background = '', player = 'html5') { + const st = helpers.global.localVideoPopup('about:blank'); + return this.getKodiFilesController().downloadPath(file, path => st.location = "videoPlayer.html?player=" + player + '&src=' + encodeURIComponent(path) + '&bg=' + encodeURIComponent(background)); + } + }; +}); diff --git a/src/js/apps/command/local/helpers/videoplayer.js.coffee b/src/js/apps/command/local/helpers/videoplayer.js.coffee deleted file mode 100644 index 6cd57b42..00000000 --- a/src/js/apps/command/local/helpers/videoplayer.js.coffee +++ /dev/null @@ -1,17 +0,0 @@ -@Kodi.module "CommandApp.Local", (Api, App, Backbone, Marionette, $, _) -> - - class Api.VideoPlayer extends Api.Player - - # files controller - getKodiFilesController: -> - new App.CommandApp.Kodi.Files - - # Play wrapper to match kodi controller - play: (type, value, model) -> - @videoStream model.get('file'), model.get('fanart') - - # Callback for video stream popup - videoStream: (file, background = '', player = 'html5') -> - st = helpers.global.localVideoPopup 'about:blank' - @getKodiFilesController().downloadPath file, (path) -> - st.location = "videoPlayer.html?player=" + player + '&src=' + encodeURIComponent(path) + '&bg=' + encodeURIComponent(background) diff --git a/src/js/apps/epg/epg_app.js b/src/js/apps/epg/epg_app.js new file mode 100644 index 00000000..48b5cfaa --- /dev/null +++ b/src/js/apps/epg/epg_app.js @@ -0,0 +1,62 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("EPGApp", function(EPGApp, App, Backbone, Marionette, $, _) { + + const Cls = (EPGApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "pvr/tv/:channelid" : "tv", + "pvr/radio/:channelid" : "radio" + }; + } + }); + Cls.initClass(); + + const API = { + + tv(channelid) { + return new EPGApp.List.Controller({ + channelid, + type: "tv" + }); + }, + + radio(channelid) { + return new EPGApp.List.Controller({ + channelid, + type: "radio" + }); + }, + + action(op, view) { + const { + model + } = view; + const player = App.request("command:kodi:controller", 'auto', 'Player'); + const pvr = App.request("command:kodi:controller", 'auto', 'PVR'); + switch (op) { + case 'play': + return player.playEntity('channelid', model.get('channelid')); + case 'record': + return pvr.setRecord(model.get('channelid'), {}, () => App.execute("notification:show", tr("Channel recording toggled"))); + case 'timer': + return pvr.toggleTimer(model.get('id')); + default: + } + } + }; + // nothing + + //# This is shared with a channel action (sidebar) + App.commands.setHandler('broadcast:action', (op, view) => API.action(op, view)); + + return App.on("before:start", () => new EPGApp.Router({ + controller: API})); +}); diff --git a/src/js/apps/epg/epg_app.js.coffee b/src/js/apps/epg/epg_app.js.coffee deleted file mode 100644 index f227bd66..00000000 --- a/src/js/apps/epg/epg_app.js.coffee +++ /dev/null @@ -1,41 +0,0 @@ -@Kodi.module "EPGApp", (EPGApp, App, Backbone, Marionette, $, _) -> - - class EPGApp.Router extends App.Router.Base - appRoutes: - "pvr/tv/:channelid" : "tv" - "pvr/radio/:channelid" : "radio" - - API = - - tv: (channelid) -> - new EPGApp.List.Controller - channelid: channelid - type: "tv" - - radio: (channelid) -> - new EPGApp.List.Controller - channelid: channelid - type: "radio" - - action: (op, view) -> - model = view.model - player = App.request "command:kodi:controller", 'auto', 'Player' - pvr = App.request "command:kodi:controller", 'auto', 'PVR' - switch op - when 'play' - player.playEntity 'channelid', model.get('channelid') - when 'record' - pvr.setRecord model.get('channelid'), {}, -> - App.execute "notification:show", tr("Channel recording toggled") - when 'timer' - pvr.toggleTimer model.get('id') - else - # nothing - - ## This is shared with a channel action (sidebar) - App.commands.setHandler 'broadcast:action', (op, view) -> - API.action op, view - - App.on "before:start", -> - new EPGApp.Router - controller: API diff --git a/src/js/apps/epg/list/list_controller.js b/src/js/apps/epg/list/list_controller.js new file mode 100644 index 00000000..e7758484 --- /dev/null +++ b/src/js/apps/epg/list/list_controller.js @@ -0,0 +1,75 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("EPGApp.List", function(List, App, Backbone, Marionette, $, _) { + + const API = { + + bindTriggers(view) { + App.listenTo(view, 'childview:broadcast:play', (parent, child) => App.execute('broadcast:action', 'play', child)); + App.listenTo(view, 'childview:broadcast:record', (parent, child) => App.execute('broadcast:action', 'record', child)); + return App.listenTo(view, 'childview:broadcast:timer', (parent, child) => App.execute('broadcast:action', 'timer', child)); + }, + + bindChannelTriggers(view) { + App.listenTo(view, 'broadcast:play', child => App.execute('broadcast:action', 'play', child)); + App.listenTo(view, 'broadcast:record', child => App.execute('broadcast:action', 'record', child)); + return App.listenTo(view, 'broadcast:timer', child => App.execute('broadcast:action', 'timer', child)); + } + }; + + //# Main controller + return List.Controller = class Controller extends App.Controllers.Base { + + initialize(options) { + const model = App.request('channel:entity', options.channelid); + return App.execute("when:entity:fetched", model, () => { + const collection = App.request("broadcast:entities", options.channelid); + + //# When fetched. + return App.execute("when:entity:fetched", collection, () => { + + //# Get and setup the layout + this.layout = this.getLayoutView(collection); + this.listenTo(this.layout, "show", () => { + this.getSubNav(model); + this.getChannelActions(model); + return this.renderProgrammes(collection); + }); + + //# Render the layout + return App.regionContent.show(this.layout); + }); + }); + } + + getLayoutView(collection) { + return new List.Layout({ + collection}); + } + + renderProgrammes(collection) { + const view = new List.EPGList({ + collection}); + API.bindTriggers(view); + return this.layout.regionContent.show(view); + } + + getSubNav(model) { + const subNav = App.request("navMain:children:show", 'pvr/tv', 'PVR'); + return this.layout.regionSidebarFirst.show(subNav); + } + + getChannelActions(model) { + const view = new List.ChannelActions({ + model}); + API.bindChannelTriggers(view); + return this.layout.appendSidebarView('channel-actions', view); + } + }; +}); diff --git a/src/js/apps/epg/list/list_controller.js.coffee b/src/js/apps/epg/list/list_controller.js.coffee deleted file mode 100644 index 0df025ae..00000000 --- a/src/js/apps/epg/list/list_controller.js.coffee +++ /dev/null @@ -1,60 +0,0 @@ -@Kodi.module "EPGApp.List", (List, App, Backbone, Marionette, $, _) -> - - API = - - bindTriggers: (view) -> - App.listenTo view, 'childview:broadcast:play', (parent, child) -> - App.execute 'broadcast:action', 'play', child - App.listenTo view, 'childview:broadcast:record', (parent, child) -> - App.execute 'broadcast:action', 'record', child - App.listenTo view, 'childview:broadcast:timer', (parent, child) -> - App.execute 'broadcast:action', 'timer', child - - bindChannelTriggers: (view) -> - App.listenTo view, 'broadcast:play', (child) -> - App.execute 'broadcast:action', 'play', child - App.listenTo view, 'broadcast:record', (child) -> - App.execute 'broadcast:action', 'record', child - App.listenTo view, 'broadcast:timer', (child) -> - App.execute 'broadcast:action', 'timer', child - - ## Main controller - class List.Controller extends App.Controllers.Base - - initialize: (options) -> - model = App.request 'channel:entity', options.channelid - App.execute "when:entity:fetched", model, => - collection = App.request "broadcast:entities", options.channelid - - ## When fetched. - App.execute "when:entity:fetched", collection, => - - ## Get and setup the layout - @layout = @getLayoutView collection - @listenTo @layout, "show", => - @getSubNav model - @getChannelActions model - @renderProgrammes collection - - ## Render the layout - App.regionContent.show @layout - - getLayoutView: (collection) -> - new List.Layout - collection: collection - - renderProgrammes: (collection) -> - view = new List.EPGList - collection: collection - API.bindTriggers view - @layout.regionContent.show view - - getSubNav: (model) -> - subNav = App.request "navMain:children:show", 'pvr/tv', 'PVR' - @layout.regionSidebarFirst.show subNav - - getChannelActions: (model) -> - view = new List.ChannelActions - model: model - API.bindChannelTriggers view - @layout.appendSidebarView 'channel-actions', view diff --git a/src/js/apps/epg/list/list_view.js b/src/js/apps/epg/list/list_view.js new file mode 100644 index 00000000..34e6172f --- /dev/null +++ b/src/js/apps/epg/list/list_view.js @@ -0,0 +1,86 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("EPGApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "epg-page"; + } + }); + Cls.initClass(); + + Cls = (List.ChannelActions = class ChannelActions extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/epg/list/channel'; + this.prototype.className = 'nav-sub'; + this.prototype.triggers = + {'click .play' : 'broadcast:play'}; + this.prototype.events = + {'click .record' : 'toggleRecord'}; + } + toggleRecord() { + console.log($('.airing')); + $('.airing').toggleClass('has-timer'); + return this.trigger('broadcast:record', this); + } + }); + Cls.initClass(); + + Cls = (List.ProgrammeList = class ProgrammeList extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/epg/list/programme'; + this.prototype.tagName = "li"; + this.prototype.className = "pvr-card card"; + this.prototype.triggers = + {'click .play' : 'broadcast:play'}; + this.prototype.events = { + 'click .record' : 'toggleRecord', + 'click .toggle-timer' : 'toggleTimer' + }; + } + onRender() { + //# Add a class to indicate the programme has finished + if (this.model.attributes.wasactive) { this.$el.addClass("aired"); } + if (this.model.attributes.isactive) { this.$el.addClass("airing"); } + if (this.model.attributes.hastimer) { return this.$el.addClass("has-timer"); } + } + toggleRecord() { + this.$el.toggleClass('has-timer'); + return this.trigger('broadcast:record', this); + } + toggleTimer() { + this.$el.toggleClass('has-timer'); + return this.trigger('broadcast:timer', this); + } + }); + Cls.initClass(); + + + return (function() { + Cls = (List.EPGList = class EPGList extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = List.ProgrammeList; + this.prototype.tagName = "ul"; + this.prototype.className = "programmes"; + this.prototype.emptyView = App.Views.EmptyViewResults; + this.prototype.emptyViewOptions = + {emptyKey: 'EPG data'}; + } + onShow() { + const $airing = this.$el.find('.airing'); + if ($airing.length) { + return $(window).scrollTop($airing.offset().top-150); + } + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/epg/list/list_view.js.coffee b/src/js/apps/epg/list/list_view.js.coffee deleted file mode 100644 index 8512bf92..00000000 --- a/src/js/apps/epg/list/list_view.js.coffee +++ /dev/null @@ -1,50 +0,0 @@ -@Kodi.module "EPGApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.Layout extends App.Views.LayoutWithSidebarFirstView - className: "epg-page" - - class List.ChannelActions extends App.Views.ItemView - template: 'apps/epg/list/channel' - className: 'nav-sub' - triggers: - 'click .play' : 'broadcast:play' - events: - 'click .record' : 'toggleRecord' - toggleRecord: -> - console.log $('.airing') - $('.airing').toggleClass 'has-timer' - @trigger 'broadcast:record', @ - - class List.ProgrammeList extends App.Views.ItemView - template: 'apps/epg/list/programme' - tagName: "li" - className: "pvr-card card" - onRender: -> - ## Add a class to indicate the programme has finished - if @model.attributes.wasactive then @$el.addClass("aired") - if @model.attributes.isactive then @$el.addClass("airing") - if @model.attributes.hastimer then @$el.addClass("has-timer") - triggers: - 'click .play' : 'broadcast:play' - events: - 'click .record' : 'toggleRecord' - 'click .toggle-timer' : 'toggleTimer' - toggleRecord: -> - @$el.toggleClass 'has-timer' - @trigger 'broadcast:record', @ - toggleTimer: -> - @$el.toggleClass 'has-timer' - @trigger 'broadcast:timer', @ - - - class List.EPGList extends App.Views.CollectionView - childView: List.ProgrammeList - tagName: "ul" - className: "programmes" - emptyView: App.Views.EmptyViewResults - emptyViewOptions: - emptyKey: 'EPG data' - onShow: -> - $airing = @$el.find('.airing') - if $airing.length - $(window).scrollTop($airing.offset().top-150) diff --git a/src/js/apps/external/external_app.js b/src/js/apps/external/external_app.js new file mode 100644 index 00000000..c7a782ca --- /dev/null +++ b/src/js/apps/external/external_app.js @@ -0,0 +1,9 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ExternalApp", function(ExternalApp, App, Backbone, Marionette, $, _) {}); + diff --git a/src/js/apps/external/external_app.js.coffee b/src/js/apps/external/external_app.js.coffee deleted file mode 100644 index 6c04761f..00000000 --- a/src/js/apps/external/external_app.js.coffee +++ /dev/null @@ -1,2 +0,0 @@ -@Kodi.module "ExternalApp", (ExternalApp, App, Backbone, Marionette, $, _) -> - diff --git a/src/js/apps/external/youtube/youtube_controller.js b/src/js/apps/external/youtube/youtube_controller.js new file mode 100644 index 00000000..7438c47b --- /dev/null +++ b/src/js/apps/external/youtube/youtube_controller.js @@ -0,0 +1,52 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ExternalApp.Youtube", function(Youtube, App, Backbone, Marionette, $, _) { + + var API = { + + getSearchView(query, viewName, title = '', options = {}, callback) { + return App.execute("youtube:search:entities", query, options, function(collection) { + const view = new (Youtube[viewName])({ + collection, + title + }); + App.listenTo(view, 'childview:youtube:play', function(parent, item) { + if (item.model.get('addonEnabled')) { + return API.playKodi(item.model.get('id')); + } else { + return API.playLocal(item.model.get('id')); + } + }); + App.listenTo(view, 'childview:youtube:localplay', (parent, item) => API.playLocal(item.model.get('id'))); + return callback(view); + }); + }, + + playLocal(id) { + const localPlayer = "videoPlayer.html?yt=" + id; + return helpers.global.localVideoPopup(localPlayer, 530); + }, + + playKodi(id) { + const playlist = App.request("command:kodi:controller", 'video', 'PlayList'); + return playlist.play('file', 'plugin://plugin.video.youtube/play/?video_id=' + id); + } + }; + + + App.commands.setHandler("youtube:search:view", (query, callback) => API.getSearchView(query, 'List', '', {}, callback)); + + App.commands.setHandler("youtube:search:popup", query => API.getSearchView(query, 'List', '', {}, function(view) { + const $footer = $('', {class: 'btn btn-primary', href: 'https://www.youtube.com/results?search_query=' + query, target: '_blank'}); + $footer.html('More videos'); + return App.execute("ui:modal:show", _.escape(query), view.render().$el, $footer); + })); + + return App.commands.setHandler("youtube:list:view", (query, title, options = {}, callback) => API.getSearchView(query, 'CardList', title, options, callback)); +}); diff --git a/src/js/apps/external/youtube/youtube_controller.js.coffee b/src/js/apps/external/youtube/youtube_controller.js.coffee deleted file mode 100644 index 68658475..00000000 --- a/src/js/apps/external/youtube/youtube_controller.js.coffee +++ /dev/null @@ -1,38 +0,0 @@ -@Kodi.module "ExternalApp.Youtube", (Youtube, App, Backbone, Marionette, $, _) -> - - API = - - getSearchView: (query, viewName, title = '', options = {}, callback) -> - App.execute "youtube:search:entities", query, options, (collection) -> - view = new Youtube[viewName] - collection: collection - title: title - App.listenTo view, 'childview:youtube:play', (parent, item) -> - if item.model.get('addonEnabled') - API.playKodi item.model.get('id') - else - API.playLocal item.model.get('id') - App.listenTo view, 'childview:youtube:localplay', (parent, item) -> - API.playLocal item.model.get('id') - callback view - - playLocal: (id) -> - localPlayer = "videoPlayer.html?yt=" + id - helpers.global.localVideoPopup localPlayer, 530 - - playKodi: (id) -> - playlist = App.request "command:kodi:controller", 'video', 'PlayList' - playlist.play 'file', 'plugin://plugin.video.youtube/play/?video_id=' + id - - - App.commands.setHandler "youtube:search:view", (query, callback) -> - API.getSearchView query, 'List', '', {}, callback - - App.commands.setHandler "youtube:search:popup", (query) -> - API.getSearchView query, 'List', '', {}, (view) -> - $footer = $('', {class: 'btn btn-primary', href: 'https://www.youtube.com/results?search_query=' + query, target: '_blank'}) - $footer.html('More videos') - App.execute "ui:modal:show", _.escape(query), view.render().$el, $footer - - App.commands.setHandler "youtube:list:view", (query, title, options = {}, callback) -> - API.getSearchView query, 'CardList', title, options, callback diff --git a/src/js/apps/external/youtube/youtube_view.js b/src/js/apps/external/youtube/youtube_view.js new file mode 100644 index 00000000..60098a33 --- /dev/null +++ b/src/js/apps/external/youtube/youtube_view.js @@ -0,0 +1,72 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("ExternalApp.Youtube", function(Youtube, App, Backbone, Marionette, $, _) { + + let Cls = (Youtube.Item = class Item extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/external/youtube/youtube'; + this.prototype.tagName = 'li'; + this.prototype.triggers = { + 'click .play': 'youtube:play', + 'click .localplay': 'youtube:localplay' + }; + this.prototype.events = + {'click .action': 'closeModal'}; + } + closeModal() { + return App.execute("ui:modal:close"); + } + }); + Cls.initClass(); + + Cls = (Youtube.List = class List extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = Youtube.Item; + this.prototype.tagName = 'ul'; + this.prototype.className = 'youtube-list'; + } + }); + Cls.initClass(); + + Cls = (Youtube.Card = class Card extends App.Views.CardView { + static initClass() { + this.prototype.triggers = { + 'click .play': 'youtube:play', + 'click .localplay': 'youtube:localplay' + }; + } + initialize() { + return this.getMeta(); + } + getMeta() { + if (this.model) { + this.model.set({subtitleHtml: this.themeLink('YouTube', this.model.get('url'), {external: true})}); + if (this.model.get('addonEnabled')) { + return this.model.set({menu: {localplay: 'Local play'}}); + } + } + } + onRender() { + return this.makeLinksExternal(); + } + }); + Cls.initClass(); + + return (function() { + Cls = (Youtube.CardList = class CardList extends App.Views.SetCompositeView { + static initClass() { + this.prototype.childView = Youtube.Card; + this.prototype.className = "section-content card-grid--musicvideo"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/external/youtube/youtube_view.js.coffee b/src/js/apps/external/youtube/youtube_view.js.coffee deleted file mode 100644 index d4027359..00000000 --- a/src/js/apps/external/youtube/youtube_view.js.coffee +++ /dev/null @@ -1,35 +0,0 @@ -@Kodi.module "ExternalApp.Youtube", (Youtube, App, Backbone, Marionette, $, _) -> - - class Youtube.Item extends App.Views.ItemView - template: 'apps/external/youtube/youtube' - tagName: 'li' - triggers: - 'click .play': 'youtube:play' - 'click .localplay': 'youtube:localplay' - events: - 'click .action': 'closeModal' - closeModal: -> - App.execute "ui:modal:close" - - class Youtube.List extends App.Views.CollectionView - childView: Youtube.Item - tagName: 'ul' - className: 'youtube-list' - - class Youtube.Card extends App.Views.CardView - triggers: - 'click .play': 'youtube:play' - 'click .localplay': 'youtube:localplay' - initialize: -> - @getMeta() - getMeta: -> - if @model - @model.set {subtitleHtml: @themeLink 'YouTube', @model.get('url'), {external: true}} - if @model.get('addonEnabled') - @model.set {menu: {localplay: 'Local play'}} - onRender: () -> - @makeLinksExternal() - - class Youtube.CardList extends App.Views.SetCompositeView - childView: Youtube.Card - className: "section-content card-grid--musicvideo" diff --git a/src/js/apps/filter/filter_app.js b/src/js/apps/filter/filter_app.js new file mode 100644 index 00000000..1d40e945 --- /dev/null +++ b/src/js/apps/filter/filter_app.js @@ -0,0 +1,574 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS205: Consider reworking code to avoid use of IIFEs + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("FilterApp", function(FilterApp, App, Backbone, Marionette, $, _) { + + var API = { + + /* + Settings/fields + */ + + sortFields: [ + { + alias: 'title', + type: 'string', + defaultSort: true, + defaultOrder: 'asc', + key: 'title' + }, + { + alias: 'title', + type: 'string', + defaultSort: true, + defaultOrder: 'asc', + key: 'label' + }, + { + alias: 'year', + type: 'number', + key: 'year', + defaultOrder: 'desc' + }, + { + alias: 'date added', + type: 'string', + key: 'dateadded', + defaultOrder: 'desc' + }, + { + alias: 'rating', + type: 'float', + key: 'rating', + defaultOrder: 'desc' + }, + { + alias: 'artist', + type: 'string', + key: 'artist', + defaultOrder: 'asc' + }, + { + alias: 'random', + type: 'other', + key: 'random', + defaultOrder: 'asc' + }, + { + alias: 'album', + type: 'string', + key: 'album', + defaultOrder: 'asc' + } + ], + + //# See applyFilter() for how filterCallback are handled. + filterFields: [ + { + alias: 'year', + type: 'number', + key: 'year', + sortOrder: 'desc', + filterCallback: 'multiple' + }, + { + alias: 'genre', + type: 'array', + key: 'genre', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'mood', + type: 'array', + key: 'mood', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'style', + type: 'array', + key: 'style', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'unwatched', + type: "boolean", + key: 'unwatched', + sortOrder: 'asc', + filterCallback: 'unwatched' + }, + { + alias: 'watched', + type: "boolean", + key: 'watched', + sortOrder: 'asc', + filterCallback: 'watched' + }, + { + alias: 'in progress', + type: "boolean", + key: 'inprogress', + sortOrder: 'asc', + filterCallback: 'inprogress' + }, + { + alias: 'writer', + type: 'array', + key: 'writer', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'director', + type: 'array', + key: 'director', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'tag', + type: 'array', + key: 'tag', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'actor', + type: 'object', + property: 'name', + key: 'cast', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'set', + type: 'string', + property: 'set', + key: 'set', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'rated', + type: 'string', + property: 'mpaa', + key: 'mpaa', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'studio', + type: 'array', + property: 'studio', + key: 'studio', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'label', + type: 'string', + property: 'albumlabel', + key: 'albumlabel', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'Thumbs up', + type: "boolean", + key: 'thumbsUp', + sortOrder: 'asc', + filterCallback: 'thumbsup' + }, + { + alias: 'album', + type: 'string', + key: 'album', + sortOrder: 'asc', + filterCallback: 'multiple' + }, + { + alias: 'artist', + type: 'array', + key: 'artist', + sortOrder: 'asc', + filterCallback: 'multiple' + } + ], + + //# Wrapper for returning the available fields for sort/filter + //# Available fields are defined in the entity controller and passed + //# to the filter view where they are stored in cache. + getFilterFields(type) { + const key = type + 'Fields'; + const fields = API[key]; + //# Get available and only return fields available to this entity + const availableFilters = API.getAvailable(); + const available = availableFilters[type]; + const ret = []; + for (var field of fields) { + if (helpers.global.inArray(field.key, available)) { + ret.push(field); + } + } + return ret; + }, + + + /* + Storage + */ + + //# Store filters namespace + storeFiltersNamespace: 'filter:store:', + + getStoreNameSpace(type) { + return API.storeFiltersNamespace + type; + }, + + //# Memory store the current filters + setStoreFilters(filters = {}, type = 'filters') { + const store = {}; + store[helpers.url.path()] = filters; + helpers.cache.set(API.getStoreNameSpace(type), store); + return App.vent.trigger('filter:changed', filters); + }, + + //# Get the current filters for this page + getStoreFilters(type = 'filters') { + const store = helpers.cache.get(API.getStoreNameSpace(type), {}); + const path = helpers.url.path(); + const filters = store[path] ? store[path] : {}; + const ret = {}; + if (!_.isEmpty(filters)) { + for (var key in filters) { + var val = filters[key]; + if (val.length > 0) { + ret[key] = val; + } + } + } + return ret; + }, + + //# Update a given key with new values + updateStoreFiltersKey(key, values = []) { + const filters = API.getStoreFilters(); + filters[key] = values; + API.setStoreFilters(filters); + return filters; + }, + + //# Get a specific key values + getStoreFiltersKey(key) { + const filters = API.getStoreFilters(); + const filter = filters[key] ? filters[key] : []; + return filter; + }, + + //# Set current sort. + setStoreSort(method, order = 'asc') { + const sort = {method, order}; + return API.setStoreFilters(sort, 'sort'); + }, + + //# Get current sort. + getStoreSort() { + let sort = API.getStoreFilters('sort'); + if (!sort.method) { + const defaults = _.findWhere(API.getFilterFields('sort'), {defaultSort: true}); + sort = {method: defaults.key, order: defaults.defaultOrder}; + } + return sort; + }, + + //# Set available filters + setAvailable(available) { + return API.setStoreFilters(available, 'available'); + }, + + //# Get available filters + getAvailable() { + return API.getStoreFilters('available'); + }, + + + /* + Parsing + */ + + //# Swap the order. + toggleOrder(order) { + order = order === 'asc' ? 'desc' : 'asc'; + return order; + }, + + //# Parse the defaults with context of the current page + parseSortable(items) { + //# Set the current state + const params = API.getStoreSort(false, 'asc'); + //# loop over the items and set the active and toggle order if active + for (var i in items) { + var item = items[i]; + items[i].active = false; + items[i].order = item.defaultOrder; + if (params.method && (item.key === params.method)) { + items[i].active = true; + items[i].order = this.toggleOrder(params.order); + } else if (item.defaultSort && (params.method === false)) { + items[i].active = true; + } + } + return items; + }, + + //# Parse the active state int the current filters + parseFilterable(items) { + const active = API.getFilterActive(); + for (var i in items) { + var val = items[i]; + var activeItem = _.findWhere(active, {key: val.key}); + items[i].active = activeItem !== undefined; + } + return items; + }, + + //# Extract the available options for a given filter from the attached collection. + getFilterOptions(key, collection) { + const values = App.request('filter:store:key:get', key); + //# Filter settings for this key. + const s = API.getFilterSettings(key); + const items = []; + //# Get the properties requested + let collectionItems = collection.pluck(key); + //# Deal with more complex nested properties (e.g. cast) + if ((s.filterCallback === 'multiple') && (s.type === 'object')) { + //# Limit to first 5 for each otherwise it kills the browser. + const limited = []; + for (var item of collectionItems) { + for (var i in item) { + var data = item[i]; + if (i < 5) { + limited.push(data[s.property]); + } + } + } + collectionItems = limited; + } + //# Reduce the list to an array of unique items. + _.map(_.uniq(_.flatten(collectionItems)), val => items.push({key, value: val, active: helpers.global.inArray(val,values)})); + return items; + }, + + + /* + Apply filters + */ + + //# Apply filters to a collection. + applyFilters(collection) { + const sort = API.getStoreSort(); + collection.sortCollection(sort.method, sort.order); + let filteredCollection = new App.Entities.Filtered(collection); + const object = API.getStoreFilters(); + for (var key in object) { + var values = object[key]; + if (values.length > 0) { + filteredCollection = API.applyFilter(filteredCollection, key, values); + } + } + return filteredCollection; + }, + + //# Apply a single filter key + //# See entities/_base/filtered.js for custom filter methods + applyFilter(collection, key, vals) { + //# Get the filter settings available for this key and switch on the callback. + const s = API.getFilterSettings(key); + switch (s.filterCallback) { + //# If multiple values allowed + case 'multiple': + if (s.type === 'array') { + collection.filterByMultipleArray(key, vals); //# data is an array + } else if (s.type === 'object') { + collection.filterByMultipleObject(key, s.property, vals); //# data is an array of objects + } else { + collection.filterByMultiple(key, vals); //# data is not array + } + break; + case 'unwatched': + collection.filterByUnwatched(); + break; + case 'watched': + collection.filterByWatched(); + break; + case 'inprogress': + collection.filterByInProgress(); + break; + case 'thumbsup': + collection.filterByThumbsUp(); + break; + default: + collection; + } + return collection; + }, + + //# Get settings for a given filter + getFilterSettings(key, availableOnly = true) { + const filters = availableOnly === true ? API.getFilterFields('filter') : API.filterFields; + return _.findWhere(filters, {key}); + }, + + //# Get the active filters. + getFilterActive() { + const items = []; + const object = API.getStoreFilters(); + for (var key in object) { + var values = object[key]; + if (values.length > 0) { + items.push({key, values}); + } + } + return items; + } + }; + + + + /* + Handlers. + */ + + //# Views and collections. + + //# Return the filters view + App.reqres.setHandler('filter:show', function(collection) { + API.setAvailable(collection.availableFilters); + const filters = new FilterApp.Show.Controller({ + refCollection: collection}); + const view = filters.getFilterView(); + return view; + }); + + //# Return the filter options collection + App.reqres.setHandler('filter:options', function(key, collection) { + //# Get the options collection based on values in the collection. + const options = API.getFilterOptions(key, collection); + const optionsCollection = App.request('filter:filters:options:entities', options); + //# Set the order of the options collection. + const filterSettings = API.getFilterSettings(key); + optionsCollection.sortCollection('value', filterSettings.sortOrder); + //# Return collection + return optionsCollection; + }); + + //# Get an active filter collection. + App.reqres.setHandler('filter:active', () => App.request('filter:active:entities', API.getFilterActive())); + + //# Apply filters to a collection. + App.reqres.setHandler('filter:apply:entities', function(collection) { + API.setAvailable(collection.availableFilters); + const newCollection = API.applyFilters(collection); + App.vent.trigger('filter:filtering:stop'); + return newCollection; + }); + + //# Get a sortable collection + App.reqres.setHandler('filter:sortable:entities', () => App.request('filter:sort:entities', API.parseSortable(API.getFilterFields('sort')))); + + //# Get a filter collection + App.reqres.setHandler('filter:filterable:entities', () => App.request('filter:filters:entities', API.parseFilterable(API.getFilterFields('filter')))); + + //# Set a filter using a url param eg ?director=name + App.reqres.setHandler('filter:init', function(availableFilters) { + const params = helpers.url.params(); + if (!_.isEmpty(params)) { + // Clear existing filters first + API.setStoreFilters({}); + // Set sort, no validation here, wrong param might break something + if (params.sort) { + const order = params.order ? params.order : 'asc'; + API.setStoreSort(params.sort, order); + } + // Set Filter + return (() => { + const result = []; + for (var key of availableFilters.filter) { + // is one of the params an available filter + if (params[key]) { + var values = API.getStoreFiltersKey(key); + var filterSettings = API.getFilterSettings(key, false); + // If the filter doesn't exist, add and save. + if (!helpers.global.inArray(params[key], values)) { + if (filterSettings.type === 'number') { + values.push(parseInt(params[key])); + } else { + values.push(decodeURIComponent(params[key])); + } + result.push(API.updateStoreFiltersKey(key, values)); + } else { + result.push(undefined); + } + } else { + result.push(undefined); + } + } + return result; + })(); + } + }); + + //# Storage. + + //# Store a filter set + App.reqres.setHandler('filter:store:set', function(filters) { + API.setStoreFilters(filters); + return filters; + }); + + //# Get a Stored a filter set + App.reqres.setHandler('filter:store:get', () => API.getStoreFilters()); + + //# Get a Stored a filter set for a given key + App.reqres.setHandler('filter:store:key:get', key => API.getStoreFiltersKey(key)); + + //# Update a key in a stored filter set. + App.reqres.setHandler('filter:store:key:update', (key, values = []) => API.updateStoreFiltersKey(key, values)); + + //# Toggle a value in a key and return the updated values + //# This feels long winded, maybe one day refactor/compress. + App.reqres.setHandler('filter:store:key:toggle', function(key, value) { + const values = API.getStoreFiltersKey(key); + let ret = []; + //# Remove. + if (_.indexOf(values, value) > -1) { + const newValues = []; + for (var i of values) { + if (i !== value) { + newValues.push(i); + } + } + ret = newValues; + } else { + //# Add. + values.push(value); + ret = values; + } + API.updateStoreFiltersKey(key, ret); + return ret; + }); + + //# Store a sort + App.reqres.setHandler('filter:sort:store:set', (method, order = 'asc') => API.setStoreSort(method, order)); + + //# Get a sort, fallback to default + return App.reqres.setHandler('filter:sort:store:get', () => API.getStoreSort()); +}); diff --git a/src/js/apps/filter/filter_app.js.coffee b/src/js/apps/filter/filter_app.js.coffee deleted file mode 100644 index f2481a79..00000000 --- a/src/js/apps/filter/filter_app.js.coffee +++ /dev/null @@ -1,495 +0,0 @@ -@Kodi.module "FilterApp", (FilterApp, App, Backbone, Marionette, $, _) -> - - API = - - ### - Settings/fields - ### - - sortFields: [ - { - alias: 'title' - type: 'string' - defaultSort: true - defaultOrder: 'asc' - key: 'title' - } - { - alias: 'title' - type: 'string' - defaultSort: true - defaultOrder: 'asc' - key: 'label' - } - { - alias: 'year' - type: 'number' - key: 'year' - defaultOrder: 'desc' - } - { - alias: 'date added' - type: 'string' - key: 'dateadded' - defaultOrder: 'desc' - } - { - alias: 'rating' - type: 'float' - key: 'rating' - defaultOrder: 'desc' - } - { - alias: 'artist' - type: 'string' - key: 'artist' - defaultOrder: 'asc' - } - { - alias: 'random' - type: 'other' - key: 'random' - defaultOrder: 'asc' - } - { - alias: 'album' - type: 'string' - key: 'album' - defaultOrder: 'asc' - } - ] - - ## See applyFilter() for how filterCallback are handled. - filterFields: [ - { - alias: 'year' - type: 'number' - key: 'year' - sortOrder: 'desc', - filterCallback: 'multiple' - } - { - alias: 'genre' - type: 'array' - key: 'genre' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'mood' - type: 'array' - key: 'mood' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'style' - type: 'array' - key: 'style' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'unwatched' - type: "boolean" - key: 'unwatched' - sortOrder: 'asc', - filterCallback: 'unwatched' - } - { - alias: 'watched' - type: "boolean" - key: 'watched' - sortOrder: 'asc', - filterCallback: 'watched' - } - { - alias: 'in progress' - type: "boolean" - key: 'inprogress' - sortOrder: 'asc', - filterCallback: 'inprogress' - } - { - alias: 'writer' - type: 'array' - key: 'writer' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'director' - type: 'array' - key: 'director' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'tag' - type: 'array' - key: 'tag' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'actor' - type: 'object' - property: 'name' - key: 'cast' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'set' - type: 'string' - property: 'set' - key: 'set' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'rated' - type: 'string' - property: 'mpaa' - key: 'mpaa' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'studio' - type: 'array' - property: 'studio' - key: 'studio' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'label' - type: 'string' - property: 'albumlabel' - key: 'albumlabel' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'Thumbs up' - type: "boolean" - key: 'thumbsUp' - sortOrder: 'asc', - filterCallback: 'thumbsup' - } - { - alias: 'album' - type: 'string' - key: 'album' - sortOrder: 'asc', - filterCallback: 'multiple' - } - { - alias: 'artist' - type: 'array' - key: 'artist' - sortOrder: 'asc', - filterCallback: 'multiple' - } - ] - - ## Wrapper for returning the available fields for sort/filter - ## Available fields are defined in the entity controller and passed - ## to the filter view where they are stored in cache. - getFilterFields: (type) -> - key = type + 'Fields' - fields = API[key] - ## Get available and only return fields available to this entity - availableFilters = API.getAvailable() - available = availableFilters[type] - ret = [] - for field in fields - if helpers.global.inArray field.key, available - ret.push field - ret - - - ### - Storage - ### - - ## Store filters namespace - storeFiltersNamespace: 'filter:store:' - - getStoreNameSpace: (type) -> - API.storeFiltersNamespace + type - - ## Memory store the current filters - setStoreFilters: (filters = {}, type = 'filters') -> - store = {} - store[helpers.url.path()] = filters - helpers.cache.set(API.getStoreNameSpace(type), store) - App.vent.trigger('filter:changed', filters); - - ## Get the current filters for this page - getStoreFilters: (type = 'filters') -> - store = helpers.cache.get(API.getStoreNameSpace(type), {}) - path = helpers.url.path() - filters = if store[path] then store[path] else {} - ret = {} - if not _.isEmpty filters - for key, val of filters when val.length > 0 - ret[key] = val - ret - - ## Update a given key with new values - updateStoreFiltersKey: (key, values = []) -> - filters = API.getStoreFilters() - filters[key] = values - API.setStoreFilters filters - filters - - ## Get a specific key values - getStoreFiltersKey: (key) -> - filters = API.getStoreFilters() - filter = if filters[key] then filters[key] else [] - filter - - ## Set current sort. - setStoreSort: (method, order = 'asc') -> - sort = {method: method, order: order} - API.setStoreFilters(sort, 'sort') - - ## Get current sort. - getStoreSort: -> - sort = API.getStoreFilters('sort') - if not sort.method - defaults = _.findWhere(API.getFilterFields('sort'), {defaultSort: true}); - sort = {method: defaults.key, order: defaults.defaultOrder} - sort - - ## Set available filters - setAvailable: (available) -> - API.setStoreFilters(available, 'available') - - ## Get available filters - getAvailable: -> - API.getStoreFilters('available') - - - ### - Parsing - ### - - ## Swap the order. - toggleOrder: (order) -> - order = if order is 'asc' then 'desc' else 'asc' - order - - ## Parse the defaults with context of the current page - parseSortable: (items) -> - ## Set the current state - params = API.getStoreSort false, 'asc' - ## loop over the items and set the active and toggle order if active - for i, item of items - items[i].active = false - items[i].order = item.defaultOrder - if params.method and item.key is params.method - items[i].active = true - items[i].order = @toggleOrder params.order - else if item.defaultSort and params.method is false - items[i].active = true - items - - ## Parse the active state int the current filters - parseFilterable: (items) -> - active = API.getFilterActive() - for i, val of items - activeItem = _.findWhere(active, {key: val.key}); - items[i].active = activeItem != undefined - items - - ## Extract the available options for a given filter from the attached collection. - getFilterOptions: (key, collection) -> - values = App.request 'filter:store:key:get', key - ## Filter settings for this key. - s = API.getFilterSettings(key) - items = [] - ## Get the properties requested - collectionItems = collection.pluck(key) - ## Deal with more complex nested properties (e.g. cast) - if s.filterCallback is 'multiple' and s.type is 'object' - ## Limit to first 5 for each otherwise it kills the browser. - limited = [] - for item in collectionItems - for i, data of item - if i < 5 - limited.push data[s.property] - collectionItems = limited - ## Reduce the list to an array of unique items. - _.map _.uniq(_.flatten(collectionItems)), (val) -> - items.push {key: key, value: val, active: helpers.global.inArray(val,values)} - items - - - ### - Apply filters - ### - - ## Apply filters to a collection. - applyFilters: (collection) -> - sort = API.getStoreSort() - collection.sortCollection sort.method, sort.order - filteredCollection = new App.Entities.Filtered collection - for key, values of API.getStoreFilters() when values.length > 0 - filteredCollection = API.applyFilter filteredCollection, key, values - filteredCollection - - ## Apply a single filter key - ## See entities/_base/filtered.js for custom filter methods - applyFilter: (collection, key, vals) -> - ## Get the filter settings available for this key and switch on the callback. - s = API.getFilterSettings(key) - switch s.filterCallback - ## If multiple values allowed - when 'multiple' - if s.type is 'array' - collection.filterByMultipleArray(key, vals) ## data is an array - else if s.type is 'object' - collection.filterByMultipleObject(key, s.property, vals) ## data is an array of objects - else - collection.filterByMultiple(key, vals) ## data is not array - when 'unwatched' - collection.filterByUnwatched() - when 'watched' - collection.filterByWatched() - when 'inprogress' - collection.filterByInProgress() - when 'thumbsup' - collection.filterByThumbsUp() - else - collection - collection - - ## Get settings for a given filter - getFilterSettings: (key, availableOnly = true) -> - filters = if availableOnly is true then API.getFilterFields('filter') else API.filterFields - _.findWhere(filters, {key: key}) - - ## Get the active filters. - getFilterActive: -> - items = [] - for key, values of API.getStoreFilters() when values.length > 0 - items.push {key: key, values: values} - items - - - - ### - Handlers. - ### - - ## Views and collections. - - ## Return the filters view - App.reqres.setHandler 'filter:show', (collection) -> - API.setAvailable collection.availableFilters - filters = new FilterApp.Show.Controller - refCollection: collection - view = filters.getFilterView() - view - - ## Return the filter options collection - App.reqres.setHandler 'filter:options', (key, collection) -> - ## Get the options collection based on values in the collection. - options = API.getFilterOptions key, collection - optionsCollection = App.request 'filter:filters:options:entities', options - ## Set the order of the options collection. - filterSettings = API.getFilterSettings(key) - optionsCollection.sortCollection('value', filterSettings.sortOrder) - ## Return collection - optionsCollection - - ## Get an active filter collection. - App.reqres.setHandler 'filter:active', -> - App.request 'filter:active:entities', API.getFilterActive() - - ## Apply filters to a collection. - App.reqres.setHandler 'filter:apply:entities', (collection) -> - API.setAvailable collection.availableFilters - newCollection = API.applyFilters collection - App.vent.trigger 'filter:filtering:stop' - newCollection - - ## Get a sortable collection - App.reqres.setHandler 'filter:sortable:entities', -> - App.request 'filter:sort:entities', API.parseSortable(API.getFilterFields('sort')) - - ## Get a filter collection - App.reqres.setHandler 'filter:filterable:entities', -> - App.request 'filter:filters:entities', API.parseFilterable(API.getFilterFields('filter')) - - ## Set a filter using a url param eg ?director=name - App.reqres.setHandler 'filter:init', (availableFilters) -> - params = helpers.url.params() - if not _.isEmpty params - # Clear existing filters first - API.setStoreFilters {} - # Set sort, no validation here, wrong param might break something - if params.sort - order = if params.order then params.order else 'asc' - API.setStoreSort params.sort, order - # Set Filter - for key in availableFilters.filter - # is one of the params an available filter - if params[key] - values = API.getStoreFiltersKey key - filterSettings = API.getFilterSettings key, false - # If the filter doesn't exist, add and save. - if not helpers.global.inArray params[key], values - if filterSettings.type is 'number' - values.push parseInt params[key] - else - values.push decodeURIComponent(params[key]) - API.updateStoreFiltersKey key, values - - ## Storage. - - ## Store a filter set - App.reqres.setHandler 'filter:store:set', (filters) -> - API.setStoreFilters filters - filters - - ## Get a Stored a filter set - App.reqres.setHandler 'filter:store:get', -> - API.getStoreFilters() - - ## Get a Stored a filter set for a given key - App.reqres.setHandler 'filter:store:key:get', (key) -> - API.getStoreFiltersKey key - - ## Update a key in a stored filter set. - App.reqres.setHandler 'filter:store:key:update', (key, values = []) -> - API.updateStoreFiltersKey key, values - - ## Toggle a value in a key and return the updated values - ## This feels long winded, maybe one day refactor/compress. - App.reqres.setHandler 'filter:store:key:toggle', (key, value) -> - values = API.getStoreFiltersKey key - ret = [] - ## Remove. - if _.indexOf(values, value) > -1 - newValues = [] - for i in values when i isnt value - newValues.push i - ret = newValues - else - ## Add. - values.push value - ret = values - API.updateStoreFiltersKey key, ret - ret - - ## Store a sort - App.reqres.setHandler 'filter:sort:store:set', (method, order = 'asc') -> - API.setStoreSort method, order - - ## Get a sort, fallback to default - App.reqres.setHandler 'filter:sort:store:get', -> - API.getStoreSort() diff --git a/src/js/apps/filter/show/show_controller.js b/src/js/apps/filter/show/show_controller.js new file mode 100644 index 00000000..3847d7d9 --- /dev/null +++ b/src/js/apps/filter/show/show_controller.js @@ -0,0 +1,183 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("FilterApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + return Show.Controller = class Controller extends App.Controllers.Base { + + getFilterView() { + const collection = this.getOption('refCollection'); + this.layoutFilters = this.getLayoutView(collection); + + //# Render subviews. + this.listenTo(this.layoutFilters, "show", () => { + this.getSort(); + this.getFilters(); + this.getActive(); + return this.getSections(); + }); + + //# Change panes. + this.listenTo(this.layoutFilters, 'filter:layout:close:filters', () => { + return this.stateChange('normal'); + }); + this.listenTo(this.layoutFilters, 'filter:layout:close:options', () => { + return this.stateChange('filters'); + }); + this.listenTo(this.layoutFilters, 'filter:layout:open:filters', () => { + return this.stateChange('filters'); + }); + this.listenTo(this.layoutFilters, 'filter:layout:open:options', () => { + return this.stateChange('options'); + }); + + //# Return layout view. + return this.layoutFilters; + } + + + //# Get the base layout + getLayoutView(collection) { + return new Show.FilterLayout({ + collection}); + } + + + getSort() { + const sortCollection = App.request('filter:sortable:entities'); + const sortView = new Show.SortList({ + collection: sortCollection}); + this.layoutFilters.regionSort.show(sortView); + //# Listen to click. + return App.listenTo(sortView, "childview:filter:sortable:select", (parentview, childview) => { + App.request('filter:sort:store:set', childview.model.get('key'), childview.model.get('order')); + this.layoutFilters.trigger('filter:changed'); + return this.getSort(); + }); + } + + + getFilters(clearOptions = true) { + const filterCollection = App.request('filter:filterable:entities'); + const filtersView = new Show.FilterList({ + collection: filterCollection}); + //# On filterable click. + App.listenTo(filtersView, "childview:filter:filterable:select", (parentview, childview) => { + const key = childview.model.get('key'); + if (childview.model.get('type') === 'boolean') { //# No options + App.request('filter:store:key:toggle', key, childview.model.get('alias')); + return this.triggerChange(); + } else { + this.getFilterOptions(key); + return this.stateChange('options'); + } + }); + //# Render the filters. + this.layoutFilters.regionFiltersList.show(filtersView); + //# Empty the options ready for a change. + if (clearOptions) { + return this.layoutFilters.regionFiltersOptions.empty(); + } + } + + + getActive() { + const activeCollection = App.request('filter:active'); + const optionsView = new Show.ActiveList({ + collection: activeCollection}); + this.layoutFilters.regionFiltersActive.show(optionsView); + //# Get a new filtered collection and the current keys. + App.listenTo(optionsView, "childview:filter:option:remove", (parentview, childview) => { + const key = childview.model.get('key'); + App.request('filter:store:key:update', key, []); + return this.triggerChange(); + }); + //# Bind to new and open filter pane + App.listenTo(optionsView, "childview:filter:add", (parentview, childview) => { + return this.stateChange('filters'); + }); + //# Add/remove filter bar + return this.getFilterBar(); + } + + getFilterOptions(key) { + //# Create the options list view and add to dom + const optionsCollection = App.request('filter:options', key, this.getOption('refCollection')); + const optionsView = new Show.OptionList({ + collection: optionsCollection}); + this.layoutFilters.regionFiltersOptions.show(optionsView); + //# Get a new filtered collection and the current keys. + App.listenTo(optionsView, "childview:filter:option:select", (parentview, childview) => { + const value = childview.model.get('value'); + childview.view.$el.find('.option').toggleClass('active'); + App.request('filter:store:key:toggle', key, value); + return this.triggerChange(false); + }); //# dont clear options. + //# Deselect all + return App.listenTo(optionsView, 'filter:option:deselectall', parentview => { + parentview.view.$el.find('.option').removeClass('active'); + App.request('filter:store:key:update', key, []); + return this.triggerChange(false); + }); //# dont clear options. + } + + //# When something has changed. rerender the actives and notify other watchers. + triggerChange(clearOptions = true) { + App.vent.trigger('filter:filtering:start'); + this.getFilters(clearOptions); + this.getActive(); + App.navigate(helpers.url.path()); + return this.layoutFilters.trigger('filter:changed'); + } + + + //# Deal with the filters bar showing all active filters + getFilterBar() { + const currentFilters = App.request('filter:store:get'); + const list = _.flatten(_.values(currentFilters)); + const $wrapper = $('.layout-container'); + const $list = $('.region-content-top', $wrapper); + if (list.length > 0) { + const bar = new Show.FilterBar({filters: list}); + $list.html(bar.render().$el); + $wrapper.addClass('filters-active'); + return App.listenTo(bar, 'filter:remove:all', () => { + App.request('filter:store:set', {}); + this.triggerChange(); + return this.stateChange('normal'); + }); + } else { + return $wrapper.removeClass('filters-active'); + } + } + + + //# state changes (slide the filter panes in and out) + stateChange(state = 'normal') { + const $wrapper = this.layoutFilters.$el.find('.filters-container'); + switch (state) { + case 'filters': + return $wrapper.removeClass('show-options').addClass('show-filters'); + case 'options': + return $wrapper.addClass('show-options').removeClass('show-filters'); + default: + return $wrapper.removeClass('show-options').removeClass('show-filters'); + } + } + + + //# Populate the sections with structure from mainNav. + getSections() { + const collection = this.getOption('refCollection'); + if (collection.sectionId) { + const nav = App.request("navMain:children:show", collection.sectionId, 'Sections'); + return this.layoutFilters.regionNavSection.show(nav); + } + } + }; +}); diff --git a/src/js/apps/filter/show/show_controller.js.coffee b/src/js/apps/filter/show/show_controller.js.coffee deleted file mode 100644 index 944f11d2..00000000 --- a/src/js/apps/filter/show/show_controller.js.coffee +++ /dev/null @@ -1,146 +0,0 @@ -@Kodi.module "FilterApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - class Show.Controller extends App.Controllers.Base - - getFilterView: -> - collection = @getOption('refCollection') - @layoutFilters = @getLayoutView collection - - ## Render subviews. - @listenTo @layoutFilters, "show", => - @getSort() - @getFilters() - @getActive() - @getSections() - - ## Change panes. - @listenTo @layoutFilters, 'filter:layout:close:filters', => - @stateChange('normal') - @listenTo @layoutFilters, 'filter:layout:close:options', => - @stateChange('filters') - @listenTo @layoutFilters, 'filter:layout:open:filters', => - @stateChange('filters') - @listenTo @layoutFilters, 'filter:layout:open:options', => - @stateChange('options') - - ## Return layout view. - @layoutFilters - - - ## Get the base layout - getLayoutView: (collection) -> - new Show.FilterLayout - collection: collection - - - getSort: -> - sortCollection = App.request 'filter:sortable:entities' - sortView = new Show.SortList - collection: sortCollection - @layoutFilters.regionSort.show sortView - ## Listen to click. - App.listenTo sortView, "childview:filter:sortable:select", (parentview, childview) => - App.request 'filter:sort:store:set', childview.model.get('key'), childview.model.get('order') - @layoutFilters.trigger 'filter:changed' - @getSort() - - - getFilters: (clearOptions = true) -> - filterCollection = App.request 'filter:filterable:entities' - filtersView = new Show.FilterList - collection: filterCollection - ## On filterable click. - App.listenTo filtersView, "childview:filter:filterable:select", (parentview, childview) => - key = childview.model.get('key') - if childview.model.get('type') is 'boolean' ## No options - App.request 'filter:store:key:toggle', key, childview.model.get('alias') - @triggerChange() - else - @getFilterOptions key - @stateChange('options') - ## Render the filters. - @layoutFilters.regionFiltersList.show filtersView - ## Empty the options ready for a change. - if clearOptions - @layoutFilters.regionFiltersOptions.empty() - - - getActive: -> - activeCollection = App.request 'filter:active' - optionsView = new Show.ActiveList - collection: activeCollection - @layoutFilters.regionFiltersActive.show optionsView - ## Get a new filtered collection and the current keys. - App.listenTo optionsView, "childview:filter:option:remove", (parentview, childview) => - key = childview.model.get('key') - App.request 'filter:store:key:update', key, [] - @triggerChange() - ## Bind to new and open filter pane - App.listenTo optionsView, "childview:filter:add", (parentview, childview) => - @stateChange('filters') - ## Add/remove filter bar - @getFilterBar() - - getFilterOptions: (key) -> - ## Create the options list view and add to dom - optionsCollection = App.request 'filter:options', key, @getOption('refCollection') - optionsView = new Show.OptionList - collection: optionsCollection - @layoutFilters.regionFiltersOptions.show optionsView - ## Get a new filtered collection and the current keys. - App.listenTo optionsView, "childview:filter:option:select", (parentview, childview) => - value = childview.model.get('value') - childview.view.$el.find('.option').toggleClass('active') - App.request 'filter:store:key:toggle', key, value - @triggerChange(false) ## dont clear options. - ## Deselect all - App.listenTo optionsView, 'filter:option:deselectall', (parentview) => - parentview.view.$el.find('.option').removeClass('active') - App.request 'filter:store:key:update', key, [] - @triggerChange(false) ## dont clear options. - - ## When something has changed. rerender the actives and notify other watchers. - triggerChange: (clearOptions = true) -> - App.vent.trigger 'filter:filtering:start' - @getFilters(clearOptions) - @getActive() - App.navigate helpers.url.path() - @layoutFilters.trigger 'filter:changed' - - - ## Deal with the filters bar showing all active filters - getFilterBar: -> - currentFilters = App.request 'filter:store:get' - list = _.flatten _.values(currentFilters) - $wrapper = $('.layout-container') - $list = $('.region-content-top', $wrapper) - if list.length > 0 - bar = new Show.FilterBar({filters: list}) - $list.html bar.render().$el - $wrapper.addClass('filters-active') - App.listenTo bar, 'filter:remove:all', => - App.request 'filter:store:set', {} - @triggerChange() - @stateChange('normal') - else - $wrapper.removeClass('filters-active') - - - ## state changes (slide the filter panes in and out) - stateChange: (state = 'normal') -> - $wrapper = @layoutFilters.$el.find('.filters-container') - switch state - when 'filters' - $wrapper.removeClass('show-options').addClass('show-filters') - when 'options' - $wrapper.addClass('show-options').removeClass('show-filters') - else - $wrapper.removeClass('show-options').removeClass('show-filters') - - - ## Populate the sections with structure from mainNav. - getSections: -> - collection = @getOption('refCollection') - if collection.sectionId - nav = App.request "navMain:children:show", collection.sectionId, 'Sections' - @layoutFilters.regionNavSection.show nav diff --git a/src/js/apps/filter/show/show_view.js b/src/js/apps/filter/show/show_view.js new file mode 100644 index 00000000..01614353 --- /dev/null +++ b/src/js/apps/filter/show/show_view.js @@ -0,0 +1,209 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("FilterApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + /* + Base. + */ + + let Cls = (Show.FilterLayout = class FilterLayout extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/filter/show/filters_ui'; + this.prototype.className = "side-bar"; + this.prototype.regions = { + regionSort: '.sort-options', + regionFiltersActive: '.filters-active', + regionFiltersList: '.filters-list', + regionFiltersOptions: '.filter-options-list', + regionNavSection: '.nav-section' + }; + this.prototype.triggers = { + 'click .close-filters' : 'filter:layout:close:filters', + 'click .close-options' : 'filter:layout:close:options', + 'click .open-filters' : 'filter:layout:open:filters' + }; + } + }); + Cls.initClass(); + + Cls = (Show.ListItem = class ListItem extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/filter/show/list_item'; + this.prototype.tagName = 'li'; + } + }); + Cls.initClass(); + + Cls = (Show.List = class List extends App.Views.CollectionView { + static initClass() { + this.prototype.childView = Show.ListItem; + this.prototype.tagName = "ul"; + this.prototype.className = "selection-list"; + } + }); + Cls.initClass(); + + + /* + Extends. + */ + + + //# Sort. + + Cls = (Show.SortListItem = class SortListItem extends Show.ListItem { + static initClass() { + this.prototype.triggers = + {"click .sortable": "filter:sortable:select"}; + } + initialize() { + const classes = ['option', 'sortable']; + if (this.model.get('active') === true) { + classes.push('active'); + } + classes.push('order-' + this.model.get('order')); + const tag = this.themeTag('span', {'class': classes.join(' ')}, t.gettext(this.model.get('alias'))); + return this.model.set({title: tag}); + } + }); + Cls.initClass(); + + Cls = (Show.SortList = class SortList extends Show.List { + static initClass() { + this.prototype.childView = Show.SortListItem; + } + }); + Cls.initClass(); + + + //# Filter + + Cls = (Show.FilterListItem = class FilterListItem extends Show.ListItem { + static initClass() { + this.prototype.triggers = + {"click .filterable": "filter:filterable:select"}; + } + initialize() { + const classes = ['option', 'option filterable']; + if (this.model.get('active')) { + classes.push('active'); + } + const tag = this.themeTag('span', {'class': classes.join(' ')}, t.gettext(this.model.get('alias'))); + return this.model.set({title: tag}); + } + }); + Cls.initClass(); + + + Cls = (Show.FilterList = class FilterList extends Show.List { + static initClass() { + this.prototype.childView = Show.FilterListItem; + } + }); + Cls.initClass(); + + + //# Filter option. + + Cls = (Show.OptionListItem = class OptionListItem extends Show.ListItem { + static initClass() { + this.prototype.triggers = + {"click .filterable-option" : "filter:option:select"}; + } + initialize() { + const classes = ['option', 'option filterable-option']; + if (this.model.get('active')) { + classes.push('active'); + } + const tag = this.themeTag('span', {'class': classes.join(' ')}, this.model.get('value')); + return this.model.set({title: tag}); + } + }); + Cls.initClass(); + + Cls = (Show.OptionList = class OptionList extends App.Views.CompositeView { + static initClass() { + this.prototype.template = 'apps/filter/show/filter_options'; + this.prototype.activeValues = []; + this.prototype.childView = Show.OptionListItem; + this.prototype.childViewContainer = 'ul.selection-list'; + this.prototype.triggers = + {'click .deselect-all': 'filter:option:deselectall'}; + } + onRender() { + //# hide filter search if < 10 items + if (this.collection.length <= 10) { + $('.options-search-wrapper', this.$el).addClass('hidden'); + } + //# Filter options via search box. + return $('.options-search', this.$el).filterList(); + } + }); + Cls.initClass(); + + + //# Active Filters. + + Cls = (Show.ActiveListItem = class ActiveListItem extends Show.ListItem { + static initClass() { + this.prototype.triggers = + {"click .filterable-remove" : "filter:option:remove"}; + } + initialize() { + const tooltip = t.gettext('Remove') + ' ' + this.model.escape('key') + ' ' + t.gettext('filter'); + const text = this.themeTag('span', {'class': 'text'}, this.model.get('values').join(', ')); + const tag = this.themeTag('span', {'class': 'filter-btn filterable-remove', title: tooltip}, text); + return this.model.set({title: tag}); + } + }); + Cls.initClass(); + + Cls = (Show.ActiveNewListItem = class ActiveNewListItem extends Show.ListItem { + static initClass() { + this.prototype.triggers = + {"click .filterable-add" : "filter:add"}; + } + initialize() { + const tag = this.themeTag('span', {'class': 'filter-btn filterable-add'}, t.gettext('Add filter')); + return this.model.set({title: tag}); + } + }); + Cls.initClass(); + + Cls = (Show.ActiveList = class ActiveList extends Show.List { + static initClass() { + this.prototype.childView = Show.ActiveListItem; + this.prototype.emptyView = Show.ActiveNewListItem; + this.prototype.className = "active-list"; + } + }); + Cls.initClass(); + + + //# Filters bar + + return (function() { + Cls = (Show.FilterBar = class FilterBar extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/filter/show/filters_bar'; + this.prototype.className = "filters-active-bar"; + this.prototype.triggers = + {'click .remove': 'filter:remove:all'}; + } + onRender() { + if (this.options.filters) { + return $('.filters-active-all', this.$el).text( this.options.filters.join(', ') ); + } + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/filter/show/show_view.js.coffee b/src/js/apps/filter/show/show_view.js.coffee deleted file mode 100644 index 0d2da711..00000000 --- a/src/js/apps/filter/show/show_view.js.coffee +++ /dev/null @@ -1,130 +0,0 @@ -@Kodi.module "FilterApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - ### - Base. - ### - - class Show.FilterLayout extends App.Views.LayoutView - template: 'apps/filter/show/filters_ui' - className: "side-bar" - regions: - regionSort: '.sort-options' - regionFiltersActive: '.filters-active' - regionFiltersList: '.filters-list' - regionFiltersOptions: '.filter-options-list' - regionNavSection: '.nav-section' - triggers: - 'click .close-filters' : 'filter:layout:close:filters' - 'click .close-options' : 'filter:layout:close:options' - 'click .open-filters' : 'filter:layout:open:filters' - - class Show.ListItem extends App.Views.ItemView - template: 'apps/filter/show/list_item' - tagName: 'li' - - class Show.List extends App.Views.CollectionView - childView: Show.ListItem - tagName: "ul" - className: "selection-list" - - - ### - Extends. - ### - - - ## Sort. - - class Show.SortListItem extends Show.ListItem - triggers: - "click .sortable": "filter:sortable:select" - initialize: -> - classes = ['option', 'sortable'] - if @model.get('active') is true - classes.push 'active' - classes.push 'order-' + @model.get('order') - tag = @themeTag('span', {'class': classes.join(' ')}, t.gettext(@model.get('alias'))) - @model.set(title: tag) - - class Show.SortList extends Show.List - childView: Show.SortListItem - - - ## Filter - - class Show.FilterListItem extends Show.ListItem - triggers: - "click .filterable": "filter:filterable:select" - initialize: -> - classes = ['option', 'option filterable'] - if @model.get('active') - classes.push 'active' - tag = @themeTag('span', {'class': classes.join(' ')}, t.gettext(@model.get('alias'))) - @model.set(title: tag) - - - class Show.FilterList extends Show.List - childView: Show.FilterListItem - - - ## Filter option. - - class Show.OptionListItem extends Show.ListItem - triggers: - "click .filterable-option" : "filter:option:select" - initialize: -> - classes = ['option', 'option filterable-option'] - if @model.get('active') - classes.push 'active' - tag = @themeTag('span', {'class': classes.join(' ')}, @model.get('value')) - @model.set(title: tag) - - class Show.OptionList extends App.Views.CompositeView - template: 'apps/filter/show/filter_options' - activeValues: [] - childView: Show.OptionListItem - childViewContainer: 'ul.selection-list' - onRender: -> - ## hide filter search if < 10 items - if @collection.length <= 10 - $('.options-search-wrapper', @$el).addClass('hidden') - ## Filter options via search box. - $('.options-search', @$el).filterList() - triggers: - 'click .deselect-all': 'filter:option:deselectall' - - - ## Active Filters. - - class Show.ActiveListItem extends Show.ListItem - triggers: - "click .filterable-remove" : "filter:option:remove" - initialize: -> - tooltip = t.gettext('Remove') + ' ' + @model.escape('key') + ' ' + t.gettext('filter') - text = @themeTag('span', {'class': 'text'}, @model.get('values').join(', ')) - tag = @themeTag('span', {'class': 'filter-btn filterable-remove', title: tooltip}, text) - @model.set(title: tag) - - class Show.ActiveNewListItem extends Show.ListItem - triggers: - "click .filterable-add" : "filter:add" - initialize: -> - tag = @themeTag('span', {'class': 'filter-btn filterable-add'}, t.gettext('Add filter')) - @model.set(title: tag) - - class Show.ActiveList extends Show.List - childView: Show.ActiveListItem - emptyView: Show.ActiveNewListItem - className: "active-list" - - - ## Filters bar - - class Show.FilterBar extends App.Views.ItemView - template: 'apps/filter/show/filters_bar' - className: "filters-active-bar" - onRender: -> - if @options.filters - $('.filters-active-all', @$el).text( @options.filters.join(', ') ) - triggers: - 'click .remove': 'filter:remove:all' diff --git a/src/js/apps/help/help_app.js b/src/js/apps/help/help_app.js new file mode 100644 index 00000000..c20e3ded --- /dev/null +++ b/src/js/apps/help/help_app.js @@ -0,0 +1,80 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("HelpApp", function(HelpApp, App, Backbone, Marionette, $, _) { + + const Cls = (HelpApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "help" : "helpOverview", + "help/overview" : "helpOverview", + "help/:id" : "helpPage" + }; + } + }); + Cls.initClass(); + + var API = { + + helpOverview() { + return new App.HelpApp.Overview.Controller(); + }, + + helpPage(id) { + return new HelpApp.Show.Controller({ + id}); + }, + + // Get a html page with jQuery ajax + getPage(id, lang = 'en', callback) { + const content = $.get(`lang/${lang}/${id}.html`); + content.fail(function(error) { + if (lang !== 'en') { + return API.getPage(id, 'en', callback); + } + }); + content.done(data => callback(data)); + return content; + }, + + // Get second level nav + getSubNav() { + const collection = App.request("navMain:array:entities", this.getSideBarStructure()); + return App.request("navMain:collection:show", collection, t.gettext('Help topics')); + }, + + // Get second level nav structure + // TODO: refactor into navMain + getSideBarStructure() { + return [ + {title: t.gettext('About'), path: 'help'}, + {title: t.gettext('Readme'), path: 'help/app-readme'}, + {title: t.gettext('Changelog'), path: 'help/app-changelog'}, + {title: t.gettext('Keyboard'), path: 'help/keybind-readme'}, + {title: t.gettext('Add-ons'), path: 'help/addons'}, + {title: t.gettext('Developers'), path: 'help/developers'}, + {title: t.gettext('Translations'), path: 'help/lang-readme'}, + {title: t.gettext('License'), path: 'help/license'} + ]; + } + }; + + // Subnav for help + App.reqres.setHandler('help:subnav', () => API.getSubNav()); + + // Get a page via jQuery, use current language + App.reqres.setHandler('help:page', function(id, callback) { + const lang = config.getLocal('lang', 'en'); + return API.getPage(id, lang, callback); + }); + + //# Start the router. + return App.on("before:start", () => new HelpApp.Router({ + controller: API})); +}); diff --git a/src/js/apps/help/help_app.js.coffee b/src/js/apps/help/help_app.js.coffee deleted file mode 100644 index 9f011085..00000000 --- a/src/js/apps/help/help_app.js.coffee +++ /dev/null @@ -1,59 +0,0 @@ -@Kodi.module "HelpApp", (HelpApp, App, Backbone, Marionette, $, _) -> - - class HelpApp.Router extends App.Router.Base - appRoutes: - "help" : "helpOverview" - "help/overview" : "helpOverview" - "help/:id" : "helpPage" - - API = - - helpOverview: -> - new App.HelpApp.Overview.Controller() - - helpPage: (id) -> - new HelpApp.Show.Controller - id: id - - # Get a html page with jQuery ajax - getPage: (id, lang = 'en', callback) -> - content = $.get("lang/#{lang}/#{id}.html") - content.fail (error) -> - if lang != 'en' - API.getPage id, 'en', callback - content.done (data) -> - callback data - content - - # Get second level nav - getSubNav: -> - collection = App.request "navMain:array:entities", @getSideBarStructure() - App.request "navMain:collection:show", collection, t.gettext('Help topics') - - # Get second level nav structure - # TODO: refactor into navMain - getSideBarStructure: -> - [ - {title: t.gettext('About'), path: 'help'} - {title: t.gettext('Readme'), path: 'help/app-readme'} - {title: t.gettext('Changelog'), path: 'help/app-changelog'} - {title: t.gettext('Keyboard'), path: 'help/keybind-readme'} - {title: t.gettext('Add-ons'), path: 'help/addons'} - {title: t.gettext('Developers'), path: 'help/developers'} - {title: t.gettext('Translations'), path: 'help/lang-readme'} - {title: t.gettext('License'), path: 'help/license'} - ] - - # Subnav for help - App.reqres.setHandler 'help:subnav', -> - API.getSubNav() - - # Get a page via jQuery, use current language - App.reqres.setHandler 'help:page', (id, callback) -> - lang = config.getLocal 'lang', 'en' - API.getPage id, lang, callback - - ## Start the router. - App.on "before:start", -> - new HelpApp.Router - controller: API diff --git a/src/js/apps/help/overview/overview_controller.js b/src/js/apps/help/overview/overview_controller.js new file mode 100644 index 00000000..fa80fa03 --- /dev/null +++ b/src/js/apps/help/overview/overview_controller.js @@ -0,0 +1,105 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("HelpApp.Overview", function(Overview, App, Backbone, Marionette, $, _) { + + return Overview.Controller = class Controller extends App.Controllers.Base { + + initialize(options) { + + // Load the page + return App.request("help:page", 'help-overview', data => { + + this.layout = this.getLayoutView(data); + this.listenTo(this.layout, "show", () => { + this.getSideBar(); + return this.getPage(data); + }); + + // Render layout + return App.regionContent.show(this.layout); + }); + } + + getPage(data) { + this.pageView = new Overview.Page({ + data}); + this.listenTo(this.pageView, "show", () => { + return this.getReport(); + }); + + return this.layout.regionContent.show(this.pageView); + } + + getSideBar() { + const subNav = App.request("help:subnav"); + return this.layout.regionSidebarFirst.show(subNav); + } + + getLayoutView() { + return new Overview.Layout(); + } + + getReport() { + + // jQuery obj for page view + this.$pageView = this.pageView.$el; + + this.getReportChorusVersion(); + this.getReportKodiVersion(); + this.getReportWebsocketsActive(); + this.getReportLocalAudio(); + + // We might have just called to early, bind to available event just in case. + App.vent.on("sockets:available", () => { + return this.getReportWebsocketsActive(); + }); + return App.vent.on("state:initialized", () => { + return this.getReportKodiVersion(); + }); + } + + // + // Callbacks for getting/setting report values below. + // TODO: Refactor... Shouldn't be using jQuery to insert content + // + + // Chorus version. + getReportChorusVersion() { + return $.get("addon.xml", data => { + return $('.report-chorus-version > span', this.$pageView).text($('addon', data).attr('version')); + }); + } + + // Kodi version + getReportKodiVersion() { + const state = App.request("state:kodi"); + const kodiVersion = state.getState('version'); + return $('.report-kodi-version > span', this.$pageView).text(kodiVersion.major + '.' + kodiVersion.minor); + } + + // Web sockets. + getReportWebsocketsActive() { + const wsActive = App.request("sockets:active"); + const $ws = $('.report-websockets', this.$pageView); + if (wsActive) { + $('span', $ws).text(tr("Remote control is set up correctly")); + return $ws.removeClass('warning'); + } else { + $('span', $ws).html(tr("You need to 'Allow remote control' for Kodi. You can do that") + ' ' + tr('here') + ''); + return $ws.addClass('warning'); + } + } + + // Local audio + getReportLocalAudio() { + const localAudio = soundManager.useHTML5Audio ? "HTML 5" : "Flash"; + return $('.report-local-audio > span', this.$pageView) .text(localAudio); + } + }; +}); diff --git a/src/js/apps/help/overview/overview_controller.js.coffee b/src/js/apps/help/overview/overview_controller.js.coffee deleted file mode 100644 index 70f1e80d..00000000 --- a/src/js/apps/help/overview/overview_controller.js.coffee +++ /dev/null @@ -1,79 +0,0 @@ -@Kodi.module "HelpApp.Overview", (Overview, App, Backbone, Marionette, $, _) -> - - class Overview.Controller extends App.Controllers.Base - - initialize: (options) -> - - # Load the page - App.request "help:page", 'help-overview', (data) => - - @layout = @getLayoutView data - @listenTo @layout, "show", => - @getSideBar() - @getPage data - - # Render layout - App.regionContent.show @layout - - getPage: (data) -> - @pageView = new Overview.Page - data: data - @listenTo @pageView, "show", => - @getReport() - - @layout.regionContent.show @pageView - - getSideBar: -> - subNav = App.request "help:subnav" - @layout.regionSidebarFirst.show subNav - - getLayoutView: -> - new Overview.Layout() - - getReport: -> - - # jQuery obj for page view - @$pageView = @pageView.$el - - @getReportChorusVersion() - @getReportKodiVersion() - @getReportWebsocketsActive() - @getReportLocalAudio() - - # We might have just called to early, bind to available event just in case. - App.vent.on "sockets:available", => - @getReportWebsocketsActive() - App.vent.on "state:initialized", => - @getReportKodiVersion() - - # - # Callbacks for getting/setting report values below. - # TODO: Refactor... Shouldn't be using jQuery to insert content - # - - # Chorus version. - getReportChorusVersion: -> - $.get "addon.xml", (data) => - $('.report-chorus-version > span', @$pageView).text $('addon', data).attr('version') - - # Kodi version - getReportKodiVersion: -> - state = App.request "state:kodi" - kodiVersion = state.getState('version') - $('.report-kodi-version > span', @$pageView).text kodiVersion.major + '.' + kodiVersion.minor - - # Web sockets. - getReportWebsocketsActive: -> - wsActive = App.request "sockets:active" - $ws = $('.report-websockets', @$pageView) - if wsActive - $('span', $ws).text tr("Remote control is set up correctly") - $ws.removeClass 'warning' - else - $('span', $ws).html tr("You need to 'Allow remote control' for Kodi. You can do that") + ' ' + tr('here') + '' - $ws.addClass 'warning' - - # Local audio - getReportLocalAudio: -> - localAudio = if soundManager.useHTML5Audio then "HTML 5" else "Flash" - $('.report-local-audio > span', @$pageView) .text localAudio diff --git a/src/js/apps/help/overview/overview_view.js b/src/js/apps/help/overview/overview_view.js new file mode 100644 index 00000000..a5dfc198 --- /dev/null +++ b/src/js/apps/help/overview/overview_view.js @@ -0,0 +1,44 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// View for the API Browser. +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("HelpApp.Overview", function(Overview, App, Backbone, Marionette, $, _) { + + let Cls = (Overview.Page = class Page extends App.Views.CompositeView { + static initClass() { + this.prototype.className = "help--overview"; + this.prototype.template = 'apps/help/overview/overview'; + this.prototype.tagName = "div"; + } + onRender() { + // Set the data/header. + return $('.help--overview--header', this.$el).html(this.options.data); + } + }); + Cls.initClass(); + + + return (function() { + Cls = (Overview.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "help--page help--overview page-wrapper"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/help/overview/overview_view.js.coffee b/src/js/apps/help/overview/overview_view.js.coffee deleted file mode 100644 index a7dcc19a..00000000 --- a/src/js/apps/help/overview/overview_view.js.coffee +++ /dev/null @@ -1,22 +0,0 @@ -# View for the API Browser. -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "HelpApp.Overview", (Overview, App, Backbone, Marionette, $, _) -> - - class Overview.Page extends App.Views.CompositeView - className: "help--overview" - template: 'apps/help/overview/overview' - tagName: "div" - onRender: -> - # Set the data/header. - $('.help--overview--header', @$el).html @options.data - - - class Overview.Layout extends App.Views.LayoutWithSidebarFirstView - className: "help--page help--overview page-wrapper" diff --git a/src/js/apps/help/show/show_controller.js b/src/js/apps/help/show/show_controller.js new file mode 100644 index 00000000..914e734f --- /dev/null +++ b/src/js/apps/help/show/show_controller.js @@ -0,0 +1,46 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("HelpApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + // Main controller + return Show.Controller = class Controller extends App.Controllers.Base { + + initialize(options) { + + // Load the page + return App.request("help:page", options.id, data => { + + this.layout = this.getLayoutView(data); + this.listenTo(this.layout, "show", () => { + return this.getSideBar(); + }); + + // Render layout + App.regionContent.show(this.layout); + + // If a page view is overridden set that to the content. + if (options.pageView) { + return this.layout.regionContent.show(options.pageView); + } + }); + } + + getSideBar() { + const subNav = App.request("help:subnav"); + return this.layout.regionSidebarFirst.show(subNav); + } + + getLayoutView(data) { + return new Show.Layout({ + data, + pageView: this.options.pageView + }); + } + }; +}); diff --git a/src/js/apps/help/show/show_controller.js.coffee b/src/js/apps/help/show/show_controller.js.coffee deleted file mode 100644 index 911b442e..00000000 --- a/src/js/apps/help/show/show_controller.js.coffee +++ /dev/null @@ -1,29 +0,0 @@ -@Kodi.module "HelpApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - # Main controller - class Show.Controller extends App.Controllers.Base - - initialize: (options) -> - - # Load the page - App.request "help:page", options.id, (data) => - - @layout = @getLayoutView data - @listenTo @layout, "show", => - @getSideBar() - - # Render layout - App.regionContent.show @layout - - # If a page view is overridden set that to the content. - if options.pageView - @layout.regionContent.show options.pageView - - getSideBar: -> - subNav = App.request "help:subnav" - @layout.regionSidebarFirst.show subNav - - getLayoutView: (data) -> - new Show.Layout - data: data - pageView: @options.pageView diff --git a/src/js/apps/help/show/show_view.js b/src/js/apps/help/show/show_view.js new file mode 100644 index 00000000..b80fa972 --- /dev/null +++ b/src/js/apps/help/show/show_view.js @@ -0,0 +1,31 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// View for the API Browser. +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("HelpApp.Show", (Show, App, Backbone, Marionette, $, _) => (function() { + const Cls = (Show.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "help--page page-wrapper"; + } + onRender() { + // Set the data. + return $(this.regionContent.el, this.$el).html(this.options.data); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/help/show/show_view.js.coffee b/src/js/apps/help/show/show_view.js.coffee deleted file mode 100644 index 425f4622..00000000 --- a/src/js/apps/help/show/show_view.js.coffee +++ /dev/null @@ -1,16 +0,0 @@ -# View for the API Browser. -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "HelpApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - class Show.Layout extends App.Views.LayoutWithSidebarFirstView - className: "help--page page-wrapper" - onRender: -> - # Set the data. - $(@regionContent.el, @$el).html @options.data diff --git a/src/js/apps/images/images_app.js b/src/js/apps/images/images_app.js new file mode 100644 index 00000000..3aaad236 --- /dev/null +++ b/src/js/apps/images/images_app.js @@ -0,0 +1,103 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("Images", function(Images, App, Backbone, Marionette, $, _) { + + var API = { + + imagesPath: 'images/', + + defaultFanartPath: 'fanart_default/', + + defaultFanartFiles: [ + 'cans.jpg', + 'guitar.jpg', + 'speaker.jpg', + 'turntable.jpg', + 'amp.jpg', + 'concert.jpg', + 'tweeter.jpg', + ], + + getDefaultThumbnail() { + return API.imagesPath + 'thumbnail_default.png'; + }, + + getRandomFanart() { + const rand = helpers.global.getRandomInt(0, API.defaultFanartFiles.length - 1); + const file = API.defaultFanartFiles[rand]; + const path = API.imagesPath + API.defaultFanartPath + file; + return path; + }, + + parseRawPath(rawPath) { + const path = config.getLocal('reverseProxy') ? 'image/' + encodeURIComponent(rawPath) : '/image/' + encodeURIComponent(rawPath); + return path; + }, + + //# set background fanart, string to 'none' removes fanart + setFanartBackground(path, region) { + const $body = App.getRegion(region).$el; + if (path !== 'none') { + if (!path) { + path = this.getRandomFanart(); + } + return $body.css('background-image', 'url(' + path + ')'); + } else { + return $body.removeAttr('style'); + } + }, + + getImageUrl(rawPath, type = 'thumbnail', useFallback = true) { + let path = ''; + if ((rawPath == null) || (rawPath === '')) { + switch (type) { + case 'fanart': path = API.getRandomFanart(); break; + default: path = API.getDefaultThumbnail(); + } + } else if (type === 'trailer') { + path = API.getTrailerUrl(rawPath); + } else { + path = API.parseRawPath(rawPath); + } + return path; + }, + + getTrailerUrl(rawpath) { + const trailer = helpers.url.parseTrailerUrl((rawpath)); + return trailer.img; + } + }; + + //# Handler to set the background fanart pic. + App.commands.setHandler("images:fanart:set", (path, region = 'regionFanart') => API.setFanartBackground(path, region)); + + //# Handler to return a parsed image path. + App.reqres.setHandler("images:path:get", (rawPath = '', type = 'thumbnail') => API.getImageUrl(rawPath, type)); + + //# Handler to apply correct paths to a model, expects to be called + //# on the model attributes, typically during a model.parse() + return App.reqres.setHandler("images:path:entity", function(model) { + if (model.thumbnail != null) { + model.thumbnailOriginal = model.thumbnail; + model.thumbnail = API.getImageUrl(model.thumbnail, 'thumbnail'); + } + if (model.fanart != null) { + model.fanartOriginal = model.fanart; + model.fanart = API.getImageUrl(model.fanart, 'fanart'); + } + if ((model.cast != null) && (model.cast.length > 0)) { + for (var i in model.cast) { + var person = model.cast[i]; + model.cast[i].thumbnail = API.getImageUrl(person.thumbnail, 'thumbnail'); + } + } + return model; + }); +}); diff --git a/src/js/apps/images/images_app.js.coffee b/src/js/apps/images/images_app.js.coffee deleted file mode 100644 index 3a6f8ca3..00000000 --- a/src/js/apps/images/images_app.js.coffee +++ /dev/null @@ -1,78 +0,0 @@ -@Kodi.module "Images", (Images, App, Backbone, Marionette, $, _) -> - - API = - - imagesPath: 'images/' - - defaultFanartPath: 'fanart_default/' - - defaultFanartFiles: [ - 'cans.jpg' - 'guitar.jpg' - 'speaker.jpg' - 'turntable.jpg', - 'amp.jpg', - 'concert.jpg', - 'tweeter.jpg', - ] - - getDefaultThumbnail: -> - API.imagesPath + 'thumbnail_default.png' - - getRandomFanart: -> - rand = helpers.global.getRandomInt(0, API.defaultFanartFiles.length - 1) - file = API.defaultFanartFiles[rand] - path = API.imagesPath + API.defaultFanartPath + file - path - - parseRawPath: (rawPath) -> - path = if config.getLocal 'reverseProxy' then 'image/' + encodeURIComponent(rawPath) else '/image/' + encodeURIComponent(rawPath) - path - - ## set background fanart, string to 'none' removes fanart - setFanartBackground: (path, region) -> - $body = App.getRegion(region).$el - if path isnt 'none' - if not path - path = @getRandomFanart() - $body.css('background-image', 'url(' + path + ')') - else - $body.removeAttr('style') - - getImageUrl: (rawPath, type = 'thumbnail', useFallback = true) -> - path = '' - if not rawPath? or rawPath is '' - switch type - when 'fanart' then path = API.getRandomFanart() - else path = API.getDefaultThumbnail() - else if type is 'trailer' - path = API.getTrailerUrl(rawPath) - else - path = API.parseRawPath(rawPath) - path - - getTrailerUrl: (rawpath) -> - trailer = helpers.url.parseTrailerUrl (rawpath) - trailer.img - - ## Handler to set the background fanart pic. - App.commands.setHandler "images:fanart:set", (path, region = 'regionFanart') -> - API.setFanartBackground path, region - - ## Handler to return a parsed image path. - App.reqres.setHandler "images:path:get", (rawPath = '', type = 'thumbnail') -> - API.getImageUrl(rawPath, type) - - ## Handler to apply correct paths to a model, expects to be called - ## on the model attributes, typically during a model.parse() - App.reqres.setHandler "images:path:entity", (model) -> - if model.thumbnail? - model.thumbnailOriginal = model.thumbnail - model.thumbnail = API.getImageUrl(model.thumbnail, 'thumbnail') - if model.fanart? - model.fanartOriginal = model.fanart - model.fanart = API.getImageUrl(model.fanart, 'fanart') - if model.cast? and model.cast.length > 0 - for i, person of model.cast - model.cast[i].thumbnail = API.getImageUrl(person.thumbnail, 'thumbnail') - model diff --git a/src/js/apps/input/input_app.js b/src/js/apps/input/input_app.js new file mode 100644 index 00000000..c03dd7d8 --- /dev/null +++ b/src/js/apps/input/input_app.js @@ -0,0 +1,195 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("InputApp", function(InputApp, App, Backbone, Marionette, $, _) { + + + const Cls = (InputApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = + {"remote" : "remotePage"}; + } + }); + Cls.initClass(); + + + const API = { + + initKeyBind() { + return $(document).keydown(e => { + return this.keyBind(e); + }); + }, + + //# The input controller + inputController() { + return App.request("command:kodi:controller", 'auto', 'Input'); + }, + + //# Do an input command + doInput(type) { + return this.inputController().sendInput(type, []); + }, + + //# Do an action + //# http://kodi.wiki/view/JSON-RPC_API/v6#Input.Action + doAction(action) { + return this.inputController().sendInput('ExecuteAction', [action]); + }, + + //# Send a player command. + doCommand(command, params, callback) { + return App.request('command:kodi:player', command, params, () => { + return this.pollingUpdate(callback); + }); + }, + + //# Get the Kodi application controller + appController() { + return App.request("command:kodi:controller", 'auto', 'Application'); + }, + + //# Wrapper for requesting a state update if no sockets + pollingUpdate(callback) { + if (!App.request('sockets:active')) { + return App.request('state:kodi:update', callback); + } + }, + + //# Toggle remote visibility and path + toggleRemote(open = 'auto') { + const $body = $('body'); + const rClass = 'section-remote'; + if (open === 'auto') { + open = ($body.hasClass(rClass)); + } + if (open) { + window.history.back(); + return helpers.backscroll.scrollToLast(); + } else { + helpers.backscroll.setLast(); + return App.navigate("remote", {trigger: true}); + } + }, + + //# Page callback, open remote and clear content. + remotePage() { + this.toggleRemote('auto'); + return App.regionContent.empty(); + }, + + //# The input binds + keyBind(e) { + + // Get settings + const kodiControl = config.getLocal('keyboardControl') === 'kodi'; + const remotePage = $('body').hasClass('page-remote'); + + //# Don't do anything if forms in use or if we have a local only setting + if ($(e.target).is("input, textarea, select")) { + return; + } + + //# Don't do anything for white listed commands like CTRL, ALT, SHIFT, etc + const whiteListCommands = [17, 16, 91, 18, 70]; + if (helpers.global.inArray(e.which, whiteListCommands)) { + return; + } + + // If no Kodi control and not on the remote page + if (!kodiControl && !remotePage) { + return; + } + + // If all keyboard controls are for kodi or on the remote page + if (kodiControl || remotePage) { + e.preventDefault(); + } + + //# Get stateObj - consider changing this to be current and work with local too? + const stateObj = App.request("state:kodi"); + + //# Respond to key code + switch (e.which) { + case 37: case 72: // left, h + return this.doInput("Left"); + case 38: case 75: // up, k + return this.doInput("Up"); + case 39: case 76: // right, l + return this.doInput("Right"); + case 40: case 74: // down, j + return this.doInput("Down"); + case 8: // backspace + return this.doInput("Back"); + case 13: // enter + return this.doInput("Select"); + case 67: // c (context) + return this.doInput("ContextMenu"); + case 107: case 187: case 61: // + (vol up) + var vol = stateObj.getState('volume') + 5; + return this.appController().setVolume(((vol > 100 ? 100 : Math.ceil(vol)))); + case 109: case 189: case 173: // - (vol down) + vol = stateObj.getState('volume') - 5; + return this.appController().setVolume(((vol < 0 ? 0 : Math.ceil(vol)))); + case 77: // m (mute) + return this.appController().toggleMute(); + case 32: // spacebar (play/pause) + return this.doCommand("PlayPause", "toggle"); + case 88: // x (stop) + return this.doCommand("Stop"); + case 84: // t (toggle subtitles) + return this.doAction("showsubtitles"); + case 9: // tab (close osd) + return this.doAction("close"); + case 190: // > (next) + return this.doCommand("GoTo", "next"); + case 188: // < (prev) + return this.doCommand("GoTo", "previous"); + case 220: case 160: // Backslash, ^ (firefox) (fullscreen) + return this.doAction("fullscreen"); + case 79: // o (osd) + return this.doAction("osd"); + default: + } + } // return everything else here + }; + + + App.commands.setHandler("input:textbox", msg => App.execute("ui:textinput:show", "Input required", {msg}, function(text) { + API.inputController().sendText(text); + return App.execute("notification:show", t.gettext('Sent text') + ' "' + text + '" ' + t.gettext('to Kodi')); + })); + + App.commands.setHandler("input:textbox:close", () => App.execute("ui:modal:close")); + + App.commands.setHandler("input:send", action => API.doInput(action)); + + App.commands.setHandler("input:remote:toggle", () => API.toggleRemote()); + + App.commands.setHandler("input:action", action => API.doAction(action)); + + App.commands.setHandler("input:resume", function(model, idKey) { + const controller = new InputApp.Resume.Controller(); + return controller.resumePlay(model, idKey); + }); + + //# Startup tasks. + App.addInitializer(function() { + + //# Render remote + const controller = new InputApp.Remote.Controller(); + + //# Bind to the keyboard inputs + return API.initKeyBind(); + }); + + //# Start the router. + return App.on("before:start", () => new InputApp.Router({ + controller: API})); +}); diff --git a/src/js/apps/input/input_app.js.coffee b/src/js/apps/input/input_app.js.coffee deleted file mode 100644 index f6ed33c2..00000000 --- a/src/js/apps/input/input_app.js.coffee +++ /dev/null @@ -1,163 +0,0 @@ -@Kodi.module "InputApp", (InputApp, App, Backbone, Marionette, $, _) -> - - - class InputApp.Router extends App.Router.Base - appRoutes: - "remote" : "remotePage" - - - API = - - initKeyBind: -> - $(document).keydown (e) => - @keyBind e - - ## The input controller - inputController: -> - App.request "command:kodi:controller", 'auto', 'Input' - - ## Do an input command - doInput: (type) -> - @inputController().sendInput type, [] - - ## Do an action - ## http://kodi.wiki/view/JSON-RPC_API/v6#Input.Action - doAction: (action) -> - @inputController().sendInput 'ExecuteAction', [action] - - ## Send a player command. - doCommand: (command, params, callback) -> - App.request 'command:kodi:player', command, params, => - @pollingUpdate(callback) - - ## Get the Kodi application controller - appController: -> - App.request "command:kodi:controller", 'auto', 'Application' - - ## Wrapper for requesting a state update if no sockets - pollingUpdate: (callback) -> - if not App.request 'sockets:active' - App.request 'state:kodi:update', callback - - ## Toggle remote visibility and path - toggleRemote: (open = 'auto') -> - $body = $('body') - rClass = 'section-remote' - if open is 'auto' - open = ($body.hasClass(rClass)) - if open - window.history.back() - helpers.backscroll.scrollToLast() - else - helpers.backscroll.setLast() - App.navigate("remote", {trigger: true}); - - ## Page callback, open remote and clear content. - remotePage: -> - @toggleRemote('auto'); - App.regionContent.empty() - - ## The input binds - keyBind: (e) -> - - # Get settings - kodiControl = config.getLocal('keyboardControl') is 'kodi' - remotePage = $('body').hasClass('page-remote') - - ## Don't do anything if forms in use or if we have a local only setting - if $(e.target).is("input, textarea, select") - return - - ## Don't do anything for white listed commands like CTRL, ALT, SHIFT, etc - whiteListCommands = [17, 16, 91, 18, 70] - if helpers.global.inArray e.which, whiteListCommands - return - - # If no Kodi control and not on the remote page - if not kodiControl and not remotePage - return - - # If all keyboard controls are for kodi or on the remote page - if kodiControl or remotePage - e.preventDefault() - - ## Get stateObj - consider changing this to be current and work with local too? - stateObj = App.request "state:kodi" - - ## Respond to key code - switch e.which - when 37, 72 # left, h - @doInput "Left" - when 38, 75 # up, k - @doInput "Up" - when 39, 76 # right, l - @doInput "Right" - when 40, 74 # down, j - @doInput "Down" - when 8 # backspace - @doInput "Back" - when 13 # enter - @doInput "Select" - when 67 # c (context) - @doInput "ContextMenu" - when 107, 187, 61 # + (vol up) - vol = stateObj.getState('volume') + 5 - @appController().setVolume ((if vol > 100 then 100 else Math.ceil(vol))) - when 109, 189, 173 # - (vol down) - vol = stateObj.getState('volume') - 5 - @appController().setVolume ((if vol < 0 then 0 else Math.ceil(vol))) - when 77 # m (mute) - @appController().toggleMute() - when 32 # spacebar (play/pause) - @doCommand "PlayPause", "toggle" - when 88 # x (stop) - @doCommand "Stop" - when 84 # t (toggle subtitles) - @doAction "showsubtitles" - when 9 # tab (close osd) - @doAction "close" - when 190 # > (next) - @doCommand "GoTo", "next" - when 188 # < (prev) - @doCommand "GoTo", "previous" - when 220, 160 # Backslash, ^ (firefox) (fullscreen) - @doAction "fullscreen" - when 79 # o (osd) - @doAction "osd" - else # return everything else here - - - App.commands.setHandler "input:textbox", (msg) -> - App.execute "ui:textinput:show", "Input required", {msg: msg}, (text) -> - API.inputController().sendText(text) - App.execute "notification:show", t.gettext('Sent text') + ' "' + text + '" ' + t.gettext('to Kodi') - - App.commands.setHandler "input:textbox:close", -> - App.execute "ui:modal:close" - - App.commands.setHandler "input:send", (action) -> - API.doInput action - - App.commands.setHandler "input:remote:toggle", -> - API.toggleRemote() - - App.commands.setHandler "input:action", (action) -> - API.doAction(action) - - App.commands.setHandler "input:resume", (model, idKey) -> - controller = new InputApp.Resume.Controller() - controller.resumePlay model, idKey - - ## Startup tasks. - App.addInitializer -> - - ## Render remote - controller = new InputApp.Remote.Controller() - - ## Bind to the keyboard inputs - API.initKeyBind() - - ## Start the router. - App.on "before:start", -> - new InputApp.Router - controller: API diff --git a/src/js/apps/input/remote/remote_controller.js b/src/js/apps/input/remote/remote_controller.js new file mode 100644 index 00000000..daf2a9ba --- /dev/null +++ b/src/js/apps/input/remote/remote_controller.js @@ -0,0 +1,94 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("InputApp.Remote", function(Remote, App, Backbone, Marionette, $, _) { + + return Remote.Controller = class Controller extends App.Controllers.Base { + + initialize() { + //# Watch the shell and render when ready. + return App.vent.on("shell:ready", options => { + return this.getRemote(); + }); + } + + getRemote() { + const view = new Remote.Control(); + this.listenTo(view, "remote:input", type => App.execute("input:send", type)); + this.listenTo(view, "remote:player", type => App.request('command:kodi:player', type, [])); + this.listenTo(view, "remote:info", function() { + // If playing show osd + if (App.request("state:kodi").isPlaying()) { + return App.execute('input:action', 'osd'); + } else { + return App.execute("input:send", 'Info'); + } + }); + this.listenTo(view, "remote:power", () => { + return this.getShutdownMenu(); + }); + App.regionRemote.show(view); + + //# Change the fanart when the state changes. + return App.vent.on("state:changed", function(state) { + const stateObj = App.request("state:current"); + if (stateObj.isPlayingItemChanged()) { + const playingItem = stateObj.getPlaying('item'); + const fanart = App.request("images:path:get", playingItem.fanart, 'fanart'); + return $('#remote-background').css('background-image', 'url(' + playingItem.fanart + ')'); + } + }); + } + + getShutdownMenu() { + const system = App.request("command:kodi:controller", 'auto', 'System'); + return system.getProperties(function(props) { + const actions = []; + const optionalActions = ['shutdown', 'reboot', 'suspend', 'hibernate']; + actions.push({id: 'quit', title: 'Quit Kodi'}); + for (var action of optionalActions) { + var prop = 'can' + action; + if (props[prop]) { + actions.push({id: action, title: action}); + } + } + // Build modal with options + const model = new Backbone.Model({id: 1, actions}); + const view = new Remote.System({model}); + const $content = view.render().$el; + // Open modal and bind actions + App.execute("ui:modal:show", tr('Shutdown menu'), $content, '', false, 'system'); + return App.listenTo(view, 'system:action', action => { + switch (action) { + case 'quit': + App.request("command:kodi:controller", 'auto', 'Application').quit(); + break; + case 'shutdown': + system.shutdown(); + break; + case 'reboot': + system.reboot(); + break; + case 'suspend': + system.suspend(); + break; + case 'hibernate': + system.hibernate(); + break; + default: + } + // nothing + return App.execute("ui:modal:close"); + }); + }); + } + }; +}); + + + diff --git a/src/js/apps/input/remote/remote_controller.js.coffee b/src/js/apps/input/remote/remote_controller.js.coffee deleted file mode 100644 index 3cc03424..00000000 --- a/src/js/apps/input/remote/remote_controller.js.coffee +++ /dev/null @@ -1,67 +0,0 @@ -@Kodi.module "InputApp.Remote", (Remote, App, Backbone, Marionette, $, _) -> - - class Remote.Controller extends App.Controllers.Base - - initialize: -> - ## Watch the shell and render when ready. - App.vent.on "shell:ready", (options) => - @getRemote() - - getRemote: -> - view = new Remote.Control() - @listenTo view, "remote:input", (type) -> - App.execute "input:send", type - @listenTo view, "remote:player", (type) -> - App.request 'command:kodi:player', type, [] - @listenTo view, "remote:info", -> - # If playing show osd - if App.request("state:kodi").isPlaying() - App.execute 'input:action', 'osd' - else - App.execute "input:send", 'Info' - @listenTo view, "remote:power", => - @getShutdownMenu() - App.regionRemote.show view - - ## Change the fanart when the state changes. - App.vent.on "state:changed", (state) -> - stateObj = App.request "state:current" - if stateObj.isPlayingItemChanged() - playingItem = stateObj.getPlaying 'item' - fanart = App.request "images:path:get", playingItem.fanart, 'fanart' - $('#remote-background').css('background-image', 'url(' + playingItem.fanart + ')') - - getShutdownMenu: -> - system = App.request "command:kodi:controller", 'auto', 'System' - system.getProperties (props) -> - actions = [] - optionalActions = ['shutdown', 'reboot', 'suspend', 'hibernate'] - actions.push {id: 'quit', title: 'Quit Kodi'} - for action in optionalActions - prop = 'can' + action - if props[prop] - actions.push {id: action, title: action} - # Build modal with options - model = new Backbone.Model {id: 1, actions: actions} - view = new Remote.System {model: model} - $content = view.render().$el - # Open modal and bind actions - App.execute "ui:modal:show", tr('Shutdown menu'), $content, '', false, 'system' - App.listenTo view, 'system:action', (action) => - switch action - when 'quit' - App.request("command:kodi:controller", 'auto', 'Application').quit() - when 'shutdown' - system.shutdown() - when 'reboot' - system.reboot() - when 'suspend' - system.suspend() - when 'hibernate' - system.hibernate() - else - # nothing - App.execute "ui:modal:close" - - - diff --git a/src/js/apps/input/remote/remote_view.js b/src/js/apps/input/remote/remote_view.js new file mode 100644 index 00000000..c5757d9b --- /dev/null +++ b/src/js/apps/input/remote/remote_view.js @@ -0,0 +1,62 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("InputApp.Remote", function(Remote, App, Backbone, Marionette, $, _) { + + let Cls = (Remote.Control = class Control extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/input/remote/remote_control'; + this.prototype.events = { + 'click .input-button': 'inputClick', + 'click .player-button': 'playerClick', + 'click .close-remote': 'closeRemote' + }; + this.prototype.triggers = { + 'click .power-button': 'remote:power', + 'click .info-button': 'remote:info' + }; + + Remote.Landing = class Landing extends App.Views.ItemView {}; + } + + inputClick(e) { + const type = $(e.target).data('type'); + return this.trigger('remote:input', type); + } + + playerClick(e) { + const type = $(e.target).data('type'); + return this.trigger('remote:player', type); + } + + closeRemote(e) { + return App.execute("input:remote:toggle"); + } + }); + Cls.initClass(); + + + return (function() { + Cls = (Remote.System = class System extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/input/remote/system'; + this.prototype.className = 'system-menu'; + this.prototype.events = + {'click li': 'doAction'}; + } + doAction(e) { + const action = $(e.target).data('action'); + return this.trigger('system:action', action); + } + }); + Cls.initClass(); + return Cls; + })(); +}); + diff --git a/src/js/apps/input/remote/remote_view.js.coffee b/src/js/apps/input/remote/remote_view.js.coffee deleted file mode 100644 index b54b1584..00000000 --- a/src/js/apps/input/remote/remote_view.js.coffee +++ /dev/null @@ -1,35 +0,0 @@ -@Kodi.module "InputApp.Remote", (Remote, App, Backbone, Marionette, $, _) -> - - class Remote.Control extends App.Views.ItemView - template: 'apps/input/remote/remote_control' - events: - 'click .input-button': 'inputClick' - 'click .player-button': 'playerClick' - 'click .close-remote': 'closeRemote' - triggers: - 'click .power-button': 'remote:power' - 'click .info-button': 'remote:info' - - inputClick: (e) -> - type = $(e.target).data('type') - @trigger 'remote:input', type - - playerClick: (e) -> - type = $(e.target).data('type') - @trigger 'remote:player', type - - closeRemote: (e) -> - App.execute "input:remote:toggle" - - class Remote.Landing extends App.Views.ItemView - - - class Remote.System extends App.Views.ItemView - template: 'apps/input/remote/system' - className: 'system-menu' - events: - 'click li': 'doAction' - doAction: (e) -> - action = $(e.target).data('action') - @trigger 'system:action', action - diff --git a/src/js/apps/input/resume/resume_controller.js b/src/js/apps/input/resume/resume_controller.js new file mode 100644 index 00000000..1e4a0e43 --- /dev/null +++ b/src/js/apps/input/resume/resume_controller.js @@ -0,0 +1,54 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("InputApp.Resume", (Resume, App, Backbone, Marionette, $, _) => Resume.Controller = class Controller extends App.Controllers.Base { + + //# Ask to resume playback if the model has a resume position + //# Currently only supports Kodi playback + resumePlay(model, idKey) { + const stateObj = App.request("state:current"); + const title = t.gettext('Resume playback'); + const resume = model.get('resume'); + let percent = 0; + const options = []; + + // If resume position position + if ((parseInt(resume.position) > 0) && (stateObj.getPlayer() === 'kodi')) { + // Get percent + percent = helpers.global.getPercent(resume.position, resume.total); + + // Build strings + const time_string = helpers.global.formatTime(helpers.global.secToTime(resume.position)); + const complete_string = helpers.global.round(percent, 0) + '% ' + t.gettext('complete'); + const resume_string = t.gettext('Resume from') + ' ' + time_string + ' ' + complete_string + ''; + const start_string = t.gettext('Start from the beginning'); + + // build options as an array of jQuery objects + const items = [{title: resume_string, percent}, {title: start_string, percent: 0}]; + for (var item of items) { + var $el = $('') + .attr('data-percent', item.percent) + .html(item.title) + .click(function(e){ + // Callback for option click + return App.execute("command:video:play", model, idKey, $(this).data('percent')); + }); + options.push($el); + } + + // Open options in a modal + return App.execute("ui:modal:options", title, options); + } else { + // No resume point or resume is 0% + return App.execute("command:video:play", model, idKey, 0); + } + } + + initialize() {} +}); + // Something. diff --git a/src/js/apps/input/resume/resume_controller.js.coffee b/src/js/apps/input/resume/resume_controller.js.coffee deleted file mode 100644 index 8e75916c..00000000 --- a/src/js/apps/input/resume/resume_controller.js.coffee +++ /dev/null @@ -1,43 +0,0 @@ -@Kodi.module "InputApp.Resume", (Resume, App, Backbone, Marionette, $, _) -> - - class Resume.Controller extends App.Controllers.Base - - ## Ask to resume playback if the model has a resume position - ## Currently only supports Kodi playback - resumePlay: (model, idKey) -> - stateObj = App.request "state:current" - title = t.gettext('Resume playback') - resume = model.get('resume') - percent = 0 - options = [] - - # If resume position position - if parseInt(resume.position) > 0 and stateObj.getPlayer() is 'kodi' - # Get percent - percent = helpers.global.getPercent(resume.position, resume.total) - - # Build strings - time_string = helpers.global.formatTime(helpers.global.secToTime(resume.position)) - complete_string = helpers.global.round(percent, 0) + '% ' + t.gettext('complete') - resume_string = t.gettext('Resume from') + ' ' + time_string + ' ' + complete_string + '' - start_string = t.gettext('Start from the beginning') - - # build options as an array of jQuery objects - items = [{title: resume_string, percent: percent}, {title: start_string, percent: 0}] - for item in items - $el = $('') - .attr('data-percent', item.percent) - .html(item.title) - .click (e)-> - # Callback for option click - App.execute "command:video:play", model, idKey, $(@).data('percent') - options.push $el - - # Open options in a modal - App.execute "ui:modal:options", title, options - else - # No resume point or resume is 0% - App.execute "command:video:play", model, idKey, 0 - - initialize: -> - # Something. diff --git a/src/js/apps/lab/apiBrowser/apiBrowser_controller.js b/src/js/apps/lab/apiBrowser/apiBrowser_controller.js new file mode 100644 index 00000000..ba47176c --- /dev/null +++ b/src/js/apps/lab/apiBrowser/apiBrowser_controller.js @@ -0,0 +1,91 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// Controller for the API Browser. +// +// An app that allows you to get all the methods from the api +// and execute them +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("LabApp.apiBrowser", function(apiBrowser, App, Backbone, Marionette, $, _) { + + // Main controller + return apiBrowser.Controller = class Controller extends App.Controllers.Base { + + initialize() { + const collection = App.request("introspect:entities"); + return App.execute("when:entity:fetched", collection, () => { + collection.dictionary = App.request("introspect:dictionary"); + + this.layout = this.getLayoutView(collection); + + this.listenTo(this.layout, "show", () => { + this.renderList(collection); + if (this.options.method) { + return this.renderPage(this.options.method, collection); + } else { + return this.renderLanding(); + } + }); + + return App.regionContent.show(this.layout); + }); + } + + getLayoutView(collection) { + return new apiBrowser.Layout({ + collection}); + } + + renderList(collection) { + const view = new apiBrowser.apiMethods({ + collection}); + this.listenTo(view, 'childview:lab:apibrowser:method:view', item => { + return this.renderPage(item.model.get('id'), collection); + }); + return this.layout.regionSidebarFirst.show(view); + } + + renderPage(id, collection) { + const model = App.request("introspect:entity", id, collection); + const pageView = new apiBrowser.apiMethodPage({ + model}); + helpers.debug.msg(`Params/Returns for ${model.get('method')}:`, 'info', [model.get('params'), model.get('returns')]); + this.listenTo(pageView, 'lab:apibrowser:execute', item => { + const input = $('.api-method--params').val(); + const params = JSON.parse(input); + const method = item.model.get('method'); + + // Notify + helpers.debug.msg(`Parameters for: ${method}`, 'info', params); + + // Execute the method + const api = App.request("command:kodi:controller", "auto", "Commander"); + return api.singleCommand(method, params, response => { + helpers.debug.msg(`Response for: ${method}`, 'info', response); + const output = prettyPrint(response); + return $('#api-result').html(output).prepend($('

Response (check the console for more)

')); + }); + }); + + App.navigate(`lab/api-browser/${model.get('method')}`); + return this.layout.regionContent.show(pageView); + } + + renderLanding() { + const view = new apiBrowser.apiBrowserLanding(); + return this.layout.regionContent.show(view); + } + }; +}); diff --git a/src/js/apps/lab/apiBrowser/apiBrowser_controller.js.coffee b/src/js/apps/lab/apiBrowser/apiBrowser_controller.js.coffee deleted file mode 100644 index 378b90b6..00000000 --- a/src/js/apps/lab/apiBrowser/apiBrowser_controller.js.coffee +++ /dev/null @@ -1,70 +0,0 @@ -# Controller for the API Browser. -# -# An app that allows you to get all the methods from the api -# and execute them -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "LabApp.apiBrowser", (apiBrowser, App, Backbone, Marionette, $, _) -> - - # Main controller - class apiBrowser.Controller extends App.Controllers.Base - - initialize: -> - collection = App.request "introspect:entities" - App.execute "when:entity:fetched", collection, => - collection.dictionary = App.request "introspect:dictionary" - - @layout = @getLayoutView collection - - @listenTo @layout, "show", => - @renderList collection - if @options.method - @renderPage @options.method, collection - else - @renderLanding() - - App.regionContent.show @layout - - getLayoutView: (collection) -> - new apiBrowser.Layout - collection: collection - - renderList: (collection) -> - view = new apiBrowser.apiMethods - collection: collection - @listenTo view, 'childview:lab:apibrowser:method:view', (item) => - @renderPage(item.model.get('id'), collection) - @layout.regionSidebarFirst.show view - - renderPage: (id, collection) -> - model = App.request "introspect:entity", id, collection - pageView = new apiBrowser.apiMethodPage - model: model - helpers.debug.msg "Params/Returns for #{model.get('method')}:", 'info', [model.get('params'), model.get('returns')] - @listenTo pageView, 'lab:apibrowser:execute', (item) => - input = $('.api-method--params').val(); - params = JSON.parse input - method = item.model.get 'method' - - # Notify - helpers.debug.msg "Parameters for: #{method}", 'info', params - - # Execute the method - api = App.request "command:kodi:controller", "auto", "Commander" - api.singleCommand method, params, (response) => - helpers.debug.msg "Response for: #{method}", 'info', response - output = prettyPrint response - $('#api-result').html(output).prepend($('

Response (check the console for more)

')); - - App.navigate "lab/api-browser/#{model.get('method')}" - @layout.regionContent.show pageView - - renderLanding: -> - view = new apiBrowser.apiBrowserLanding() - @layout.regionContent.show view diff --git a/src/js/apps/lab/apiBrowser/apiBrowser_view.js b/src/js/apps/lab/apiBrowser/apiBrowser_view.js new file mode 100644 index 00000000..3534affe --- /dev/null +++ b/src/js/apps/lab/apiBrowser/apiBrowser_view.js @@ -0,0 +1,90 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// View for the API Browser. +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("LabApp.apiBrowser", function(apiBrowser, App, Backbone, Marionette, $, _) { + + let Cls = (apiBrowser.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "api-browser--page page-wrapper"; + } + }); + Cls.initClass(); + + // A single api method item + Cls = (apiBrowser.apiMethodItem = class apiMethodItem extends App.Views.ItemView { + static initClass() { + this.prototype.className = "api-browser--method"; + this.prototype.template = 'apps/lab/apiBrowser/api_method_item'; + this.prototype.tagName = "li"; + this.prototype.triggers = + {'click .api-method--item' : 'lab:apibrowser:method:view'}; + } + }); + Cls.initClass(); + + // List of api methods + Cls = (apiBrowser.apiMethods = class apiMethods extends App.Views.CompositeView { + static initClass() { + this.prototype.template = 'apps/lab/apiBrowser/api_method_list'; + this.prototype.childView = apiBrowser.apiMethodItem; + this.prototype.childViewContainer = 'ul.items'; + this.prototype.tagName = "div"; + this.prototype.className = "api-browser--methods"; + } + onRender() { + return $('#api-search', this.$el).filterList({ + items: '.api-browser--methods .api-browser--method', + textSelector: '.method' + }); + } + }); + Cls.initClass(); + + // A single api page + Cls = (apiBrowser.apiMethodPage = class apiMethodPage extends App.Views.ItemView { + static initClass() { + this.prototype.className = "api-browser--page"; + this.prototype.template = 'apps/lab/apiBrowser/api_method_page'; + this.prototype.tagName = "div"; + this.prototype.triggers = + {'click #send-command' : 'lab:apibrowser:execute'}; + this.prototype.regions = + {'apiResult' : '#api-result'}; + } + onShow() { + $('.api-method--params', this.$el).html(prettyPrint(this.model.get('params'))); + if (this.model.get('type') === 'method') { + return $('.api-method--return', this.$el).html(prettyPrint(this.model.get('returns'))); + } + } + }); + Cls.initClass(); + + // Api browser landing (home) + return (function() { + Cls = (apiBrowser.apiBrowserLanding = class apiBrowserLanding extends App.Views.ItemView { + static initClass() { + this.prototype.className = "api-browser--landing"; + this.prototype.template = 'apps/lab/apiBrowser/api_browser_landing'; + this.prototype.tagName = "div"; + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/lab/apiBrowser/apiBrowser_view.js.coffee b/src/js/apps/lab/apiBrowser/apiBrowser_view.js.coffee deleted file mode 100644 index c701761f..00000000 --- a/src/js/apps/lab/apiBrowser/apiBrowser_view.js.coffee +++ /dev/null @@ -1,54 +0,0 @@ -# View for the API Browser. -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "LabApp.apiBrowser", (apiBrowser, App, Backbone, Marionette, $, _) -> - - class apiBrowser.Layout extends App.Views.LayoutWithSidebarFirstView - className: "api-browser--page page-wrapper" - - # A single api method item - class apiBrowser.apiMethodItem extends App.Views.ItemView - className: "api-browser--method" - template: 'apps/lab/apiBrowser/api_method_item' - tagName: "li" - triggers: - 'click .api-method--item' : 'lab:apibrowser:method:view' - - # List of api methods - class apiBrowser.apiMethods extends App.Views.CompositeView - template: 'apps/lab/apiBrowser/api_method_list' - childView: apiBrowser.apiMethodItem - childViewContainer: 'ul.items' - tagName: "div" - className: "api-browser--methods" - onRender: -> - $('#api-search', @$el).filterList { - items: '.api-browser--methods .api-browser--method' - textSelector: '.method' - } - - # A single api page - class apiBrowser.apiMethodPage extends App.Views.ItemView - className: "api-browser--page" - template: 'apps/lab/apiBrowser/api_method_page' - tagName: "div" - triggers: - 'click #send-command' : 'lab:apibrowser:execute' - regions: - 'apiResult' : '#api-result' - onShow: -> - $('.api-method--params', @$el).html prettyPrint(@model.get('params')) - if @model.get('type') is 'method' - $('.api-method--return', @$el).html prettyPrint(@model.get('returns')) - - # Api browser landing (home) - class apiBrowser.apiBrowserLanding extends App.Views.ItemView - className: "api-browser--landing" - template: 'apps/lab/apiBrowser/api_browser_landing' - tagName: "div" diff --git a/src/js/apps/lab/iconBrowser/iconBrowser_view.js b/src/js/apps/lab/iconBrowser/iconBrowser_view.js new file mode 100644 index 00000000..9c87fec4 --- /dev/null +++ b/src/js/apps/lab/iconBrowser/iconBrowser_view.js @@ -0,0 +1,40 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS205: Consider reworking code to avoid use of IIFEs + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LabApp.IconBrowser", (lab, App, Backbone, Marionette, $, _) => (function() { + const Cls = (lab.IconsPage = class IconsPage extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/lab/iconBrowser/icon_browser_page'; + this.prototype.tagName = "div"; + this.prototype.className = "icon-browser page"; + } + onRender() { + return (() => { + const result = []; + for (var type of ['material', 'custom']) { + var $ctx = $('#icons-' + type, this.$el); + var set = type + 'Icons'; + result.push((() => { + const result1 = []; + for (var icoClass in this.options[set]) { + var name = this.options[set][icoClass]; + var $ico = $('
  • ' + name + '' + icoClass + '
  • '); + result1.push($ctx.append($ico)); + } + return result1; + })()); + } + return result; + })(); + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/lab/iconBrowser/iconBrowser_view.js.coffee b/src/js/apps/lab/iconBrowser/iconBrowser_view.js.coffee deleted file mode 100644 index ee5980bd..00000000 --- a/src/js/apps/lab/iconBrowser/iconBrowser_view.js.coffee +++ /dev/null @@ -1,13 +0,0 @@ -@Kodi.module "LabApp.IconBrowser", (lab, App, Backbone, Marionette, $, _) -> - - class lab.IconsPage extends App.Views.LayoutView - template: 'apps/lab/iconBrowser/icon_browser_page' - tagName: "div" - className: "icon-browser page" - onRender: -> - for type in ['material', 'custom'] - $ctx = $('#icons-' + type, @$el) - set = type + 'Icons' - for icoClass, name of @options[set] - $ico = $('
  • ' + name + '' + icoClass + '
  • ') - $ctx.append $ico diff --git a/src/js/apps/lab/lab/lab_view.js b/src/js/apps/lab/lab/lab_view.js new file mode 100644 index 00000000..97898e45 --- /dev/null +++ b/src/js/apps/lab/lab/lab_view.js @@ -0,0 +1,49 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// View for the Lab. +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("LabApp.lab", function(lab, App, Backbone, Marionette, $, _) { + + // A single lab item + let Cls = (lab.labItem = class labItem extends App.Views.ItemView { + static initClass() { + this.prototype.className = "lab--item"; + this.prototype.template = 'apps/lab/lab/lab_item'; + this.prototype.tagName = "div"; + } + }); + Cls.initClass(); + + // List of lab items + return (function() { + Cls = (lab.labItems = class labItems extends App.Views.CollectionView { + static initClass() { + this.prototype.tagName = "div"; + this.prototype.className = "lab--items page"; + this.prototype.childView = lab.labItem; + } + onRender() { + this.$el.prepend($('

    ').text( t.gettext('Experimental code, use at own risk') )); + this.$el.prepend($('

    ').text( t.gettext('The lab') )); + return this.$el.addClass('page-secondary'); + } + }); + Cls.initClass(); + return Cls; + })(); +}); + diff --git a/src/js/apps/lab/lab/lab_view.js.coffee b/src/js/apps/lab/lab/lab_view.js.coffee deleted file mode 100644 index 2eb00a80..00000000 --- a/src/js/apps/lab/lab/lab_view.js.coffee +++ /dev/null @@ -1,27 +0,0 @@ -# View for the Lab. -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "LabApp.lab", (lab, App, Backbone, Marionette, $, _) -> - - # A single lab item - class lab.labItem extends App.Views.ItemView - className: "lab--item" - template: 'apps/lab/lab/lab_item' - tagName: "div" - - # List of lab items - class lab.labItems extends App.Views.CollectionView - tagName: "div" - className: "lab--items page" - childView: lab.labItem - onRender: -> - @$el.prepend $('

    ').text( t.gettext('Experimental code, use at own risk') ) - @$el.prepend $('

    ').text( t.gettext('The lab') ) - @$el.addClass('page-secondary') - diff --git a/src/js/apps/lab/lab_app.js b/src/js/apps/lab/lab_app.js new file mode 100644 index 00000000..1f19cb7b --- /dev/null +++ b/src/js/apps/lab/lab_app.js @@ -0,0 +1,96 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +// Lab App handles new experimental features. +// +// Each sub module should have its own folder with controller, view, etc. +// Global Lab features here. +// +// @param [Object] This app object +// @param [Object] The full application object +// @param [Object] Backbone +// @param [Object] Marionette +// @param [Object] jQuery +// @param [Object] lodash (underscore) +// +this.Kodi.module("LabApp", function(LabApp, App, Backbone, Marionette, $, _) { + + // Create our LabApp router. + const Cls = (LabApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "lab" : "labLanding", + "lab/api-browser" : "apiBrowser", + "lab/api-browser/:method" : "apiBrowser", + "lab/screenshot" : "screenShot", + "lab/icon-browser" : "iconBrowser" + }; + } + }); + Cls.initClass(); + + // Lab API controller. + const API = { + + labLanding() { + const view = new LabApp.lab.labItems({ + collection: new App.Entities.NavMainCollection(this.labItems())}); + return App.regionContent.show(view); + }, + + // TODO Make dynamic, some sort of hook or registry. + labItems() { + return [ + { + title: 'API browser', + description: 'Execute any API command.', + path: 'lab/api-browser' + }, + { + title: 'Screenshot', + description: 'Take a screenshot of Kodi right now.', + path: 'lab/screenshot' + }, + { + title: 'Icon browser', + description: 'View all the icons available to Chorus.', + path: 'lab/icon-browser' + } + ]; + }, + + // Open the api explorer. + apiBrowser(method = false){ + return new LabApp.apiBrowser.Controller({ + method}); + }, + + screenShot() { + App.execute("input:action", 'screenshot'); + App.execute("notification:show", t.gettext("Screenshot saved to your screenshots folder")); + return App.navigate("#lab", {trigger: true}); + }, + + iconBrowser() { + return $.getJSON('lib/icons/mdi.json', mdiIcons => { + return $.getJSON('lib/icons/icomoon.json', customIcons => { + console.log(mdiIcons, customIcons); + const view = new LabApp.IconBrowser.IconsPage({ + materialIcons: mdiIcons, + customIcons + }); + return App.regionContent.show(view); + }); + }); + } + }; + + return App.on("before:start", () => new LabApp.Router({ + controller: API})); +}); diff --git a/src/js/apps/lab/lab_app.js.coffee b/src/js/apps/lab/lab_app.js.coffee deleted file mode 100644 index 8fd80819..00000000 --- a/src/js/apps/lab/lab_app.js.coffee +++ /dev/null @@ -1,73 +0,0 @@ -# Lab App handles new experimental features. -# -# Each sub module should have its own folder with controller, view, etc. -# Global Lab features here. -# -# @param [Object] This app object -# @param [Object] The full application object -# @param [Object] Backbone -# @param [Object] Marionette -# @param [Object] jQuery -# @param [Object] lodash (underscore) -# -@Kodi.module "LabApp", (LabApp, App, Backbone, Marionette, $, _) -> - - # Create our LabApp router. - class LabApp.Router extends App.Router.Base - appRoutes: - "lab" : "labLanding" - "lab/api-browser" : "apiBrowser" - "lab/api-browser/:method" : "apiBrowser" - "lab/screenshot" : "screenShot" - "lab/icon-browser" : "iconBrowser" - - # Lab API controller. - API = - - labLanding: -> - view = new LabApp.lab.labItems - collection: new App.Entities.NavMainCollection @labItems() - App.regionContent.show view - - # TODO Make dynamic, some sort of hook or registry. - labItems: -> - [ - { - title: 'API browser' - description: 'Execute any API command.' - path: 'lab/api-browser' - } - { - title: 'Screenshot' - description: 'Take a screenshot of Kodi right now.' - path: 'lab/screenshot' - } - { - title: 'Icon browser' - description: 'View all the icons available to Chorus.' - path: 'lab/icon-browser' - } - ] - - # Open the api explorer. - apiBrowser: (method = false)-> - new LabApp.apiBrowser.Controller - method: method - - screenShot: -> - App.execute "input:action", 'screenshot' - App.execute "notification:show", t.gettext("Screenshot saved to your screenshots folder") - App.navigate "#lab", {trigger: true} - - iconBrowser: -> - $.getJSON 'lib/icons/mdi.json', (mdiIcons) => - $.getJSON 'lib/icons/icomoon.json', (customIcons) => - console.log mdiIcons, customIcons - view = new LabApp.IconBrowser.IconsPage - materialIcons: mdiIcons - customIcons: customIcons - App.regionContent.show view - - App.on "before:start", -> - new LabApp.Router - controller: API diff --git a/src/js/apps/landing/landing_app.js b/src/js/apps/landing/landing_app.js new file mode 100644 index 00000000..cdb4735a --- /dev/null +++ b/src/js/apps/landing/landing_app.js @@ -0,0 +1,195 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LandingApp", function(LandingApp, App, Backbone, Marionette, $, _) { + + const Cls = (LandingApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "music" : "landingPage", + "music/top" : "landingPage", + "movies/recent" : "landingPage", + "tvshows/recent" : "landingPage", + "music/genre/:filter" : "filteredPage" + }; + } + }); + Cls.initClass(); + + var API = { + + //# This defines what we will see on each landing page + //# Example of a complex filter using rules + //# {"and": [{'operator': 'is', 'field': 'playcount', 'value': '0'}, {'operator': 'is', 'field': 'year', 'value': '2015'}]} + landingSettings: { + music: { + subnavId: 'music', + sections: [ + { + title: 'Recently added albums', + entity: 'album', + sort: 'dateadded', + order: 'descending', + limit: 14, + moreLink: 'music/albums?sort=dateadded&order=desc' + }, + { + title: 'Recently played albums', + entity: 'album', + sort: 'lastplayed', + order: 'descending', + limit: 14 + }, + { + title: 'Random albums', + entity: 'album', + sort: 'random', + order: 'descending', + limit: 14, + moreLink: 'music/albums?sort=random' + } + ] + }, + musictop: { + subnavId: 'music', + sections: [ + { + title: 'Top Albums', + entity: 'album', + sort: 'playcount', + order: 'descending', + limit: 56, + filter: {'operator': 'greaterthan', 'field': 'playcount', 'value': '0'} + }, + { + title: 'Top Songs', + entity: 'song', + sort: 'playcount', + order: 'descending', + limit: 100, + filter: {'operator': 'greaterthan', 'field': 'playcount', 'value': '0'} + } + ] + }, + moviesrecent: { + subnavId: 'movies/recent', + sections: [ + { + title: 'Continue watching', + entity: 'movie', + sort: 'lastplayed', + order: 'descending', + limit: 14, + filter: {'operator': 'true', 'field': 'inprogress', 'value': ''}, + moreLink: 'movies?sort=dateadded&order=desc&inprogress=in progress' + }, + { + title: 'Recently added', + entity: 'movie', + sort: 'dateadded', + order: 'descending', + limit: 14, + filter: {'operator': 'is', 'field': 'playcount', 'value': '0'}, + moreLink: 'movies?sort=dateadded&order=desc&unwatched=unwatched' + }, + { + title: 'Random movies', + entity: 'movie', + sort: 'random', + order: 'descending', + limit: 14, + moreLink: 'movies?sort=random' + } + ] + }, + tvshowsrecent: { + subnavId: 'tvshows/recent', + sections: [ + { + title: 'Continue watching', + entity: 'tvshow', + sort: 'lastplayed', + order: 'descending', + limit: 14, + filter: {'operator': 'true', 'field': 'inprogress', 'value': ''}, + moreLink: 'tvshows?sort=dateadded&order=desc&inprogress=in progress', + preventSelect: true + }, + { + title: 'Recently added', + entity: 'episode', + sort: 'dateadded', + order: 'descending', + limit: 12, + filter: {'operator': 'is', 'field': 'playcount', 'value': '0'} + } + ] + } + }, + + //# Filtered sections require an argument passed and are used for pages such as genere + //# Key name should be "arg0 + arg1", filter should be "arg2" + //# Filter gets replaced in sections[i].filter.value and prepended to moreLink + filteredSettings: { + musicgenre: { + subnavId: 'music', + sections: [ + { + title: '%1$s Artists', + entity: 'artist', + sort: 'title', + order: 'ascending', + limit: 500, + filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} + }, + { + title: '%1$s Albums', + entity: 'album', + sort: 'title', + order: 'ascending', + limit: 500, + filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} + }, + { + title: '%1$s Songs', + entity: 'song', + sort: 'title', + order: 'ascending', + limit: 1000, + filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} + } + ] + } + }, + + + landingPage() { + const type = helpers.url.arg(0) + helpers.url.arg(1); + const settings = API.landingSettings[type]; + return new LandingApp.Show.Controller({ + settings, + filter: false + }); + }, + + filteredPage(filter) { + const type = helpers.url.arg(0) + helpers.url.arg(1); + const settings = API.filteredSettings[type]; + return new LandingApp.Show.Controller({ + settings, + filter: decodeURIComponent(filter) + }); + } + }; + + + //# Register controller + return App.on("before:start", () => new LandingApp.Router({ + controller: API})); +}); diff --git a/src/js/apps/landing/landing_app.js.coffee b/src/js/apps/landing/landing_app.js.coffee deleted file mode 100644 index 2129e145..00000000 --- a/src/js/apps/landing/landing_app.js.coffee +++ /dev/null @@ -1,169 +0,0 @@ -@Kodi.module "LandingApp", (LandingApp, App, Backbone, Marionette, $, _) -> - - class LandingApp.Router extends App.Router.Base - appRoutes: - "music" : "landingPage" - "music/top" : "landingPage" - "movies/recent" : "landingPage" - "tvshows/recent" : "landingPage" - "music/genre/:filter" : "filteredPage" - - API = - - ## This defines what we will see on each landing page - ## Example of a complex filter using rules - ## {"and": [{'operator': 'is', 'field': 'playcount', 'value': '0'}, {'operator': 'is', 'field': 'year', 'value': '2015'}]} - landingSettings: - music: - subnavId: 'music' - sections: [ - { - title: 'Recently added albums' - entity: 'album' - sort: 'dateadded' - order: 'descending' - limit: 14 - moreLink: 'music/albums?sort=dateadded&order=desc' - } - { - title: 'Recently played albums' - entity: 'album' - sort: 'lastplayed' - order: 'descending' - limit: 14 - } - { - title: 'Random albums' - entity: 'album' - sort: 'random' - order: 'descending' - limit: 14 - moreLink: 'music/albums?sort=random' - } - ] - musictop: - subnavId: 'music' - sections: [ - { - title: 'Top Albums' - entity: 'album' - sort: 'playcount' - order: 'descending' - limit: 56 - filter: {'operator': 'greaterthan', 'field': 'playcount', 'value': '0'} - } - { - title: 'Top Songs' - entity: 'song' - sort: 'playcount' - order: 'descending' - limit: 100 - filter: {'operator': 'greaterthan', 'field': 'playcount', 'value': '0'} - } - ] - moviesrecent: - subnavId: 'movies/recent' - sections: [ - { - title: 'Continue watching' - entity: 'movie' - sort: 'lastplayed' - order: 'descending' - limit: 14, - filter: {'operator': 'true', 'field': 'inprogress', 'value': ''} - moreLink: 'movies?sort=dateadded&order=desc&inprogress=in progress' - } - { - title: 'Recently added' - entity: 'movie' - sort: 'dateadded' - order: 'descending' - limit: 14 - filter: {'operator': 'is', 'field': 'playcount', 'value': '0'} - moreLink: 'movies?sort=dateadded&order=desc&unwatched=unwatched' - } - { - title: 'Random movies' - entity: 'movie' - sort: 'random' - order: 'descending' - limit: 14 - moreLink: 'movies?sort=random' - } - ] - tvshowsrecent: - subnavId: 'tvshows/recent' - sections: [ - { - title: 'Continue watching' - entity: 'tvshow' - sort: 'lastplayed' - order: 'descending' - limit: 14 - filter: {'operator': 'true', 'field': 'inprogress', 'value': ''} - moreLink: 'tvshows?sort=dateadded&order=desc&inprogress=in progress' - preventSelect: true - } - { - title: 'Recently added' - entity: 'episode' - sort: 'dateadded' - order: 'descending' - limit: 12 - filter: {'operator': 'is', 'field': 'playcount', 'value': '0'} - } - ] - - ## Filtered sections require an argument passed and are used for pages such as genere - ## Key name should be "arg0 + arg1", filter should be "arg2" - ## Filter gets replaced in sections[i].filter.value and prepended to moreLink - filteredSettings: - musicgenre: - subnavId: 'music' - sections: [ - { - title: '%1$s Artists' - entity: 'artist' - sort: 'title' - order: 'ascending' - limit: 500 - filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} - } - { - title: '%1$s Albums' - entity: 'album' - sort: 'title' - order: 'ascending' - limit: 500 - filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} - } - { - title: '%1$s Songs' - entity: 'song' - sort: 'title' - order: 'ascending' - limit: 1000 - filter: {'operator': 'is', 'field': 'genre', 'value': '[FILTER]'} - } - ] - - - landingPage: () -> - type = helpers.url.arg(0) + helpers.url.arg(1) - settings = API.landingSettings[type] - new LandingApp.Show.Controller - settings: settings - filter: false - - filteredPage: (filter) -> - type = helpers.url.arg(0) + helpers.url.arg(1) - settings = API.filteredSettings[type] - new LandingApp.Show.Controller - settings: settings - filter: decodeURIComponent(filter) - - - ## Register controller - App.on "before:start", -> - new LandingApp.Router - controller: API diff --git a/src/js/apps/landing/show/landing_controller.js b/src/js/apps/landing/show/landing_controller.js new file mode 100644 index 00000000..8d0c6a37 --- /dev/null +++ b/src/js/apps/landing/show/landing_controller.js @@ -0,0 +1,128 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS205: Consider reworking code to avoid use of IIFEs + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LandingApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + + return Show.Controller = class Controller extends App.Controllers.Base { + + constructor(...args) { + super(...args); + this.getSections = this.getSections.bind(this); + this.renderSection = this.renderSection.bind(this); + } + + initialize(options) { + this.fanarts = []; + this.rendered = 0; + this.settings = options.settings; + this.layout = this.getLayoutView(); + $('body').addClass('landing-loading'); + this.listenTo(this.layout, "show", () => { + this.content = this.getContentView(); + this.listenTo(this.content, "show", () => { + window.scroll(0, 350); + this.getSections(this.settings.sections); + return this.getSubNav(this.settings.subnavId); + }); + return this.layout.regionContent.show(this.content); + }); + + return App.regionContent.show(this.layout); + } + + getLayoutView() { + return new Show.Layout(); + } + + getContentView() { + return new Show.Page(); + } + + getSubNav(subnavId) { + const subNav = App.request("navMain:children:show", subnavId, 'Sections'); + return this.layout.regionSidebarFirst.show(subNav); + } + + getSections(sections) { + return (() => { + const result = []; + for (var i in sections) { + var section = sections[i]; + section.idx = parseInt(i) + 1; + result.push(this.getSection(section)); + } + return result; + })(); + } + + getSection(section) { + section = this.addFilterValue(section); + const opts = { + sort: {method: section.sort, order: section.order}, + limit: {start: 0, end: section.limit}, + addFields: ['fanart'], + cache: false, + success: collection => { + this.rendered++; + if (collection.length > 0) { + this.renderSection(section, collection); + return this.getFanArts(collection); + } + } + }; + if (section.filter) { + opts.filter = section.filter; + } + return App.request(`${section.entity}:entities`, opts); + } + + renderSection(section, collection) { + const view = App.request(`${section.entity}:list:view`, collection, true); + const setView = new Show.ListSet({ + section, + filter: this.getOption('filter') + }); + App.listenTo(setView, "show", () => { + return setView.regionCollection.show(view); + }); + App.listenTo(setView, 'landing:set:more', viewItem => App.navigate(viewItem.model.get('section').moreLink, {trigger: true})); + if (this.content[`regionSection${section.idx}`]) { + return this.content[`regionSection${section.idx}`].show(setView); + } + } + + addFilterValue(section) { + const filterVal = this.getOption('filter'); + if (filterVal !== false) { + if (section.filter && section.filter.value) { + // TODO: Deal with complex nested rules that us 'and' or 'or' + section.filter.value = filterVal; + } + } + return section; + } + + getFanArts(collection) { + const $hero = $("#landing-hero"); + for (var item of collection.toJSON()) { + if (item.fanart && (item.fanart !== '')) { + this.fanarts.push(item); + } + } + if ($hero.is(':visible') && (this.rendered === this.settings.sections.length) && (this.fanarts.length > 0)) { + const randomModel = this.fanarts[Math.floor(Math.random() * this.fanarts.length)]; + $hero + .css('background-image', 'url(' + randomModel.fanart + ')') + .attr('href', '#' + randomModel.url).attr('title', randomModel.title); + return $('body').removeClass('landing-loading'); + } + } + }; +}); diff --git a/src/js/apps/landing/show/landing_controller.js.coffee b/src/js/apps/landing/show/landing_controller.js.coffee deleted file mode 100644 index 4ed8acf2..00000000 --- a/src/js/apps/landing/show/landing_controller.js.coffee +++ /dev/null @@ -1,83 +0,0 @@ -@Kodi.module "LandingApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - - class Show.Controller extends App.Controllers.Base - - initialize: (options) -> - @fanarts = [] - @rendered = 0 - @settings = options.settings - @layout = @getLayoutView() - $('body').addClass 'landing-loading' - @listenTo @layout, "show", => - @content = @getContentView() - @listenTo @content, "show", => - window.scroll(0, 350) - @getSections @settings.sections - @getSubNav @settings.subnavId - @layout.regionContent.show @content - - App.regionContent.show @layout - - getLayoutView: -> - new Show.Layout() - - getContentView: -> - new Show.Page() - - getSubNav: (subnavId) -> - subNav = App.request "navMain:children:show", subnavId, 'Sections' - @layout.regionSidebarFirst.show subNav - - getSections: (sections) => - for i, section of sections - section.idx = parseInt(i) + 1 - @getSection section - - getSection: (section) -> - section = @addFilterValue section - opts = - sort: {method: section.sort, order: section.order} - limit: {start: 0, end: section.limit} - addFields: ['fanart'] - cache: false - success: (collection) => - @rendered++ - if collection.length > 0 - @renderSection section, collection - @getFanArts collection - if section.filter - opts.filter = section.filter - App.request "#{section.entity}:entities", opts - - renderSection: (section, collection) => - view = App.request "#{section.entity}:list:view", collection, true - setView = new Show.ListSet - section: section - filter: @getOption('filter') - App.listenTo setView, "show", => - setView.regionCollection.show view - App.listenTo setView, 'landing:set:more', (viewItem) -> - App.navigate viewItem.model.get('section').moreLink, {trigger: true} - if @content["regionSection#{section.idx}"] - @content["regionSection#{section.idx}"].show setView - - addFilterValue: (section) -> - filterVal = @getOption('filter') - if filterVal isnt false - if section.filter and section.filter.value - # TODO: Deal with complex nested rules that us 'and' or 'or' - section.filter.value = filterVal - section - - getFanArts: (collection) -> - $hero = $("#landing-hero") - for item in collection.toJSON() - if item.fanart and item.fanart isnt '' - @fanarts.push item - if $hero.is(':visible') and @rendered is @settings.sections.length and @fanarts.length > 0 - randomModel = @fanarts[Math.floor(Math.random() * @fanarts.length)]; - $hero - .css('background-image', 'url(' + randomModel.fanart + ')') - .attr('href', '#' + randomModel.url).attr('title', randomModel.title) - $('body').removeClass 'landing-loading' diff --git a/src/js/apps/landing/show/landing_view.js b/src/js/apps/landing/show/landing_view.js new file mode 100644 index 00000000..38a9aab8 --- /dev/null +++ b/src/js/apps/landing/show/landing_view.js @@ -0,0 +1,68 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LandingApp.Show", function(Show, App, Backbone, Marionette, $, _) { + + let Cls = (Show.Layout = class Layout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "landing-page"; + } + }); + Cls.initClass(); + + return (function() { + Cls = (Show.Page = class Page extends App.Views.LayoutView { + static initClass() { + this.prototype.template = "apps/landing/show/landing_page"; + this.prototype.className = "landing-content"; + this.prototype.regions = { + regionHero: '#landing-hero', + regionSection1: '#landing-section-1', + regionSection2: '#landing-section-2', + regionSection3: '#landing-section-3', + regionSection4: '#landing-section-4', + regionSection5: '#landing-section-5', + regionSection6: '#landing-section-6' + }; + + (function() { + Cls = (Show.ListSet = class ListSet extends App.Views.SetLayoutView { + static initClass() { + this.prototype.className = 'landing-set'; + this.prototype.triggers = + {'click .more' : 'landing:set:more'}; + } + initialize() { + this.setOptions(); + return this.createModel(); + } + setOptions() { + this.options.menu = {}; + if ((this.options.filter !== false) && this.options.section.title) { + this.options.title = t.sprintf(tr(this.options.section.title), this.options.filter); + } else if (this.options.section.title) { + this.options.title = tr(this.options.section.title); + } + if (this.options.section.moreLink) { + this.options.menu.more = tr('More like this'); + } + if (this.options.section.preventSelect) { + return this.options.noMenuDefault = true; + } + } + }); + Cls.initClass(); + return Cls; + })(); + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/landing/show/landing_view.js.coffee b/src/js/apps/landing/show/landing_view.js.coffee deleted file mode 100644 index bcd33c6b..00000000 --- a/src/js/apps/landing/show/landing_view.js.coffee +++ /dev/null @@ -1,34 +0,0 @@ -@Kodi.module "LandingApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - class Show.Layout extends App.Views.LayoutWithSidebarFirstView - className: "landing-page" - - class Show.Page extends App.Views.LayoutView - template: "apps/landing/show/landing_page" - className: "landing-content" - regions: - regionHero: '#landing-hero' - regionSection1: '#landing-section-1' - regionSection2: '#landing-section-2' - regionSection3: '#landing-section-3' - regionSection4: '#landing-section-4' - regionSection5: '#landing-section-5' - regionSection6: '#landing-section-6' - - class Show.ListSet extends App.Views.SetLayoutView - className: 'landing-set' - triggers: - 'click .more' : 'landing:set:more' - initialize: () -> - @setOptions() - @createModel() - setOptions: () -> - @options.menu = {} - if @options.filter isnt false and @options.section.title - @options.title = t.sprintf(tr(@options.section.title), @options.filter) - else if @options.section.title - @options.title = tr(@options.section.title) - if @options.section.moreLink - @options.menu.more = tr 'More like this' - if @options.section.preventSelect - @options.noMenuDefault = true diff --git a/src/js/apps/loading/loading_app.js b/src/js/apps/loading/loading_app.js new file mode 100644 index 00000000..32e1dbdd --- /dev/null +++ b/src/js/apps/loading/loading_app.js @@ -0,0 +1,32 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LoadingApp", function(LoadingApp, App, Backbone, Marionette, $, _) { + + const API = { + + getLoaderView(msgTextHtml = 'Just a sec...', inline = false) { + return new LoadingApp.Show.Page({ + textHtml: msgTextHtml, + // Inline is used when the loader is not full page + inline + }); + } + }; + + App.commands.setHandler("loading:show:view", function(region, msgTextHtml) { + const view = API.getLoaderView(msgTextHtml); + return region.show(view); + }); + + //# Replace whole page with loader. + App.commands.setHandler("loading:show:page", () => App.execute("loading:show:view", App.regionContent)); + + //# Get a loader view + return App.reqres.setHandler("loading:get:view", (msgText, inline = true) => API.getLoaderView(msgText, inline)); +}); diff --git a/src/js/apps/loading/loading_app.js.coffee b/src/js/apps/loading/loading_app.js.coffee deleted file mode 100644 index 82e04422..00000000 --- a/src/js/apps/loading/loading_app.js.coffee +++ /dev/null @@ -1,21 +0,0 @@ -@Kodi.module "LoadingApp", (LoadingApp, App, Backbone, Marionette, $, _) -> - - API = - - getLoaderView: (msgTextHtml = 'Just a sec...', inline = false) -> - new LoadingApp.Show.Page - textHtml: msgTextHtml - # Inline is used when the loader is not full page - inline: inline - - App.commands.setHandler "loading:show:view", (region, msgTextHtml) -> - view = API.getLoaderView msgTextHtml - region.show view - - ## Replace whole page with loader. - App.commands.setHandler "loading:show:page", -> - App.execute "loading:show:view", App.regionContent - - ## Get a loader view - App.reqres.setHandler "loading:get:view", (msgText, inline = true) -> - API.getLoaderView msgText, inline diff --git a/src/js/apps/loading/show/loading_view.js b/src/js/apps/loading/show/loading_view.js new file mode 100644 index 00000000..007c0aeb --- /dev/null +++ b/src/js/apps/loading/show/loading_view.js @@ -0,0 +1,28 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("LoadingApp.Show", (Show, App, Backbone, Marionette, $, _) => (function() { + const Cls = (Show.Page = class Page extends Backbone.Marionette.ItemView { + static initClass() { + this.prototype.template = "apps/loading/show/loading_page"; + } + onRender() { + return this.$el.find('h2').html(this.options.textHtml); + } + attributes() { + if (this.options.inline) { + return { + class: 'loader-inline' + }; + } + } + }); + Cls.initClass(); + return Cls; +})()); diff --git a/src/js/apps/loading/show/loading_view.js.coffee b/src/js/apps/loading/show/loading_view.js.coffee deleted file mode 100644 index 26647e7b..00000000 --- a/src/js/apps/loading/show/loading_view.js.coffee +++ /dev/null @@ -1,11 +0,0 @@ -@Kodi.module "LoadingApp.Show", (Show, App, Backbone, Marionette, $, _) -> - - class Show.Page extends Backbone.Marionette.ItemView - template: "apps/loading/show/loading_page" - onRender: -> - @$el.find('h2').html @options.textHtml - attributes: -> - if @options.inline - { - class: 'loader-inline' - } diff --git a/src/js/apps/localPlaylist/list/list_controller.js b/src/js/apps/localPlaylist/list/list_controller.js new file mode 100644 index 00000000..6c251be0 --- /dev/null +++ b/src/js/apps/localPlaylist/list/list_controller.js @@ -0,0 +1,127 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("localPlaylistApp.List", function(List, App, Backbone, Marionette, $, _) { + + return List.Controller = class Controller extends App.Controllers.Base { + + initialize(options) { + const { + id + } = options; + const playlists = App.request("localplaylist:entities"); + this.layout = this.getLayoutView(playlists); + + this.listenTo(this.layout, "show", () => { + this.getListsView(playlists); + return this.getItems(id); + }); + + return App.regionContent.show(this.layout); + } + + //# Get the layout + getLayoutView(collection) { + return new List.ListLayout({ + collection}); + } + + //# Get the sidebar list + getListsView(playlists) { + this.sideLayout = new List.SideLayout(); + const view = new List.Lists({ + collection: playlists}); + App.listenTo(this.sideLayout, "show", () => { + if (playlists.length > 0) { + return this.sideLayout.regionLists.show(view); + } + }); + App.listenTo(this.sideLayout, 'lists:new', () => App.execute("localplaylist:newlist")); + return this.layout.regionSidebarFirst.show(this.sideLayout); + } + + //# Get items then render + getItems(id) { + const playlist = App.request("localplaylist:entity", id); + const collection = App.request("localplaylist:item:entities", id); + this.itemLayout = new List.Layout({ + list: playlist}); + App.listenTo(this.itemLayout, "show", () => { + if (collection.length > 0) { + const media = playlist.get('media'); + const view = App.request(`${media}:list:view`, collection, true); + this.itemLayout.regionListItems.show(view); + this.bindRemove(id, view); + return this.initSortable(id, view); + } + }); + this.bindLayout(id); + return this.layout.regionContent.show(this.itemLayout); + } + + //# Binds to layout + bindLayout(id) { + const collection = App.request("localplaylist:item:entities", id); + App.listenTo(this.itemLayout, 'list:clear', function() { + App.execute("localplaylist:clear:entities", id); + return App.execute("localplaylist:reload", id); + }); + App.listenTo(this.itemLayout, 'list:delete', function() { + App.execute("localplaylist:clear:entities", id); + App.execute("localplaylist:remove:entity", id); + return App.navigate("playlists", {trigger: true}); + }); + App.listenTo(this.itemLayout, 'list:rename', () => App.execute("localplaylist:rename", id)); + App.listenTo(this.itemLayout, 'list:play', function() { + const kodiPlaylist = App.request("command:kodi:controller", 'audio', 'PlayList'); + return kodiPlaylist.playCollection(collection); + }); + App.listenTo(this.itemLayout, 'list:localplay', function() { + const localPlaylist = App.request("command:local:controller", 'audio', 'PlayList'); + return localPlaylist.playCollection(collection); + }); + return App.listenTo(this.itemLayout, 'list:export', () => App.execute("playlist:export", collection)); + } + + //# Binds to items + bindRemove(id, view) { + return App.listenTo(view, 'childview:song:remove', (parent, viewItem) => { + // Update the order, exclude removed item + return this.updateOrder(id, view.$el, [parent.$el.data('id')]); + }); + } + + //# Bind sortable + initSortable(id, view) { + const self = this; + return $('tbody', view.$el).sortable({ + onEnd: e => { + return self.updateOrder(id, this.el); + } + }); + } + + //# Rebuild the order of items after sort or item removal, excluded items + //# will get removed from the collection + updateOrder(playlistId, $ctx, exclude = []) { + const order = []; + let pos = 0; + $('tr', $ctx).each(function(i, d) { + const id = $(d).data('id'); + if (helpers.global.inArray(id, exclude)) { + return $(d).remove(); + } else { + order.push(id); + $(d).data('id', pos); + return pos++; + } + }); + return App.request("localplaylist:item:updateorder", playlistId, order); + } + }; +}); diff --git a/src/js/apps/localPlaylist/list/list_controller.js.coffee b/src/js/apps/localPlaylist/list/list_controller.js.coffee deleted file mode 100644 index 99262730..00000000 --- a/src/js/apps/localPlaylist/list/list_controller.js.coffee +++ /dev/null @@ -1,97 +0,0 @@ -@Kodi.module "localPlaylistApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.Controller extends App.Controllers.Base - - initialize: (options) -> - id = options.id - playlists = App.request "localplaylist:entities" - @layout = @getLayoutView playlists - - @listenTo @layout, "show", => - @getListsView(playlists) - @getItems(id) - - App.regionContent.show @layout - - ## Get the layout - getLayoutView: (collection) -> - new List.ListLayout - collection: collection - - ## Get the sidebar list - getListsView: (playlists) -> - @sideLayout = new List.SideLayout() - view = new List.Lists - collection: playlists - App.listenTo @sideLayout, "show", => - if playlists.length > 0 - @sideLayout.regionLists.show view - App.listenTo @sideLayout, 'lists:new', -> - App.execute "localplaylist:newlist" - @layout.regionSidebarFirst.show @sideLayout - - ## Get items then render - getItems: (id) -> - playlist = App.request "localplaylist:entity", id - collection = App.request "localplaylist:item:entities", id - @itemLayout = new List.Layout - list: playlist - App.listenTo @itemLayout, "show", => - if collection.length > 0 - media = playlist.get('media') - view = App.request "#{media}:list:view", collection, true - @itemLayout.regionListItems.show view - @bindRemove id, view - @initSortable id, view - @bindLayout id - @layout.regionContent.show @itemLayout - - ## Binds to layout - bindLayout: (id) -> - collection = App.request "localplaylist:item:entities", id - App.listenTo @itemLayout, 'list:clear', -> - App.execute "localplaylist:clear:entities", id - App.execute "localplaylist:reload", id - App.listenTo @itemLayout, 'list:delete', -> - App.execute "localplaylist:clear:entities", id - App.execute "localplaylist:remove:entity", id - App.navigate "playlists", {trigger: true} - App.listenTo @itemLayout, 'list:rename', -> - App.execute "localplaylist:rename", id - App.listenTo @itemLayout, 'list:play', -> - kodiPlaylist = App.request "command:kodi:controller", 'audio', 'PlayList' - kodiPlaylist.playCollection(collection) - App.listenTo @itemLayout, 'list:localplay', -> - localPlaylist = App.request "command:local:controller", 'audio', 'PlayList' - localPlaylist.playCollection(collection) - App.listenTo @itemLayout, 'list:export', -> - App.execute "playlist:export", collection - - ## Binds to items - bindRemove: (id, view) -> - App.listenTo view, 'childview:song:remove', (parent, viewItem) => - # Update the order, exclude removed item - @updateOrder id, view.$el, [parent.$el.data('id')] - - ## Bind sortable - initSortable: (id, view) -> - self = @ - $('tbody', view.$el).sortable({ - onEnd: (e) => - self.updateOrder id, @el - }); - - ## Rebuild the order of items after sort or item removal, excluded items - ## will get removed from the collection - updateOrder: (playlistId, $ctx, exclude = []) -> - order = [] - pos = 0 - $('tr', $ctx).each (i, d) -> - id = $(d).data('id') - if helpers.global.inArray(id, exclude) - $(d).remove() - else - order.push id - $(d).data('id', pos) - pos++ - App.request "localplaylist:item:updateorder", playlistId, order diff --git a/src/js/apps/localPlaylist/list/list_view.js b/src/js/apps/localPlaylist/list/list_view.js new file mode 100644 index 00000000..1544ea2b --- /dev/null +++ b/src/js/apps/localPlaylist/list/list_view.js @@ -0,0 +1,113 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("localPlaylistApp.List", function(List, App, Backbone, Marionette, $, _) { + + let Cls = (List.ListLayout = class ListLayout extends App.Views.LayoutWithSidebarFirstView { + static initClass() { + this.prototype.className = "local-playlist-list"; + } + }); + Cls.initClass(); + + Cls = (List.SideLayout = class SideLayout extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist_sidebar_layout'; + this.prototype.tagName = 'div'; + this.prototype.className = 'side-inner'; + this.prototype.regions = + {regionLists: '.current-lists'}; + this.prototype.triggers = + {'click .new-list' : 'lists:new'}; + } + }); + Cls.initClass(); + + Cls = (List.List = class List extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist'; + this.prototype.tagName = "li"; + } + initialize() { + const path = helpers.url.get('playlist', this.model.get('id')); + this.model.set({title: this.model.get('name'), path}); + if (path === helpers.url.path()) { + return this.model.set({active: true}); + } + } + }); + Cls.initClass(); + + Cls = (List.Lists = class Lists extends App.Views.CompositeView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist_list'; + this.prototype.childView = List.List; + this.prototype.tagName = "div"; + this.prototype.childViewContainer = 'ul.lists'; + } + onRender() { + return $('h3', this.$el).text( t.gettext('Playlists') ); + } + }); + Cls.initClass(); + + Cls = (List.Selection = class Selection extends App.Views.ItemView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist'; + this.prototype.tagName = "li"; + this.prototype.triggers = + {'click .item' : 'item:selected'}; + } + initialize() { + return this.model.set({title: this.model.get('name')}); + } + }); + Cls.initClass(); + + Cls = (List.SelectionList = class SelectionList extends App.Views.CompositeView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist_list'; + this.prototype.childView = List.Selection; + this.prototype.tagName = "div"; + this.prototype.className = 'playlist-selection-list'; + this.prototype.childViewContainer = 'ul.lists'; + } + onRender() { + return $('h3', this.$el).text( t.gettext('Existing playlists') ); + } + }); + Cls.initClass(); + + return (function() { + Cls = (List.Layout = class Layout extends App.Views.LayoutView { + static initClass() { + this.prototype.template = 'apps/localPlaylist/list/playlist_layout'; + this.prototype.tagName = 'div'; + this.prototype.className = 'local-playlist'; + this.prototype.regions = + {regionListItems: '.item-container'}; + this.prototype.triggers = { + 'click .local-playlist-header .rename' : 'list:rename', + 'click .local-playlist-header .clear' : 'list:clear', + 'click .local-playlist-header .delete' : 'list:delete', + 'click .local-playlist-header .play' : 'list:play', + 'click .local-playlist-header .localplay' : 'list:localplay', + 'click .local-playlist-header .export' : 'list:export' + }; + } + onRender() { + if (this.options && this.options.list) { + return $('h2', this.$el).text( this.options.list.get('name') ); + } + } + }); + Cls.initClass(); + return Cls; + })(); +}); diff --git a/src/js/apps/localPlaylist/list/list_view.js.coffee b/src/js/apps/localPlaylist/list/list_view.js.coffee deleted file mode 100644 index 371178e1..00000000 --- a/src/js/apps/localPlaylist/list/list_view.js.coffee +++ /dev/null @@ -1,64 +0,0 @@ -@Kodi.module "localPlaylistApp.List", (List, App, Backbone, Marionette, $, _) -> - - class List.ListLayout extends App.Views.LayoutWithSidebarFirstView - className: "local-playlist-list" - - class List.SideLayout extends App.Views.LayoutView - template: 'apps/localPlaylist/list/playlist_sidebar_layout' - tagName: 'div' - className: 'side-inner' - regions: - regionLists: '.current-lists' - triggers: - 'click .new-list' : 'lists:new' - - class List.List extends App.Views.ItemView - template: 'apps/localPlaylist/list/playlist' - tagName: "li" - initialize: -> - path = helpers.url.get 'playlist', @model.get('id') - @model.set(title: @model.get('name'), path: path) - if path is helpers.url.path() - @model.set(active: true) - - class List.Lists extends App.Views.CompositeView - template: 'apps/localPlaylist/list/playlist_list' - childView: List.List - tagName: "div" - childViewContainer: 'ul.lists' - onRender: -> - $('h3', @$el).text( t.gettext('Playlists') ) - - class List.Selection extends App.Views.ItemView - template: 'apps/localPlaylist/list/playlist' - tagName: "li" - initialize: -> - @model.set(title: @model.get('name')) - triggers: - 'click .item' : 'item:selected' - - class List.SelectionList extends App.Views.CompositeView - template: 'apps/localPlaylist/list/playlist_list' - childView: List.Selection - tagName: "div" - className: 'playlist-selection-list' - childViewContainer: 'ul.lists' - onRender: -> - $('h3', @$el).text( t.gettext('Existing playlists') ) - - class List.Layout extends App.Views.LayoutView - template: 'apps/localPlaylist/list/playlist_layout' - tagName: 'div' - className: 'local-playlist' - regions: - regionListItems: '.item-container' - triggers: - 'click .local-playlist-header .rename' : 'list:rename' - 'click .local-playlist-header .clear' : 'list:clear' - 'click .local-playlist-header .delete' : 'list:delete' - 'click .local-playlist-header .play' : 'list:play' - 'click .local-playlist-header .localplay' : 'list:localplay' - 'click .local-playlist-header .export' : 'list:export' - onRender: -> - if @options and @options.list - $('h2', @$el).text( @options.list.get('name') ) diff --git a/src/js/apps/localPlaylist/localPlaylist_app.js b/src/js/apps/localPlaylist/localPlaylist_app.js new file mode 100644 index 00000000..bd3b47aa --- /dev/null +++ b/src/js/apps/localPlaylist/localPlaylist_app.js @@ -0,0 +1,153 @@ +// TODO: This file was created by bulk-decaffeinate. +// Sanity-check the conversion and remove this comment. +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS206: Consider reworking classes to avoid initClass + * DS208: Avoid top-level this + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md + */ +this.Kodi.module("localPlaylistApp", function(localPlaylistApp, App, Backbone, Marionette, $, _) { + + const Cls = (localPlaylistApp.Router = class Router extends App.Router.Base { + static initClass() { + this.prototype.appRoutes = { + "playlists" : "list", + "playlist/:id" : "list" + }; + } + }); + Cls.initClass(); + + + /* + Main functionality. + */ + + var API = { + + playlistNameMsg: 'Give your playlist a name', + + //# if no id, find the first list, else id is 0 + list(id) { + if (id === null) { + const lists = App.request("localplaylist:entities"); + const items = lists.getRawCollection(); + if (_.isEmpty(lists)) { + id = 0; + } else { + const item = _.min(items, list => list.id); + ({ + id + } = item); + App.navigate(helpers.url.get('playlist', id)); + } + } + return new localPlaylistApp.List.Controller({ + id}); + }, + + //# Wrapper for adding to a new or existing list. + addToList(entityType, id) { + const playlists = App.request("localplaylist:entities"); + if (!playlists || (playlists.length === 0)) { + return this.createNewList(entityType, id); + } else { + const view = new localPlaylistApp.List.SelectionList({ + collection: playlists}); + const $content = view.render().$el; + //# New list button + const $new = $('