From 77270c6b0064915697c75818b0a510a01ad8389c Mon Sep 17 00:00:00 2001 From: Ed Rooth Date: Thu, 10 Apr 2014 10:17:25 -0700 Subject: [PATCH 01/10] feat(dashboard): add sigle-page-app html5 pushstate support --- mod/dashboard/dashboard.go | 13 ++++++++++++- mod/mod.go | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/mod/dashboard/dashboard.go b/mod/dashboard/dashboard.go index c462c382b..e64b3b3cc 100644 --- a/mod/dashboard/dashboard.go +++ b/mod/dashboard/dashboard.go @@ -35,6 +35,10 @@ func memoryFileServer(w http.ResponseWriter, req *http.Request) { return } +func getDashDir() string { + return os.Getenv("ETCD_DASHBOARD_DIR") +} + // DashboardHttpHandler either uses the compiled in virtual filesystem for the // dashboard assets or if ETCD_DASHBOARD_DIR is set uses that as the source of // assets. @@ -42,7 +46,7 @@ func HttpHandler() (handler http.Handler) { handler = http.HandlerFunc(memoryFileServer) // Serve the dashboard from a filesystem if the magic env variable is enabled - dashDir := os.Getenv("ETCD_DASHBOARD_DIR") + dashDir := getDashDir() if len(dashDir) != 0 { log.Debugf("Using dashboard directory %s", dashDir) handler = http.FileServer(http.Dir(dashDir)) @@ -50,3 +54,10 @@ func HttpHandler() (handler http.Handler) { return handler } + +// Always returns the index.html page. +func IndexPage(w http.ResponseWriter, req *http.Request) { + dashDir := getDashDir() + http.ServeFile(w, req, path.Join(dashDir, "index.html")) + return +} diff --git a/mod/mod.go b/mod/mod.go index 1b1002794..59358a0c9 100644 --- a/mod/mod.go +++ b/mod/mod.go @@ -21,7 +21,9 @@ func addSlash(w http.ResponseWriter, req *http.Request) { func HttpHandler(addr string) http.Handler { r := mux.NewRouter() r.HandleFunc("/dashboard", addSlash) - r.PathPrefix("/dashboard/").Handler(http.StripPrefix("/dashboard/", dashboard.HttpHandler())) + + r.PathPrefix("/dashboard/static/").Handler(http.StripPrefix("/dashboard/static/", dashboard.HttpHandler())) + r.HandleFunc("/dashboard{path:.*}", dashboard.IndexPage) r.PathPrefix("/v2/lock").Handler(http.StripPrefix("/v2/lock", lock2.NewHandler(addr))) r.PathPrefix("/v2/leader").Handler(http.StripPrefix("/v2/leader", leader2.NewHandler(addr))) From 842dd5cab015f20e4e583b1ef0e8e1dae52d6a5b Mon Sep 17 00:00:00 2001 From: Ed Rooth Date: Thu, 10 Apr 2014 10:47:19 -0700 Subject: [PATCH 02/10] chore(dashboard): remove old dashboard --- mod/dashboard/.bowerrc | 3 - mod/dashboard/.editorconfig | 21 - mod/dashboard/.gitattributes | 1 - mod/dashboard/.gitignore | 6 - mod/dashboard/.jshintignore | 3 - mod/dashboard/.jshintrc | 27 - mod/dashboard/.travis.yml | 7 - mod/dashboard/Gruntfile.js | 355 - mod/dashboard/LICENSE | 202 - mod/dashboard/README.md | 29 - mod/dashboard/app/images/add.svg | 7 - mod/dashboard/app/images/back.svg | 6 - mod/dashboard/app/images/delete.svg | 7 - mod/dashboard/app/images/logo.svg | 46 - mod/dashboard/app/scripts/app.js | 43 - .../app/scripts/common/directives/enter.js | 16 - .../scripts/common/directives/highlight.js | 19 - .../app/scripts/common/services/etcd.js | 103 - .../app/scripts/common/services/prefix-url.js | 10 - .../app/scripts/controllers/browser.js | 156 - mod/dashboard/app/scripts/controllers/home.js | 3 - mod/dashboard/app/scripts/controllers/root.js | 9 - .../app/scripts/controllers/stats.js | 210 - mod/dashboard/app/scripts/directives.js | 3 - .../app/scripts/ng-time-relative.min.js | 1 - mod/dashboard/app/scripts/shims.js | 36 - mod/dashboard/app/scripts/vega.js | 6970 ----------------- mod/dashboard/app/styles/bootstrap.css | 6167 --------------- mod/dashboard/app/styles/browser.css | 186 - mod/dashboard/app/styles/etcd-widgets.css | 381 - mod/dashboard/app/styles/main.css | 56 - mod/dashboard/app/styles/stats.css | 144 - mod/dashboard/app/views/browser.html | 73 - mod/dashboard/app/views/home.html | 4 - mod/dashboard/app/views/stats.html | 49 - mod/dashboard/bower.json | 22 - mod/dashboard/build | 18 - mod/dashboard/dashboard.go | 63 - mod/dashboard/karma-e2e.conf.js | 54 - mod/dashboard/karma.conf.js | 52 - mod/dashboard/package.json | 36 - mod/dashboard/test/.jshintrc | 35 - mod/dashboard/test/runner.html | 10 - mod/dashboard/test/spec/controllers/main.js | 22 - 44 files changed, 15671 deletions(-) delete mode 100644 mod/dashboard/.bowerrc delete mode 100644 mod/dashboard/.editorconfig delete mode 100644 mod/dashboard/.gitattributes delete mode 100644 mod/dashboard/.gitignore delete mode 100644 mod/dashboard/.jshintignore delete mode 100644 mod/dashboard/.jshintrc delete mode 100644 mod/dashboard/.travis.yml delete mode 100644 mod/dashboard/Gruntfile.js delete mode 100644 mod/dashboard/LICENSE delete mode 100644 mod/dashboard/README.md delete mode 100644 mod/dashboard/app/images/add.svg delete mode 100644 mod/dashboard/app/images/back.svg delete mode 100644 mod/dashboard/app/images/delete.svg delete mode 100644 mod/dashboard/app/images/logo.svg delete mode 100644 mod/dashboard/app/scripts/app.js delete mode 100644 mod/dashboard/app/scripts/common/directives/enter.js delete mode 100644 mod/dashboard/app/scripts/common/directives/highlight.js delete mode 100644 mod/dashboard/app/scripts/common/services/etcd.js delete mode 100644 mod/dashboard/app/scripts/common/services/prefix-url.js delete mode 100644 mod/dashboard/app/scripts/controllers/browser.js delete mode 100644 mod/dashboard/app/scripts/controllers/home.js delete mode 100644 mod/dashboard/app/scripts/controllers/root.js delete mode 100644 mod/dashboard/app/scripts/controllers/stats.js delete mode 100644 mod/dashboard/app/scripts/directives.js delete mode 100644 mod/dashboard/app/scripts/ng-time-relative.min.js delete mode 100644 mod/dashboard/app/scripts/shims.js delete mode 100644 mod/dashboard/app/scripts/vega.js delete mode 100644 mod/dashboard/app/styles/bootstrap.css delete mode 100644 mod/dashboard/app/styles/browser.css delete mode 100644 mod/dashboard/app/styles/etcd-widgets.css delete mode 100644 mod/dashboard/app/styles/main.css delete mode 100644 mod/dashboard/app/styles/stats.css delete mode 100644 mod/dashboard/app/views/browser.html delete mode 100644 mod/dashboard/app/views/home.html delete mode 100644 mod/dashboard/app/views/stats.html delete mode 100644 mod/dashboard/bower.json delete mode 100755 mod/dashboard/build delete mode 100644 mod/dashboard/dashboard.go delete mode 100644 mod/dashboard/karma-e2e.conf.js delete mode 100644 mod/dashboard/karma.conf.js delete mode 100644 mod/dashboard/package.json delete mode 100644 mod/dashboard/test/.jshintrc delete mode 100644 mod/dashboard/test/runner.html delete mode 100644 mod/dashboard/test/spec/controllers/main.js diff --git a/mod/dashboard/.bowerrc b/mod/dashboard/.bowerrc deleted file mode 100644 index ba0accc5a..000000000 --- a/mod/dashboard/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "app/bower_components" -} diff --git a/mod/dashboard/.editorconfig b/mod/dashboard/.editorconfig deleted file mode 100644 index c2cdfb8ad..000000000 --- a/mod/dashboard/.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - - -[*] - -# Change these settings to your own preference -indent_style = space -indent_size = 2 - -# We recommend you to keep these unchanged -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/mod/dashboard/.gitattributes b/mod/dashboard/.gitattributes deleted file mode 100644 index 212566614..000000000 --- a/mod/dashboard/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto \ No newline at end of file diff --git a/mod/dashboard/.gitignore b/mod/dashboard/.gitignore deleted file mode 100644 index 315e280ee..000000000 --- a/mod/dashboard/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -dist -.tmp -.sass-cache -app/bower_components -/go-bindata diff --git a/mod/dashboard/.jshintignore b/mod/dashboard/.jshintignore deleted file mode 100644 index ddbd3d2bc..000000000 --- a/mod/dashboard/.jshintignore +++ /dev/null @@ -1,3 +0,0 @@ -app/scripts/vega.js -app/scripts/moment.min.js -app/scripts/ng-time-relative.min.js diff --git a/mod/dashboard/.jshintrc b/mod/dashboard/.jshintrc deleted file mode 100644 index 950c65247..000000000 --- a/mod/dashboard/.jshintrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "node": true, - "browser": true, - "esnext": true, - "bitwise": true, - "camelcase": true, - "curly": true, - "eqeqeq": true, - "immed": true, - "indent": 2, - "latedef": true, - "newcap": true, - "noarg": true, - "quotmark": "single", - "regexp": true, - "undef": true, - "unused": false, - "strict": true, - "trailing": true, - "smarttabs": true, - "globals": { - "angular": false, - "$": false, - "vg": false, - "moment": false - } -} diff --git a/mod/dashboard/.travis.yml b/mod/dashboard/.travis.yml deleted file mode 100644 index 83f4e22f0..000000000 --- a/mod/dashboard/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - '0.8' - - '0.10' -before_script: - - 'npm install -g bower grunt-cli' - - 'bower install' diff --git a/mod/dashboard/Gruntfile.js b/mod/dashboard/Gruntfile.js deleted file mode 100644 index a42b4145c..000000000 --- a/mod/dashboard/Gruntfile.js +++ /dev/null @@ -1,355 +0,0 @@ -// Generated on 2013-10-07 using generator-webapp 0.4.3 -'use strict'; - -// # Globbing -// for performance reasons we're only matching one level down: -// 'test/spec/{,*/}*.js' -// use this if you want to recursively match all subfolders: -// 'test/spec/**/*.js' - -module.exports = function (grunt) { - // show elapsed time at the end - require('time-grunt')(grunt); - // load all grunt tasks - require('load-grunt-tasks')(grunt); - - grunt.initConfig({ - // configurable paths - uglify: { - options: { - mangle: false - }, - }, - yeoman: { - app: 'app', - dist: 'dist' - }, - watch: { - compass: { - files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], - tasks: ['compass:server', 'autoprefixer'] - }, - styles: { - files: ['<%= yeoman.app %>/styles/{,*/}*.css'], - tasks: ['copy:styles', 'autoprefixer'] - }, - livereload: { - options: { - livereload: '<%= connect.options.livereload %>' - }, - files: [ - '<%= yeoman.app %>/*.html', - '.tmp/styles/{,*/}*.css', - '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', - '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' - ] - } - }, - connect: { - options: { - port: 9000, - livereload: 35729, - // change this to '0.0.0.0' to access the server from outside - hostname: 'localhost' - }, - livereload: { - options: { - open: true, - base: [ - '.tmp', - '<%= yeoman.app %>' - ] - } - }, - test: { - options: { - base: [ - '.tmp', - 'test', - '<%= yeoman.app %>' - ] - } - }, - dist: { - options: { - open: true, - base: '<%= yeoman.dist %>' - } - } - }, - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= yeoman.dist %>/*', - '!<%= yeoman.dist %>/.git*' - ] - }] - }, - server: '.tmp' - }, - jshint: { - options: { - jshintrc: '.jshintrc' - }, - all: [ - '<%= yeoman.app %>/scripts/{,*/}*.js', - '!<%= yeoman.app %>/scripts/vendor/*', - ] - }, - mocha: { - all: { - options: { - run: true, - urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html'] - } - } - }, - compass: { - options: { - sassDir: '<%= yeoman.app %>/styles', - cssDir: '.tmp/styles', - generatedImagesDir: '.tmp/images/generated', - imagesDir: '<%= yeoman.app %>/images', - javascriptsDir: '<%= yeoman.app %>/scripts', - fontsDir: '<%= yeoman.app %>/styles/fonts', - importPath: '<%= yeoman.app %>/bower_components', - httpImagesPath: '/images', - httpGeneratedImagesPath: '/images/generated', - httpFontsPath: '/styles/fonts', - relativeAssets: false, - assetCacheBuster: false - }, - dist: { - options: { - generatedImagesDir: '<%= yeoman.dist %>/images/generated' - } - }, - server: { - options: { - debugInfo: true - } - } - }, - autoprefixer: { - options: { - browsers: ['last 1 version'] - }, - dist: { - files: [{ - expand: true, - cwd: '.tmp/styles/', - src: '{,*/}*.css', - dest: '.tmp/styles/' - }] - } - }, - // not used since Uglify task does concat, - // but still available if needed - /*concat: { - dist: {} - },*/ - requirejs: { - dist: { - // Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js - options: { - // `name` and `out` is set by grunt-usemin - baseUrl: '<%= yeoman.app %>/scripts', - optimize: 'none', - // TODO: Figure out how to make sourcemaps work with grunt-usemin - // https://github.com/yeoman/grunt-usemin/issues/30 - //generateSourceMaps: true, - // required to support SourceMaps - // http://requirejs.org/docs/errors.html#sourcemapcomments - preserveLicenseComments: false, - useStrict: true, - wrap: true - //uglify2: {} // https://github.com/mishoo/UglifyJS2 - } - } - }, - useminPrepare: { - options: { - dest: '<%= yeoman.dist %>' - }, - html: ['<%= yeoman.app %>/index.html'] - }, - usemin: { - options: { - dirs: ['<%= yeoman.dist %>'] - }, - html: ['<%= yeoman.dist %>/{,*/}*.html'], - css: ['<%= yeoman.dist %>/styles/{,*/}*.css'] - }, - imagemin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.{png,jpg,jpeg}', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - svgmin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.svg', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - cssmin: { - // This task is pre-configured if you do not wish to use Usemin - // blocks for your CSS. By default, the Usemin block from your - // `index.html` will take care of minification, e.g. - // - // - // - // dist: { - // files: { - // '<%= yeoman.dist %>/styles/main.css': [ - // '.tmp/styles/{,*/}*.css', - // '<%= yeoman.app %>/styles/{,*/}*.css' - // ] - // } - // } - }, - htmlmin: { - dist: { - options: { - /*removeCommentsFromCDATA: true, - // https://github.com/yeoman/grunt-usemin/issues/44 - //collapseWhitespace: true, - collapseBooleanAttributes: true, - removeAttributeQuotes: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - removeOptionalTags: true*/ - }, - files: [{ - expand: true, - cwd: '<%= yeoman.app %>', - src: '*.html', - dest: '<%= yeoman.dist %>' - }] - } - }, - - ngmin: { - dist: { - src: '.tmp/concat/scripts/app.js', - dest: '.tmp/concat/scripts/app.js' - } - }, - - // Put files not handled in other tasks here - copy: { - dist: { - files: [{ - expand: true, - dot: true, - cwd: '<%= yeoman.app %>', - dest: '<%= yeoman.dist %>', - src: [ - '*.{ico,png,txt}', - '.htaccess', - 'images/{,*/}*.{webp,gif,svg}', - 'styles/fonts/{,*/}*.*', - 'views/*.*', - //'index.html', - 'bower_components/sass-bootstrap/fonts/*.*' - ] - }] - }, - styles: { - expand: true, - dot: true, - cwd: '<%= yeoman.app %>/styles', - dest: '.tmp/styles/', - src: '{,*/}*.css' - } - }, - modernizr: { - devFile: '<%= yeoman.app %>/bower_components/modernizr/modernizr.js', - outputFile: '<%= yeoman.dist %>/bower_components/modernizr/modernizr.js', - files: [ - '<%= yeoman.dist %>/scripts/{,*/}*.js', - '<%= yeoman.dist %>/styles/{,*/}*.css', - '!<%= yeoman.dist %>/scripts/vendor/*' - ], - uglify: true - }, - concurrent: { - server: [ - 'compass', - 'copy:styles' - ], - test: [ - 'copy:styles' - ], - dist: [ - //'compass', - 'copy:styles', - 'imagemin', - 'svgmin', - 'htmlmin' - ] - }, - bower: { - options: { - exclude: ['modernizr'] - }, - all: { - rjsConfig: '<%= yeoman.app %>/scripts/main.js' - } - } - }); - - grunt.registerTask('server', function (target) { - if (target === 'dist') { - return grunt.task.run(['build', 'connect:dist:keepalive']); - } - - grunt.task.run([ - 'clean:server', - 'concurrent:server', - 'autoprefixer', - 'connect:livereload', - 'watch' - ]); - }); - - grunt.registerTask('test', [ - 'clean:server', - 'concurrent:test', - 'autoprefixer', - 'connect:test', - 'mocha' - ]); - - grunt.registerTask('build', [ - 'clean:dist', - 'jshint', - 'useminPrepare', - 'concurrent:dist', - 'autoprefixer', - 'concat', - 'cssmin', - 'ngmin', - 'usemin', - 'uglify', - 'copy:dist' - ]); - - grunt.registerTask('default', [ - 'jshint', - 'test', - 'build' - ]); -}; diff --git a/mod/dashboard/LICENSE b/mod/dashboard/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/mod/dashboard/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/mod/dashboard/README.md b/mod/dashboard/README.md deleted file mode 100644 index d212a9622..000000000 --- a/mod/dashboard/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# etcd Dashboard - -## Developing - -If you'd like to contribute to the etcd dashboard mod, follow these instructions. For contributing to the rest of etcd, see the contributing document in the root of the repository. - -### Install yeoman - -http://yeoman.io/ - -### Install NPM locally - -``` -npm install -``` - -### Install Bower Components - -``` -bower install -``` - -### View in Browser - -run `export ETCD_DASHBOARD_DIR=/absolute/path/to/coreos/etcd/mod/dashboard/app` - -Run etcd like you normally would and afterward browse to: - -http://localhost:4001/mod/dashboard/ diff --git a/mod/dashboard/app/images/add.svg b/mod/dashboard/app/images/add.svg deleted file mode 100644 index d84c9ecb8..000000000 --- a/mod/dashboard/app/images/add.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mod/dashboard/app/images/back.svg b/mod/dashboard/app/images/back.svg deleted file mode 100644 index 0acbe5653..000000000 --- a/mod/dashboard/app/images/back.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/mod/dashboard/app/images/delete.svg b/mod/dashboard/app/images/delete.svg deleted file mode 100644 index fef624237..000000000 --- a/mod/dashboard/app/images/delete.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mod/dashboard/app/images/logo.svg b/mod/dashboard/app/images/logo.svg deleted file mode 100644 index 4a9177062..000000000 --- a/mod/dashboard/app/images/logo.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/mod/dashboard/app/scripts/app.js b/mod/dashboard/app/scripts/app.js deleted file mode 100644 index c12f62f9d..000000000 --- a/mod/dashboard/app/scripts/app.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var app = angular.module('etcdControlPanel', [ - 'ngRoute', - 'ngResource', - 'etcd', - 'etcdDirectives', - 'timeRelative', - 'underscore', - 'jquery', - 'moment', - 'vg' -]); - -app.constant('urlPrefix', '/mod/dashboard'); -app.constant('keyPrefix', '/v2/keys/'); - -app.config(function($routeProvider, $locationProvider, urlPrefix) { - - function prefixUrl(url) { - return urlPrefix + url; - } - - $locationProvider.html5Mode(true); - - $routeProvider - .when(prefixUrl('/'), { - controller: 'HomeCtrl', - templateUrl: prefixUrl('/views/home.html') - }) - .when(prefixUrl('/stats'), { - controller: 'StatsCtrl', - templateUrl: prefixUrl('/views/stats.html') - }) - .when(prefixUrl('/browser'), { - controller: 'BrowserCtrl', - templateUrl: prefixUrl('/views/browser.html') - }) - .otherwise({ - templateUrl: prefixUrl('/404.html') - }); - -}); diff --git a/mod/dashboard/app/scripts/common/directives/enter.js b/mod/dashboard/app/scripts/common/directives/enter.js deleted file mode 100644 index 3aac7351d..000000000 --- a/mod/dashboard/app/scripts/common/directives/enter.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -angular.module('etcdControlPanel') -.directive('ngEnter', function() { - return function(scope, element, attrs) { - element.bind('keydown keypress', function(event) { - if(event.which === 13) { - scope.$apply(function(){ - scope.$eval(attrs.ngEnter); - }); - - event.preventDefault(); - } - }); - }; -}); diff --git a/mod/dashboard/app/scripts/common/directives/highlight.js b/mod/dashboard/app/scripts/common/directives/highlight.js deleted file mode 100644 index 7942a8cb7..000000000 --- a/mod/dashboard/app/scripts/common/directives/highlight.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -angular.module('etcdControlPanel') -.directive('highlight', function(keyPrefix) { - return { - restrict: 'E', - scope: { - highlightBase: '=', - highlightCurrent: '=' - }, - link: function(scope, element, attrs) { - var base = _.str.strRight(scope.highlightBase, keyPrefix), - current = _.str.trim(scope.highlightCurrent, '/'); - if (base === current) { - element.parent().parent().addClass('etcd-selected'); - } - } - }; -}); diff --git a/mod/dashboard/app/scripts/common/services/etcd.js b/mod/dashboard/app/scripts/common/services/etcd.js deleted file mode 100644 index 82fe8d59a..000000000 --- a/mod/dashboard/app/scripts/common/services/etcd.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; - -angular.module('etcd', []) - -.factory('EtcdV2', ['$http', '$q', function($http, $q) { - var keyPrefix = '/v2/keys/' - var statsPrefix = '/v2/stats/' - var baseURL = '/v2/' - var leaderURL = '' - - delete $http.defaults.headers.common['X-Requested-With']; - - function cleanupPath(path) { - var parts = path.split('/'); - if (parts.length === 0) { - return ''; - } - parts = parts.filter(function(v){return v!=='';}); - parts = parts.join('/'); - return parts - } - - function newKey(keyName) { - var self = {}; - self.name = cleanupPath(keyName); - - self.getParent = function() { - var parts = self.name.split('/'); - if (parts.length === 0) { - return newKey(''); - } - parts.pop(); - return newKey(parts.join('/')); - }; - - self.path = function() { - var path = '/' + cleanupPath(keyPrefix + self.name); - if (path === keyPrefix.substring(0, keyPrefix.length - 1)) { - return keyPrefix - } - return path - }; - - self.get = function() { - return $http.get(self.path()); - }; - - self.set = function(keyValue) { - return getLeader().then(function(leader) { - return $http({ - url: leader + self.path(), - data: $.param({value: keyValue}), - method: 'PUT', - headers: {'Content-Type': 'application/x-www-form-urlencoded'} - }); - }); - }; - - self.deleteKey = function(keyValue) { - return getLeader().then(function(leader) { - return $http({ - url: leader + self.path(), - method: 'DELETE', - headers: {'Content-Type': 'application/x-www-form-urlencoded'} - }); - }); - }; - - return self; - } - - function newStat(statName) { - var self = {}; - self.name = cleanupPath(statName); - - self.path = function() { - return '/' + cleanupPath(statsPrefix + self.name); - }; - - self.get = function() { - return $http.get(self.path()); - }; - - return self - } - - function getLeader() { - return newStat('leader').get().then(function(response) { - return newKey('/_etcd/machines/' + response.data.leader).get().then(function(response) { - // TODO: do something better here p.s. I hate javascript - var data = decodeURIComponent(response.data.node.value); - data = data.replace(/&/g, "\",\"").replace(/=/g,"\":\""); - data = JSON.parse('{"' + data + '"}'); - return data.etcd; - }); - }); - } - - return { - getStat: newStat, - getKey: newKey, - } -}]); diff --git a/mod/dashboard/app/scripts/common/services/prefix-url.js b/mod/dashboard/app/scripts/common/services/prefix-url.js deleted file mode 100644 index 1a95e1e68..000000000 --- a/mod/dashboard/app/scripts/common/services/prefix-url.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -angular.module('etcdControlPanel') -.factory('prefixUrl', function(urlPrefix) { - - return function(url) { - return urlPrefix + url; - } - -}); diff --git a/mod/dashboard/app/scripts/controllers/browser.js b/mod/dashboard/app/scripts/controllers/browser.js deleted file mode 100644 index a07b8f06e..000000000 --- a/mod/dashboard/app/scripts/controllers/browser.js +++ /dev/null @@ -1,156 +0,0 @@ -'use strict'; - -angular.module('etcdControlPanel') -.controller('BrowserCtrl', function ($scope, $window, EtcdV2, keyPrefix, $, _, moment) { - $scope.save = 'etcd-save-hide'; - $scope.preview = 'etcd-preview-hide'; - $scope.enableBack = true; - $scope.writingNew = false; - $scope.key = null; - $scope.list = []; - - // etcdPath is the path to the key that is currenly being looked at. - $scope.etcdPath = keyPrefix; - $scope.inputPath = keyPrefix; - - $scope.resetInputPath = function() { - $scope.inputPath = $scope.etcdPath; - }; - - $scope.setActiveKey = function(key) { - $scope.etcdPath = keyPrefix + _.str.trim(key, '/'); - $scope.resetInputPath(); - }; - - $scope.stripPrefix = function(path) { - return _.str.strRight(path, keyPrefix); - }; - - $scope.onEnter = function() { - var path = $scope.stripPrefix($scope.inputPath); - if (path !== '') { - $scope.setActiveKey(path); - } - }; - - $scope.updateCurrentKey = function() { - function etcdPathKey() { - return pathKey($scope.etcdPath); - } - - function pathKey(path) { - var parts = path.split(keyPrefix); - if (parts.length === 1) { - return ''; - } - return parts[1]; - } - // Notify everyone of the update - localStorage.setItem('etcdPath', $scope.etcdPath); - $scope.enableBack = true; - //disable back button if at root (/v2/keys/) - if ($scope.etcdPath === keyPrefix) { - $scope.enableBack = false; - } - $scope.key = EtcdV2.getKey(etcdPathKey($scope.etcdPath)); - }; - - $scope.$watch('etcdPath', $scope.updateCurrentKey); - - $scope.$watch('key', function() { - if ($scope.writingNew === true) { - return; - } - $scope.key.get().success(function (data, status, headers, config) { - //hide any errors - $('#etcd-browse-error').hide(); - // Looking at a directory if we got an array - if (data.node.dir === true) { - $scope.list = data.node.nodes; - $scope.preview = 'etcd-preview-hide'; - } else { - $scope.singleValue = data.node.value; - $scope.preview = 'etcd-preview-reveal'; - $scope.key.getParent().get().success(function(data) { - $scope.list = data.node.nodes; - }); - } - $scope.previewMessage = 'No key selected.'; - }).error(function (data, status, headers, config) { - $scope.previewMessage = 'Key does not exist.'; - $scope.showBrowseError(data.message); - }); - }); - - //back button click - $scope.back = function() { - $scope.etcdPath = $scope.key.getParent().path(); - $scope.resetInputPath(); - $scope.preview = 'etcd-preview-hide'; - $scope.writingNew = false; - }; - - $scope.showSave = function() { - $scope.save = 'etcd-save-reveal'; - }; - - $scope.saveData = function() { - $scope.setActiveKey($scope.stripPrefix($scope.inputPath)); - $scope.updateCurrentKey(); - // TODO: fixup etcd to allow for empty values - $scope.key.set($scope.singleValue || ' ').then(function(response) { - $scope.save = 'etcd-save-hide'; - $scope.preview = 'etcd-preview-hide'; - $scope.back(); - $scope.writingNew = false; - }, function (response) { - $scope.showSaveError(response.message); - }); - }; - - $scope.deleteKey = function(key) { - $scope.setActiveKey(key); - $scope.updateCurrentKey(); - $scope.key.deleteKey().then(function(response) { - //TODO: remove loader - $scope.save = 'etcd-save-hide'; - $scope.preview = 'etcd-preview-hide'; - $scope.back(); - }, function (response) { - //TODO: remove loader - //show errors - $scope.showBrowseError('Could not delete the key'); - }); - }; - - $scope.add = function() { - $scope.save = 'etcd-save-reveal'; - $scope.preview = 'etcd-preview-reveal'; - $scope.singleValue = ''; - $('.etcd-browser-path').find('input').focus(); - $scope.writingNew = true; - }; - - $scope.showBrowseError = function(message) { - $('#etcd-browse-error').find('.etcd-popover-content').text('Error: ' + message); - $('#etcd-browse-error').addClass('etcd-popover-right').show(); - }; - - $scope.showSaveError = function(message) { - $('#etcd-save-error').find('.etcd-popover-content').text('Error: ' + message); - $('#etcd-save-error').addClass('etcd-popover-left').show(); - }; - - $scope.getHeight = function() { - return $($window).height(); - }; - - //$scope.$watch($scope.getHeight, function() { - ////$('.etcd-container.etcd-browser etcd-body').css('height', $scope.getHeight()-45); - //}); - - $window.onresize = function(){ - $scope.$apply(); - }; - -}); diff --git a/mod/dashboard/app/scripts/controllers/home.js b/mod/dashboard/app/scripts/controllers/home.js deleted file mode 100644 index a0f4b9ed3..000000000 --- a/mod/dashboard/app/scripts/controllers/home.js +++ /dev/null @@ -1,3 +0,0 @@ -angular.module('etcdControlPanel') -.controller('HomeCtrl', function($scope) { -}); diff --git a/mod/dashboard/app/scripts/controllers/root.js b/mod/dashboard/app/scripts/controllers/root.js deleted file mode 100644 index 554f3c1fc..000000000 --- a/mod/dashboard/app/scripts/controllers/root.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -angular.module('etcdControlPanel') -.controller('RootCtrl', function($rootScope, prefixUrl) { - - // Expose prefixUrl() function to all. - $rootScope.prefixUrl = prefixUrl; - -}); diff --git a/mod/dashboard/app/scripts/controllers/stats.js b/mod/dashboard/app/scripts/controllers/stats.js deleted file mode 100644 index f376c2fec..000000000 --- a/mod/dashboard/app/scripts/controllers/stats.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - - -angular.module('etcdControlPanel') -.controller('StatsCtrl', function ($scope, $rootScope, $interval, EtcdV2, statsVega, vg) { - $scope.graphContainer = '#latency'; - $scope.graphVisibility = 'etcd-graph-show'; - $scope.tableVisibility = 'etcd-table-hide'; - - //make requests - function readStats() { - EtcdV2.getStat('leader').get().success(function(data) { - $scope.leaderStats = data; - $scope.leaderName = data.leader; - $scope.peers = []; - //hardcode leader stats - $scope.peers.push({ - latency: { - average: 0, - current: 0, - minimum: 0, - maximum: 0, - standardDeviation: 0 - }, - name: data.leader - }); - $.each(data.followers, function(index, value) { - value.name = index; - $scope.peers.push(value); - }); - //sort array so peers don't jump when output - $scope.peers.sort(function(a, b){ - if(a.name < b.name) { - return -1; - } - if(a.name > b.name) { - return 1; - } - return 0; - }); - drawGraph(); - }); - } - - function drawGraph () { - //hardcoded padding from chart json - var vertPadding = 30; - var horzPadding = 15; - //fetch width and height of graph area - var width = $($scope.graphContainer).width() - horzPadding; - var height = $($scope.graphContainer).height() - vertPadding; - - // parse a spec and create a visualization view - function parse(spec) { - vg.parse.spec(spec, function(chart) { - chart({ - el: $scope.graphContainer, - data: { - 'stats': $scope.peers - } - }).width(width).height(height).update(); - }); - } - parse(statsVega); - } - - $scope.showTable = function() { - $scope.tableVisibility = 'etcd-table-reveal'; - }; - - $scope.showGraph = function() { - $scope.tableVisibility = 'etcd-table-hide'; - }; - - $scope.getHeight = function() { - return $(window).height(); - }; - $scope.getWidth = function() { - return $(window).width(); - }; - //$scope.$watch($scope.getHeight, function() { - ////$('.etcd-container.etcd-stats .etcd-body').css('height', $scope.getHeight()-5); - //readStats(); - //}); - $scope.$watch($scope.getWidth, function() { - readStats(); - }); - window.onresize = function(){ - $scope.$apply(); - }; - - $scope.pollPromise = null; - - $scope.startPolling = function() { - // Update the graphs live - if ($scope.pollPromise) { - return; - } - $scope.pollPromise = $interval(function() { - readStats(); - }, 500); - }; - - $scope.stopPolling = function() { - $interval.cancel($scope.pollPromise); - $scope.pollPromise = null; - }; - - // Stop polling when navigating away from a view with this controller. - $rootScope.$on('$routeChangeStart', function () { - $scope.stopPolling(); - }); - - $scope.startPolling(); - -}) - - -/* statsVega returns the vega configuration for the stats dashboard */ -.factory('statsVega', function () { - return { - 'padding': {'top': 10, 'left': 5, 'bottom': 40, 'right': 10}, - 'data': [ - { - 'name': 'stats' - }, - { - 'name': 'thresholds', - 'values': [50, 100] - } - ], - 'scales': [ - { - 'name': 'y', - 'type': 'ordinal', - 'range': 'height', - 'domain': {'data': 'stats', 'field': 'index'} - }, - { - 'name': 'x', - 'range': 'width', - 'domainMin': 0, - 'domainMax': 100, - 'nice': true, - 'zero': true, - 'domain': {'data': 'stats', 'field': 'data.latency.current'} - }, - { - 'name': 'color', - 'type': 'linear', - 'domain': [10, 50, 100, 1000000000], - 'range': ['#00DB24', '#FFC000', '#c40022', '#c40022'] - } - ], - 'axes': [ - { - 'type': 'x', - 'scale': 'x', - 'ticks': 6, - 'name': 'Latency (ms)' - }, - { - 'type': 'y', - 'scale': 'y', - 'properties': { - 'ticks': { - 'stroke': {'value': 'transparent'} - }, - 'majorTicks': { - 'stroke': {'value': 'transparent'} - }, - 'labels': { - 'fill': {'value': 'transparent'} - }, - 'axis': { - 'stroke': {'value': '#333'}, - 'strokeWidth': {'value': 1} - } - } - } - ], - 'marks': [ - { - 'type': 'rect', - 'from': {'data': 'stats'}, - 'properties': { - 'enter': { - 'x': {'scale': 'x', 'value': 0}, - 'x2': {'scale': 'x', 'field': 'data.latency.current'}, - 'y': {'scale': 'y', 'field': 'index', 'offset': -1}, - 'height': {'value': 3}, - 'fill': {'scale':'color', 'field':'data.latency.current'} - } - } - }, - { - 'type': 'symbol', - 'from': {'data': 'stats'}, - 'properties': { - 'enter': { - 'x': {'scale': 'x', 'field': 'data.latency.current'}, - 'y': {'scale': 'y', 'field': 'index'}, - 'size': {'value': 50}, - 'fill': {'value': '#000'} - } - } - } - ] - }; -}); diff --git a/mod/dashboard/app/scripts/directives.js b/mod/dashboard/app/scripts/directives.js deleted file mode 100644 index f2714552d..000000000 --- a/mod/dashboard/app/scripts/directives.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -angular.module('etcdDirectives', []); diff --git a/mod/dashboard/app/scripts/ng-time-relative.min.js b/mod/dashboard/app/scripts/ng-time-relative.min.js deleted file mode 100644 index 3c09675bd..000000000 --- a/mod/dashboard/app/scripts/ng-time-relative.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(e){if("function"==typeof bootstrap)bootstrap("ng-time-relative",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeNgTimeRelative=e}else"undefined"!=typeof window?window.ngTimeRelative=e():global.ngTimeRelative=e()})(function(){var define,ses,bootstrap,module,exports;return function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0](function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s 1 - ? function(x) { return s.reduce(function(x,f) { return x[f]; }, x); } - : function(x) { return x[f]; }; -}; - -vg.comparator = function(sort) { - var sign = []; - if (sort === undefined) sort = []; - sort = vg.array(sort).map(function(f) { - var s = 1; - if (f[0] === "-") { s = -1; f = f.slice(1); } - else if (f[0] === "+") { s = +1; f = f.slice(1); } - sign.push(s); - return vg.accessor(f); - }); - return function(a,b) { - var i, n, f, x, y; - for (i=0, n=sort.length; i y) return sign[i]; - } - return 0; - }; -}; - -vg.cmp = function(a, b) { return ab ? 1 : 0; }; - -vg.numcmp = function(a, b) { return a - b; }; - -vg.array = function(x) { - return x != null ? (vg.isArray(x) ? x : [x]) : []; -}; - -vg.values = function(x) { - return (vg.isObject(x) && !vg.isArray(x) && x.values) ? x.values : x; -}; - -vg.str = function(x) { - return vg.isArray(x) ? "[" + x.map(vg.str) + "]" - : vg.isObject(x) ? JSON.stringify(x) - : vg.isString(x) ? ("'"+vg_escape_str(x)+"'") : x; -}; - -var escape_str_re = /(^|[^\\])'/g; - -function vg_escape_str(x) { - return x.replace(escape_str_re, "$1\\'"); -} - -vg.keys = function(x) { - var keys = []; - for (var key in x) keys.push(key); - return keys; -}; - -vg.unique = function(data, f, results) { - if (!vg.isArray(data) || data.length==0) return []; - f = f || vg.identity; - results = results || []; - for (var v, i=0, n=data.length; i max) { max = v; idx = i; } - } - return idx; -}; - -vg.truncate = function(s, length, pos, word, ellipsis) { - var len = s.length; - if (len <= length) return s; - ellipsis = ellipsis || "..."; - var l = Math.max(0, length - ellipsis.length); - - switch (pos) { - case "left": - return ellipsis + (word ? vg_truncateOnWord(s,l,1) : s.slice(len-l)); - case "middle": - case "center": - var l1 = Math.ceil(l/2), l2 = Math.floor(l/2); - return (word ? vg_truncateOnWord(s,l1) : s.slice(0,l1)) + ellipsis - + (word ? vg_truncateOnWord(s,l2,1) : s.slice(len-l2)); - default: - return (word ? vg_truncateOnWord(s,l) : s.slice(0,l)) + ellipsis; - } -} - -function vg_truncateOnWord(s, len, rev) { - var cnt = 0, tok = s.split(vg_truncate_word_re); - if (rev) { - s = (tok = tok.reverse()) - .filter(function(w) { cnt += w.length; return cnt <= len; }) - .reverse(); - } else { - s = tok.filter(function(w) { cnt += w.length; return cnt <= len; }); - } - return s.length ? s.join("").trim() : tok[0].slice(0, len); -} - -var vg_truncate_word_re = /([\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF])/; - -// Logging - -function vg_write(msg) { - vg.config.isNode - ? process.stderr.write(msg + "\n") - : console.log(msg); -} - -vg.log = function(msg) { - vg_write("[Vega Log] " + msg); -}; - -vg.error = function(msg) { - msg = "[Vega Err] " + msg; - vg_write(msg); - if (typeof alert !== "undefined") alert(msg); -};vg.config = {}; - -// are we running in node.js? -// via timetler.com/2012/10/13/environment-detection-in-javascript/ -vg.config.isNode = typeof exports !== 'undefined' && this.exports !== exports; - -// base url for loading external data files -// used only for server-side operation -vg.config.baseURL = ""; - -// version and namepsaces for exported svg -vg.config.svgNamespace = - 'version="1.1" xmlns="http://www.w3.org/2000/svg" ' + - 'xmlns:xlink="http://www.w3.org/1999/xlink"'; - -// inset padding for automatic padding calculation -vg.config.autopadInset = 5; - -// extensible scale lookup table -// all d3.scale.* instances also supported -vg.config.scale = { - time: d3.time.scale, - utc: d3.time.scale.utc -}; - -// default rendering settings -vg.config.render = { - lineWidth: 1, - lineCap: "butt", - font: "sans-serif", - fontSize: 11 -}; - -// default axis properties -vg.config.axis = { - orient: "bottom", - ticks: 10, - padding: 3, - axisColor: "#000", - gridColor: "#d8d8d8", - tickColor: "#000", - tickLabelColor: "#000", - axisWidth: 1, - tickWidth: 1, - tickSize: 6, - tickLabelFontSize: 11, - tickLabelFont: "sans-serif", - titleColor: "#000", - titleFont: "sans-serif", - titleFontSize: 11, - titleFontWeight: "bold", - titleOffset: 35 -}; - -// default legend properties -vg.config.legend = { - orient: "right", - offset: 10, - padding: 3, - gradientStrokeColor: "#888", - gradientStrokeWidth: 1, - gradientHeight: 16, - gradientWidth: 100, - labelColor: "#000", - labelFontSize: 10, - labelFont: "sans-serif", - labelAlign: "left", - labelBaseline: "middle", - labelOffset: 8, - symbolShape: "circle", - symbolSize: 50, - symbolColor: "#888", - symbolStrokeWidth: 1, - titleColor: "#000", - titleFont: "sans-serif", - titleFontSize: 11, - titleFontWeight: "bold" -}; - -// default color values -vg.config.color = { - rgb: [128, 128, 128], - lab: [50, 0, 0], - hcl: [0, 0, 50], - hsl: [0, 0, 0.5] -}; - -// default scale ranges -vg.config.range = { - category10: [ - "#1f77b4", - "#ff7f0e", - "#2ca02c", - "#d62728", - "#9467bd", - "#8c564b", - "#e377c2", - "#7f7f7f", - "#bcbd22", - "#17becf" - ], - category20: [ - "#1f77b4", - "#aec7e8", - "#ff7f0e", - "#ffbb78", - "#2ca02c", - "#98df8a", - "#d62728", - "#ff9896", - "#9467bd", - "#c5b0d5", - "#8c564b", - "#c49c94", - "#e377c2", - "#f7b6d2", - "#7f7f7f", - "#c7c7c7", - "#bcbd22", - "#dbdb8d", - "#17becf", - "#9edae5" - ], - shapes: [ - "circle", - "cross", - "diamond", - "square", - "triangle-down", - "triangle-up" - ] -};vg.Bounds = (function() { - var bounds = function(b) { - this.clear(); - if (b) this.union(b); - }; - - var prototype = bounds.prototype; - - prototype.clear = function() { - this.x1 = +Number.MAX_VALUE; - this.y1 = +Number.MAX_VALUE; - this.x2 = -Number.MAX_VALUE; - this.y2 = -Number.MAX_VALUE; - return this; - }; - - prototype.set = function(x1, y1, x2, y2) { - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - return this; - }; - - prototype.add = function(x, y) { - if (x < this.x1) this.x1 = x; - if (y < this.y1) this.y1 = y; - if (x > this.x2) this.x2 = x; - if (y > this.y2) this.y2 = y; - return this; - }; - - prototype.expand = function(d) { - this.x1 -= d; - this.y1 -= d; - this.x2 += d; - this.y2 += d; - return this; - }; - - prototype.round = function() { - this.x1 = Math.floor(this.x1); - this.y1 = Math.floor(this.y1); - this.x2 = Math.ceil(this.x2); - this.y2 = Math.ceil(this.y2); - return this; - }; - - prototype.translate = function(dx, dy) { - this.x1 += dx; - this.x2 += dx; - this.y1 += dy; - this.y2 += dy; - return this; - }; - - prototype.rotate = function(angle, x, y) { - var cos = Math.cos(angle), - sin = Math.sin(angle), - cx = x - x*cos + y*sin, - cy = y - x*sin - y*cos, - x1 = this.x1, x2 = this.x2, - y1 = this.y1, y2 = this.y2; - - return this.clear() - .add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy) - .add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy) - .add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy) - .add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy); - } - - prototype.union = function(b) { - if (b.x1 < this.x1) this.x1 = b.x1; - if (b.y1 < this.y1) this.y1 = b.y1; - if (b.x2 > this.x2) this.x2 = b.x2; - if (b.y2 > this.y2) this.y2 = b.y2; - return this; - }; - - prototype.encloses = function(b) { - return b && ( - this.x1 <= b.x1 && - this.x2 >= b.x2 && - this.y1 <= b.y1 && - this.y2 >= b.y2 - ); - }; - - prototype.intersects = function(b) { - return b && !( - this.x2 < b.x1 || - this.x1 > b.x2 || - this.y2 < b.y1 || - this.y1 > b.y2 - ); - }; - - prototype.contains = function(x, y) { - return !( - x < this.x1 || - x > this.x2 || - y < this.y1 || - y > this.y2 - ); - }; - - prototype.width = function() { - return this.x2 - this.x1; - }; - - prototype.height = function() { - return this.y2 - this.y1; - }; - - return bounds; -})();vg.Gradient = (function() { - - function gradient(type) { - this.id = "grad_" + (vg_gradient_id++); - this.type = type || "linear"; - this.stops = []; - this.x1 = 0; - this.x2 = 1; - this.y1 = 0; - this.y2 = 0; - }; - - var prototype = gradient.prototype; - - prototype.stop = function(offset, color) { - this.stops.push({ - offset: offset, - color: color - }); - return this; - }; - - return gradient; -})(); - -var vg_gradient_id = 0;vg.canvas = {};vg.canvas.path = (function() { - - // Path parsing and rendering code taken from fabric.js -- Thanks! - var cmdLength = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 }, - re = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)-/g, /\s|,|###/]; - - function parse(path) { - var result = [], - currentPath, - chunks, - parsed; - - // First, break path into command sequence - path = path.slice().replace(re[0], '###$1').split(re[1]).slice(1); - - // Next, parse each command in turn - for (var i=0, j, chunksParsed, len=path.length; i commandLength) { - for (var k = 1, klen = chunksParsed.length; k < klen; k += commandLength) { - result.push([ chunksParsed[0] ].concat(chunksParsed.slice(k, k + commandLength))); - } - } - else { - result.push(chunksParsed); - } - } - - return result; - } - - function drawArc(g, x, y, coords, bounds, l, t) { - var rx = coords[0]; - var ry = coords[1]; - var rot = coords[2]; - var large = coords[3]; - var sweep = coords[4]; - var ex = coords[5]; - var ey = coords[6]; - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i=0; i 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - - var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0); - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; - var sfactor = Math.sqrt(sfactor_sq); - if (sweep == large) sfactor = -sfactor; - var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0); - - var th0 = Math.atan2(y0-yc, x0-xc); - var th1 = Math.atan2(y1-yc, x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep == 1){ - th_arc += 2*Math.PI; - } else if (th_arc > 0 && sweep == 0) { - th_arc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - for (var i=0; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.stroke(); - } - } - } - - function drawPathAll(path, g, scene, bounds) { - var i, len, item; - for (i=0, len=scene.items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.strokeRect(x, y, w, h); - } - } - } - } - - function drawRule(g, scene, bounds) { - if (!scene.items.length) return; - var items = scene.items, - o, stroke, opac, lc, lw, x1, y1, x2, y2; - - for (var i=0, len=items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(g, o, stroke); - g.lineWidth = lw; - g.lineCap = (lc = o.strokeCap) != null ? lc : vg.config.render.lineCap; - g.vgLineDash(o.strokeDash || null); - g.vgLineDashOffset(o.strokeDashOffset || 0); - g.beginPath(); - g.moveTo(x1, y1); - g.lineTo(x2, y2); - g.stroke(); - } - } - } - } - - function drawImage(g, scene, bounds) { - if (!scene.items.length) return; - var renderer = this, - items = scene.items, o; - - for (var i=0, len=items.length; i 0) { - g.globalAlpha = opac * (o.strokeOpacity==null ? 1 : o.strokeOpacity); - g.strokeStyle = color(o, stroke); - g.lineWidth = lw; - g.strokeText(o.text, x, y); - } - } - - if (o.angle) g.restore(); - } - } - - function drawAll(pathFunc) { - return function(g, scene, bounds) { - drawPathAll(pathFunc, g, scene, bounds); - } - } - - function drawOne(pathFunc) { - return function(g, scene, bounds) { - if (!scene.items.length) return; - if (bounds && !bounds.intersects(scene.items[0].bounds)) - return; // bounds check - drawPathOne(pathFunc, g, scene.items[0], scene.items); - } - } - - function drawGroup(g, scene, bounds) { - if (!scene.items.length) return; - var items = scene.items, group, axes, legends, - renderer = this, gx, gy, gb, i, n, j, m; - - drawRect(g, scene, bounds); - - for (i=0, n=items.length; i=0;) { - group = items[i]; - dx = group.x || 0; - dy = group.y || 0; - - g.save(); - g.translate(dx, dy); - for (j=group.items.length; --j >= 0;) { - subscene = group.items[j]; - if (subscene.interactive === false) continue; - hit = handler.pick(subscene, x, y, gx-dx, gy-dy); - if (hit) { - g.restore(); - return hit; - } - } - g.restore(); - } - - return scene.interactive - ? pickAll(hitTests.rect, g, scene, x, y, gx, gy) - : false; - } - - function pickAll(test, g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var o, b, i; - - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - - for (i=scene.items.length; --i >= 0;) { - o = scene.items[i]; b = o.bounds; - // first hit test against bounding box - if ((b && !b.contains(gx, gy)) || !b) continue; - // if in bounding box, perform more careful test - if (test(g, o, x, y, gx, gy)) return o; - } - return false; - } - - function pickArea(g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var items = scene.items, - o, b, i, di, dd, od, dx, dy; - - b = items[0].bounds; - if (b && !b.contains(gx, gy)) return false; - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - if (!hitTests.area(g, items, x, y)) return false; - return items[0]; - } - - function pickLine(g, scene, x, y, gx, gy) { - if (!scene.items.length) return false; - var items = scene.items, - o, b, i, di, dd, od, dx, dy; - - b = items[0].bounds; - if (b && !b.contains(gx, gy)) return false; - if (g._ratio !== 1) { - x *= g._ratio; - y *= g._ratio; - } - if (!hitTests.line(g, items, x, y)) return false; - return items[0]; - } - - function pick(test) { - return function (g, scene, x, y, gx, gy) { - return pickAll(test, g, scene, x, y, gx, gy); - }; - } - - function textHit(g, o, x, y, gx, gy) { - if (!o.fontSize) return false; - if (!o.angle) return true; // bounds sufficient if no rotation - - var b = vg.scene.bounds.text(o, tmpBounds, true), - a = -o.angle * Math.PI / 180, - cos = Math.cos(a), - sin = Math.sin(a), - x = o.x, - y = o.y, - px = cos*gx - sin*gy + (x - x*cos + y*sin), - py = sin*gx + cos*gy + (y - x*sin - y*cos); - - return b.contains(px, py); - } - - var hitTests = { - text: textHit, - rect: function(g,o,x,y) { return true; }, // bounds test is sufficient - image: function(g,o,x,y) { return true; }, // bounds test is sufficient - rule: function(g,o,x,y) { - if (!g.isPointInStroke) return false; - ruleStroke(g,o); return g.isPointInStroke(x,y); - }, - line: function(g,s,x,y) { - if (!g.isPointInStroke) return false; - lineStroke(g,s); return g.isPointInStroke(x,y); - }, - arc: function(g,o,x,y) { arcPath(g,o); return g.isPointInPath(x,y); }, - area: function(g,s,x,y) { areaPath(g,s); return g.isPointInPath(x,y); }, - path: function(g,o,x,y) { pathPath(g,o); return g.isPointInPath(x,y); }, - symbol: function(g,o,x,y) { symbolPath(g,o); return g.isPointInPath(x,y); } - }; - - return { - draw: { - group: drawGroup, - area: drawOne(areaPath), - line: drawOne(linePath), - arc: drawAll(arcPath), - path: drawAll(pathPath), - symbol: drawAll(symbolPath), - rect: drawRect, - rule: drawRule, - text: drawText, - image: drawImage, - drawOne: drawOne, // expose for extensibility - drawAll: drawAll // expose for extensibility - }, - pick: { - group: pickGroup, - area: pickArea, - line: pickLine, - arc: pick(hitTests.arc), - path: pick(hitTests.path), - symbol: pick(hitTests.symbol), - rect: pick(hitTests.rect), - rule: pick(hitTests.rule), - text: pick(hitTests.text), - image: pick(hitTests.image), - pickAll: pickAll // expose for extensibility - } - }; - -})();vg.canvas.Renderer = (function() { - var renderer = function() { - this._ctx = null; - this._el = null; - this._imgload = 0; - }; - - var prototype = renderer.prototype; - - prototype.initialize = function(el, width, height, pad) { - this._el = el; - - if (!el) return this; // early exit if no DOM element - - // select canvas element - var canvas = d3.select(el) - .selectAll("canvas.marks") - .data([1]); - - // create new canvas element if needed - canvas.enter() - .append("canvas") - .attr("class", "marks"); - - // remove extraneous canvas if needed - canvas.exit().remove(); - - return this.resize(width, height, pad); - }; - - prototype.resize = function(width, height, pad) { - this._width = width; - this._height = height; - this._padding = pad; - - if (this._el) { - var canvas = d3.select(this._el).select("canvas.marks"); - - // initialize canvas attributes - canvas - .attr("width", width + pad.left + pad.right) - .attr("height", height + pad.top + pad.bottom); - - // get the canvas graphics context - var s; - this._ctx = canvas.node().getContext("2d"); - this._ctx._ratio = (s = scaleCanvas(canvas.node(), this._ctx) || 1); - this._ctx.setTransform(s, 0, 0, s, s*pad.left, s*pad.top); - } - - initializeLineDash(this._ctx); - return this; - }; - - function scaleCanvas(canvas, ctx) { - // get canvas pixel data - var devicePixelRatio = window.devicePixelRatio || 1, - backingStoreRatio = ( - ctx.webkitBackingStorePixelRatio || - ctx.mozBackingStorePixelRatio || - ctx.msBackingStorePixelRatio || - ctx.oBackingStorePixelRatio || - ctx.backingStorePixelRatio) || 1, - ratio = devicePixelRatio / backingStoreRatio; - - if (devicePixelRatio !== backingStoreRatio) { - var w = canvas.width, h = canvas.height; - // set actual and visible canvas size - canvas.setAttribute("width", w * ratio); - canvas.setAttribute("height", h * ratio); - canvas.style.width = w + 'px'; - canvas.style.height = h + 'px'; - } - return ratio; - } - - function initializeLineDash(ctx) { - if (ctx.vgLineDash) return; // already set - - var NODASH = []; - if (ctx.setLineDash) { - ctx.vgLineDash = function(dash) { this.setLineDash(dash || NODASH); }; - ctx.vgLineDashOffset = function(off) { this.lineDashOffset = off; }; - } else if (ctx.webkitLineDash !== undefined) { - ctx.vgLineDash = function(dash) { this.webkitLineDash = dash || NODASH; }; - ctx.vgLineDashOffset = function(off) { this.webkitLineDashOffset = off; }; - } else if (ctx.mozDash !== undefined) { - ctx.vgLineDash = function(dash) { this.mozDash = dash; }; - ctx.vgLineDashOffset = function(off) { /* unsupported */ }; - } else { - ctx.vgLineDash = function(dash) { /* unsupported */ }; - ctx.vgLineDashOffset = function(off) { /* unsupported */ }; - } - } - - prototype.context = function(ctx) { - if (ctx) { this._ctx = ctx; return this; } - else return this._ctx; - }; - - prototype.element = function() { - return this._el; - }; - - prototype.pendingImages = function() { - return this._imgload; - }; - - function translatedBounds(item, bounds) { - var b = new vg.Bounds(bounds); - while ((item = item.mark.group) != null) { - b.translate(item.x || 0, item.y || 0); - } - return b; - } - - function getBounds(items) { - return !items ? null : - vg.array(items).reduce(function(b, item) { - return b.union(translatedBounds(item, item.bounds)) - .union(translatedBounds(item, item['bounds:prev'])); - }, new vg.Bounds()); - } - - function setBounds(g, bounds) { - var bbox = null; - if (bounds) { - bbox = (new vg.Bounds(bounds)).round(); - g.beginPath(); - g.rect(bbox.x1, bbox.y1, bbox.width(), bbox.height()); - g.clip(); - } - return bbox; - } - - prototype.render = function(scene, items) { - var g = this._ctx, - pad = this._padding, - w = this._width + pad.left + pad.right, - h = this._height + pad.top + pad.bottom, - bb = null, bb2; - - // setup - this._scene = scene; - g.save(); - bb = setBounds(g, getBounds(items)); - g.clearRect(-pad.left, -pad.top, w, h); - - // render - this.draw(g, scene, bb); - - // render again to handle possible bounds change - if (items) { - g.restore(); - g.save(); - bb2 = setBounds(g, getBounds(items)); - if (!bb.encloses(bb2)) { - g.clearRect(-pad.left, -pad.top, w, h); - this.draw(g, scene, bb2); - } - } - - // takedown - g.restore(); - this._scene = null; - }; - - prototype.draw = function(ctx, scene, bounds) { - var marktype = scene.marktype, - renderer = vg.canvas.marks.draw[marktype]; - renderer.call(this, ctx, scene, bounds); - - // compute mark-level bounds - scene.bounds = scene.items.reduce(function(b, item) { - return item.bounds ? b.union(item.bounds) : b; - }, scene.bounds || new vg.Bounds()); - }; - - prototype.renderAsync = function(scene) { - // TODO make safe for multiple scene rendering? - var renderer = this; - if (renderer._async_id) { - clearTimeout(renderer._async_id); - } - renderer._async_id = setTimeout(function() { - renderer.render(scene); - delete renderer._async_id; - }, 50); - }; - - prototype.loadImage = function(uri) { - var renderer = this, - scene = renderer._scene, - image = null, url; - - renderer._imgload += 1; - if (vg.config.isNode) { - image = new (require("canvas").Image)(); - vg.data.load(uri, function(err, data) { - if (err) { vg.error(err); return; } - image.src = data; - image.loaded = true; - renderer._imgload -= 1; - }); - } else { - image = new Image(); - url = vg.config.baseURL + uri; - image.onload = function() { - vg.log("LOAD IMAGE: "+url); - image.loaded = true; - renderer._imgload -= 1; - renderer.renderAsync(scene); - }; - image.src = url; - } - - return image; - }; - - return renderer; -})();vg.canvas.Handler = (function() { - var handler = function(el, model) { - this._active = null; - this._handlers = {}; - if (el) this.initialize(el); - if (model) this.model(model); - }; - - var prototype = handler.prototype; - - prototype.initialize = function(el, pad, obj) { - this._el = d3.select(el).node(); - this._canvas = d3.select(el).select("canvas.marks").node(); - this._padding = pad; - this._obj = obj || null; - - // add event listeners - var canvas = this._canvas, that = this; - events.forEach(function(type) { - canvas.addEventListener(type, function(evt) { - prototype[type].call(that, evt); - }); - }); - - return this; - }; - - prototype.padding = function(pad) { - this._padding = pad; - return this; - }; - - prototype.model = function(model) { - if (!arguments.length) return this._model; - this._model = model; - return this; - }; - - prototype.handlers = function() { - var h = this._handlers; - return vg.keys(h).reduce(function(a, k) { - return h[k].reduce(function(a, x) { return (a.push(x), a); }, a); - }, []); - }; - - // setup events - var events = [ - "mousedown", - "mouseup", - "click", - "dblclick", - "wheel", - "keydown", - "keypress", - "keyup", - "mousewheel" - ]; - events.forEach(function(type) { - prototype[type] = function(evt) { - this.fire(type, evt); - }; - }); - events.push("mousemove"); - events.push("mouseout"); - - function eventName(name) { - var i = name.indexOf("."); - return i < 0 ? name : name.slice(0,i); - } - - prototype.mousemove = function(evt) { - var pad = this._padding, - b = evt.target.getBoundingClientRect(), - x = evt.clientX - b.left, - y = evt.clientY - b.top, - a = this._active, - p = this.pick(this._model.scene(), x, y, x-pad.left, y-pad.top); - - if (p === a) { - this.fire("mousemove", evt); - return; - } else if (a) { - this.fire("mouseout", evt); - } - this._active = p; - if (p) { - this.fire("mouseover", evt); - } - }; - - prototype.mouseout = function(evt) { - if (this._active) { - this.fire("mouseout", evt); - } - this._active = null; - }; - - // to keep firefox happy - prototype.DOMMouseScroll = function(evt) { - this.fire("mousewheel", evt); - }; - - // fire an event - prototype.fire = function(type, evt) { - var a = this._active, - h = this._handlers[type]; - if (a && h) { - for (var i=0, len=h.length; i=0;) { - if (h[i].type !== type) continue; - if (!handler || h[i].handler === handler) h.splice(i, 1); - } - return this; - }; - - // retrieve the current canvas context - prototype.context = function() { - return this._canvas.getContext("2d"); - }; - - // find the scenegraph item at the current mouse position - // returns an array of scenegraph items, from leaf node up to the root - // x, y -- the absolute x, y mouse coordinates on the canvas element - // gx, gy -- the relative coordinates within the current group - prototype.pick = function(scene, x, y, gx, gy) { - var g = this.context(), - marktype = scene.marktype, - picker = vg.canvas.marks.pick[marktype]; - return picker.call(this, g, scene, x, y, gx, gy); - }; - - return handler; -})();vg.svg = {};vg.svg.marks = (function() { - - function x(o) { return o.x || 0; } - function y(o) { return o.y || 0; } - function yh(o) { return o.y + o.height || 0; } - function key(o) { return o.key; } - function size(o) { return o.size==null ? 100 : o.size; } - function shape(o) { return o.shape || "circle"; } - - var arc_path = d3.svg.arc(), - area_path = d3.svg.area().x(x).y1(y).y0(yh), - line_path = d3.svg.line().x(x).y(y), - symbol_path = d3.svg.symbol().type(shape).size(size); - - var mark_id = 0; - - var textAlign = { - "left": "start", - "center": "middle", - "right": "end" - }; - - var styles = { - "fill": "fill", - "fillOpacity": "fill-opacity", - "stroke": "stroke", - "strokeWidth": "stroke-width", - "strokeOpacity": "stroke-opacity", - "strokeCap": "stroke-linecap", - "strokeDash": "stroke-dasharray", - "strokeDashOffset": "stroke-dashoffset", - "opacity": "opacity" - }; - var styleProps = vg.keys(styles); - - function style(d) { - var i, n, prop, name, value, - o = d.mark ? d : d.length ? d[0] : null; - if (o === null) return; - - for (i=0, n=styleProps.length; i " + tag, - m = p.selectAll(s).data(data), - e = m.enter().append(tag); - - if (notG) { - p.style("pointer-events", evts); - e.each(function(d) { - if (d.mark) d._svg = this; - else if (d.length) d[0]._svg = this; - }); - } else { - e.append("rect").attr("class","background").style("pointer-events",evts); - } - - m.exit().remove(); - m.each(attr); - if (notG) m.each(style); - else p.selectAll(s+" > rect.background").each(group_bg).each(style); - - return p; - } - - function drawGroup(g, scene, index, prefix) { - var p = drawMark(g, scene, index, prefix || "group_", "g", group), - c = p.node().childNodes, n = c.length, i, j, m; - - for (i=0; i=0;) { - if (h[i].type !== type) continue; - if (!handler || h[i].handler === handler) { - dom.removeEventListener(name, h[i].svg); - h.splice(i, 1); - } - } - return this; - }; - - return handler; -})();vg.data = {}; - -vg.data.ingestAll = function(data) { - return vg.isTree(data) - ? vg_make_tree(vg.data.ingestTree(data[0], data.children)) - : data.map(vg.data.ingest); -}; - -vg.data.ingest = function(datum, index) { - return { - data: datum, - index: index - }; -}; - -vg.data.ingestTree = function(node, children) { - var d = vg.data.ingest(node), - c = node[children], n, i; - if (c && (n = c.length)) { - d.values = Array(n); - for (i=0; i= 0) file = file.slice(vg_load_fileProtocol.length); - require("fs").readFile(file, callback); -} - -function vg_load_http(url, callback) { - vg.log("LOAD HTTP: " + url); - var req = require("http").request(url, function(res) { - var pos=0, data = new Buffer(parseInt(res.headers['content-length'],10)); - res.on("error", function(err) { callback(err, null); }); - res.on("data", function(x) { x.copy(data, pos); pos += x.length; }); - res.on("end", function() { callback(null, data); }); - }); - req.on("error", function(err) { callback(err); }); - req.end(); -}vg.data.read = (function() { - var formats = {}, - parsers = { - "number": vg.number, - "boolean": vg.boolean, - "date": Date.parse - }; - - function read(data, format) { - var type = (format && format.type) || "json"; - data = formats[type](data, format); - if (format && format.parse) parseValues(data, format.parse); - return data; - } - - formats.json = function(data, format) { - var d = JSON.parse(data); - if (format && format.property) { - d = vg.accessor(format.property)(d); - } - return d; - }; - - formats.csv = function(data, format) { - var d = d3.csv.parse(data); - return d; - }; - - formats.tsv = function(data, format) { - var d = d3.tsv.parse(data); - return d; - }; - - formats.topojson = function(data, format) { - if (topojson == null) { - vg.error("TopoJSON library not loaded."); - return []; - } - var t = JSON.parse(data), obj = []; - - if (format && format.feature) { - obj = (obj = t.objects[format.feature]) - ? topojson.feature(t, obj).features - : (vg.error("Invalid TopoJSON object: "+format.feature), []); - } else if (format && format.mesh) { - obj = (obj = t.objects[format.mesh]) - ? [topojson.mesh(t, t.objects[format.mesh])] - : (vg.error("Invalid TopoJSON object: " + format.mesh), []); - } - else { vg.error("Missing TopoJSON feature or mesh parameter."); } - - return obj; - }; - - formats.treejson = function(data, format) { - var d = [JSON.parse(data)]; - d.__vgtree__ = true; - d.children = format.children || "children"; - return d; - }; - - function parseValues(data, types) { - var cols = vg.keys(types), - p = cols.map(function(col) { return parsers[types[col]]; }), - tree = vg.isTree(data); - vg_parseArray(tree ? [data] : data, cols, p, tree); - } - - function vg_parseArray(data, cols, p, tree) { - var d, i, j, len, clen; - for (i=0, len=data.length; i0 ? "|" : "") + String(kv); - } - obj = map[kstr]; - if (obj === undefined) { - vals.push(obj = map[kstr] = { - key: kstr, - keys: klist, - index: vals.length, - values: [] - }); - } - obj.values.push(data[i]); - } - - if (sort) { - for (i=0, len=vals.length; i b ? 1 : 0; - }); - data = [data[~~(list.length/2)]]; - } else { - var idx = vg.array(by); - data = data.slice(idx[0], idx[1]); - } - return data; - } - - slice.by = function(x) { - by = x; - return slice; - }; - - slice.field = function(f) { - field = vg.accessor(f); - return slice; - }; - - return slice; -};vg.data.sort = function() { - var by = null; - - function sort(data) { - data = (vg.isArray(data) ? data : data.values || []); - data.sort(by); - for (var i=0, n=data.length; ib.x ? 1 : (a.zb.z ? 1 : 0); - }); - - // emit data series for stack layout - for (x=points[0].x, i=0, j=0, k=0, n=points.length; k i) series[i++].push({x:j, y:0}); - p.x = j; - series[i++].push(p); - } - while (i < series.length) series[i++].push({x:j, y:0}); - - return series; - } - - stack.point = function(field) { - point = vg.accessor(field); - return stack; - }; - - stack.height = function(field) { - height = vg.accessor(field); - return stack; - }; - - params.forEach(function(name) { - stack[name] = function(x) { - layout[name](x); - return stack; - } - }); - - stack.output = function(map) { - d3.keys(output).forEach(function(k) { - if (map[k] !== undefined) { - output[k] = map[k]; - } - }); - return stack; - }; - - return stack; -};vg.data.stats = function() { - var value = vg.accessor("data"), - assign = false, - median = false, - output = { - "count": "count", - "min": "min", - "max": "max", - "sum": "sum", - "mean": "mean", - "variance": "variance", - "stdev": "stdev", - "median": "median" - }; - - function reduce(data) { - var min = +Infinity, - max = -Infinity, - sum = 0, - mean = 0, - M2 = 0, - i, len, v, delta; - - var list = (vg.isArray(data) ? data : data.values || []).map(value); - - // compute aggregates - for (i=0, len=list.length; i max) max = v; - sum += v; - delta = v - mean; - mean = mean + delta / (i+1); - M2 = M2 + delta * (v - mean); - } - M2 = M2 / (len - 1); - - var o = vg.isArray(data) ? {} : data; - if (median) { - list.sort(vg.numcmp); - i = list.length >> 1; - o[output.median] = list.length % 2 - ? list[i] - : (list[i-1] + list[i])/2; - } - o[output.count] = len; - o[output.min] = min; - o[output.max] = max; - o[output.sum] = sum; - o[output.mean] = mean; - o[output.variance] = M2; - o[output.stdev] = Math.sqrt(M2); - - if (assign) { - list = (vg.isArray(data) ? data : data.values); - v = {}; - v[output.count] = len; - v[output.min] = min; - v[output.max] = max; - v[output.sum] = sum; - v[output.mean] = mean; - v[output.variance] = M2; - v[output.stdev] = Math.sqrt(M2); - if (median) v[output.median] = o[output.median]; - for (i=0, len=list.length; i\~\&\|\?\:\+\-\/\*\%\!\^\,\;\[\]\{\}\(\) ]+)/; - - return function(x) { - var tokens = x.split(lexer), - t, v, i, n, sq, dq; - - for (sq=0, dq=0, i=0, n=tokens.length; i 0) ? "\n " : " "; - code += "o."+name+" = "+valueRef(name, ref)+";"; - vars[name] = true; - } - - if (vars.x2) { - if (vars.x) { - code += "\n if (o.x > o.x2) { " - + "var t = o.x; o.x = o.x2; o.x2 = t; };"; - code += "\n o.width = (o.x2 - o.x);"; - } else if (vars.width && !vars.x1) { - code += "\n o.x = (o.x2 - o.width);"; - } - } - - if (vars.y2) { - if (vars.y) { - code += "\n if (o.y > o.y2) { " - + "var t = o.y; o.y = o.y2; o.y2 = t; };"; - code += "\n o.height = (o.y2 - o.y);"; - } else if (vars.height && !vars.y1) { - code += "\n o.y = (o.y2 - o.height);"; - } - } - - if (hasPath(mark, vars)) { - code += "\n if (o['path:parsed']) o['path:parsed'] = null;" - } - code += "\n if (trans) trans.interpolate(item, o);"; - - try { - return Function("item", "group", "trans", code); - } catch (e) { - vg.error(e); - vg.log(code); - } - } - - function hasPath(mark, vars) { - return vars.path || - ((mark==="area" || mark==="line") && - (vars.x || vars.x2 || vars.width || - vars.y || vars.y2 || vars.height || - vars.tension || vars.interpolate)); - } - - var GROUP_VARS = { - "width": 1, - "height": 1, - "mark.group.width": 1, - "mark.group.height": 1 - }; - - function valueRef(name, ref) { - if (ref == null) return null; - var isColor = name==="fill" || name==="stroke"; - - if (isColor) { - if (ref.c) { - return colorRef("hcl", ref.h, ref.c, ref.l); - } else if (ref.h || ref.s) { - return colorRef("hsl", ref.h, ref.s, ref.l); - } else if (ref.l || ref.a) { - return colorRef("lab", ref.l, ref.a, ref.b); - } else if (ref.r || ref.g || ref.b) { - return colorRef("rgb", ref.r, ref.g, ref.b); - } - } - - // initialize value - var val = "item.datum.data"; - if (ref.value !== undefined) { - val = vg.str(ref.value); - } - - // get field reference for enclosing group - if (ref.group != null) { - var grp = ""; - if (vg.isString(ref.group)) { - grp = GROUP_VARS[ref.group] - ? "group." + ref.group - : "group.datum["+vg.field(ref.group).map(vg.str).join("][")+"]"; - } - } - - // get data field value - if (ref.field != null) { - if (vg.isString(ref.field)) { - val = "item.datum["+vg.field(ref.field).map(vg.str).join("][")+"]"; - if (ref.group != null) { val = grp+"["+val+"]"; } - } else { - val = "this.accessor(group.datum[" - + vg.field(ref.field.group).map(vg.str).join("][") - + "])(item.datum.data)"; - } - } else if (ref.group != null) { - val = grp; - } - - // run through scale function - if (ref.scale != null) { - var scale = vg.isString(ref.scale) - ? vg.str(ref.scale) - : (ref.scale.group ? "group" : "item") - + ".datum[" + vg.str(ref.scale.group || ref.scale.field) + "]"; - scale = "group.scales[" + scale + "]"; - val = scale + (ref.band ? ".rangeBand()" : "("+val+")"); - } - - // multiply, offset, return value - val = "(" + (ref.mult?(vg.number(ref.mult)+" * "):"") + val + ")" - + (ref.offset ? " + " + vg.number(ref.offset) : ""); - if (isColor) val = '('+val+')+""'; - return val; - } - - function colorRef(type, x, y, z) { - var xx = x ? valueRef("", x) : vg.config.color[type][0], - yy = y ? valueRef("", y) : vg.config.color[type][1], - zz = z ? valueRef("", z) : vg.config.color[type][2]; - return "(this.d3." + type + "(" + [xx,yy,zz].join(",") + ') + "")'; - } - - return compile; -})();vg.parse.scales = (function() { - var LINEAR = "linear", - ORDINAL = "ordinal", - LOG = "log", - POWER = "pow", - TIME = "time", - GROUP_PROPERTY = {width: 1, height: 1}; - - function scales(spec, scales, db, group) { - return (spec || []).reduce(function(o, def) { - var name = def.name, prev = name + ":prev"; - o[name] = scale(def, o[name], db, group); - o[prev] = o[prev] || o[name]; - return o; - }, scales || {}); - } - - function scale(def, scale, db, group) { - var s = instance(def, scale), - m = s.type===ORDINAL ? ordinal : quantitative, - rng = range(def, group), - data = vg.values(group.datum); - - m(def, s, rng, db, data); - return s; - } - - function instance(def, scale) { - var type = def.type || LINEAR; - if (!scale || type !== scale.type) { - var ctor = vg.config.scale[type] || d3.scale[type]; - if (!ctor) vg.error("Unrecognized scale type: " + type); - (scale = ctor()).type = scale.type || type; - scale.scaleName = def.name; - } - return scale; - } - - function ordinal(def, scale, rng, db, data) { - var domain, refs, values, str; - - // domain - domain = def.domain; - if (vg.isArray(domain)) { - scale.domain(domain); - } else if (vg.isObject(domain)) { - refs = def.domain.fields || vg.array(def.domain); - values = refs.reduce(function(values, r) { - var dat = vg.values(db[r.data] || data), - get = vg.accessor(vg.isString(r.field) - ? r.field : "data." + vg.accessor(r.field.group)(data)); - return vg.unique(dat, get, values); - }, []); - if (def.sort) values.sort(vg.cmp); - scale.domain(values); - } - - // range - str = typeof rng[0] === 'string'; - if (str || rng.length > 2) { - scale.range(rng); // color or shape values - } else if (def.points) { - scale.rangePoints(rng, def.padding||0); - } else if (def.round || def.round===undefined) { - scale.rangeRoundBands(rng, def.padding||0); - } else { - scale.rangeBands(rng, def.padding||0); - } - } - - function quantitative(def, scale, rng, db, data) { - var domain, refs, interval, z; - - // domain - domain = [null, null]; - function extract(ref, min, max, z) { - var dat = vg.values(db[ref.data] || data); - var fields = vg.array(ref.field).map(function(f) { - return vg.isString(f) ? f - : "data." + vg.accessor(f.group)(data); - }); - - fields.forEach(function(f,i) { - f = vg.accessor(f); - if (min) domain[0] = d3.min([domain[0], d3.min(dat, f)]); - if (max) domain[z] = d3.max([domain[z], d3.max(dat, f)]); - }); - } - if (def.domain !== undefined) { - if (vg.isArray(def.domain)) { - domain = def.domain.slice(); - } else if (vg.isObject(def.domain)) { - refs = def.domain.fields || vg.array(def.domain); - refs.forEach(function(r) { extract(r,1,1,1); }); - } else { - domain = def.domain; - } - } - z = domain.length - 1; - if (def.domainMin !== undefined) { - if (vg.isObject(def.domainMin)) { - domain[0] = null; - refs = def.domainMin.fields || vg.array(def.domainMin); - refs.forEach(function(r) { extract(r,1,0,z); }); - } else { - domain[0] = def.domainMin; - } - } - if (def.domainMax !== undefined) { - if (vg.isObject(def.domainMax)) { - domain[z] = null; - refs = def.domainMax.fields || vg.array(def.domainMax); - refs.forEach(function(r) { extract(r,0,1,z); }); - } else { - domain[z] = def.domainMax; - } - } - if (def.type !== LOG && def.type !== TIME && (def.zero || def.zero===undefined)) { - domain[0] = Math.min(0, domain[0]); - domain[z] = Math.max(0, domain[z]); - } - scale.domain(domain); - - // range - // vertical scales should flip by default, so use XOR here - if (def.range === "height") rng = rng.reverse(); - scale[def.round && scale.rangeRound ? "rangeRound" : "range"](rng); - - if (def.exponent && def.type===POWER) scale.exponent(def.exponent); - if (def.clamp) scale.clamp(true); - if (def.nice) { - if (def.type === TIME) { - interval = d3.time[def.nice]; - if (!interval) vg.error("Unrecognized interval: " + interval); - scale.nice(interval); - } else { - scale.nice(); - } - } - } - - function range(def, group) { - var rng = [null, null]; - - if (def.range !== undefined) { - if (typeof def.range === 'string') { - if (GROUP_PROPERTY[def.range]) { - rng = [0, group[def.range]]; - } else if (vg.config.range[def.range]) { - rng = vg.config.range[def.range]; - } else { - vg.error("Unrecogized range: "+def.range); - return rng; - } - } else if (vg.isArray(def.range)) { - rng = def.range; - } else { - rng = [0, def.range]; - } - } - if (def.rangeMin !== undefined) { - rng[0] = def.rangeMin; - } - if (def.rangeMax !== undefined) { - rng[rng.length-1] = def.rangeMax; - } - - if (def.reverse !== undefined) { - var rev = def.reverse; - if (vg.isObject(rev)) { - rev = vg.accessor(rev.field)(group.datum); - } - if (rev) rng = rng.reverse(); - } - - return rng; - } - - return scales; -})(); -vg.parse.spec = function(spec, callback, viewFactory) { - - viewFactory = viewFactory || vg.ViewFactory; - - function parse(spec) { - // protect against subsequent spec modification - spec = vg.duplicate(spec); - - var width = spec.width || 500, - height = spec.height || 500, - viewport = spec.viewport || null; - - var defs = { - width: width, - height: height, - viewport: viewport, - padding: vg.parse.padding(spec.padding), - marks: vg.parse.marks(spec, width, height), - data: vg.parse.data(spec.data, function() { callback(viewConstructor); }) - }; - - var viewConstructor = viewFactory(defs); - } - - vg.isObject(spec) ? parse(spec) : - d3.json(spec, function(error, json) { - error ? vg.error(error) : parse(json); - }); -};vg.parse.transform = function(def) { - var tx = vg.data[def.type](); - - vg.keys(def).forEach(function(k) { - if (k === 'type') return; - (tx[k])(def[k]); - }); - - return tx; -};vg.scene = {}; - -vg.scene.GROUP = "group", -vg.scene.ENTER = 0, -vg.scene.UPDATE = 1, -vg.scene.EXIT = 2; - -vg.scene.DEFAULT_DATA = {"sentinel":1} - -vg.scene.data = function(data, parentData) { - var DEFAULT = vg.scene.DEFAULT_DATA; - - // if data is undefined, inherit or use default - data = vg.values(data || parentData || [DEFAULT]); - - // if inheriting default data, ensure its in an array - if (data === DEFAULT) data = [DEFAULT]; - - return data; -}; - -vg.scene.fontString = function(o) { - return (o.fontStyle ? o.fontStyle + " " : "") - + (o.fontVariant ? o.fontVariant + " " : "") - + (o.fontWeight ? o.fontWeight + " " : "") - + (o.fontSize != null ? o.fontSize : vg.config.render.fontSize) + "px " - + (o.font || vg.config.render.font); -};vg.scene.Item = (function() { - function item(mark) { - this.mark = mark; - } - - var prototype = item.prototype; - - prototype.hasPropertySet = function(name) { - var props = this.mark.def.properties; - return props && props[name] != null; - }; - - prototype.cousin = function(offset, index) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - group = mark.group, - iidx = index==null ? mark.items.indexOf(this) : index, - midx = group.items.indexOf(mark) + offset; - return group.items[midx].items[iidx]; - }; - - prototype.sibling = function(offset) { - if (offset === 0) return this; - offset = offset || -1; - var mark = this.mark, - iidx = mark.items.indexOf(this) + offset; - return mark.items[iidx]; - }; - - prototype.remove = function() { - var item = this, - list = item.mark.items, - i = list.indexOf(item); - if (i >= 0) (i===list.length-1) ? list.pop() : list.splice(i, 1); - return item; - }; - - return item; -})(); - -vg.scene.item = function(mark) { - return new vg.scene.Item(mark); -};vg.scene.visit = function(node, func) { - var i, n, items; - if (func(node)) return true; - if (items = node.items) { - for (i=0, n=items.length; i0) s += "|"; - s += String(f[i](d)); - } - return s; - } - } - - return build; -})();vg.scene.bounds = (function() { - - var parse = vg.canvas.path.parse, - boundPath = vg.canvas.path.bounds, - areaPath = vg.canvas.path.area, - linePath = vg.canvas.path.line, - halfpi = Math.PI / 2, - sqrt3 = Math.sqrt(3), - tan30 = Math.tan(30 * Math.PI / 180), - gfx = null; - - function context() { - return gfx || (gfx = (vg.config.isNode - ? new (require("canvas"))(1,1) - : d3.select("body").append("canvas") - .attr("class", "vega_hidden") - .attr("width", 1) - .attr("height", 1) - .style("display", "none") - .node()) - .getContext("2d")); - } - - function pathBounds(o, path, bounds) { - if (path == null) { - bounds.set(0, 0, 0, 0); - } else { - boundPath(path, bounds); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - } - return bounds; - } - - function path(o, bounds) { - var p = o.path - ? o["path:parsed"] || (o["path:parsed"] = parse(o.path)) - : null; - return pathBounds(o, p, bounds); - } - - function area(o, bounds) { - var items = o.mark.items, o = items[0]; - var p = o["path:parsed"] || (o["path:parsed"]=parse(areaPath(items))); - return pathBounds(items[0], p, bounds); - } - - function line(o, bounds) { - var items = o.mark.items, o = items[0]; - var p = o["path:parsed"] || (o["path:parsed"]=parse(linePath(items))); - return pathBounds(items[0], p, bounds); - } - - function rect(o, bounds) { - var x = o.x || 0, - y = o.y || 0, - w = (x + o.width) || 0, - h = (y + o.height) || 0; - bounds.set(x, y, w, h); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function image(o, bounds) { - var w = o.width || 0, - h = o.height || 0, - x = (o.x||0) - (o.align === "center" - ? w/2 : (o.align === "right" ? w : 0)), - y = (o.y||0) - (o.baseline === "middle" - ? h/2 : (o.baseline === "bottom" ? h : 0)); - return bounds.set(x, y, x+w, y+h); - } - - function rule(o, bounds) { - var x1, y1; - bounds.set( - x1 = o.x || 0, - y1 = o.y || 0, - o.x2 != null ? o.x2 : x1, - o.y2 != null ? o.y2 : y1 - ); - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function arc(o, bounds) { - var cx = o.x || 0, - cy = o.y || 0, - ir = o.innerRadius || 0, - or = o.outerRadius || 0, - sa = (o.startAngle || 0) - halfpi, - ea = (o.endAngle || 0) - halfpi, - xmin = Infinity, xmax = -Infinity, - ymin = Infinity, ymax = -Infinity, - a, i, n, x, y, ix, iy, ox, oy; - - var angles = [sa, ea], - s = sa - (sa%halfpi); - for (i=0; i<4 && s 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function symbol(o, bounds) { - var size = o.size != null ? o.size : 100, - x = o.x || 0, - y = o.y || 0, - r, t, rx, ry; - - switch (o.shape) { - case "cross": - r = Math.sqrt(size / 5) / 2; - t = 3*r; - bounds.set(x-t, y-t, x+y, y+t); - break; - - case "diamond": - ry = Math.sqrt(size / (2 * tan30)); - rx = ry * tan30; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - case "square": - t = Math.sqrt(size); - r = t / 2; - bounds.set(x-r, y-r, x+r, y+r); - break; - - case "triangle-down": - rx = Math.sqrt(size / sqrt3); - ry = rx * sqrt3 / 2; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - case "triangle-up": - rx = Math.sqrt(size / sqrt3); - ry = rx * sqrt3 / 2; - bounds.set(x-rx, y-ry, x+rx, y+ry); - break; - - default: - r = Math.sqrt(size/Math.PI); - bounds.set(x-r, y-r, x+r, y+r); - } - if (o.stroke && o.opacity !== 0 && o.strokeWidth > 0) { - bounds.expand(o.strokeWidth); - } - return bounds; - } - - function text(o, bounds, noRotate) { - var x = (o.x || 0) + (o.dx || 0), - y = (o.y || 0) + (o.dy || 0), - h = o.fontSize || vg.config.render.fontSize, - a = o.align, - b = o.baseline, - g = context(), w; - - g.font = vg.scene.fontString(o); - g.textAlign = a || "left"; - g.textBaseline = b || "alphabetic"; - w = g.measureText(o.text || "").width; - - // horizontal - if (a === "center") { - x = x - (w / 2); - } else if (a === "right") { - x = x - w; - } else { - // left by default, do nothing - } - - /// TODO find a robust solution for heights. - /// These offsets work for some but not all fonts. - - // vertical - if (b === "top") { - y = y + (h/5); - } else if (b === "bottom") { - y = y - h; - } else if (b === "middle") { - y = y - (h/2) + (h/10); - } else { - y = y - 4*h/5; // alphabetic by default - } - - bounds.set(x, y, x+w, y+h); - if (o.angle && !noRotate) { - bounds.rotate(o.angle*Math.PI/180, o.x||0, o.y||0); - } - return bounds.expand(noRotate ? 0 : 1); - } - - function group(g, bounds, includeLegends) { - var axes = g.axisItems || [], - legends = g.legendItems || [], j, m; - - for (j=0, m=axes.length; j 1) f = 1; - e = curr.ease(f); - - for (i=0, n=curr.length; i 1 ? +y : tickMajorSize, - end = n > 0 ? +arguments[n] : tickMajorSize; - - if (tickMajorSize !== major || - tickMinorSize !== minor || - tickEndSize !== end) { - reset(); - } - - tickMajorSize = major; - tickMinorSize = minor; - tickEndSize = end; - return axis; - }; - - axis.tickSubdivide = function(x) { - if (!arguments.length) return tickSubdivide; - tickSubdivide = +x; - return axis; - }; - - axis.offset = function(x) { - if (!arguments.length) return offset; - offset = vg.isObject(x) ? x : +x; - return axis; - }; - - axis.tickPadding = function(x) { - if (!arguments.length) return tickPadding; - if (tickPadding !== +x) { tickPadding = +x; reset(); } - return axis; - }; - - axis.titleOffset = function(x) { - if (!arguments.length) return titleOffset; - if (titleOffset !== +x) { titleOffset = +x; reset(); } - return axis; - }; - - axis.layer = function(x) { - if (!arguments.length) return layer; - if (layer !== x) { layer = x; reset(); } - return axis; - }; - - axis.grid = function(x) { - if (!arguments.length) return grid; - if (grid !== x) { grid = x; reset(); } - return axis; - }; - - axis.gridLineProperties = function(x) { - if (!arguments.length) return gridLineStyle; - if (gridLineStyle !== x) { gridLineStyle = x; } - return axis; - }; - - axis.majorTickProperties = function(x) { - if (!arguments.length) return majorTickStyle; - if (majorTickStyle !== x) { majorTickStyle = x; } - return axis; - }; - - axis.minorTickProperties = function(x) { - if (!arguments.length) return minorTickStyle; - if (minorTickStyle !== x) { minorTickStyle = x; } - return axis; - }; - - axis.tickLabelProperties = function(x) { - if (!arguments.length) return tickLabelStyle; - if (tickLabelStyle !== x) { tickLabelStyle = x; } - return axis; - }; - - axis.titleProperties = function(x) { - if (!arguments.length) return titleStyle; - if (titleStyle !== x) { titleStyle = x; } - return axis; - }; - - axis.domainProperties = function(x) { - if (!arguments.length) return domainStyle; - if (domainStyle !== x) { domainStyle = x; } - return axis; - }; - - axis.reset = function() { reset(); }; - - return axis; -}; - -var vg_axisOrients = {top: 1, right: 1, bottom: 1, left: 1}; - -function vg_axisSubdivide(scale, ticks, m) { - subticks = []; - if (m && ticks.length > 1) { - var extent = vg_axisScaleExtent(scale.domain()), - subticks, - i = -1, - n = ticks.length, - d = (ticks[1] - ticks[0]) / ++m, - j, - v; - while (++i < n) { - for (j = m; --j > 0;) { - if ((v = +ticks[i] - j * d) >= extent[0]) { - subticks.push(v); - } - } - } - for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) { - subticks.push(v); - } - } - return subticks; -} - -function vg_axisScaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [start, stop] : [stop, start]; -} - -function vg_axisScaleRange(scale) { - return scale.rangeExtent - ? scale.rangeExtent() - : vg_axisScaleExtent(scale.range()); -} - -var vg_axisAlign = { - bottom: "center", - top: "center", - left: "right", - right: "left" -}; - -var vg_axisBaseline = { - bottom: "top", - top: "bottom", - left: "middle", - right: "middle" -}; - -function vg_axisLabelExtend(orient, labels, oldScale, newScale, size, pad) { - size = Math.max(size, 0) + pad; - if (orient === "left" || orient === "top") { - size *= -1; - } - if (orient === "top" || orient === "bottom") { - vg.extend(labels.properties.enter, { - x: oldScale, - y: {value: size}, - }); - vg.extend(labels.properties.update, { - x: newScale, - y: {value: size}, - align: {value: "center"}, - baseline: {value: vg_axisBaseline[orient]} - }); - } else { - vg.extend(labels.properties.enter, { - x: {value: size}, - y: oldScale, - }); - vg.extend(labels.properties.update, { - x: {value: size}, - y: newScale, - align: {value: vg_axisAlign[orient]}, - baseline: {value: "middle"} - }); - } -} - -function vg_axisTicksExtend(orient, ticks, oldScale, newScale, size) { - var sign = (orient === "left" || orient === "top") ? -1 : 1; - if (size === Infinity) { - size = (orient === "top" || orient === "bottom") - ? {group: "mark.group.height", mult: -sign} - : {group: "mark.group.width", mult: -sign}; - } else { - size = {value: sign * size}; - } - if (orient === "top" || orient === "bottom") { - vg.extend(ticks.properties.enter, { - x: oldScale, - y: {value: 0}, - y2: size - }); - vg.extend(ticks.properties.update, { - x: newScale, - y: {value: 0}, - y2: size - }); - vg.extend(ticks.properties.exit, { - x: newScale, - }); - } else { - vg.extend(ticks.properties.enter, { - x: {value: 0}, - x2: size, - y: oldScale - }); - vg.extend(ticks.properties.update, { - x: {value: 0}, - x2: size, - y: newScale - }); - vg.extend(ticks.properties.exit, { - y: newScale, - }); - } -} - -function vg_axisTitleExtend(orient, title, range, offset) { - var mid = ~~((range[1] - range[0]) / 2), - sign = (orient === "top" || orient === "left") ? -1 : 1; - - if (orient === "bottom" || orient === "top") { - vg.extend(title.properties.update, { - x: {value: mid}, - y: {value: sign*offset}, - angle: {value: 0} - }); - } else { - vg.extend(title.properties.update, { - x: {value: sign*offset}, - y: {value: mid}, - angle: {value: -90} - }); - } -} - -function vg_axisDomainExtend(orient, domain, range, size) { - var path; - if (orient === "top" || orient === "left") { - size = -1 * size; - } - if (orient === "bottom" || orient === "top") { - path = "M" + range[0] + "," + size + "V0H" + range[1] + "V" + size; - } else { - path = "M" + size + "," + range[0] + "H0V" + range[1] + "H" + size; - } - domain.properties.update.path = {value: path}; -} - -function vg_axisUpdate(item, group, trans) { - var o = trans ? {} : item, - offset = item.mark.def.offset, - orient = item.mark.def.orient, - width = group.width, - height = group.height; // TODO fallback to global w,h? - - if (vg.isObject(offset)) { - offset = -group.scales[offset.scale](offset.value); - } - - switch (orient) { - case "left": { o.x = -offset; o.y = 0; break; } - case "right": { o.x = width + offset; o.y = 0; break; } - case "bottom": { o.x = 0; o.y = height + offset; break; } - case "top": { o.x = 0; o.y = -offset; break; } - default: { o.x = 0; o.y = 0; } - } - - if (trans) trans.interpolate(item, o); -} - -function vg_axisTicks() { - return { - type: "rule", - interactive: false, - key: "data", - properties: { - enter: { - stroke: {value: vg.config.axis.tickColor}, - strokeWidth: {value: vg.config.axis.tickWidth}, - opacity: {value: 1e-6} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function vg_axisTickLabels() { - return { - type: "text", - interactive: true, - key: "data", - properties: { - enter: { - fill: {value: vg.config.axis.tickLabelColor}, - font: {value: vg.config.axis.tickLabelFont}, - fontSize: {value: vg.config.axis.tickLabelFontSize}, - opacity: {value: 1e-6}, - text: {field: "label"} - }, - exit: { opacity: {value: 1e-6} }, - update: { opacity: {value: 1} } - } - }; -} - -function vg_axisTitle() { - return { - type: "text", - interactive: true, - properties: { - enter: { - font: {value: vg.config.axis.titleFont}, - fontSize: {value: vg.config.axis.titleFontSize}, - fontWeight: {value: vg.config.axis.titleFontWeight}, - fill: {value: vg.config.axis.titleColor}, - align: {value: "center"}, - baseline: {value: "middle"}, - text: {field: "data"} - }, - update: {} - } - }; -} - -function vg_axisDomain() { - return { - type: "path", - interactive: false, - properties: { - enter: { - x: {value: 0.5}, - y: {value: 0.5}, - stroke: {value: vg.config.axis.axisColor}, - strokeWidth: {value: vg.config.axis.axisWidth} - }, - update: {} - } - }; -} -vg.scene.legend = function() { - var size = null, - shape = null, - fill = null, - stroke = null, - spacing = null, - values = null, - format = null, - title = undefined, - orient = "right", - offset = vg.config.legend.offset, - padding = vg.config.legend.padding, - legendDef, - tickArguments = [5], - legendStyle = {}, - symbolStyle = {}, - gradientStyle = {}, - titleStyle = {}, - labelStyle = {}; - - var legend = {}, - legendDef = null; - - function reset() { legendDef = null; } - - legend.def = function() { - var scale = size || shape || fill || stroke; - if (!legendDef) { - legendDef = (scale===fill || scale===stroke) && !discrete(scale.type) - ? quantDef(scale) - : ordinalDef(scale); - } - legendDef.orient = orient; - legendDef.offset = offset; - legendDef.padding = padding; - return legendDef; - }; - - function discrete(type) { - return type==="ordinal" || type==="quantize" - || type==="quantile" || type==="threshold"; - } - - function ordinalDef(scale) { - var def = o_legend_def(size, shape, fill, stroke); - - // generate data - var data = (values == null - ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) - : values).map(vg.data.ingest); - var fmt = format==null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : String) : format; - - // determine spacing between legend entries - var fs, range, offset, pad=5, domain = d3.range(data.length); - if (size) { - range = data.map(function(x) { return Math.sqrt(size(x.data)); }); - offset = d3.max(range); - range = range.reduce(function(a,b,i,z) { - if (i > 0) a[i] = a[i-1] + z[i-1]/2 + pad; - return (a[i] += b/2, a); }, [0]).map(Math.round); - } else { - offset = Math.round(Math.sqrt(vg.config.legend.symbolSize)); - range = spacing - || (fs = labelStyle.fontSize) && (fs.value + pad) - || (vg.config.legend.labelFontSize + pad); - range = domain.map(function(d,i) { - return Math.round(offset/2 + i*range); - }); - } - - // account for padding and title size - var sz = padding, ts; - if (title) { - ts = titleStyle.fontSize; - sz += 5 + ((ts && ts.value) || vg.config.legend.titleFontSize); - } - for (var i=0, n=range.length; i this._width ? Math.ceil(+b.x2 - this._width) + inset : 0, - b = b.y2 > this._height ? Math.ceil(+b.y2 - this._height) + inset : 0; - pad = {left:l, top:t, right:r, bottom:b}; - - if (this._strict) { - this._autopad = 0; - this._padding = pad; - this._width = Math.max(0, this.__width - (l+r)); - this._height = Math.max(0, this.__height - (t+b)); - this._model.width(this._width); - this._model.height(this._height); - if (this._el) this.initialize(this._el.parentNode); - this.update({props:"enter"}).update({props:"update"}); - } else { - this.padding(pad).update(opt); - } - return this; - }; - - prototype.viewport = function(size) { - if (!arguments.length) return this._viewport; - if (this._viewport !== size) { - this._viewport = size; - if (this._el) this.initialize(this._el.parentNode); - } - return this; - }; - - prototype.renderer = function(type) { - if (!arguments.length) return this._io; - if (type === "canvas") type = vg.canvas; - if (type === "svg") type = vg.svg; - if (this._io !== type) { - this._io = type; - this._renderer = null; - if (this._el) this.initialize(this._el.parentNode); - if (this._build) this.render(); - } - return this; - }; - - prototype.defs = function(defs) { - if (!arguments.length) return this._model.defs(); - this._model.defs(defs); - return this; - }; - - prototype.data = function(data) { - if (!arguments.length) return this._model.data(); - var ingest = vg.keys(data).reduce(function(d, k) { - return (d[k] = vg.data.ingestAll(data[k]), d); - }, {}); - this._model.data(ingest); - this._build = false; - return this; - }; - - prototype.model = function(model) { - if (!arguments.length) return this._model; - if (this._model !== model) { - this._model = model; - if (this._handler) this._handler.model(model); - } - return this; - }; - - prototype.initialize = function(el) { - var v = this, prevHandler, - w = v._width, h = v._height, pad = v._padding; - - // clear pre-existing container - d3.select(el).select("div.vega").remove(); - - // add div container - this._el = el = d3.select(el) - .append("div") - .attr("class", "vega") - .style("position", "relative") - .node(); - if (v._viewport) { - d3.select(el) - .style("width", (v._viewport[0] || w)+"px") - .style("height", (v._viewport[1] || h)+"px") - .style("overflow", "auto"); - } - - // renderer - v._renderer = (v._renderer || new this._io.Renderer()) - .initialize(el, w, h, pad); - - // input handler - prevHandler = v._handler; - v._handler = new this._io.Handler() - .initialize(el, pad, v) - .model(v._model); - - if (prevHandler) { - prevHandler.handlers().forEach(function(h) { - v._handler.on(h.type, h.handler); - }); - } - - return this; - }; - - prototype.render = function(items) { - this._renderer.render(this._model.scene(), items); - return this; - }; - - prototype.on = function() { - this._handler.on.apply(this._handler, arguments); - return this; - }; - - prototype.off = function() { - this._handler.off.apply(this._handler, arguments); - return this; - }; - - prototype.update = function(opt) { - opt = opt || {}; - var view = this, - trans = opt.duration - ? vg.scene.transition(opt.duration, opt.ease) - : null; - - view._build = view._build || (view._model.build(), true); - view._model.encode(trans, opt.props, opt.items); - - if (trans) { - trans.start(function(items) { - view._renderer.render(view._model.scene(), items); - }); - } - else view.render(opt.items); - - return view.autopad(opt); - }; - - return view; -})(); - -// view constructor factory -// takes definitions from parsed specification as input -// returns a view constructor -vg.ViewFactory = function(defs) { - return function(opt) { - opt = opt || {}; - var v = new vg.View() - .width(defs.width) - .height(defs.height) - .padding(defs.padding) - .viewport(defs.viewport) - .renderer(opt.renderer || "canvas") - .defs(defs); - - if (defs.data.load) v.data(defs.data.load); - if (opt.data) v.data(opt.data); - if (opt.el) v.initialize(opt.el); - - if (opt.hover !== false) { - v.on("mouseover", function(evt, item) { - if (item.hasPropertySet("hover")) { - this.update({props:"hover", items:item}); - } - }) - .on("mouseout", function(evt, item) { - if (item.hasPropertySet("hover")) { - this.update({props:"update", items:item}); - } - }); - } - - return v; - }; -}; -vg.Spec = (function() { - var spec = function(s) { - this.spec = { - width: 500, - height: 500, - padding: 0, - data: [], - scales: [], - axes: [], - marks: [] - }; - if (s) vg.extend(this.spec, s); - }; - - var prototype = spec.prototype; - - prototype.width = function(w) { - this.spec.width = w; - return this; - }; - - prototype.height = function(h) { - this.spec.height = h; - return this; - }; - - prototype.padding = function(p) { - this.spec.padding = p; - return this; - }; - - prototype.viewport = function(v) { - this.spec.viewport = v; - return this; - }; - - prototype.data = function(name, params) { - if (!params) params = vg.isString(name) ? {name: name} : name; - else params.name = name; - this.spec.data.push(params); - return this; - }; - - prototype.scale = function(name, params) { - if (!params) params = vg.isString(name) ? {name: name} : name; - else params.name = name; - this.spec.scales.push(params); - return this; - }; - - prototype.axis = function(params) { - this.spec.axes.push(params); - return this; - }; - - prototype.mark = function(type, mark) { - if (!mark) mark = {type: type}; - else mark.type = type; - mark.properties = {}; - this.spec.marks.push(mark); - - var that = this; - return { - from: function(name, obj) { - mark.from = obj - ? (obj.data = name, obj) - : vg.isString(name) ? {data: name} : name; - return this; - }, - prop: function(name, obj) { - mark.properties[name] = vg.keys(obj).reduce(function(o,k) { - var v = obj[k]; - return (o[k] = vg.isObject(v) ? v : {value: v}, o); - }, {}); - return this; - }, - done: function() { return that; } - }; - }; - - prototype.parse = function(callback) { - vg.parse.spec(this.spec, callback); - }; - - prototype.json = function() { - return this.spec; - }; - - return spec; -})(); - -vg.spec = function(s) { - return new vg.Spec(s); -}; -vg.headless = {};vg.headless.View = (function() { - - var view = function(width, height, pad, type) { - this._canvas = null; - this._type = type; - this._el = "body"; - this._build = false; - this._model = new vg.Model(); - this._width = this.__width = width || 500; - this._height = this.__height = height || 500; - this._autopad = 1; - this._padding = pad || {top:0, left:0, bottom:0, right:0}; - this._renderer = new vg[type].Renderer(); - this.initialize(); - }; - - var prototype = view.prototype; - - prototype.el = function(el) { - if (!arguments.length) return this._el; - if (this._el !== el) { - this._el = el; - this.initialize(); - } - return this; - }; - - prototype.width = function(width) { - if (!arguments.length) return this._width; - if (this._width !== width) { - this._width = width; - this.initialize(); - this._model.width(width); - } - return this; - }; - - prototype.height = function(height) { - if (!arguments.length) return this._height; - if (this._height !== height) { - this._height = height; - this.initialize(); - this._model.height(this._height); - } - return this; - }; - - prototype.padding = function(pad) { - if (!arguments.length) return this._padding; - if (this._padding !== pad) { - if (vg.isString(pad)) { - this._autopad = 1; - this._padding = {top:0, left:0, bottom:0, right:0}; - this._strict = (pad === "strict"); - } else { - this._autopad = 0; - this._padding = pad; - this._strict = false; - } - this.initialize(); - } - return this; - }; - - prototype.autopad = function(opt) { - if (this._autopad < 1) return this; - else this._autopad = 0; - - var pad = this._padding, - b = this._model.scene().bounds, - inset = vg.config.autopadInset, - l = b.x1 < 0 ? Math.ceil(-b.x1) + inset : 0, - t = b.y1 < 0 ? Math.ceil(-b.y1) + inset : 0, - r = b.x2 > this._width ? Math.ceil(+b.x2 - this._width) + inset : 0, - b = b.y2 > this._height ? Math.ceil(+b.y2 - this._height) + inset : 0; - pad = {left:l, top:t, right:r, bottom:b}; - - if (this._strict) { - this._autopad = 0; - this._padding = pad; - this._width = Math.max(0, this.__width - (l+r)); - this._height = Math.max(0, this.__height - (t+b)); - this._model.width(this._width); - this._model.height(this._height); - if (this._el) this.initialize(); - this.update({props:"enter"}).update({props:"update"}); - } else { - this.padding(pad).update(opt); - } - return this; - }; - - prototype.viewport = function() { - if (!arguments.length) return null; - return this; - }; - - prototype.defs = function(defs) { - if (!arguments.length) return this._model.defs(); - this._model.defs(defs); - return this; - }; - - prototype.data = function(data) { - if (!arguments.length) return this._model.data(); - var ingest = vg.keys(data).reduce(function(d, k) { - return (d[k] = vg.data.ingestAll(data[k]), d); - }, {}); - this._model.data(ingest); - this._build = false; - return this; - }; - - prototype.renderer = function() { - return this._renderer; - }; - - prototype.canvas = function() { - return this._canvas; - }; - - prototype.canvasAsync = function(callback) { - var r = this._renderer, view = this; - - function wait() { - if (r.pendingImages() === 0) { - view.render(); // re-render with all images - callback(view._canvas); - } else { - setTimeout(wait, 10); - } - } - - // if images loading, poll until ready - (r.pendingImages() > 0) ? wait() : callback(this._canvas); - }; - - prototype.svg = function() { - if (this._type !== "svg") return null; - - var p = this._padding, - w = this._width + (p ? p.left + p.right : 0), - h = this._height + (p ? p.top + p.bottom : 0); - - // build svg text - var svg = d3.select(this._el) - .select("svg").node().innerHTML - .replace(/ href=/g, " xlink:href="); // ns hack. sigh. - - return '' + svg + '' - }; - - prototype.initialize = function() { - var w = this._width, - h = this._height, - pad = this._padding; - - if (this._type === "svg") { - this.initSVG(w, h, pad); - } else { - this.initCanvas(w, h, pad); - } - - return this; - }; - - prototype.initCanvas = function(w, h, pad) { - var Canvas = require("canvas"), - tw = w + pad.left + pad.right, - th = h + pad.top + pad.bottom, - canvas = this._canvas = new Canvas(tw, th), - ctx = canvas.getContext("2d"); - - // setup canvas context - ctx.setTransform(1, 0, 0, 1, pad.left, pad.top); - - // configure renderer - this._renderer.context(ctx); - this._renderer.resize(w, h, pad); - }; - - prototype.initSVG = function(w, h, pad) { - var tw = w + pad.left + pad.right, - th = h + pad.top + pad.bottom; - - // configure renderer - this._renderer.initialize(this._el, w, h, pad); - } - - prototype.render = function(items) { - this._renderer.render(this._model.scene(), items); - return this; - }; - - prototype.update = function(opt) { - opt = opt || {}; - var view = this; - view._build = view._build || (view._model.build(), true); - view._model.encode(null, opt.props, opt.items); - view.render(opt.items); - return view.autopad(opt); - }; - - return view; -})(); - -// headless view constructor factory -// takes definitions from parsed specification as input -// returns a view constructor -vg.headless.View.Factory = function(defs) { - return function(opt) { - opt = opt || {}; - var w = defs.width, - h = defs.height, - p = defs.padding, - r = opt.renderer || "canvas", - v = new vg.headless.View(w, h, p, r).defs(defs); - if (defs.data.load) v.data(defs.data.load); - if (opt.data) v.data(opt.data); - return v; - }; -};vg.headless.render = function(opt, callback) { - function draw(chart) { - try { - // create and render view - var view = chart({ - data: opt.data, - renderer: opt.renderer - }).update(); - - if (opt.renderer === "svg") { - // extract rendered svg - callback(null, {svg: view.svg()}); - } else { - // extract rendered canvas, waiting for any images to load - view.canvasAsync(function(canvas) { - callback(null, {canvas: canvas}); - }); - } - } catch (err) { - callback(err, null); - } - } - - vg.parse.spec(opt.spec, draw, vg.headless.View.Factory); -}; return vg; -})(d3, typeof topojson === "undefined" ? null : topojson); -// assumes D3 and topojson in global namespace diff --git a/mod/dashboard/app/styles/bootstrap.css b/mod/dashboard/app/styles/bootstrap.css deleted file mode 100644 index b725064aa..000000000 --- a/mod/dashboard/app/styles/bootstrap.css +++ /dev/null @@ -1,6167 +0,0 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - 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) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover, -a.muted:focus { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover, -a.text-success:focus { - color: #356635; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - padding-right: 5px; - padding-left: 5px; - *zoom: 1; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-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 linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - font-size: 0; - white-space: nowrap; - vertical-align: middle; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.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 #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success > td { - background-color: #dff0d8; -} - -.table tbody tr.error > td { - background-color: #f2dede; -} - -.table tbody tr.warning > td { - background-color: #fcf8e3; -} - -.table tbody tr.info > td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - width: 16px; - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.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; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.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 { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-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-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #cccccc; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - 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; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.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: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - 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; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - 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-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-title:empty { - display: none; -} - -.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 { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 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: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-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; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-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-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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: -moz-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); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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: -moz-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-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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: -moz-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-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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: -moz-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-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - 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: -moz-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); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-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; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} - -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} - -.carousel-indicators .active { - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -} diff --git a/mod/dashboard/app/styles/browser.css b/mod/dashboard/app/styles/browser.css deleted file mode 100644 index 5c7883cfa..000000000 --- a/mod/dashboard/app/styles/browser.css +++ /dev/null @@ -1,186 +0,0 @@ -.etcd-container.etcd-browser { - width: 100%; - height: 500px; -} - -.home-container .etcd-container.etcd-browser { - height: 400px; -} - -.etcd-container.etcd-browser .etcd-header { - height: 37px; -} - -.etcd-container.etcd-browser.etcd-preview-reveal .etcd-back { - display: block; -} - -.etcd-container.etcd-browser.etcd-preview-hide .etcd-back { - display: block; -} - -.etcd-container.etcd-browser.etcd-preview-reveal .etcd-add { -} - -.etcd-container.etcd-browser.etcd-preview-hide .etcd-add { -} - -.etcd-container.etcd-browser .etcd-header .etcd-browser-path { - position: absolute; - left: 72px; - right: 0px; - top: 0; - margin: 6px 5px 6px 5px; -} - -.etcd-container.etcd-browser .etcd-header .etcd-browser-path input { - width: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} - -.etcd-container.etcd-browser .etcd-header .etcd-save { - position: absolute; - width: 54px; - right: -55px; - margin: 6px 0; -} - -.etcd-container.etcd-browser.etcd-save-reveal .etcd-header .etcd-save { - right: 7px; -} - -.etcd-container.etcd-browser.etcd-save-reveal .etcd-header .etcd-browser-path { - right: 62px; -} - -.etcd-container.etcd-browser.etcd-save-hide .etcd-header .etcd-save { - right: -55px; -} - -.etcd-container.etcd-browser.etcd-save-hide .etcd-header .etcd-browser-path { - right: 0px; -} - -.etcd-container.etcd-browser .etcd-preview { - position: absolute; - left: 100%; - min-height: 100%; - overflow-y: auto; - overflow-x: hidden; - top: 0px; - box-sizing: border-box; - -moz-box-sizing: border-box; - background-color: #fff; - width: 100%; - border-left: 1px solid #ddd; -} - -.etcd-container.etcd-browser .etcd-preview pre, .etcd-container.etcd-browser .etcd-preview textarea { - padding: 20px 20px 20px 20px; - margin: 0px; - font-family: Consolas, "Liberation Mono", Courier, monospace; - height: 100%; - width: 100%; - white-space: pre-wrap; - position: absolute; - font-size: 13px; - border: 1px; - outline: none; - box-sizing: border-box; - -moz-box-sizing: border-box; -} - -.etcd-container.etcd-browser.etcd-preview-reveal .etcd-preview pre, .etcd-container.etcd-browser.etcd-preview-reveal .etcd-preview textarea { - display: block; -} - -.etcd-container.etcd-browser .etcd-preview .etcd-empty { - top: 0px; - bottom: 0px; - width: 100%; - text-align: center; - position: absolute; -} - -.etcd-container.etcd-browser.etcd-preview-reveal .etcd-empty { - display: none; -} - -.etcd-container.etcd-browser .etcd-preview .etcd-empty-message { - margin-top: 25%; - color: #999; -} - -/* Single Column Positioning */ -@media (max-width: 700px) { - .etcd-container.etcd-browser .etcd-list { - width: 100%; - } - - .etcd-container.etcd-browser.etcd-preview-reveal .etcd-list { - left: -100%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - - .etcd-container.etcd-browser.etcd-preview-hide .etcd-list { - left: 0%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - - .etcd-container.etcd-browser .etcd-preview { - left: 100%; - } - - .etcd-container.etcd-browser.etcd-preview-reveal .etcd-preview { left: -1px; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - - .etcd-container.etcd-browser.etcd-preview-hide .etcd-preview { - left: 100%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } -} - - -/* Double Column Positioning */ -@media (min-width: 700px) { - .etcd-container.etcd-browser .etcd-list { - width: 50%; - } - - .etcd-container.etcd-browser .etcd-preview { - left: 50%; - width: 50%; - } - - .etcd-container.etcd-browser.etcd-preview-reveal .etcd-preview { - left: 50%; /* does nothing */ - } - - .etcd-container.etcd-browser.etcd-preview-reveal .etcd-preview .etcd-empty { - display: none; - } - - .etcd-container.etcd-browser.etcd-preview-hide .etcd-preview { - left: 50%; /* does nothing */ - } - - .etcd-container.etcd-browser.etcd-preview-hide .etcd-preview .etcd-empty { - display: block; - } - - .etcd-container.etcd-browser.etcd-preview-hide .etcd-preview pre, .etcd-container.etcd-browser.etcd-preview-hide .etcd-preview textarea { - display: none; - } -} - diff --git a/mod/dashboard/app/styles/etcd-widgets.css b/mod/dashboard/app/styles/etcd-widgets.css deleted file mode 100644 index e97d9e60a..000000000 --- a/mod/dashboard/app/styles/etcd-widgets.css +++ /dev/null @@ -1,381 +0,0 @@ -body { - margin: 0px; -} - -.etcd-container { - background-color: #fff; - border: 1px solid #ddd; - border-radius: 5px; - box-shadow: rgba(0, 0, 0, 0.14902) 0px 1px 3px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - overflow: hidden; - box-sizing: border-box; - -moz-box-sizing: border-box; - position: relative; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - margin: 20px 0; - height: 100%; -} - -a { - color: #2176AC; - text-decoration: none; -} - -a:hover, a:active { - text-decoration: underline; -} - -input[type=text] { - box-shadow: inset 0 1px 2px rgba(0,0,0,.5); - border: none; - border-radius: 3px; - font-size: 13px; - padding-left: 5px; - padding-right: 5px; - height: 25px; -} - -input[type=text]:focus { -} - -h2 { - font-size: 22px; - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 500; - margin: 0 0 20px 0; - padding: 0; -} - -.etcd-button { - display:inline-block; - padding:6px 12px; - margin-bottom:0; - font-size:14px; - font-weight:normal; - line-height:1.428571429; - text-align:center; - white-space:nowrap; - vertical-align:middle; - cursor:pointer; - border:1px solid transparent; - border-radius:4px; - -webkit-user-select:none; - -moz-user-select:none; - -ms-user-select:none; - -o-user-select:none; - user-select:none; - margin: 0px; - border: none; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.25); -} - -.etcd-button.etcd-button-small { - height: 25px; - padding: 0 10px; - font-size: 13px; -} - -.etcd-button-primary { - background-color: #428BCA; - color: #fff; - text-shadow: 0 0 3px rgba(0,0,0,0.25); -} - -.etcd-button-primary:active { - background-color: #2276ad; -} - -.etcd-popover { - background: #333; - border-radius: 3px; - padding: 15px; - position: absolute; - top: 39px; - z-index: 9999; - color: #fff; - font-size: 13px; - box-shadow: 0px 2px 10px rgba(0,0,0,.5); - display: none; -} - -.etcd-popover-error .etcd-popover-content { - color: #FF3C43; - font-weight: bold; - user-select: text; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; -} - -.etcd-popover-notch { - width: 14px; - height: 14px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - position: absolute; - margin-top: -5px; - margin-left: 3px; - background: #333; - top: 0px; - right: 15px; -} - -.etcd-popover.etcd-popover-right { - left: 77px; -} - -.etcd-popover-right .etcd-popover-notch { - left: 15px; -} - -.etcd-popover.etcd-popover-left { - right: 10px; -} - -.etcd-popover-left .etcd-popover-notch { - right: 15px; -} - -.etcd-popover-confirm { - margin-top: 10px; -} - -.etcd-popover-confirm button { -} - -.etcd-header { - width: 100%; - position: relative; - box-sizing: border-box; - -moz-box-sizing: border-box; -} -.etcd-header.solid { - background: #eeeeee; - background: -moz-linear-gradient(top, #eeeeee 0%, #dddddd 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#dddddd)); - background: -webkit-linear-gradient(top, #eeeeee 0%,#dddddd 100%); - background: -o-linear-gradient(top, #eeeeee 0%,#dddddd 100%); - background: -ms-linear-gradient(top, #eeeeee 0%,#dddddd 100%); - background: linear-gradient(to bottom, #eeeeee 0%,#dddddd 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#dddddd',GradientType=0 ); -} - -.etcd-body { - top: 0px; - left: 0px; - position: relative; - overflow: hidden; - height: 100%; - width: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; -} - -.etcd-body table { - width: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; -} - -.etcd-body table thead td { - text-transform: uppercase; - font-size: 11px; - line-height: 20px; - border-bottom: 1px solid #ddd; - padding-top: 0px; - padding-right: 10px; - padding-bottom: 0px; - padding-left: 0px; - color: #666; -} - -.etcd-body table tbody td { - line-height: 18px; - border-bottom: 1px solid #ddd; - padding-top: 6px; - padding-right: 10px; - padding-bottom: 6px; - padding-left: 0px; - vertical-align: text-top; - user-select: text; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; -} - -.etcd-body table .etcd-ttl-header { - width: 33%; -} - -.etcd-body table tbody .etcd-ttl { - font-size: 13px; -} - -.etcd-body table tbody .etcd-ttl .etcd-ttl-none { - color: #999; - font-weight: 100; -} - -.etcd-body table .etcd-actions-header { - width: 30px; -} - -.etcd-body table thead td:first-child, .etcd-body table tbody td:first-child { - padding-left: 10px; -} - -.etcd-body table thead td:last-child, .etcd-body table tbody td:last-child { - padding-right: 10px; -} - -.etcd-container .etcd-preview .etcd-dialog { - background: #333; - position: absolute; - right: 0px; - left: 0px; - padding: 20px; - color: #fff; - font-size: 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - bottom: 0px; - opacity: 0; - min-height: 110px; /* REMOVE ME! */ - transition-property: all; - transition-duration: 150ms; - transition-timing-function: ease-in-out; -} - -.etcd-container .etcd-preview .etcd-dialog .etcd-dialog-message { - margin-bottom: 20px; -} - -.etcd-container .etcd-preview .etcd-dialog .etcd-dialog-buttons a { - line-height: 34px; - color: #fff; - vertical-align: middle; - margin-left: 10px; -} - -.etcd-body .etcd-list { - padding: 20px; - box-sizing: border-box; - -moz-box-sizing: border-box; - overflow: auto; - height: 100%; - position: absolute; -} - -.etcd-body .etcd-list .etcd-selected { - background-color: #EAF3FF; -} - -.etcd-body .etcd-list a.directory { - font-weight: bold; -} - -.etcd-list tr:hover .etcd-delete { - visibility: visible; - fill: #ff0000; -} - -.etcd-delete { - height: 20px; - width: 25px; - vertical-align: middle; - margin: 0px; - display: inline-block; -} - -.etcd-delete { - height: 20px; - fill: #eee; -} - -.etcd-selected .etcd-delete { - height: 20px; - fill: #ddd; -} - -.etcd-delete:hover { - cursor: pointer; - fill: #ff0000; -} - -.etcd-back { - height: 37px; - width: 37px; - vertical-align: middle; - margin: 0px; - position: absolute; - top: 0px; - left: 3px; - display: none; -} - - -.etcd-back svg { - height: 20px; - padding: 8px 6px; -} - -.etcd-back:hover svg { - cursor: pointer; - fill: #428bca; -} - -.etcd-back.etcd-disabled svg { - fill: #bbb; -} - -.etcd-add { - height: 37px; - width: 37px; - vertical-align: middle; - margin: 0px; - position: absolute; - top: 0px; - left: 36px; -} - - -.etcd-add svg { - height: 22px; - padding: 7px 6px; -} - -.etcd-add:hover svg { - cursor: pointer; - fill: #428bca; -} - -.etcd-add.etcd-disabled svg { - fill: #bbb; -} - -.etcd-format-selector { - position: absolute; - top: 12px; - right: 16px; - z-index: 999; -} - -.etcd-format-selector .etcd-selector-item { - display: inline-block; - height: 12px; - width: 12px; - padding: 8px 4px; -} - -.etcd-format-selector .etcd-selector-item:hover { - cursor: pointer; -} - -.etcd-format-selector .etcd-selector-item svg { - fill: #333; -} - diff --git a/mod/dashboard/app/styles/main.css b/mod/dashboard/app/styles/main.css deleted file mode 100644 index 7eb1bb8d2..000000000 --- a/mod/dashboard/app/styles/main.css +++ /dev/null @@ -1,56 +0,0 @@ -html { - height: 100%; -} - -body { - background: #fafafa; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #333; - padding: 30px; - margin: 0px; - height: 100%; -} -h1 { - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 400; - margin: 0px 0px 20px 0px; - padding: 0px; -} - -a { - color: #1e6ec1; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -#footer { - width: 100%; - font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; - margin-top: 20px; -} - -#coreos-logo { - margin: 10px auto 0 auto; - height: 30px; - width: 80px; -} - -#coreos-logo svg { - fill: #999; - MAX-WIDTH: 100PX; - DISPLAY: INLINE-BLOCK; - VERTICAL-ALIGN: MIDDLE; -} - -#POWERED-BY { - FONT-SIZE: 12PX; - COLOR: #333; - WIDTH: 100%; - DISPLAY: INLINE-BLOCK; - VERTICAL-ALIGN: MIDDLE; - LINE-HEIGHT: 190%; - TEXT-ALIGN: CENTER; -} diff --git a/mod/dashboard/app/styles/stats.css b/mod/dashboard/app/styles/stats.css deleted file mode 100644 index 92fb3f18f..000000000 --- a/mod/dashboard/app/styles/stats.css +++ /dev/null @@ -1,144 +0,0 @@ -.etcd-container.etcd-stats { - width: 100%; - height: 500px; -} - -.home-container .etcd-container.etcd-stats { - height: 400px; -} - -.etcd-container.etcd-stats h2 { - margin-top: -7px; -} - -.etcd-container.etcd-stats table .etcd-latency { - width: 50%; -} - -.etcd-container.etcd-stats .etcd-list { - position: absolute; - left: 100%; - min-height: 100%; - overflow-y: auto; - overflow-x: hidden; - top: 0px; - box-sizing: border-box; - -moz-box-sizing: border-box; - background-color: #fff; - width: 100%; - border-left: 1px solid #ddd; -} - -.etcd-container.etcd-stats .etcd-list .etcd-square { - height: 10px; - width: 10px; - display: inline-block; - margin-right: 5px; -} - -.etcd-container.etcd-stats .etcd-list .etcd-square-red { - background-color: #c40022; -} - -.etcd-container.etcd-stats .etcd-list .etcd-square-orange { - background-color: #FFC000; -} - -.etcd-container.etcd-stats .etcd-list .etcd-square-green { - background-color: #00DB24; -} - -.etcd-container.etcd-stats .etcd-list .etcd-peer-type { - color: #999; - padding-left: 3px; - font-size: 13px; - line-height: 100%; -} - -.etcd-container.etcd-stats .etcd-list .etcd-latency-value { - display: inline-block; -} - -.etcd-container.etcd-stats .etcd-graph { - box-sizing: border-box; - -moz-box-sizing: border-box; - position: absolute; - top: 0px; - bottom: 0px; - left: 0px; - right: 0px; - padding: 20px; -} - -.etcd-container.etcd-stats .etcd-graph .etcd-graph-container { - position: absolute; - top: 60px; - bottom: 20px; - left: 20px; - right: 20px; - box-sizing: border-box; - -moz-box-sizing: border-box; -} - - -/* Single Column Positioning */ -@media (max-width: 700px) { - .etcd-container.etcd-stats .etcd-list { - width: 100%; - left: 100%; - } - - .etcd-container.etcd-stats .etcd-graph { - left: 0%; - } - - .etcd-container.etcd-stats.etcd-table-reveal .etcd-graph { - left: -100%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - .etcd-container.etcd-stats.etcd-table-hide .etcd-graph { - left: 0%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - - } - .etcd-container.etcd-stats.etcd-table-hide .etcd-format-selector .etcd-selector-graph svg * { - fill: #428bca; - } - - .etcd-container.etcd-stats.etcd-table-hide .etcd-list { - left: 100%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - .etcd-container.etcd-stats.etcd-table-reveal .etcd-list { - left: 0%; - transition-property: all; - transition-duration: 250ms; - transition-timing-function: ease-in-out; - } - .etcd-container.etcd-stats.etcd-table-reveal .etcd-format-selector .etcd-selector-table svg * { - fill: #428bca; - } -} - -/* Double Column Positioning */ -@media (min-width: 700px) { - .etcd-container.etcd-stats .etcd-list { - width: 50%; - left: 50%; - } - - .etcd-container.etcd-stats .etcd-graph { - left: 0%; - width: 50%; - } - - .etcd-container.etcd-stats .etcd-format-selector { - display: none; - } -} diff --git a/mod/dashboard/app/views/browser.html b/mod/dashboard/app/views/browser.html deleted file mode 100644 index 35d15f5ec..000000000 --- a/mod/dashboard/app/views/browser.html +++ /dev/null @@ -1,73 +0,0 @@ -
- -
-
-
Error:
-
- -
-
-
Error:
-
- -
- - - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - -
NameTTL 
- {{key.key}} - -
-
-
-
-
- -
-
-
-
-
- -
- -
-
{{preview_message}}
-
-
-
Save and replicate this change?
-
- - Cancel -
-
-
-
- -
- - diff --git a/mod/dashboard/app/views/home.html b/mod/dashboard/app/views/home.html deleted file mode 100644 index 6a8941dc4..000000000 --- a/mod/dashboard/app/views/home.html +++ /dev/null @@ -1,4 +0,0 @@ -stats only -
-browser only -
diff --git a/mod/dashboard/app/views/stats.html b/mod/dashboard/app/views/stats.html deleted file mode 100644 index 5baecca6a..000000000 --- a/mod/dashboard/app/views/stats.html +++ /dev/null @@ -1,49 +0,0 @@ -
-
-
-
- - - - -
-
- - - - - -
-
-
-

Peer Latency

-
-
-
-
-

Peer List

- - - - - - - - - - - -
Peer NameLatency
-
{{peer.name}}(leader)
-
{{peer.name}}
-
-
-
{{peer.latency.current | number:1 }} ms
-
-
-
-
diff --git a/mod/dashboard/bower.json b/mod/dashboard/bower.json deleted file mode 100644 index 894aaeb91..000000000 --- a/mod/dashboard/bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "etcdDashboard", - "version": "0.0.0", - "dependencies": { - "angular": "~1.2.0-rc.2", - "json3": "~3.2.4", - "jquery": "~1.9.1", - "bootstrap-sass": "~2.3.1", - "es5-shim": "~2.0.8", - "angular-route": "~1.2.0-rc.2", - "angular-resource": "~1.2.0-rc.2", - "angular-cookies": "~1.2.0-rc.2", - "angular-sanitize": "~1.2.0-rc.2", - "d3": "~3.3.6", - "moment": "~2.3.0", - "underscore.string": "~2.3.3" - }, - "devDependencies": { - "angular-mocks": "~1.2.0-rc.2", - "underscore": "~1.5.2" - } -} diff --git a/mod/dashboard/build b/mod/dashboard/build deleted file mode 100755 index 13c38fc53..000000000 --- a/mod/dashboard/build +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -e - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd ${DIR} -git clean -x -f dist - -npm install -bower install -grunt build - -go get github.com/jteeuwen/go-bindata/... - -dirs= -for i in `find dist -type d`; do - dirs="${dirs} ${i}" -done - -${GOPATH}/bin/go-bindata -nomemcopy -pkg "resources" -o resources/resources.go -prefix dist ${dirs} diff --git a/mod/dashboard/dashboard.go b/mod/dashboard/dashboard.go deleted file mode 100644 index e64b3b3cc..000000000 --- a/mod/dashboard/dashboard.go +++ /dev/null @@ -1,63 +0,0 @@ -package dashboard - -import ( - "bytes" - "net/http" - "os" - "path" - "time" - - "github.com/coreos/etcd/log" - "github.com/coreos/etcd/mod/dashboard/resources" -) - -func memoryFileServer(w http.ResponseWriter, req *http.Request) { - log.Debugf("[recv] %s %s [%s]", req.Method, req.URL.Path, req.RemoteAddr) - upath := req.URL.Path - if len(upath) == 0 { - upath = "index.html" - } - - // TODO: use the new mux to do this work - dir, file := path.Split(upath) - if file == "browser" || file == "stats" { - file = file + ".html" - } - upath = path.Join(dir, file) - b, err := resources.Asset(upath) - - if err != nil { - http.Error(w, upath+": File not found", http.StatusNotFound) - return - } - - http.ServeContent(w, req, upath, time.Time{}, bytes.NewReader(b)) - return -} - -func getDashDir() string { - return os.Getenv("ETCD_DASHBOARD_DIR") -} - -// DashboardHttpHandler either uses the compiled in virtual filesystem for the -// dashboard assets or if ETCD_DASHBOARD_DIR is set uses that as the source of -// assets. -func HttpHandler() (handler http.Handler) { - handler = http.HandlerFunc(memoryFileServer) - - // Serve the dashboard from a filesystem if the magic env variable is enabled - dashDir := getDashDir() - if len(dashDir) != 0 { - log.Debugf("Using dashboard directory %s", dashDir) - handler = http.FileServer(http.Dir(dashDir)) - } - - return handler -} - -// Always returns the index.html page. -func IndexPage(w http.ResponseWriter, req *http.Request) { - dashDir := getDashDir() - http.ServeFile(w, req, path.Join(dashDir, "index.html")) - return -} diff --git a/mod/dashboard/karma-e2e.conf.js b/mod/dashboard/karma-e2e.conf.js deleted file mode 100644 index fa01484a0..000000000 --- a/mod/dashboard/karma-e2e.conf.js +++ /dev/null @@ -1,54 +0,0 @@ -// Karma configuration -// http://karma-runner.github.io/0.10/config/configuration-file.html - -module.exports = function(config) { - config.set({ - // base path, that will be used to resolve files and exclude - basePath: '', - - // testing framework to use (jasmine/mocha/qunit/...) - frameworks: ['ng-scenario'], - - // list of files / patterns to load in the browser - files: [ - 'test/e2e/**/*.js' - ], - - // list of files / patterns to exclude - exclude: [], - - // web server port - port: 8080, - - // level of logging - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari (only Mac) - // - PhantomJS - // - IE (only Windows) - browsers: ['Chrome'], - - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun: false - - // Uncomment the following lines if you are using grunt's server to run the tests - // proxies: { - // '/': 'http://localhost:9000/' - // }, - // URL root prevent conflicts with the site root - // urlRoot: '_karma_' - }); -}; diff --git a/mod/dashboard/karma.conf.js b/mod/dashboard/karma.conf.js deleted file mode 100644 index fae04e3aa..000000000 --- a/mod/dashboard/karma.conf.js +++ /dev/null @@ -1,52 +0,0 @@ -// Karma configuration -// http://karma-runner.github.io/0.10/config/configuration-file.html - -module.exports = function(config) { - config.set({ - // base path, that will be used to resolve files and exclude - basePath: '', - - // testing framework to use (jasmine/mocha/qunit/...) - frameworks: ['jasmine'], - - // list of files / patterns to load in the browser - files: [ - 'app/bower_components/angular/angular.js', - 'app/bower_components/angular-mocks/angular-mocks.js', - 'app/scripts/*.js', - 'app/scripts/**/*.js', - 'test/mock/**/*.js', - 'test/spec/**/*.js' - ], - - // list of files / patterns to exclude - exclude: [], - - // web server port - port: 8080, - - // level of logging - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari (only Mac) - // - PhantomJS - // - IE (only Windows) - browsers: ['Chrome'], - - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun: false - }); -}; diff --git a/mod/dashboard/package.json b/mod/dashboard/package.json deleted file mode 100644 index d6625d754..000000000 --- a/mod/dashboard/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "etcd-dashboard", - "version": "0.0.0", - "dependencies": {}, - "devDependencies": { - "grunt": "~0.4.1", - "grunt-contrib-copy": "~0.4.1", - "grunt-contrib-concat": "~0.3.0", - "grunt-contrib-coffee": "~0.7.0", - "grunt-contrib-uglify": "~0.2.0", - "grunt-contrib-compass": "~0.5.0", - "grunt-contrib-jshint": "~0.6.0", - "grunt-contrib-cssmin": "~0.6.0", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-htmlmin": "~0.1.3", - "grunt-contrib-imagemin": "~0.2.0", - "grunt-contrib-watch": "~0.5.2", - "grunt-autoprefixer": "~0.2.0", - "grunt-usemin": "~2.0.2", - "grunt-svgmin": "~0.2.0", - "grunt-rev": "~0.1.0", - "grunt-open": "~0.2.0", - "grunt-concurrent": "~0.3.0", - "load-grunt-tasks": "~0.1.0", - "grunt-google-cdn": "~0.2.0", - "grunt-ngmin": "~0.0.2", - "time-grunt": "~0.1.0", - "grunt-karma": "~0.6.2" - }, - "engines": { - "node": ">=0.8.0" - }, - "scripts": { - "test": "grunt test" - } -} diff --git a/mod/dashboard/test/.jshintrc b/mod/dashboard/test/.jshintrc deleted file mode 100644 index aa37e7a4d..000000000 --- a/mod/dashboard/test/.jshintrc +++ /dev/null @@ -1,35 +0,0 @@ -{ - "node": true, - "browser": true, - "esnext": true, - "bitwise": true, - "camelcase": true, - "curly": true, - "eqeqeq": true, - "immed": true, - "indent": 2, - "latedef": true, - "newcap": true, - "noarg": true, - "quotmark": "single", - "regexp": true, - "undef": true, - "unused": true, - "strict": true, - "trailing": true, - "smarttabs": true, - "globals": { - "after": false, - "afterEach": false, - "angular": false, - "before": false, - "beforeEach": false, - "browser": false, - "describe": false, - "expect": false, - "inject": false, - "it": false, - "spyOn": false - } -} - diff --git a/mod/dashboard/test/runner.html b/mod/dashboard/test/runner.html deleted file mode 100644 index f4a00a12b..000000000 --- a/mod/dashboard/test/runner.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - End2end Test Runner - - - - - - \ No newline at end of file diff --git a/mod/dashboard/test/spec/controllers/main.js b/mod/dashboard/test/spec/controllers/main.js deleted file mode 100644 index ef4dea5e5..000000000 --- a/mod/dashboard/test/spec/controllers/main.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -describe('Controller: MainCtrl', function () { - - // load the controller's module - beforeEach(module('etcdDashboardApp')); - - var MainCtrl, - scope; - - // Initialize the controller and a mock scope - beforeEach(inject(function ($controller, $rootScope) { - scope = $rootScope.$new(); - MainCtrl = $controller('MainCtrl', { - $scope: scope - }); - })); - - it('should attach a list of awesomeThings to the scope', function () { - expect(scope.awesomeThings.length).toBe(3); - }); -}); From 35ddb6627e6abb9ff177d8099d1b1ec3f847b525 Mon Sep 17 00:00:00 2001 From: Ed Rooth Date: Thu, 10 Apr 2014 10:52:08 -0700 Subject: [PATCH 03/10] chore(dashboard): move dashboard server & fix routing. --- mod/dashboard/build | 18 +++++++++++ mod/dashboard/dashboard.go | 61 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100755 mod/dashboard/build create mode 100644 mod/dashboard/dashboard.go diff --git a/mod/dashboard/build b/mod/dashboard/build new file mode 100755 index 000000000..13c38fc53 --- /dev/null +++ b/mod/dashboard/build @@ -0,0 +1,18 @@ +#!/bin/bash -e + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd ${DIR} +git clean -x -f dist + +npm install +bower install +grunt build + +go get github.com/jteeuwen/go-bindata/... + +dirs= +for i in `find dist -type d`; do + dirs="${dirs} ${i}" +done + +${GOPATH}/bin/go-bindata -nomemcopy -pkg "resources" -o resources/resources.go -prefix dist ${dirs} diff --git a/mod/dashboard/dashboard.go b/mod/dashboard/dashboard.go new file mode 100644 index 000000000..51fd53bc7 --- /dev/null +++ b/mod/dashboard/dashboard.go @@ -0,0 +1,61 @@ +package dashboard + +import ( + "bytes" + "net/http" + "os" + "path" + "time" + + "github.com/coreos/etcd/log" + "github.com/coreos/etcd/mod/dashboard/resources" +) + +func memoryFileServer(w http.ResponseWriter, req *http.Request) { + log.Debugf("[recv] %s %s [%s]", req.Method, req.URL.Path, req.RemoteAddr) + upath := req.URL.Path + + b, err := resources.Asset(req.URL.Path) + + if err != nil { + http.Error(w, upath+": File not found", http.StatusNotFound) + return + } + + http.ServeContent(w, req, upath, time.Time{}, bytes.NewReader(b)) + return +} + +func getDashDir() string { + return os.Getenv("ETCD_DASHBOARD_DIR") +} + +// DashboardHttpHandler either uses the compiled in virtual filesystem for the +// dashboard assets or if ETCD_DASHBOARD_DIR is set uses that as the source of +// assets. +func HttpHandler() (handler http.Handler) { + handler = http.HandlerFunc(memoryFileServer) + + // Serve the dashboard from a filesystem if the magic env variable is enabled + dashDir := getDashDir() + if len(dashDir) != 0 { + log.Debugf("Using dashboard directory %s", dashDir) + handler = http.FileServer(http.Dir(dashDir)) + } + + return handler +} + +// Always returns the index.html page. +func IndexPage(w http.ResponseWriter, req *http.Request) { + dashDir := getDashDir() + if len(dashDir) != 0 { + // Serve the index page from disk if the env variable is set. + http.ServeFile(w, req, path.Join(dashDir, "index.html")) + } else { + // Otherwise serve it from the compiled resources. + b, _ := resources.Asset("index.html") + http.ServeContent(w, req, "index.html", time.Time{}, bytes.NewReader(b)) + } + return +} From 151b9c6ed27b7e7e3bc7a2c84c0e4f2c0375f312 Mon Sep 17 00:00:00 2001 From: Ed Rooth Date: Thu, 10 Apr 2014 10:53:34 -0700 Subject: [PATCH 04/10] feat(dashboard): project setup --- mod/dashboard/.bowerrc | 3 + mod/dashboard/.gitignore | 6 + mod/dashboard/Gruntfile.js | 289 +++++++++++++++++++++++++++++++++++ mod/dashboard/LICENSE | 202 ++++++++++++++++++++++++ mod/dashboard/README.md | 41 +++++ mod/dashboard/app/index.html | 101 ++++++------ mod/dashboard/bower.json | 19 +++ mod/dashboard/karma.conf.js | 77 ++++++++++ mod/dashboard/package.json | 28 ++++ mod/dashboard/setup | 12 ++ 10 files changed, 730 insertions(+), 48 deletions(-) create mode 100644 mod/dashboard/.bowerrc create mode 100644 mod/dashboard/.gitignore create mode 100644 mod/dashboard/Gruntfile.js create mode 100644 mod/dashboard/LICENSE create mode 100644 mod/dashboard/README.md create mode 100644 mod/dashboard/bower.json create mode 100644 mod/dashboard/karma.conf.js create mode 100644 mod/dashboard/package.json create mode 100755 mod/dashboard/setup diff --git a/mod/dashboard/.bowerrc b/mod/dashboard/.bowerrc new file mode 100644 index 000000000..5773025bf --- /dev/null +++ b/mod/dashboard/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components" +} diff --git a/mod/dashboard/.gitignore b/mod/dashboard/.gitignore new file mode 100644 index 000000000..96d976e2c --- /dev/null +++ b/mod/dashboard/.gitignore @@ -0,0 +1,6 @@ +/go-bindata +node_modules +dist +.tmp +app/compiled +app/bower_components diff --git a/mod/dashboard/Gruntfile.js b/mod/dashboard/Gruntfile.js new file mode 100644 index 000000000..760780bdc --- /dev/null +++ b/mod/dashboard/Gruntfile.js @@ -0,0 +1,289 @@ +'use strict'; + +module.exports = function(grunt) { + /*jshint maxstatements:false */ + + require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); + + grunt.initConfig({ + + config: { + appName: 'etcd-dashboard', + appPath: 'app', + bowerPath: 'app/bower_components', + tmpPath: '.tmp', + distPath: 'dist' + }, + + watch: { + css: { + files: ['<%= config.appPath %>/{page,ui,style}/{**/,}*.scss'], + tasks: ['sass'] + }, + html: { + files: [ + '<%= config.appPath %>/{module,ui,page}/**/*.html' + ], + tasks: ['views'] + }, + js: { + files: [ + '<%= config.appPath %>/{module,page}/**/*.js', + '<%= config.appPath %>/*.js' + ], + tasks: ['jshint'] + } + }, + + concurrent: { + dev: { + tasks: ['watch', /*'test-watch'*/], + options: { + logConcurrentOutput: true + } + } + }, + + clean: { + tmp: { + files: [{ + dot: true, + src: [ + '<%= config.tmpPath %>', + '.sass-cache/**/*' + ] + }] + }, + dist: { + files: [{ + dot: true, + src: [ + '<%= config.distPath %>/*' + ] + }] + }, + 'dist-static': { + files: [{ + dot: true, + src: [ + '<%= config.distPath %>/cp/**' + ] + }] + }, + compiled: { + files: [{ + dot: true, + src: [ + '<%= config.appPath %>/compiled/**' + ] + }] + } + }, + + // JS code linting. + jshint: { + options: { + camelcase: true, + curly: true, + eqeqeq: true, + eqnull: true, + forin: true, + freeze: true, + immed: true, + indent: 2, + latedef: true, + maxcomplexity: 10, + maxdepth: 3, + maxlen: 80, + maxparams: 20, + maxstatements: 200, + newcap: true, + noarg: true, + node: true, + noempty: true, + nonew: true, + nonbsp: true, + quotmark: 'single', + strict: true, + sub: true, + trailing: true, + undef: true, + unused: true + }, + src: { + node: false, + options: { + globals: { + angular: true, + window: true + } + }, + files: { + src: [ + '<%= config.appPath %>/*.js', + '<%= config.appPath %>/{module,page}**/*.js' + ] + } + } + }, + + // Compile SCSS to CSS. + sass: { + etcd: { + options: { + includePaths: ['<%= config.appPath %>/coreos-web/sass'], + outputStyle: 'nested' + }, + files: { + '<%= config.appPath %>/compiled/main.css': '<%= config.appPath %>/main.scss' + } + } + }, + + /** + * Generate grunt configs for concat, uglify, cssmin. + */ + useminPrepare: { + html: '<%= config.appPath %>/index.html', + options: { + dest: '<%= config.distPath %>' + } + }, + + usemin: { + html: ['<%= config.distPath %>/index.html'] + }, + + // This block gets generated by usemin. + cssmin: { + }, + + // This block gets generated by usemin. + uglify: { + }, + + // This block gets generated by usemin. + concat: { + }, + + // Make our angular code minification friendly. + ngmin: { + dist: { + files: [{ + src: '<%= config.tmpPath %>/concat/app.js', + dest: '<%= config.tmpPath %>/concat/app.js' + }] + } + }, + + copy: { + dist: { + files: [{ + expand: true, + cwd: '<%= config.appPath %>', + src: ['index.html'], + dest: '<%= config.distPath %>' + }] + }, + images: { + files: [{ + expand: true, + cwd: '<%= config.appPath %>/img', + src: ['**'], + dest: '<%= config.distPath %>/img' + }] + }, + 'dist-static': { + files: [ + { + expand: true, + flatten: true, + src: [ + '<%= config.distPath %>/cp/static/*' + ], + dest: '<%= config.distPath %>' + } + ] + } + }, + + // Precompile html views into a single javascript file. + html2js: { + options: { + base: '<%= config.appPath %>', + rename: function(moduleName) { + return '/' + moduleName; + } + }, + views: { + src: [ + '<%= config.appPath %>/{page,ui,module}/**/*.html' + ], + dest: '<%= config.appPath %>/compiled/views.js' + } + } + + }); + + grunt.registerTask('clean-paths', 'clean up resource paths', function() { + grunt.log.writeln('cleaning paths...'); + function clean(path) { + return path.replace('cp/static/', ''); + } + ['concat', 'uglify', 'cssmin'].forEach(function(task) { + var config = grunt.config(task); + + config.generated.files.forEach(function(fileGroup) { + fileGroup.dest = clean(fileGroup.dest); + fileGroup.src = fileGroup.src.map(function(path) { + return clean(path); + }); + }); + grunt.config(task, config); + grunt.log.ok(task + ' config is now:'); + grunt.log.writeln(util.inspect(grunt.config(task), false, 4, true)); + }); + }); + + grunt.registerTask('test', [ + 'views', + 'karma:unit' + ]); + + grunt.registerTask('test-watch', [ + 'karma:dev' + ]); + + grunt.registerTask('views', [ + 'html2js:views' + ]); + + grunt.registerTask('dev', [ + 'clean', + //'jshint', + 'views', + 'sass', + 'concurrent:dev' + ]); + + grunt.registerTask('build', [ + 'clean', + 'jshint', + 'views', + 'test', + 'sass', + 'useminPrepare', + 'clean-paths', + 'concat', + 'ngmin:dist', + 'uglify', + 'cssmin', + 'copy:dist', + 'usemin', + 'copy:dist-static', + 'clean:dist-static', + 'copy:images' + ]); + + grunt.registerTask('default', ['build']); +}; diff --git a/mod/dashboard/LICENSE b/mod/dashboard/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/mod/dashboard/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/mod/dashboard/README.md b/mod/dashboard/README.md new file mode 100644 index 000000000..68eca5aca --- /dev/null +++ b/mod/dashboard/README.md @@ -0,0 +1,41 @@ +# etcd Dashboard + +## Developing + +If you'd like to contribute to the etcd dashboard mod, follow these instructions. For contributing to the rest of etcd, see the contributing document in the root of the repository. + +### Install Dependencies + +Requires nodejs. + +Run all commands from within the `/mod/dashboard` directory. + +run `./setup` to install npm modules and bower front-end dependencies. + +To run a non-compiled development version of the dashboard: + +Continually compile html templates, sass/css, and run unit tests. + +``` +grunt dev +``` + +Export an environment varible to notify etcd of the dashboard source code location: + +``` +export ETCD_DASHBOARD_DIR=./mod/dashboard/app +``` + +Run local etc as usual (be sure to include the cors flag). + +``` +// from etcd root dir +./bin/etcd -cors="*" +``` + +Alternatively, build the optimized production-build version of the website and run etcd as above: + +``` +grunt +export ETCD_DASHBOARD_DIR=./mod/dashboard/dist +``` diff --git a/mod/dashboard/app/index.html b/mod/dashboard/app/index.html index 23da59a5e..3d0187402 100644 --- a/mod/dashboard/app/index.html +++ b/mod/dashboard/app/index.html @@ -1,63 +1,68 @@ + - - + - - etcd dashboard + + etcd - - - - - - - - - + + + + - -

etcd Dashboard

+ -
+ + + + +
+
- + + Documentation + IRC #coreos + - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/mod/dashboard/bower.json b/mod/dashboard/bower.json new file mode 100644 index 000000000..f585ac8f2 --- /dev/null +++ b/mod/dashboard/bower.json @@ -0,0 +1,19 @@ +{ + "name": "etcd-dashboard", + "version": "2.0.0", + "dependencies": { + "angular": "latest", + "angular-resource": "latest", + "angular-route": "latest", + "angular-bootstrap": "latest", + "underscore": "latest", + "underscore.string": "latest", + "jquery": "latest", + "d3": "latest", + "angular-animate": "latest", + "font-awesome": "~4.0.3" + }, + "devDependencies": { + "angular-mocks": "latest" + } +} diff --git a/mod/dashboard/karma.conf.js b/mod/dashboard/karma.conf.js new file mode 100644 index 000000000..14ff35a0d --- /dev/null +++ b/mod/dashboard/karma.conf.js @@ -0,0 +1,77 @@ +var path = require('path'), + APP_CONFIG = require('config'); + +module.exports = function(config) { + + function bowerPath(dir) { + return path.join(APP_CONFIG.bowerPath, dir); + } + + function appPath(dir) { + return path.join(APP_CONFIG.appPath, dir); + } + + function testPath(dir) { + return path.join(APP_CONFIG.testPath, dir); + } + + config.set({ + + // Base path, that will be used to resolve files and exclude. + basePath: __dirname, + + // Test framework to use. + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: [ + // TODO: programatically generate list of bower components + bowerPath('/angular/angular.js'), + bowerPath('/angular-route/angular-route.js'), + bowerPath('/angular-resource/angular-resource.js'), + bowerPath('/angular-animate/angular-animate.js'), + bowerPath('/angular-mocks/angular-mocks.js'), + bowerPath('/angular-bootstrap/ui-bootstrap-tpls.js'), + bowerPath('/underscore/underscore.js'), + bowerPath('/underscore.string/lib/underscore.string.js'), + bowerPath('/jquery/dist/jquery.js'), + bowerPath('/d3/d3.js'), + + // Tests & test helper files. + testPath('/util/**/*.js'), + testPath('/mock/**/*.js'), + testPath('/**/*.spec.js'), + + // Actual client-side code. + appPath('/*.js'), + appPath('/compiled/*.js'), + appPath('/{directive,module,service,filter,coreos}/**/*.js') + ], + + reporters: ['progress'], + + // web server port + port: 8100, + + // cli runner port + runnerPort: 9100, + + colors: true, + + // LOG_DISABLE, LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG + logLevel: config.LOG_INFO, + + autoWatch: false, + + browsers: ['Chrome'], + + // If browser does not capture in given timeout [ms], kill it + captureTimeout: 5000, + + // Continuous Integration mode. + // If true, it capture browsers, run tests and exit. + singleRun: true + + }); + +}; diff --git a/mod/dashboard/package.json b/mod/dashboard/package.json new file mode 100644 index 000000000..b584dd0b5 --- /dev/null +++ b/mod/dashboard/package.json @@ -0,0 +1,28 @@ +{ + "name": "etcd-dashboard", + "version": "2.0.0", + "dependencies": {}, + "devDependencies": { + "config": "~0.4.35", + "grunt": "latest", + "grunt-contrib-clean": "latest", + "grunt-contrib-copy": "latest", + "grunt-contrib-concat": "latest", + "grunt-contrib-jshint": "0.8.0", + "grunt-contrib-uglify": "latest", + "grunt-contrib-cssmin": "latest", + "grunt-contrib-watch": "latest", + "grunt-usemin": "latest", + "grunt-karma": "~0.8.0", + "karma-jasmine": "~0.1.5", + "grunt-ngmin": "latest", + "grunt-html2js": "latest", + "grunt-concurrent": "~0.4.3", + "matchdep": "latest", + "grunt-sass": "~0.11.0", + "karma-chrome-launcher": "~0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } +} diff --git a/mod/dashboard/setup b/mod/dashboard/setup new file mode 100755 index 000000000..d20e69aea --- /dev/null +++ b/mod/dashboard/setup @@ -0,0 +1,12 @@ +#!/bin/bash -e + +echo "installing global node modules..." +sudo npm install -g jshint bower grunt-cli + +echo "installing local node modules..." +npm install + +echo "installing bower client modules..." +bower --allow-root install + +echo "done" From 9e5ada880d9456f325b3ca1d4cfa3439676116ed Mon Sep 17 00:00:00 2001 From: Ed Rooth Date: Thu, 10 Apr 2014 10:56:12 -0700 Subject: [PATCH 05/10] feat(dashboard): key/value browser. --- mod/dashboard/app/404.html | 31 + mod/dashboard/app/coreos-web/coreos.css | 6728 +++++++++++++++++ mod/dashboard/app/coreos-web/coreos.js | 1957 +++++ mod/dashboard/app/coreos-web/coreos.min.css | 1 + mod/dashboard/app/coreos-web/coreos.min.js | 3 + mod/dashboard/app/coreos-web/coreos.min.map | 1 + .../app/coreos-web/fonts/FontAwesome.otf | Bin 0 -> 62856 bytes .../coreos-web/fonts/fontawesome-webfont.eot | Bin 0 -> 38205 bytes .../coreos-web/fonts/fontawesome-webfont.svg | 414 + .../coreos-web/fonts/fontawesome-webfont.ttf | Bin 0 -> 80652 bytes .../coreos-web/fonts/fontawesome-webfont.woff | Bin 0 -> 44432 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20290 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41236 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23292 bytes .../fonts/sourcesanspro-black-webfont.eot | Bin 0 -> 25903 bytes .../fonts/sourcesanspro-black-webfont.svg | 916 +++ .../fonts/sourcesanspro-black-webfont.ttf | Bin 0 -> 66444 bytes .../fonts/sourcesanspro-black-webfont.woff | Bin 0 -> 28632 bytes .../sourcesanspro-blackitalic-webfont.eot | Bin 0 -> 27548 bytes .../sourcesanspro-blackitalic-webfont.svg | 814 ++ .../sourcesanspro-blackitalic-webfont.ttf | Bin 0 -> 66480 bytes .../sourcesanspro-blackitalic-webfont.woff | Bin 0 -> 30620 bytes .../fonts/sourcesanspro-bold-webfont.eot | Bin 0 -> 26610 bytes .../fonts/sourcesanspro-bold-webfont.svg | 957 +++ .../fonts/sourcesanspro-bold-webfont.ttf | Bin 0 -> 67024 bytes .../fonts/sourcesanspro-bold-webfont.woff | Bin 0 -> 29348 bytes .../sourcesanspro-bolditalic-webfont.eot | Bin 0 -> 28096 bytes .../sourcesanspro-bolditalic-webfont.svg | 833 ++ .../sourcesanspro-bolditalic-webfont.ttf | Bin 0 -> 67392 bytes .../sourcesanspro-bolditalic-webfont.woff | Bin 0 -> 31092 bytes .../sourcesanspro-extralight-webfont.eot | Bin 0 -> 26270 bytes .../sourcesanspro-extralight-webfont.svg | 907 +++ .../sourcesanspro-extralight-webfont.ttf | Bin 0 -> 67804 bytes .../sourcesanspro-extralight-webfont.woff | Bin 0 -> 28884 bytes ...sourcesanspro-extralightitalic-webfont.eot | Bin 0 -> 28117 bytes ...sourcesanspro-extralightitalic-webfont.svg | 830 ++ ...sourcesanspro-extralightitalic-webfont.ttf | Bin 0 -> 69868 bytes ...ourcesanspro-extralightitalic-webfont.woff | Bin 0 -> 31280 bytes .../fonts/sourcesanspro-italic-webfont.eot | Bin 0 -> 28206 bytes .../fonts/sourcesanspro-italic-webfont.svg | 845 +++ .../fonts/sourcesanspro-italic-webfont.ttf | Bin 0 -> 66732 bytes .../fonts/sourcesanspro-italic-webfont.woff | Bin 0 -> 31224 bytes .../fonts/sourcesanspro-light-webfont.eot | Bin 0 -> 26837 bytes .../fonts/sourcesanspro-light-webfont.svg | 906 +++ .../fonts/sourcesanspro-light-webfont.ttf | Bin 0 -> 67820 bytes .../fonts/sourcesanspro-light-webfont.woff | Bin 0 -> 29456 bytes .../sourcesanspro-lightitalic-webfont.eot | Bin 0 -> 28586 bytes .../sourcesanspro-lightitalic-webfont.svg | 832 ++ .../sourcesanspro-lightitalic-webfont.ttf | Bin 0 -> 69608 bytes .../sourcesanspro-lightitalic-webfont.woff | Bin 0 -> 31648 bytes .../fonts/sourcesanspro-regular-webfont.eot | Bin 0 -> 27086 bytes .../fonts/sourcesanspro-regular-webfont.svg | 980 +++ .../fonts/sourcesanspro-regular-webfont.ttf | Bin 0 -> 68416 bytes .../fonts/sourcesanspro-regular-webfont.woff | Bin 0 -> 29748 bytes .../fonts/sourcesanspro-semibold-webfont.eot | Bin 0 -> 27157 bytes .../fonts/sourcesanspro-semibold-webfont.svg | 970 +++ .../fonts/sourcesanspro-semibold-webfont.ttf | Bin 0 -> 67708 bytes .../fonts/sourcesanspro-semibold-webfont.woff | Bin 0 -> 29880 bytes .../sourcesanspro-semibolditalic-webfont.eot | Bin 0 -> 28166 bytes .../sourcesanspro-semibolditalic-webfont.svg | 840 ++ .../sourcesanspro-semibolditalic-webfont.ttf | Bin 0 -> 66896 bytes .../sourcesanspro-semibolditalic-webfont.woff | Bin 0 -> 31160 bytes .../img/apple-touch-icon-114-precomposed.png | Bin 0 -> 3335 bytes .../img/apple-touch-icon-144-precomposed.png | Bin 0 -> 3942 bytes .../img/apple-touch-icon-57-precomposed.png | Bin 0 -> 2117 bytes .../img/apple-touch-icon-72-precomposed.png | Bin 0 -> 2460 bytes mod/dashboard/app/coreos-web/img/favicon.png | Bin 0 -> 1615 bytes .../app/coreos-web/img/globe-only.svg | 20 + .../app/coreos-web/img/google-plus.png | Bin 0 -> 481 bytes mod/dashboard/app/coreos-web/img/hexagons.png | Bin 0 -> 7381 bytes mod/dashboard/app/coreos-web/img/icon-add.svg | 7 + .../app/coreos-web/img/icon-back.svg | 6 + .../app/coreos-web/img/icon-delete.svg | 7 + .../app/coreos-web/img/icon-reboot.svg | 15 + .../app/coreos-web/img/icon-right-arrow.svg | 9 + mod/dashboard/app/coreos-web/img/logo.svg | 46 + mod/dashboard/app/coreos-web/img/xyz-grid.png | Bin 0 -> 3915 bytes .../app/coreos-web/sass/_color-pallette.scss | 51 + .../app/coreos-web/sass/_config.scss | 48 + .../app/coreos-web/sass/_path-config.scss | 16 + .../app/coreos-web/sass/compass/_css3.scss | 20 + .../app/coreos-web/sass/compass/_layout.scss | 3 + .../sass/compass/_reset-legacy.scss | 3 + .../app/coreos-web/sass/compass/_reset.scss | 3 + .../app/coreos-web/sass/compass/_support.scss | 40 + .../coreos-web/sass/compass/_typography.scss | 4 + .../coreos-web/sass/compass/_utilities.scss | 9 + .../sass/compass/css3/_appearance.scss | 17 + .../sass/compass/css3/_background-clip.scss | 43 + .../sass/compass/css3/_background-origin.scss | 42 + .../sass/compass/css3/_background-size.scss | 26 + .../sass/compass/css3/_border-radius.scss | 130 + .../sass/compass/css3/_box-shadow.scss | 76 + .../sass/compass/css3/_box-sizing.scss | 13 + .../coreos-web/sass/compass/css3/_box.scss | 111 + .../sass/compass/css3/_columns.scss | 157 + .../coreos-web/sass/compass/css3/_filter.scss | 23 + .../sass/compass/css3/_font-face.scss | 48 + .../sass/compass/css3/_hyphenation.scss | 77 + .../coreos-web/sass/compass/css3/_images.scss | 132 + .../sass/compass/css3/_inline-block.scss | 22 + .../sass/compass/css3/_opacity.scss | 19 + .../coreos-web/sass/compass/css3/_pie.scss | 73 + .../sass/compass/css3/_regions.scss | 22 + .../coreos-web/sass/compass/css3/_shared.scss | 38 + .../sass/compass/css3/_text-shadow.scss | 87 + .../sass/compass/css3/_transform-legacy.scss | 87 + .../sass/compass/css3/_transform.scss | 598 ++ .../sass/compass/css3/_transition.scss | 221 + .../sass/compass/css3/_user-interface.scss | 17 + .../sass/compass/layout/_grid-background.scss | 178 + .../sass/compass/layout/_sticky-footer.scss | 23 + .../sass/compass/layout/_stretching.scss | 24 + .../sass/compass/reset/_utilities-legacy.scss | 135 + .../sass/compass/reset/_utilities.scss | 142 + .../sass/compass/typography/_links.scss | 3 + .../sass/compass/typography/_lists.scss | 4 + .../sass/compass/typography/_text.scss | 4 + .../compass/typography/_vertical_rhythm.scss | 221 + .../compass/typography/links/_hover-link.scss | 5 + .../typography/links/_link-colors.scss | 28 + .../typography/links/_unstyled-link.scss | 7 + .../compass/typography/lists/_bullets.scss | 34 + .../typography/lists/_horizontal-list.scss | 61 + .../typography/lists/_inline-block-list.scss | 50 + .../typography/lists/_inline-list.scss | 44 + .../compass/typography/text/_ellipsis.scss | 25 + .../compass/typography/text/_force-wrap.scss | 12 + .../sass/compass/typography/text/_nowrap.scss | 2 + .../compass/typography/text/_replacement.scss | 68 + .../sass/compass/utilities/_color.scss | 1 + .../sass/compass/utilities/_general.scss | 6 + .../sass/compass/utilities/_links.scss | 5 + .../sass/compass/utilities/_lists.scss | 6 + .../sass/compass/utilities/_print.scss | 17 + .../sass/compass/utilities/_sprites.scss | 2 + .../sass/compass/utilities/_tables.scss | 3 + .../sass/compass/utilities/_text.scss | 5 + .../compass/utilities/color/_contrast.scss | 28 + .../compass/utilities/general/_clearfix.scss | 44 + .../compass/utilities/general/_float.scss | 30 + .../compass/utilities/general/_hacks.scss | 46 + .../sass/compass/utilities/general/_min.scss | 16 + .../compass/utilities/general/_reset.scss | 2 + .../sass/compass/utilities/general/_tabs.scss | 1 + .../compass/utilities/general/_tag-cloud.scss | 18 + .../compass/utilities/links/_hover-link.scss | 3 + .../compass/utilities/links/_link-colors.scss | 3 + .../utilities/links/_unstyled-link.scss | 3 + .../compass/utilities/lists/_bullets.scss | 3 + .../utilities/lists/_horizontal-list.scss | 3 + .../utilities/lists/_inline-block-list.scss | 3 + .../compass/utilities/lists/_inline-list.scss | 3 + .../sass/compass/utilities/sprites/_base.scss | 66 + .../utilities/sprites/_sprite-img.scss | 79 + .../tables/_alternating-rows-and-columns.scss | 22 + .../compass/utilities/tables/_borders.scss | 33 + .../utilities/tables/_scaffolding.scss | 9 + .../compass/utilities/text/_ellipsis.scss | 3 + .../sass/compass/utilities/text/_nowrap.scss | 3 + .../compass/utilities/text/_replacement.scss | 3 + .../app/coreos-web/sass/mixin/_animation.scss | 46 + .../coreos-web/sass/mixin/_custom-font.scss | 19 + .../app/coreos-web/sass/mixin/_keyframes.scss | 15 + .../coreos-web/sass/mixin/_media-query.scss | 10 + .../app/coreos-web/sass/mixin/_prefix.scss | 9 + mod/dashboard/app/etcd-dashboard.js | 106 + mod/dashboard/app/main.scss | 24 + mod/dashboard/app/module/etcd-event.js | 6 + mod/dashboard/app/module/node.js | 114 + mod/dashboard/app/module/path.js | 78 + mod/dashboard/app/page/browser/_browser.scss | 30 + .../app/page/browser/_edit-node.scss | 3 + .../app/page/browser/_node-info.scss | 9 + .../app/page/browser/browser-ctrl.js | 83 + mod/dashboard/app/page/browser/browser.html | 56 + .../app/page/browser/create-node-ctrl.js | 52 + .../app/page/browser/create-node.html | 94 + .../app/page/browser/edit-node-ctrl.js | 45 + mod/dashboard/app/page/browser/edit-node.html | 54 + .../app/page/browser/edit-ttl-ctrl.js | 38 + mod/dashboard/app/page/browser/edit-ttl.html | 33 + .../app/page/browser/node-info-ctrl.js | 16 + mod/dashboard/app/page/browser/node-info.html | 28 + mod/dashboard/app/page/stats/_stats.scss | 0 mod/dashboard/app/page/stats/stats-ctrl.js | 7 + mod/dashboard/app/page/stats/stats.html | 1 + mod/dashboard/app/ui/_breadcrumb.scss | 3 + mod/dashboard/app/ui/breadcrumb.html | 11 + mod/dashboard/app/ui/breadcrumb.js | 43 + mod/dashboard/app/ui/node-cog.html | 3 + mod/dashboard/app/ui/node-cog.js | 98 + 193 files changed, 25053 insertions(+) create mode 100644 mod/dashboard/app/404.html create mode 100644 mod/dashboard/app/coreos-web/coreos.css create mode 100644 mod/dashboard/app/coreos-web/coreos.js create mode 100644 mod/dashboard/app/coreos-web/coreos.min.css create mode 100644 mod/dashboard/app/coreos-web/coreos.min.js create mode 100644 mod/dashboard/app/coreos-web/coreos.min.map create mode 100644 mod/dashboard/app/coreos-web/fonts/FontAwesome.otf create mode 100644 mod/dashboard/app/coreos-web/fonts/fontawesome-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/fontawesome-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/fontawesome-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/fontawesome-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/glyphicons-halflings-regular.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/glyphicons-halflings-regular.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/glyphicons-halflings-regular.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/glyphicons-halflings-regular.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-black-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-black-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-black-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-black-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-blackitalic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-blackitalic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-blackitalic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-blackitalic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bold-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bold-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bold-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bold-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bolditalic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bolditalic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bolditalic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-bolditalic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralight-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralight-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralight-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralight-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralightitalic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralightitalic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralightitalic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-extralightitalic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-italic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-italic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-italic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-italic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-light-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-light-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-light-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-light-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-lightitalic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-lightitalic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-lightitalic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-lightitalic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-regular-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-regular-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-regular-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-regular-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibold-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibold-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibold-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibold-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibolditalic-webfont.eot create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibolditalic-webfont.svg create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibolditalic-webfont.ttf create mode 100644 mod/dashboard/app/coreos-web/fonts/sourcesanspro-semibolditalic-webfont.woff create mode 100644 mod/dashboard/app/coreos-web/img/apple-touch-icon-114-precomposed.png create mode 100644 mod/dashboard/app/coreos-web/img/apple-touch-icon-144-precomposed.png create mode 100644 mod/dashboard/app/coreos-web/img/apple-touch-icon-57-precomposed.png create mode 100644 mod/dashboard/app/coreos-web/img/apple-touch-icon-72-precomposed.png create mode 100644 mod/dashboard/app/coreos-web/img/favicon.png create mode 100644 mod/dashboard/app/coreos-web/img/globe-only.svg create mode 100644 mod/dashboard/app/coreos-web/img/google-plus.png create mode 100644 mod/dashboard/app/coreos-web/img/hexagons.png create mode 100644 mod/dashboard/app/coreos-web/img/icon-add.svg create mode 100644 mod/dashboard/app/coreos-web/img/icon-back.svg create mode 100644 mod/dashboard/app/coreos-web/img/icon-delete.svg create mode 100644 mod/dashboard/app/coreos-web/img/icon-reboot.svg create mode 100644 mod/dashboard/app/coreos-web/img/icon-right-arrow.svg create mode 100644 mod/dashboard/app/coreos-web/img/logo.svg create mode 100644 mod/dashboard/app/coreos-web/img/xyz-grid.png create mode 100644 mod/dashboard/app/coreos-web/sass/_color-pallette.scss create mode 100644 mod/dashboard/app/coreos-web/sass/_config.scss create mode 100644 mod/dashboard/app/coreos-web/sass/_path-config.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_css3.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_layout.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_reset-legacy.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_reset.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_support.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_typography.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/_utilities.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_appearance.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_background-clip.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_background-origin.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_background-size.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_border-radius.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_box-shadow.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_box-sizing.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_box.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_columns.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_filter.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_font-face.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_hyphenation.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_images.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_inline-block.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_opacity.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_pie.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_regions.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_shared.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_text-shadow.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_transform-legacy.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_transform.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_transition.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/css3/_user-interface.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/layout/_grid-background.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/layout/_sticky-footer.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/layout/_stretching.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/reset/_utilities-legacy.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/reset/_utilities.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/_links.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/_lists.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/_text.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/_vertical_rhythm.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/links/_hover-link.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/links/_link-colors.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/links/_unstyled-link.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/lists/_bullets.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/lists/_horizontal-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/lists/_inline-block-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/lists/_inline-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/text/_ellipsis.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/text/_force-wrap.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/text/_nowrap.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/typography/text/_replacement.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_color.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_general.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_links.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_lists.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_print.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_sprites.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_tables.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/_text.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/color/_contrast.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_clearfix.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_float.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_hacks.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_min.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_reset.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_tabs.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/general/_tag-cloud.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/links/_hover-link.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/links/_link-colors.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/links/_unstyled-link.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/lists/_bullets.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/lists/_horizontal-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/lists/_inline-block-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/lists/_inline-list.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/sprites/_base.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/sprites/_sprite-img.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/tables/_alternating-rows-and-columns.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/tables/_borders.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/tables/_scaffolding.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/text/_ellipsis.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/text/_nowrap.scss create mode 100644 mod/dashboard/app/coreos-web/sass/compass/utilities/text/_replacement.scss create mode 100644 mod/dashboard/app/coreos-web/sass/mixin/_animation.scss create mode 100644 mod/dashboard/app/coreos-web/sass/mixin/_custom-font.scss create mode 100644 mod/dashboard/app/coreos-web/sass/mixin/_keyframes.scss create mode 100644 mod/dashboard/app/coreos-web/sass/mixin/_media-query.scss create mode 100644 mod/dashboard/app/coreos-web/sass/mixin/_prefix.scss create mode 100644 mod/dashboard/app/etcd-dashboard.js create mode 100644 mod/dashboard/app/main.scss create mode 100644 mod/dashboard/app/module/etcd-event.js create mode 100644 mod/dashboard/app/module/node.js create mode 100644 mod/dashboard/app/module/path.js create mode 100644 mod/dashboard/app/page/browser/_browser.scss create mode 100644 mod/dashboard/app/page/browser/_edit-node.scss create mode 100644 mod/dashboard/app/page/browser/_node-info.scss create mode 100644 mod/dashboard/app/page/browser/browser-ctrl.js create mode 100644 mod/dashboard/app/page/browser/browser.html create mode 100644 mod/dashboard/app/page/browser/create-node-ctrl.js create mode 100644 mod/dashboard/app/page/browser/create-node.html create mode 100644 mod/dashboard/app/page/browser/edit-node-ctrl.js create mode 100644 mod/dashboard/app/page/browser/edit-node.html create mode 100644 mod/dashboard/app/page/browser/edit-ttl-ctrl.js create mode 100644 mod/dashboard/app/page/browser/edit-ttl.html create mode 100644 mod/dashboard/app/page/browser/node-info-ctrl.js create mode 100644 mod/dashboard/app/page/browser/node-info.html create mode 100644 mod/dashboard/app/page/stats/_stats.scss create mode 100644 mod/dashboard/app/page/stats/stats-ctrl.js create mode 100644 mod/dashboard/app/page/stats/stats.html create mode 100644 mod/dashboard/app/ui/_breadcrumb.scss create mode 100644 mod/dashboard/app/ui/breadcrumb.html create mode 100644 mod/dashboard/app/ui/breadcrumb.js create mode 100644 mod/dashboard/app/ui/node-cog.html create mode 100644 mod/dashboard/app/ui/node-cog.js diff --git a/mod/dashboard/app/404.html b/mod/dashboard/app/404.html new file mode 100644 index 000000000..84349bcad --- /dev/null +++ b/mod/dashboard/app/404.html @@ -0,0 +1,31 @@ +
+ +
+
+
+

Page Not Found

+
+
+ +
+ +
+
+
+
+
+ +
+
+
404
+
+
+
+
+
+
+
+ +
+ +
diff --git a/mod/dashboard/app/coreos-web/coreos.css b/mod/dashboard/app/coreos-web/coreos.css new file mode 100644 index 000000000..44c08b2f1 --- /dev/null +++ b/mod/dashboard/app/coreos-web/coreos.css @@ -0,0 +1,6728 @@ +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { + display: block; } + +audio, canvas, video { + display: inline-block; } + +audio:not([controls]) { + display: none; + height: 0; } + +[hidden], template { + display: none; } + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; } + +body { + margin: 0; } + +a { + background: transparent; } + +a:focus { + outline: thin dotted; } + +a:active, a:hover { + outline: 0; } + +h1 { + font-size: 2em; + margin: 0.67em 0; } + +abbr[title] { + border-bottom: 1px dotted; } + +b, strong { + font-weight: bold; } + +dfn { + font-style: italic; } + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; } + +mark { + background: #ff0; + color: #000; } + +code, kbd, pre, samp { + font-family: monospace, serif; + font-size: 1em; } + +pre { + white-space: pre-wrap; } + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; } + +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: 0; } + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } + +legend { + border: 0; + padding: 0; } + +button, input, select, textarea { + font-family: inherit; + font-size: 100%; + margin: 0; } + +button, input { + line-height: normal; } + +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; } + +input[type="checkbox"], input[type="radio"] { + box-sizing: border-box; + padding: 0; } + +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; } + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; } + +textarea { + overflow: auto; + vertical-align: top; } + +table { + border-collapse: collapse; + border-spacing: 0; } + +@media print { + @page { + margin: 2cm 0.5cm; } + + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; } + a, a:visited { + text-decoration: underline; } + a[href]:after { + content: " (" attr(href) ")"; } + abbr[title]:after { + content: " (" attr(title) ")"; } + a[href^="javascript:"]:after, a[href^="#"]:after { + content: ""; } + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + thead { + display: table-header-group; } + tr, img { + page-break-inside: avoid; } + img { + max-width: 100% !important; } + p, h2, h3 { + orphans: 3; + widows: 3; } + h2, h3 { + page-break-after: avoid; } + select { + background: #fff !important; } + .navbar { + display: none; } + .table td, .table th { + background-color: #fff !important; } + .btn > .caret, .dropup > .btn > .caret { + border-top-color: #000 !important; } + .label { + border: 1px solid #000; } + .table { + border-collapse: collapse !important; } + .table-bordered th, .table-bordered td { + border: 1px solid #ddd !important; } } + +*, *:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857; + color: #333333; + background-color: #fff; } + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +a { + color: #428bca; + text-decoration: none; } + a:hover, a:focus { + color: #2a6596; + text-decoration: underline; } + a:focus { + outline: thin dotted #333; + outline: 5px auto-webkit-focus-ring-color; + outline-offset: -2px; } + +img { + vertical-align: middle; } + +.img-responsive { + display: block; + max-width: 100%; + height: auto; } + +.img-rounded { + border-radius: 6px; } + +.img-thumbnail, .thumbnail { + padding: 4px; + line-height: 1.42857; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; } + +.img-circle { + border-radius: 50%; } + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; } + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; } + +p { + margin: 0 0 10px; } + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 200; + line-height: 1.4; } + @media (min-width: 768px) { + .lead { + font-size: 21px; } } + +small, .small { + font-size: 85%; } + +cite { + font-style: normal; } + +.text-muted { + color: #999999; } + +.text-primary { + color: #428bca; } + .text-primary:hover { + color: #3073a9; } + +.text-warning { + color: #c09853; } + .text-warning:hover { + color: #a47c3c; } + +.text-danger { + color: #b94a48; } + .text-danger:hover { + color: #953b39; } + +.text-success { + color: #468847; } + .text-success:hover { + color: #356635; } + +.text-info { + color: #3a87ad; } + .text-info:hover { + color: #2d6a87; } + +.text-left { + text-align: left; } + +.text-right { + text-align: right; } + +.text-center { + text-align: center; } + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + 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: #999999; } + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px; } + h1 small, h1 .small, h2 small, h2 .small, h3 small, h3 .small { + font-size: 65%; } + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px; } + h4 small, h4 .small, h5 small, h5 .small, h6 small, h6 .small { + font-size: 75%; } + +h1, .h1 { + font-size: 36px; } + +h2, .h2 { + font-size: 30px; } + +h3, .h3 { + font-size: 24px; } + +h4, .h4 { + font-size: 18px; } + +h5, .h5 { + font-size: 14px; } + +h6, .h6 { + font-size: 12px; } + +.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, .list-inline { + padding-left: 0; + list-style: none; } + +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; } + .list-inline > li:first-child { + padding-left: 0; } + +dl { + margin-bottom: 20px; } + +dt, dd { + line-height: 1.42857; } + +dt { + font-weight: bold; } + +dd { + margin-left: 0; } + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .dl-horizontal dd { + margin-left: 180px; } + .dl-horizontal dd:before, .dl-horizontal dd:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .dl-horizontal dd:after { + clear: both; } } + +abbr[title], abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; } + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; } + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; } + blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; } + blockquote p:last-child { + margin-bottom: 0; } + blockquote small { + display: block; + line-height: 1.42857; + color: #999999; } + blockquote small:before { + content: '\2014 \00A0'; } + blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; } + blockquote.pull-right p, blockquote.pull-right small, blockquote.pull-right .small { + text-align: right; } + blockquote.pull-right small:before, blockquote.pull-right .small:before { + content: ''; } + blockquote.pull-right small:after, blockquote.pull-right .small:after { + content: '\00A0 \2014'; } + +blockquote:before, blockquote:after { + content: ""; } + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857; } + +code, kbd, pre, samp { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; } + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + white-space: nowrap; + border-radius: 4px; } + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857; + word-break: break-all; + word-wrap: break-word; + color: #333333; + 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: " "; + /* 1 */ + display: table; + /* 2 */ } + .container:after { + clear: both; } + +.row { + margin-left: -15px; + margin-right: -15px; } + .row:before, .row:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .row:after { + clear: both; } + +.col-xs-12, .col-sm-12, .col-md-12, .col-lg-12, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; } + +.col-xs-12, .col-xs-11, .col-xs-10, .col-xs-9, .col-xs-8, .col-xs-7, .col-xs-6, .col-xs-5, .col-xs-4, .col-xs-3, .col-xs-2, .col-xs-1 { + float: left; } + +.col-xs-1 { + width: 8.33333%; } + +.col-xs-2 { + width: 16.66667%; } + +.col-xs-3 { + width: 25%; } + +.col-xs-4 { + width: 33.33333%; } + +.col-xs-5 { + width: 41.66667%; } + +.col-xs-6 { + width: 50%; } + +.col-xs-7 { + width: 58.33333%; } + +.col-xs-8 { + width: 66.66667%; } + +.col-xs-9 { + width: 75%; } + +.col-xs-10 { + width: 83.33333%; } + +.col-xs-11 { + width: 91.66667%; } + +.col-xs-12 { + width: 100%; } + +.col-xs-pull-0 { + right: 0%; } + +.col-xs-pull-1 { + right: 8.33333%; } + +.col-xs-pull-2 { + right: 16.66667%; } + +.col-xs-pull-3 { + right: 25%; } + +.col-xs-pull-4 { + right: 33.33333%; } + +.col-xs-pull-5 { + right: 41.66667%; } + +.col-xs-pull-6 { + right: 50%; } + +.col-xs-pull-7 { + right: 58.33333%; } + +.col-xs-pull-8 { + right: 66.66667%; } + +.col-xs-pull-9 { + right: 75%; } + +.col-xs-pull-10 { + right: 83.33333%; } + +.col-xs-pull-11 { + right: 91.66667%; } + +.col-xs-pull-12 { + right: 100%; } + +.col-xs-push-0 { + left: 0%; } + +.col-xs-push-1 { + left: 8.33333%; } + +.col-xs-push-2 { + left: 16.66667%; } + +.col-xs-push-3 { + left: 25%; } + +.col-xs-push-4 { + left: 33.33333%; } + +.col-xs-push-5 { + left: 41.66667%; } + +.col-xs-push-6 { + left: 50%; } + +.col-xs-push-7 { + left: 58.33333%; } + +.col-xs-push-8 { + left: 66.66667%; } + +.col-xs-push-9 { + left: 75%; } + +.col-xs-push-10 { + left: 83.33333%; } + +.col-xs-push-11 { + left: 91.66667%; } + +.col-xs-push-12 { + left: 100%; } + +.col-xs-offset-0 { + margin-left: 0%; } + +.col-xs-offset-1 { + margin-left: 8.33333%; } + +.col-xs-offset-2 { + margin-left: 16.66667%; } + +.col-xs-offset-3 { + margin-left: 25%; } + +.col-xs-offset-4 { + margin-left: 33.33333%; } + +.col-xs-offset-5 { + margin-left: 41.66667%; } + +.col-xs-offset-6 { + margin-left: 50%; } + +.col-xs-offset-7 { + margin-left: 58.33333%; } + +.col-xs-offset-8 { + margin-left: 66.66667%; } + +.col-xs-offset-9 { + margin-left: 75%; } + +.col-xs-offset-10 { + margin-left: 83.33333%; } + +.col-xs-offset-11 { + margin-left: 91.66667%; } + +.col-xs-offset-12 { + margin-left: 100%; } + +@media (min-width: 768px) { + .container { + width: 750px; } + .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1 { + float: left; } + .col-sm-1 { + width: 8.33333%; } + .col-sm-2 { + width: 16.66667%; } + .col-sm-3 { + width: 25%; } + .col-sm-4 { + width: 33.33333%; } + .col-sm-5 { + width: 41.66667%; } + .col-sm-6 { + width: 50%; } + .col-sm-7 { + width: 58.33333%; } + .col-sm-8 { + width: 66.66667%; } + .col-sm-9 { + width: 75%; } + .col-sm-10 { + width: 83.33333%; } + .col-sm-11 { + width: 91.66667%; } + .col-sm-12 { + width: 100%; } + .col-sm-pull-0 { + right: 0%; } + .col-sm-pull-1 { + right: 8.33333%; } + .col-sm-pull-2 { + right: 16.66667%; } + .col-sm-pull-3 { + right: 25%; } + .col-sm-pull-4 { + right: 33.33333%; } + .col-sm-pull-5 { + right: 41.66667%; } + .col-sm-pull-6 { + right: 50%; } + .col-sm-pull-7 { + right: 58.33333%; } + .col-sm-pull-8 { + right: 66.66667%; } + .col-sm-pull-9 { + right: 75%; } + .col-sm-pull-10 { + right: 83.33333%; } + .col-sm-pull-11 { + right: 91.66667%; } + .col-sm-pull-12 { + right: 100%; } + .col-sm-push-0 { + left: 0%; } + .col-sm-push-1 { + left: 8.33333%; } + .col-sm-push-2 { + left: 16.66667%; } + .col-sm-push-3 { + left: 25%; } + .col-sm-push-4 { + left: 33.33333%; } + .col-sm-push-5 { + left: 41.66667%; } + .col-sm-push-6 { + left: 50%; } + .col-sm-push-7 { + left: 58.33333%; } + .col-sm-push-8 { + left: 66.66667%; } + .col-sm-push-9 { + left: 75%; } + .col-sm-push-10 { + left: 83.33333%; } + .col-sm-push-11 { + left: 91.66667%; } + .col-sm-push-12 { + left: 100%; } + .col-sm-offset-0 { + margin-left: 0%; } + .col-sm-offset-1 { + margin-left: 8.33333%; } + .col-sm-offset-2 { + margin-left: 16.66667%; } + .col-sm-offset-3 { + margin-left: 25%; } + .col-sm-offset-4 { + margin-left: 33.33333%; } + .col-sm-offset-5 { + margin-left: 41.66667%; } + .col-sm-offset-6 { + margin-left: 50%; } + .col-sm-offset-7 { + margin-left: 58.33333%; } + .col-sm-offset-8 { + margin-left: 66.66667%; } + .col-sm-offset-9 { + margin-left: 75%; } + .col-sm-offset-10 { + margin-left: 83.33333%; } + .col-sm-offset-11 { + margin-left: 91.66667%; } + .col-sm-offset-12 { + margin-left: 100%; } } + +@media (min-width: 992px) { + .container { + width: 970px; } + .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1 { + float: left; } + .col-md-1 { + width: 8.33333%; } + .col-md-2 { + width: 16.66667%; } + .col-md-3 { + width: 25%; } + .col-md-4 { + width: 33.33333%; } + .col-md-5 { + width: 41.66667%; } + .col-md-6 { + width: 50%; } + .col-md-7 { + width: 58.33333%; } + .col-md-8 { + width: 66.66667%; } + .col-md-9 { + width: 75%; } + .col-md-10 { + width: 83.33333%; } + .col-md-11 { + width: 91.66667%; } + .col-md-12 { + width: 100%; } + .col-md-pull-0 { + right: 0%; } + .col-md-pull-1 { + right: 8.33333%; } + .col-md-pull-2 { + right: 16.66667%; } + .col-md-pull-3 { + right: 25%; } + .col-md-pull-4 { + right: 33.33333%; } + .col-md-pull-5 { + right: 41.66667%; } + .col-md-pull-6 { + right: 50%; } + .col-md-pull-7 { + right: 58.33333%; } + .col-md-pull-8 { + right: 66.66667%; } + .col-md-pull-9 { + right: 75%; } + .col-md-pull-10 { + right: 83.33333%; } + .col-md-pull-11 { + right: 91.66667%; } + .col-md-pull-12 { + right: 100%; } + .col-md-push-0 { + left: 0%; } + .col-md-push-1 { + left: 8.33333%; } + .col-md-push-2 { + left: 16.66667%; } + .col-md-push-3 { + left: 25%; } + .col-md-push-4 { + left: 33.33333%; } + .col-md-push-5 { + left: 41.66667%; } + .col-md-push-6 { + left: 50%; } + .col-md-push-7 { + left: 58.33333%; } + .col-md-push-8 { + left: 66.66667%; } + .col-md-push-9 { + left: 75%; } + .col-md-push-10 { + left: 83.33333%; } + .col-md-push-11 { + left: 91.66667%; } + .col-md-push-12 { + left: 100%; } + .col-md-offset-0 { + margin-left: 0%; } + .col-md-offset-1 { + margin-left: 8.33333%; } + .col-md-offset-2 { + margin-left: 16.66667%; } + .col-md-offset-3 { + margin-left: 25%; } + .col-md-offset-4 { + margin-left: 33.33333%; } + .col-md-offset-5 { + margin-left: 41.66667%; } + .col-md-offset-6 { + margin-left: 50%; } + .col-md-offset-7 { + margin-left: 58.33333%; } + .col-md-offset-8 { + margin-left: 66.66667%; } + .col-md-offset-9 { + margin-left: 75%; } + .col-md-offset-10 { + margin-left: 83.33333%; } + .col-md-offset-11 { + margin-left: 91.66667%; } + .col-md-offset-12 { + margin-left: 100%; } } + +@media (min-width: 1200px) { + .container { + width: 1170px; } + .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1 { + float: left; } + .col-lg-1 { + width: 8.33333%; } + .col-lg-2 { + width: 16.66667%; } + .col-lg-3 { + width: 25%; } + .col-lg-4 { + width: 33.33333%; } + .col-lg-5 { + width: 41.66667%; } + .col-lg-6 { + width: 50%; } + .col-lg-7 { + width: 58.33333%; } + .col-lg-8 { + width: 66.66667%; } + .col-lg-9 { + width: 75%; } + .col-lg-10 { + width: 83.33333%; } + .col-lg-11 { + width: 91.66667%; } + .col-lg-12 { + width: 100%; } + .col-lg-pull-0 { + right: 0%; } + .col-lg-pull-1 { + right: 8.33333%; } + .col-lg-pull-2 { + right: 16.66667%; } + .col-lg-pull-3 { + right: 25%; } + .col-lg-pull-4 { + right: 33.33333%; } + .col-lg-pull-5 { + right: 41.66667%; } + .col-lg-pull-6 { + right: 50%; } + .col-lg-pull-7 { + right: 58.33333%; } + .col-lg-pull-8 { + right: 66.66667%; } + .col-lg-pull-9 { + right: 75%; } + .col-lg-pull-10 { + right: 83.33333%; } + .col-lg-pull-11 { + right: 91.66667%; } + .col-lg-pull-12 { + right: 100%; } + .col-lg-push-0 { + left: 0%; } + .col-lg-push-1 { + left: 8.33333%; } + .col-lg-push-2 { + left: 16.66667%; } + .col-lg-push-3 { + left: 25%; } + .col-lg-push-4 { + left: 33.33333%; } + .col-lg-push-5 { + left: 41.66667%; } + .col-lg-push-6 { + left: 50%; } + .col-lg-push-7 { + left: 58.33333%; } + .col-lg-push-8 { + left: 66.66667%; } + .col-lg-push-9 { + left: 75%; } + .col-lg-push-10 { + left: 83.33333%; } + .col-lg-push-11 { + left: 91.66667%; } + .col-lg-push-12 { + left: 100%; } + .col-lg-offset-0 { + margin-left: 0%; } + .col-lg-offset-1 { + margin-left: 8.33333%; } + .col-lg-offset-2 { + margin-left: 16.66667%; } + .col-lg-offset-3 { + margin-left: 25%; } + .col-lg-offset-4 { + margin-left: 33.33333%; } + .col-lg-offset-5 { + margin-left: 41.66667%; } + .col-lg-offset-6 { + margin-left: 50%; } + .col-lg-offset-7 { + margin-left: 58.33333%; } + .col-lg-offset-8 { + margin-left: 66.66667%; } + .col-lg-offset-9 { + margin-left: 75%; } + .col-lg-offset-10 { + margin-left: 83.33333%; } + .col-lg-offset-11 { + margin-left: 91.66667%; } + .col-lg-offset-12 { + margin-left: 100%; } } + +table { + max-width: 100%; + background-color: transparent; } + +th { + text-align: left; } + +.table { + 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.42857; + 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) > td, .table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; } + +.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; } + +table col[class*="col-"] { + float: none; + display: table-column; } + +table td[class*="col-"], table th[class*="col-"] { + 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 > 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.success:hover > th { + background-color: #d0e9c6; } + +.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.danger:hover > th { + background-color: #ebcccc; } + +.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.warning:hover > th { + background-color: #faf2cc; } + +@media (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + overflow-x: scroll; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + -webkit-overflow-scrolling: touch; } + .table-responsive > .table { + margin-bottom: 0; } + .table-responsive > .table > thead > tr > th, .table-responsive > .table > 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; } + +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; + 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; + /* IE8-9 */ + line-height: normal; } + +input[type="file"] { + display: block; } + +select[multiple], select[size] { + height: auto; } + +select optgroup { + font-size: inherit; + font-style: inherit; + font-family: inherit; } + +input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto-webkit-focus-ring-color; + outline-offset: -2px; } + +input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { + height: auto; } + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857; + color: #555555; + vertical-align: middle; } + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857; + color: #555555; + vertical-align: middle; + 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; + 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: #999999; } + .form-control::-moz-placeholder { + color: #999999; } + .form-control:-ms-input-placeholder { + color: #999999; } + .form-control::-webkit-input-placeholder { + color: #999999; } + .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; } + +textarea.form-control { + height: auto; } + +.form-group { + margin-bottom: 15px; } + +.radio, .checkbox { + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; + padding-left: 20px; + vertical-align: middle; } + .radio label, .checkbox label { + display: inline; + 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"] { + float: left; + margin-left: -20px; } + +.radio + .radio, .checkbox + .checkbox { + margin-top: -5px; } + +.radio-inline, .checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; } + +.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; } + +input[type="radio"][disabled], fieldset[disabled] input[type="radio"], input[type="checkbox"][disabled], fieldset[disabled] input[type="checkbox"], .radio[disabled], fieldset[disabled] .radio, .radio-inline[disabled], fieldset[disabled] .radio-inline, .checkbox[disabled], fieldset[disabled] .checkbox, .checkbox-inline[disabled], fieldset[disabled] .checkbox-inline { + cursor: not-allowed; } + +.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 { + height: auto; } + +.input-lg, .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 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 { + height: 45px; + line-height: 45px; } + +textarea.input-lg, .input-group-lg > textarea.form-control, .input-group-lg > textarea.input-group-addon, .input-group-lg > .input-group-btn > textarea.btn { + height: auto; } + +.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { + color: #c09853; } +.has-warning .form-control { + border-color: #c09853; + -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: #a47c3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc49e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc49e; } +.has-warning .input-group-addon { + color: #c09853; + border-color: #c09853; + background-color: #fcf8e3; } + +.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline { + color: #b94a48; } +.has-error .form-control { + border-color: #b94a48; + -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: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; } +.has-error .input-group-addon { + color: #b94a48; + border-color: #b94a48; + background-color: #f2dede; } + +.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { + color: #468847; } +.has-success .form-control { + border-color: #468847; + -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: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7a; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7a; } +.has-success .input-group-addon { + color: #468847; + border-color: #468847; + background-color: #dff0d8; } + +.form-control-static { + margin-bottom: 0; } + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; } + +@media (min-width: 768px) { + .form-inline .form-group, .form-inline .navbar-form { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; } + .form-inline .form-control, .form-inline .navbar-form { + display: inline-block; } + .form-inline .radio, .form-inline .navbar-form, .form-inline .checkbox, .form-inline .navbar-form { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + padding-left: 0; } + .form-inline .radio input[type="radio"], .form-inline .radio .navbar-form, .form-inline .checkbox input[type="checkbox"], .form-inline .checkbox .navbar-form { + float: none; + margin-left: 0; } } + +.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; } +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; } + .form-horizontal .form-group:before, .form-horizontal .form-group:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .form-horizontal .form-group:after { + clear: both; } +.form-horizontal .form-control-static { + padding-top: 7px; } +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; } } + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; } + .btn:focus { + outline: thin dotted #333; + outline: 5px auto-webkit-focus-ring-color; + outline-offset: -2px; } + .btn:hover, .btn:focus { + color: #333; + text-decoration: none; } + .btn:active, .btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } + .btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; } + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; } + .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active { + color: #333; + background-color: #ebebeb; + border-color: #adadad; } + .open .btn-default.dropdown-toggle { + color: #333; + background-color: #ebebeb; + border-color: #adadad; } + .btn-default:active, .btn-default.active { + background-image: none; } + .open .btn-default.dropdown-toggle { + background-image: none; } + .btn-default.disabled, .btn-default.disabled:hover, .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]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; } + +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #3580bd; } + .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active { + color: #fff; + background-color: #3278b1; + border-color: #28608e; } + .open .btn-primary.dropdown-toggle { + color: #fff; + background-color: #3278b1; + border-color: #28608e; } + .btn-primary:active, .btn-primary.active { + background-image: none; } + .open .btn-primary.dropdown-toggle { + background-image: none; } + .btn-primary.disabled, .btn-primary.disabled:hover, .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]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #3580bd; } + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; } + .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active { + color: #fff; + background-color: #ed9b28; + border-color: #d58112; } + .open .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ed9b28; + border-color: #d58112; } + .btn-warning:active, .btn-warning.active { + background-image: none; } + .open .btn-warning.dropdown-toggle { + background-image: none; } + .btn-warning.disabled, .btn-warning.disabled:hover, .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]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; } + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43d3a; } + .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active { + color: #fff; + background-color: #d2302d; + border-color: #ac2525; } + .open .btn-danger.dropdown-toggle { + color: #fff; + background-color: #d2302d; + border-color: #ac2525; } + .btn-danger:active, .btn-danger.active { + background-image: none; } + .open .btn-danger.dropdown-toggle { + background-image: none; } + .btn-danger.disabled, .btn-danger.disabled:hover, .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]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43d3a; } + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4eae4c; } + .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active { + color: #fff; + background-color: #49a447; + border-color: #3b8439; } + .open .btn-success.dropdown-toggle { + color: #fff; + background-color: #49a447; + border-color: #3b8439; } + .btn-success:active, .btn-success.active { + background-image: none; } + .open .btn-success.dropdown-toggle { + background-image: none; } + .btn-success.disabled, .btn-success.disabled:hover, .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]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4eae4c; } + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46bada; } + .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active { + color: #fff; + background-color: #39b5d7; + border-color: #269cbc; } + .open .btn-info.dropdown-toggle { + color: #fff; + background-color: #39b5d7; + border-color: #269cbc; } + .btn-info:active, .btn-info.active { + background-image: none; } + .open .btn-info.dropdown-toggle { + background-image: none; } + .btn-info.disabled, .btn-info.disabled:hover, .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]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46bada; } + +.btn-link { + color: #428bca; + font-weight: normal; + cursor: pointer; + border-radius: 0; } + .btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; } + .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent; } + .btn-link:hover, .btn-link:focus { + color: #2a6596; + 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: #999999; + 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, .btn-xs, .btn-group-xs > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } + +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; } + +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; } + +.btn-block + .btn-block { + margin-top: 5px; } + +input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { + width: 100%; } + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; } + .fade.in { + opacity: 1; } + +.collapse { + display: none; } + .collapse.in { + display: block; } + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; } + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); } + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + .glyphicon:empty { + width: 1em; } + +.glyphicon-asterisk:before { + content: "\2a"; } + +.glyphicon-plus:before { + content: "\2b"; } + +.glyphicon-euro:before { + content: "\20ac"; } + +.glyphicon-minus:before { + content: "\2212"; } + +.glyphicon-cloud:before { + content: "\2601"; } + +.glyphicon-envelope:before { + content: "\2709"; } + +.glyphicon-pencil:before { + content: "\270f"; } + +.glyphicon-glass:before { + content: "\e001"; } + +.glyphicon-music:before { + content: "\e002"; } + +.glyphicon-search:before { + content: "\e003"; } + +.glyphicon-heart:before { + content: "\e005"; } + +.glyphicon-star:before { + content: "\e006"; } + +.glyphicon-star-empty:before { + content: "\e007"; } + +.glyphicon-user:before { + content: "\e008"; } + +.glyphicon-film:before { + content: "\e009"; } + +.glyphicon-th-large:before { + content: "\e010"; } + +.glyphicon-th:before { + content: "\e011"; } + +.glyphicon-th-list:before { + content: "\e012"; } + +.glyphicon-ok:before { + content: "\e013"; } + +.glyphicon-remove:before { + content: "\e014"; } + +.glyphicon-zoom-in:before { + content: "\e015"; } + +.glyphicon-zoom-out:before { + content: "\e016"; } + +.glyphicon-off:before { + content: "\e017"; } + +.glyphicon-signal:before { + content: "\e018"; } + +.glyphicon-cog:before { + content: "\e019"; } + +.glyphicon-trash:before { + content: "\e020"; } + +.glyphicon-home:before { + content: "\e021"; } + +.glyphicon-file:before { + content: "\e022"; } + +.glyphicon-time:before { + content: "\e023"; } + +.glyphicon-road:before { + content: "\e024"; } + +.glyphicon-download-alt:before { + content: "\e025"; } + +.glyphicon-download:before { + content: "\e026"; } + +.glyphicon-upload:before { + content: "\e027"; } + +.glyphicon-inbox:before { + content: "\e028"; } + +.glyphicon-play-circle:before { + content: "\e029"; } + +.glyphicon-repeat:before { + content: "\e030"; } + +.glyphicon-refresh:before { + content: "\e031"; } + +.glyphicon-list-alt:before { + content: "\e032"; } + +.glyphicon-lock:before { + content: "\e033"; } + +.glyphicon-flag:before { + content: "\e034"; } + +.glyphicon-headphones:before { + content: "\e035"; } + +.glyphicon-volume-off:before { + content: "\e036"; } + +.glyphicon-volume-down:before { + content: "\e037"; } + +.glyphicon-volume-up:before { + content: "\e038"; } + +.glyphicon-qrcode:before { + content: "\e039"; } + +.glyphicon-barcode:before { + content: "\e040"; } + +.glyphicon-tag:before { + content: "\e041"; } + +.glyphicon-tags:before { + content: "\e042"; } + +.glyphicon-book:before { + content: "\e043"; } + +.glyphicon-bookmark:before { + content: "\e044"; } + +.glyphicon-print:before { + content: "\e045"; } + +.glyphicon-camera:before { + content: "\e046"; } + +.glyphicon-font:before { + content: "\e047"; } + +.glyphicon-bold:before { + content: "\e048"; } + +.glyphicon-italic:before { + content: "\e049"; } + +.glyphicon-text-height:before { + content: "\e050"; } + +.glyphicon-text-width:before { + content: "\e051"; } + +.glyphicon-align-left:before { + content: "\e052"; } + +.glyphicon-align-center:before { + content: "\e053"; } + +.glyphicon-align-right:before { + content: "\e054"; } + +.glyphicon-align-justify:before { + content: "\e055"; } + +.glyphicon-list:before { + content: "\e056"; } + +.glyphicon-indent-left:before { + content: "\e057"; } + +.glyphicon-indent-right:before { + content: "\e058"; } + +.glyphicon-facetime-video:before { + content: "\e059"; } + +.glyphicon-picture:before { + content: "\e060"; } + +.glyphicon-map-marker:before { + content: "\e062"; } + +.glyphicon-adjust:before { + content: "\e063"; } + +.glyphicon-tint:before { + content: "\e064"; } + +.glyphicon-edit:before { + content: "\e065"; } + +.glyphicon-share:before { + content: "\e066"; } + +.glyphicon-check:before { + content: "\e067"; } + +.glyphicon-move:before { + content: "\e068"; } + +.glyphicon-step-backward:before { + content: "\e069"; } + +.glyphicon-fast-backward:before { + content: "\e070"; } + +.glyphicon-backward:before { + content: "\e071"; } + +.glyphicon-play:before { + content: "\e072"; } + +.glyphicon-pause:before { + content: "\e073"; } + +.glyphicon-stop:before { + content: "\e074"; } + +.glyphicon-forward:before { + content: "\e075"; } + +.glyphicon-fast-forward:before { + content: "\e076"; } + +.glyphicon-step-forward:before { + content: "\e077"; } + +.glyphicon-eject:before { + content: "\e078"; } + +.glyphicon-chevron-left:before { + content: "\e079"; } + +.glyphicon-chevron-right:before { + content: "\e080"; } + +.glyphicon-plus-sign:before { + content: "\e081"; } + +.glyphicon-minus-sign:before { + content: "\e082"; } + +.glyphicon-remove-sign:before { + content: "\e083"; } + +.glyphicon-ok-sign:before { + content: "\e084"; } + +.glyphicon-question-sign:before { + content: "\e085"; } + +.glyphicon-info-sign:before { + content: "\e086"; } + +.glyphicon-screenshot:before { + content: "\e087"; } + +.glyphicon-remove-circle:before { + content: "\e088"; } + +.glyphicon-ok-circle:before { + content: "\e089"; } + +.glyphicon-ban-circle:before { + content: "\e090"; } + +.glyphicon-arrow-left:before { + content: "\e091"; } + +.glyphicon-arrow-right:before { + content: "\e092"; } + +.glyphicon-arrow-up:before { + content: "\e093"; } + +.glyphicon-arrow-down:before { + content: "\e094"; } + +.glyphicon-share-alt:before { + content: "\e095"; } + +.glyphicon-resize-full:before { + content: "\e096"; } + +.glyphicon-resize-small:before { + content: "\e097"; } + +.glyphicon-exclamation-sign:before { + content: "\e101"; } + +.glyphicon-gift:before { + content: "\e102"; } + +.glyphicon-leaf:before { + content: "\e103"; } + +.glyphicon-fire:before { + content: "\e104"; } + +.glyphicon-eye-open:before { + content: "\e105"; } + +.glyphicon-eye-close:before { + content: "\e106"; } + +.glyphicon-warning-sign:before { + content: "\e107"; } + +.glyphicon-plane:before { + content: "\e108"; } + +.glyphicon-calendar:before { + content: "\e109"; } + +.glyphicon-random:before { + content: "\e110"; } + +.glyphicon-comment:before { + content: "\e111"; } + +.glyphicon-magnet:before { + content: "\e112"; } + +.glyphicon-chevron-up:before { + content: "\e113"; } + +.glyphicon-chevron-down:before { + content: "\e114"; } + +.glyphicon-retweet:before { + content: "\e115"; } + +.glyphicon-shopping-cart:before { + content: "\e116"; } + +.glyphicon-folder-close:before { + content: "\e117"; } + +.glyphicon-folder-open:before { + content: "\e118"; } + +.glyphicon-resize-vertical:before { + content: "\e119"; } + +.glyphicon-resize-horizontal:before { + content: "\e120"; } + +.glyphicon-hdd:before { + content: "\e121"; } + +.glyphicon-bullhorn:before { + content: "\e122"; } + +.glyphicon-bell:before { + content: "\e123"; } + +.glyphicon-certificate:before { + content: "\e124"; } + +.glyphicon-thumbs-up:before { + content: "\e125"; } + +.glyphicon-thumbs-down:before { + content: "\e126"; } + +.glyphicon-hand-right:before { + content: "\e127"; } + +.glyphicon-hand-left:before { + content: "\e128"; } + +.glyphicon-hand-up:before { + content: "\e129"; } + +.glyphicon-hand-down:before { + content: "\e130"; } + +.glyphicon-circle-arrow-right:before { + content: "\e131"; } + +.glyphicon-circle-arrow-left:before { + content: "\e132"; } + +.glyphicon-circle-arrow-up:before { + content: "\e133"; } + +.glyphicon-circle-arrow-down:before { + content: "\e134"; } + +.glyphicon-globe:before { + content: "\e135"; } + +.glyphicon-wrench:before { + content: "\e136"; } + +.glyphicon-tasks:before { + content: "\e137"; } + +.glyphicon-filter:before { + content: "\e138"; } + +.glyphicon-briefcase:before { + content: "\e139"; } + +.glyphicon-fullscreen:before { + content: "\e140"; } + +.glyphicon-dashboard:before { + content: "\e141"; } + +.glyphicon-paperclip:before { + content: "\e142"; } + +.glyphicon-heart-empty:before { + content: "\e143"; } + +.glyphicon-link:before { + content: "\e144"; } + +.glyphicon-phone:before { + content: "\e145"; } + +.glyphicon-pushpin:before { + content: "\e146"; } + +.glyphicon-usd:before { + content: "\e148"; } + +.glyphicon-gbp:before { + content: "\e149"; } + +.glyphicon-sort:before { + content: "\e150"; } + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; } + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; } + +.glyphicon-sort-by-order:before { + content: "\e153"; } + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; } + +.glyphicon-sort-by-attributes:before { + content: "\e155"; } + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; } + +.glyphicon-unchecked:before { + content: "\e157"; } + +.glyphicon-expand:before { + content: "\e158"; } + +.glyphicon-collapse-down:before { + content: "\e159"; } + +.glyphicon-collapse-up:before { + content: "\e160"; } + +.glyphicon-log-in:before { + content: "\e161"; } + +.glyphicon-flash:before { + content: "\e162"; } + +.glyphicon-log-out:before { + content: "\e163"; } + +.glyphicon-new-window:before { + content: "\e164"; } + +.glyphicon-record:before { + content: "\e165"; } + +.glyphicon-save:before { + content: "\e166"; } + +.glyphicon-open:before { + content: "\e167"; } + +.glyphicon-saved:before { + content: "\e168"; } + +.glyphicon-import:before { + content: "\e169"; } + +.glyphicon-export:before { + content: "\e170"; } + +.glyphicon-send:before { + content: "\e171"; } + +.glyphicon-floppy-disk:before { + content: "\e172"; } + +.glyphicon-floppy-saved:before { + content: "\e173"; } + +.glyphicon-floppy-remove:before { + content: "\e174"; } + +.glyphicon-floppy-save:before { + content: "\e175"; } + +.glyphicon-floppy-open:before { + content: "\e176"; } + +.glyphicon-credit-card:before { + content: "\e177"; } + +.glyphicon-transfer:before { + content: "\e178"; } + +.glyphicon-cutlery:before { + content: "\e179"; } + +.glyphicon-header:before { + content: "\e180"; } + +.glyphicon-compressed:before { + content: "\e181"; } + +.glyphicon-earphone:before { + content: "\e182"; } + +.glyphicon-phone-alt:before { + content: "\e183"; } + +.glyphicon-tower:before { + content: "\e184"; } + +.glyphicon-stats:before { + content: "\e185"; } + +.glyphicon-sd-video:before { + content: "\e186"; } + +.glyphicon-hd-video:before { + content: "\e187"; } + +.glyphicon-subtitles:before { + content: "\e188"; } + +.glyphicon-sound-stereo:before { + content: "\e189"; } + +.glyphicon-sound-dolby:before { + content: "\e190"; } + +.glyphicon-sound-5-1:before { + content: "\e191"; } + +.glyphicon-sound-6-1:before { + content: "\e192"; } + +.glyphicon-sound-7-1:before { + content: "\e193"; } + +.glyphicon-copyright-mark:before { + content: "\e194"; } + +.glyphicon-registration-mark:before { + content: "\e195"; } + +.glyphicon-cloud-download:before { + content: "\e197"; } + +.glyphicon-cloud-upload:before { + content: "\e198"; } + +.glyphicon-tree-conifer:before { + content: "\e199"; } + +.glyphicon-tree-deciduous:before { + content: "\e200"; } + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + border-bottom: 0 dotted; } + +.dropdown { + position: relative; } + +.dropdown-toggle:focus { + outline: 0; } + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 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.42857; + color: #333333; + white-space: nowrap; } + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; } + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #428bca; } + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #999999; } + +.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-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857; + color: #999999; } + +.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 dotted; + border-bottom: 4px solid #000; + 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; } } + +.btn-default .caret { + border-top-color: #333; } +.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret { + border-top-color: #fff; } + +.dropup .btn-default .caret { + border-bottom-color: #333; } +.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret { + border-bottom-color: #fff; } + +.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:focus, .btn-group-vertical > .btn:focus { + outline: none; } + +.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:before, .btn-toolbar:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } +.btn-toolbar:after { + clear: both; } +.btn-toolbar .btn-group { + float: left; } +.btn-toolbar > .btn + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn-group + .btn-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 > .btn-lg + .btn-group-lg > .btn, .btn-group-lg > .btn-group > .btn-lg + .btn { + 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-lg .btn-group-lg > .btn, .btn-group-lg > .btn-lg .btn { + border-width: 5px 5px 0; + border-bottom-width: 0; } + +.dropup .btn-lg .caret, .dropup .btn-lg .btn-group-lg > .btn, .btn-group-lg > .dropup .btn-lg .btn { + border-width: 0 5px 5px; } + +.btn-group-vertical > .btn, .btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; } +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } +.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 > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + +.btn-group-vertical > .btn-group:last-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 { + float: none; + display: table-cell; + width: 1%; } + +[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; } + +.input-group { + position: relative; + display: table; + border-collapse: separate; } + .input-group.col { + float: none; + padding-left: 0; + padding-right: 0; } + .input-group .form-control { + 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: #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.form-control, .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.form-control, .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 > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + 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 > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + +.input-group-addon:last-child { + border-left: 0; } + +.input-group-btn { + position: relative; + white-space: nowrap; } + .input-group-btn:first-child > .btn { + margin-right: -1px; } + .input-group-btn:last-child > .btn { + margin-left: -1px; } + +.input-group-btn > .btn { + position: relative; } + .input-group-btn > .btn + .btn { + margin-left: -4px; } + .input-group-btn > .btn:hover, .input-group-btn > .btn:active { + z-index: 2; } + +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; } + .nav:before, .nav:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .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: #999999; } + .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; } + .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; } + .nav .open > a .caret, .nav .open > a:hover .caret, .nav .open > a:focus .caret { + border-top-color: #2a6596; + border-bottom-color: #2a6596; } + .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.42857; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; } + .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; } + .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; } + +.nav-pills > li { + float: left; } + .nav-pills > li > a { + border-radius: 4px; } + .nav-pills > li + li { + margin-left: 2px; } + .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; } + .nav-pills > li.active > a .caret, .nav-pills > li.active > a:hover .caret, .nav-pills > li.active > a:focus .caret { + border-top-color: #fff; + border-bottom-color: #fff; } + +.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-justified > .nav-tabs.nav-justified { + float: none; } + .nav-justified > li > a, .nav-justified > li > .nav-tabs.nav-justified { + text-align: center; + margin-bottom: 5px; } + .nav-justified > .dropdown .dropdown-menu, .nav-justified > .dropdown .nav-tabs.nav-justified { + top: auto; + left: auto; } + @media (min-width: 768px) { + .nav-justified > li, .nav-justified > .nav-tabs.nav-justified { + display: table-cell; + width: 1%; } + .nav-justified > li > a, .nav-justified > li > .nav-tabs.nav-justified { + margin-bottom: 0; } } + +.nav-tabs-justified, .nav-tabs.nav-justified, .nav-tabs.nav-justified { + border-bottom: 0; } + .nav-tabs-justified > li > a, .nav-tabs-justified > li > .nav-tabs.nav-justified, .nav-tabs-justified > li > .nav-tabs.nav-justified { + margin-right: 0; + border-radius: 4px; } + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > a:focus, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified { + border: 1px solid #ddd; } + @media (min-width: 768px) { + .nav-tabs-justified > li > a, .nav-tabs-justified > li > .nav-tabs.nav-justified, .nav-tabs-justified > li > .nav-tabs.nav-justified { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; } + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > a:focus, .nav-tabs-justified > .active > .nav-tabs.nav-justified, .nav-tabs-justified > .active > .nav-tabs.nav-justified { + border-bottom-color: #fff; } } + +.tab-content > .tab-pane { + display: none; } +.tab-content > .active { + display: block; } + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; } + +.nav a:hover .caret { + border-top-color: #2a6596; + border-bottom-color: #2a6596; } + +.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: " "; + /* 1 */ + display: table; + /* 2 */ } + .navbar:after { + clear: both; } + @media (min-width: 768px) { + .navbar { + border-radius: 4px; } } + +.navbar-header:before, .navbar-header:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } +.navbar-header:after { + clear: both; } +@media (min-width: 768px) { + .navbar-header { + float: left; } } + +.navbar-collapse { + max-height: 340px; + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; } + .navbar-collapse:before, .navbar-collapse:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .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: auto; } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; } } + +.container > .navbar-header, .container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; } + @media (min-width: 768px) { + .container > .navbar-header, .container > .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; } + .navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; } + @media (min-width: 768px) { + .navbar > .container .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; + border: 1px solid transparent; + border-radius: 4px; } + .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; } } + +@media (min-width: 768px) { + .navbar-left { + float: left !important; } + .navbar-right { + float: right !important; } } + +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 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 (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; } } + @media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; } } + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; } + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } + +.navbar-nav.pull-right > li > .dropdown-menu, .navbar-nav > li > .dropdown-menu.pull-right { + left: auto; + right: 0; } + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; } + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; } + @media (min-width: 768px) { + .navbar-text { + margin-left: 15px; + margin-right: 15px; } } + +.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: #ccc; } + .navbar-default .navbar-collapse, .navbar-default .navbar-form { + border-color: #e7e7e7; } + .navbar-default .navbar-nav > .dropdown > a:hover .caret, .navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333; + border-bottom-color: #333; } + .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; } + .navbar-default .navbar-nav > .open > a .caret, .navbar-default .navbar-nav > .open > a:hover .caret, .navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555; + border-bottom-color: #555; } + .navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777; + border-bottom-color: #777; } + @media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; } } + .navbar-default .navbar-link { + color: #777; } + .navbar-default .navbar-link:hover { + color: #333; } + +.navbar-inverse { + background-color: #222; + border-color: #090909; } + .navbar-inverse .navbar-brand { + color: #999999; } + .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; } + .navbar-inverse .navbar-text { + color: #999999; } + .navbar-inverse .navbar-nav > li > a { + color: #999999; } + .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; } + .navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #fff; + border-bottom-color: #fff; } + .navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; } + .navbar-inverse .navbar-nav > .open > a .caret, .navbar-inverse .navbar-nav > .open > a:hover .caret, .navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #fff; + border-bottom-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 > li > a { + color: #999999; } + .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: #999999; } + .navbar-inverse .navbar-link:hover { + color: #fff; } + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; } + .breadcrumb > li { + display: inline-block; } + .breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc; } + .breadcrumb > .active { + color: #999999; } + +.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.42857; + text-decoration: none; + 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 { + background-color: #eeeeee; } + .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: #428bca; + border-color: #428bca; + cursor: default; } + .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #999999; + 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: " "; + /* 1 */ + display: table; + /* 2 */ } + .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: #999999; + background-color: #fff; + cursor: not-allowed; } + +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; } + .label[href]:hover, .label[href]:focus { + color: #fff; + text-decoration: none; + cursor: pointer; } + .label:empty { + display: none; } + +.label-default { + background-color: #999999; } + .label-default[href]:hover, .label-default[href]:focus { + background-color: #808080; } + +.label-primary { + background-color: #428bca; } + .label-primary[href]:hover, .label-primary[href]:focus { + background-color: #3073a9; } + +.label-success { + background-color: #5cb85c; } + .label-success[href]:hover, .label-success[href]:focus { + background-color: #469d44; } + +.label-info { + background-color: #5bc0de; } + .label-info[href]:hover, .label-info[href]:focus { + background-color: #31b2d5; } + +.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: #c92e2c; } + +.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: #999999; + border-radius: 10px; } + .badge:empty { + display: none; } + +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; } + +.btn .badge { + position: relative; + top: -1px; } + +a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; } + +.nav-pills > li > a > .badge { + margin-left: 3px; } + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.14286; + color: inherit; + background-color: #eeeeee; } + .jumbotron h1 { + line-height: 1; + color: inherit; } + .jumbotron p { + line-height: 1.4; } + .container .jumbotron { + border-radius: 6px; } + @media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; } + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; } + .jumbotron h1 { + font-size: 63px; } } + +.thumbnail { + display: block; + margin-bottom: 20px; } + .thumbnail > img { + display: block; + max-width: 100%; + height: auto; + margin-left: auto; + margin-right: auto; } + .thumbnail .caption { + padding: 9px; + color: #333333; } + +a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { + border-color: #428bca; } + +.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 { + padding-right: 35px; } + .alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; } + +.alert-success { + background-color: #dff0d8; + border-color: #d7e9c6; + color: #468847; } + .alert-success hr { + border-top-color: #cae2b3; } + .alert-success .alert-link { + color: #356635; } + +.alert-info { + background-color: #d9edf7; + border-color: #bce9f1; + color: #3a87ad; } + .alert-info hr { + border-top-color: #a6e2ec; } + .alert-info .alert-link { + color: #2d6a87; } + +.alert-warning { + background-color: #fcf8e3; + border-color: #faeacc; + color: #c09853; } + .alert-warning hr { + border-top-color: #f7e0b5; } + .alert-warning .alert-link { + color: #a47c3c; } + +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #b94a48; } + .alert-danger hr { + border-top-color: #e4b9c0; } + .alert-danger .alert-link { + color: #953b39; } + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; } + + to { + background-position: 0 0; } } + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; } + + to { + background-position: 0 0; } } + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; } + + to { + background-position: 40px 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: #428bca; + -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; + transition: width 0.6s ease; } + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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 { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; } + +.progress-bar-success { + background-color: #5cb85c; } + .progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } + +.media, .media-body { + overflow: hidden; + zoom: 1; } + +.media, .media .media { + margin-top: 15px; } + +.media:first-child { + margin-top: 0; } + +.media-object { + display: block; } + +.media-heading { + margin: 0 0 5px; } + +.media > .pull-left { + margin-right: 10px; } +.media > .pull-right { + margin-left: 10px; } + +.media-list { + padding-left: 0; + list-style: none; } + +.list-group { + margin-bottom: 20px; + padding-left: 0; } + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; } + .list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; } + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; } + .list-group-item > .badge { + float: right; } + .list-group-item > .badge + .badge { + margin-right: 5px; } + +a.list-group-item { + color: #555; } + a.list-group-item .list-group-item-heading { + color: #333; } + a.list-group-item:hover, a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; } + a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; } + a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading { + color: inherit; } + a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; } + +.list-group-item-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: " "; + /* 1 */ + display: table; + /* 2 */ } + .panel-body:after { + clear: both; } + +.panel > .list-group { + margin-bottom: 0; } + .panel > .list-group .list-group-item { + border-width: 1px 0; } + .panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; } + .panel > .list-group .list-group-item:last-child { + border-bottom: 0; } + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; } + +.panel > .table, .panel > .table-responsive { + margin-bottom: 0; } +.panel > .panel-body + .table, .panel > .panel-body + .table-responsive { + border-top: 1px solid #ddd; } +.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:last-child > th, .panel > .table-bordered > thead > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > thead > tr:last-child > th, .panel > .table-responsive > .table-bordered > thead > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; } + +.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; } + .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-group .panel { + margin-bottom: 0; + border-radius: 4px; + overflow: hidden; } + .panel-group .panel + .panel { + margin-top: 5px; } +.panel-group .panel-heading { + border-bottom: 0; } + .panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #ddd; } +.panel-group .panel-footer { + border-top: 0; } + .panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; } + +.panel-default { + border-color: #ddd; } + .panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; } + .panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #ddd; } + .panel-default > .panel-heading > .dropdown .caret { + border-color: #333333 transparent; } + .panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #ddd; } + +.panel-primary { + border-color: #428bca; } + .panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca; } + .panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; } + .panel-primary > .panel-heading > .dropdown .caret { + border-color: #fff transparent; } + .panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; } + +.panel-success { + border-color: #d7e9c6; } + .panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d7e9c6; } + .panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d7e9c6; } + .panel-success > .panel-heading > .dropdown .caret { + border-color: #468847 transparent; } + .panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d7e9c6; } + +.panel-warning { + border-color: #faeacc; } + .panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #faeacc; } + .panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #faeacc; } + .panel-warning > .panel-heading > .dropdown .caret { + border-color: #c09853 transparent; } + .panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #faeacc; } + +.panel-danger { + border-color: #ebccd1; } + .panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #ebccd1; } + .panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #ebccd1; } + .panel-danger > .panel-heading > .dropdown .caret { + border-color: #b94a48 transparent; } + .panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #ebccd1; } + +.panel-info { + border-color: #bce9f1; } + .panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce9f1; } + .panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce9f1; } + .panel-info > .panel-heading > .dropdown .caret { + border-color: #3a87ad transparent; } + .panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce9f1; } + +.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: 0.2; + filter: alpha(opacity=20); } + .close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); } + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; } + +.modal-open { + overflow: hidden; } + +.modal { + display: none; + overflow: auto; + overflow-y: scroll; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; } + .modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-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); + transform: translate(0, 0); } + +.modal-dialog { + position: relative; + margin-left: auto; + margin-right: auto; + width: auto; + padding: 10px; + z-index: 1050; } + +.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: none; } + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000; } + .modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); } + .modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); } + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857px; } + +.modal-header .close { + margin-top: -2px; } + +.modal-title { + margin: 0; + line-height: 1.42857; } + +.modal-body { + position: relative; + padding: 20px; } + +.modal-footer { + margin-top: 15px; + padding: 19px 20px 20px; + text-align: right; + border-top: 1px solid #e5e5e5; } + .modal-footer:before, .modal-footer:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + .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; } + +@media screen and (min-width: 768px) { + .modal-dialog { + width: 600px; + padding-top: 30px; + padding-bottom: 30px; } + .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); } } + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); } + .tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); } + .tooltip.top { + margin-top: -3px; + padding: 5px 0; } + .tooltip.right { + margin-left: 3px; + padding: 0 5px; } + .tooltip.bottom { + margin-top: 3px; + padding: 5px 0; } + .tooltip.left { + margin-left: -3px; + padding: 0 5px; } + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; } + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; } +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; } +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #000; } +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; } +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; } +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; } + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 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; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; } + +.popover-content { + padding: 9px 14px; } + +.popover .arrow, .popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.popover .arrow { + border-width: 11px; } + +.popover .arrow:after { + border-width: 10px; + content: ""; } + +.popover.top .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 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; + 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; } + .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { + display: block; } + .carousel-inner > .active { + left: 0; } + .carousel-inner > .next, .carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; } + .carousel-inner > .next { + left: 100%; } + .carousel-inner > .prev { + left: -100%; } + .carousel-inner > .next.left, .carousel-inner > .prev.right { + left: 0; } + .carousel-inner > .active.left { + left: -100%; } + .carousel-inner > .active.right { + left: 100%; } + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } + .carousel-control.left { + background-image: -webkit-gradient(linear, 0% top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-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-gradient(linear, 0% top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-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 { + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); } + .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; } + .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { + left: 50%; } + .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { + right: 50%; } + .carousel-control .icon-prev, .carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; } + .carousel-control .icon-prev:before { + content: '\2039'; } + .carousel-control .icon-next:before { + content: '\203a'; } + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; } + .carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); } + .carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff; } + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } + .carousel-caption .btn { + text-shadow: none; } + +@media screen and (min-width: 768px) { + .carousel-control .glyphicons-chevron-left, .carousel-control .glyphicons-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; } + .carousel-indicators { + bottom: 20px; } } + +.clearfix:before, .clearfix:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } +.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, tr.visible-xs, th.visible-xs, td.visible-xs { + display: none !important; } + +@media (max-width: 767px) { + .visible-xs { + display: block !important; } + tr.visible-xs { + display: table-row !important; } + th.visible-xs, td.visible-xs { + display: table-cell !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; } + tr.visible-xs.visible-sm { + display: table-row !important; } + th.visible-xs.visible-sm, td.visible-xs.visible-sm { + display: table-cell !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; } + tr.visible-xs.visible-md { + display: table-row !important; } + th.visible-xs.visible-md, td.visible-xs.visible-md { + display: table-cell !important; } } + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; } + tr.visible-xs.visible-lg { + display: table-row !important; } + th.visible-xs.visible-lg, td.visible-xs.visible-lg { + display: table-cell !important; } } + +.visible-sm, tr.visible-sm, th.visible-sm, td.visible-sm { + display: none !important; } + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; } + tr.visible-sm.visible-xs { + display: table-row !important; } + th.visible-sm.visible-xs, td.visible-sm.visible-xs { + display: table-cell !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; } + tr.visible-sm { + display: table-row !important; } + th.visible-sm, td.visible-sm { + display: table-cell !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; } + tr.visible-sm.visible-md { + display: table-row !important; } + th.visible-sm.visible-md, td.visible-sm.visible-md { + display: table-cell !important; } } + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; } + tr.visible-sm.visible-lg { + display: table-row !important; } + th.visible-sm.visible-lg, td.visible-sm.visible-lg { + display: table-cell !important; } } + +.visible-md, tr.visible-md, th.visible-md, td.visible-md { + display: none !important; } + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; } + tr.visible-md.visible-xs { + display: table-row !important; } + th.visible-md.visible-xs, td.visible-md.visible-xs { + display: table-cell !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; } + tr.visible-md.visible-sm { + display: table-row !important; } + th.visible-md.visible-sm, td.visible-md.visible-sm { + display: table-cell !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; } + tr.visible-md { + display: table-row !important; } + th.visible-md, td.visible-md { + display: table-cell !important; } } + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; } + tr.visible-md.visible-lg { + display: table-row !important; } + th.visible-md.visible-lg, td.visible-md.visible-lg { + display: table-cell !important; } } + +.visible-lg, tr.visible-lg, th.visible-lg, td.visible-lg { + display: none !important; } + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; } + tr.visible-lg.visible-xs { + display: table-row !important; } + th.visible-lg.visible-xs, td.visible-lg.visible-xs { + display: table-cell !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; } + tr.visible-lg.visible-sm { + display: table-row !important; } + th.visible-lg.visible-sm, td.visible-lg.visible-sm { + display: table-cell !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; } + tr.visible-lg.visible-md { + display: table-row !important; } + th.visible-lg.visible-md, td.visible-lg.visible-md { + display: table-cell !important; } } + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; } + tr.visible-lg { + display: table-row !important; } + th.visible-lg, td.visible-lg { + display: table-cell !important; } } + +.hidden-xs { + display: block !important; } + +tr.hidden-xs { + display: table-row !important; } + +th.hidden-xs, td.hidden-xs { + display: table-cell !important; } + +@media (max-width: 767px) { + .hidden-xs, tr.hidden-xs, th.hidden-xs, td.hidden-xs { + display: none !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm, tr.hidden-xs.hidden-sm, th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm { + display: none !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md, tr.hidden-xs.hidden-md, th.hidden-xs.hidden-md, td.hidden-xs.hidden-md { + display: none !important; } } + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg, tr.hidden-xs.hidden-lg, th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg { + display: none !important; } } + +.hidden-sm { + display: block !important; } + +tr.hidden-sm { + display: table-row !important; } + +th.hidden-sm, td.hidden-sm { + display: table-cell !important; } + +@media (max-width: 767px) { + .hidden-sm.hidden-xs, tr.hidden-sm.hidden-xs, th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs { + display: none !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm, tr.hidden-sm, th.hidden-sm, td.hidden-sm { + display: none !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md, tr.hidden-sm.hidden-md, th.hidden-sm.hidden-md, td.hidden-sm.hidden-md { + display: none !important; } } + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg, tr.hidden-sm.hidden-lg, th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg { + display: none !important; } } + +.hidden-md { + display: block !important; } + +tr.hidden-md { + display: table-row !important; } + +th.hidden-md, td.hidden-md { + display: table-cell !important; } + +@media (max-width: 767px) { + .hidden-md.hidden-xs, tr.hidden-md.hidden-xs, th.hidden-md.hidden-xs, td.hidden-md.hidden-xs { + display: none !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm, tr.hidden-md.hidden-sm, th.hidden-md.hidden-sm, td.hidden-md.hidden-sm { + display: none !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md, tr.hidden-md, th.hidden-md, td.hidden-md { + display: none !important; } } + +@media (min-width: 1200px) { + .hidden-md.hidden-lg, tr.hidden-md.hidden-lg, th.hidden-md.hidden-lg, td.hidden-md.hidden-lg { + display: none !important; } } + +.hidden-lg { + display: block !important; } + +tr.hidden-lg { + display: table-row !important; } + +th.hidden-lg, td.hidden-lg { + display: table-cell !important; } + +@media (max-width: 767px) { + .hidden-lg.hidden-xs, tr.hidden-lg.hidden-xs, th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs { + display: none !important; } } + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm, tr.hidden-lg.hidden-sm, th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm { + display: none !important; } } + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md, tr.hidden-lg.hidden-md, th.hidden-lg.hidden-md, td.hidden-lg.hidden-md { + display: none !important; } } + +@media (min-width: 1200px) { + .hidden-lg, tr.hidden-lg, th.hidden-lg, td.hidden-lg { + display: none !important; } } + +.visible-print, tr.visible-print, th.visible-print, td.visible-print { + display: none !important; } + +@media print { + .visible-print { + display: block !important; } + tr.visible-print { + display: table-row !important; } + th.visible-print, td.visible-print { + display: table-cell !important; } + .hidden-print, tr.hidden-print, th.hidden-print, td.hidden-print { + display: none !important; } } + +/* External Libraries */ +/* Config */ +/* COLORS */ +/** + * Site-wide variables go here. + */ +/* LAYOUT DIMENSIONS */ +/* MEDIA QUERY BREAKPOITNS */ +/* THEME COLORS */ +/* Fonts */ +/* Mixins */ +/** + * $size is one of: xs, sm, md, lg. + * Use variables from _config.scss. + */ +/* Bootstrap Overrides */ +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: 'Source Sans Pro', Helvetica, sans-serif; } + +h1, .h1 { + font-size: 112%; } + +h2, .h2 { + font-size: 93%; } + +h3, .h3 { + font-size: 89%; } + +h4, .h4 { + font-size: 85%; } + +h5, .h5 { + font-size: 81%; } + +h5, .h5 { + font-size: 81%; } + +small { + font-size: 80%; } + +dl { + margin: 0px; } + +.control-label { + line-height: 30px; } + +.help-block { + margin-bottom: 0px; } + +.glyphicon { + color: white; } + +.btn { + border: none; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.25); + margin-right: 10px; + margin-top: 10px; } + .btn:focus { + outline: none; } + +.btn-primary { + color: white; + background-color: #f04c5c; + text-shadow: 0 0 3px rgba(0, 0, 0, 0.25); } + .btn-primary:hover, .btn-primary:active, .btn-primary:focus, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled], .btn-primary[disabled]:active, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus { + color: white; + background-color: #dd1327; } + +.btn-default { + color: #999; + background-color: white; } + .btn-default:hover, .btn-default:active, .btn-default.active, .btn-default.disabled, .btn-default[disabled] { + color: #999; + background-color: white; } + +.btn-link { + background: none; + box-shadow: none; + padding-right: 0px; + padding-left: 0px; } + +.container { + width: 100%; + padding-left: 0px; + padding-right: 0px; } + +@media (min-width: 480px) { + .container { + width: 99%; + padding-left: 15px; + padding-right: 15px; } } + +.dropdown-menu { + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + -ms-border-radius: 1px; + -o-border-radius: 1px; + border-radius: 1px; } + +.dropdown-menu > li > a { + padding: 3px 20px 3px 10px; } + +.form-control:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -ms-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -o-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } + +.modal-header { + border-bottom: none; + padding: 30px 30px 20px 30px; } + .modal-header .modal-title { + font-weight: 700; + font-size: 100%; } + +.modal-body { + padding: 0px 30px; + font-size: 90%; } + +.modal-footer { + border-top: none; + padding: 10px 30px 30px 30px; + text-align: left; + margin: 0px; } + +.navbar { + min-height: 46px; } + +.navbar-nav > li > a { + line-height: 16px; } + +.navbar-brand { + padding: 0; + position: relative; } + +.navbar-fixed-top { + border: 0px; } + +.navbar-toggle { + margin-top: 0; + margin-bottom: 0; + padding: 8px; } + .navbar-toggle .glyphicon-align-justify { + color: #333; } + +.panel, .modal-content { + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; } + +.panel { + border: 0px; } + +.table { + margin-bottom: 0px; } + .table thead > tr > th { + border-bottom: 0px; } + .table th { + color: #999; + font-size: 80%; + text-transform: uppercase; + font-weight: 300; + padding-top: 0px !important; } + .table tr:last-child { + border-bottom: 1px solid #eee; } + .table td { + font-size: 80%; + border-color: #eee !important; + vertical-align: middle !important; } + .table td input[type="radio"], .table td input[type="checkbox"] { + margin-top: 0px; + vertical-align: middle; } + +.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { + background-color: #EAF3FF; } + +.tooltip-inner { + background-color: rgba(0, 0, 0, 0.8); } + +.tooltip.top .tooltip-arrow, .tooltip.top-left .tooltip-arrow, .tooltip.top-right .tooltip-arrow { + border-top-color: rgba(0, 0, 0, 0.8); } +.tooltip.bottom .tooltip-arrow, .tooltip.bottom-left .tooltip-arrow, .tooltip.bottom-right .tooltip-arrow { + border-bottom-color: rgba(0, 0, 0, 0.8); } +.tooltip.right .tooltip-arrow { + border-right-color: rgba(0, 0, 0, 0.8); } +.tooltip.left .tooltip-arrow { + border-left-color: rgba(0, 0, 0, 0.8); } + +/* Base */ +body { + background-color: #f5f5f5; + font-family: 'Source Sans Pro', Helvetica, sans-serif; + font-size: 16px; } + +a { + color: #419eda; } + +button:focus, a:focus { + outline-style: none; } + +dt { + text-transform: uppercase; + color: #999; + font-weight: 300; + font-size: 80%; } + +dd { + margin-bottom: 15px; } + +dd:last-child { + margin-bottom: 0px; } + +h2 { + font-size: 110%; } + +kbd { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + background-color: #eee; + border: solid 1px #ccc; + padding: 4px 8px; } + +input[type="number"] { + max-width: 100px; } + input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; } + +.modal .form-row { + margin-bottom: 20px; } +.modal .form-row:last-child { + margin-bottom: 0px; } + +.co-img-bg-hexagons { + background: url('/mod/dashboard/static/coreos-web/img/hexagons.png') left top repeat, linear-gradient(30deg, #2277ad, #6ec654) no-repeat left top fixed; + background-color: #2277ad; + background-size: auto, 100% 100%; } + +.co-img-bg-right-arrow { + background: url('/mod/dashboard/static/coreos-web/img/icon-right-arrow.svg'); } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 400; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 900; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 900; + font-style: italic; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 700; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 700; + font-style: italic; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 200; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 200; + font-style: italic; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 400; + font-style: italic; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 300; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 300; + font-style: italic; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 600; + font-style: normal; + font-stretch: normal; } + +@font-face { + font-family: 'Source Sans Pro'; + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.eot'); + src: url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.eot?#iefix') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.woff') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.ttf') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.svg#Source Sans Pro') format('svg'); + font-weight: 600; + font-style: italic; + font-stretch: normal; } + +/** + * Reusable non-layout effects styles used across many modules. + */ +.co-fx-box-shadow { + -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); + -ms-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); + -o-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); } + +.co-fx-box-shadow-heavy { + -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); + -ms-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); + -o-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.4); } + +.co-fx-box-shadow-super-heavy { + -webkit-box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5); + -ms-box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5); + -o-box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.5); } + +.co-fx-text-shadow { + text-shadow: rgba(0, 0, 0, 0.25) 1px 1px 2px; } + +.co-img-icon { + position: relative; + height: 24px; + width: 24px; + display: inline-block; + margin-right: 5px; + vertical-align: middle; } + +.co-img-icon > svg { + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); + position: absolute; + top: 50%; + left: 0; + right: 0; + margin: 0 auto; + width: 24px; + height: 24px; } + +.co-img-icon-light { + fill: white; + color: white; } + +.co-img-icon-dark { + fill: black; + color: black; } + +.co-m-icon-inline { + vertical-align: middle; + margin-right: 2px; } + +.ng-dirty.ng-invalid { + border-color: #f04c5c; + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; } + +.co-m-huge-text { + font-size: 400%; + vertical-align: baseline; } + +svg .axis path, svg .axis line { + fill: none; + stroke: #ccc; + shape-rendering: crispEdges; } +svg .axis .tick text { + stroke: none; + fill: #999; + font-weight: 100; + font-size: 80%; } +svg .x-axis path { + display: none; } + +.co-m-radio-label { + margin-left: 7px; } + +/* Animations */ +.co-an-fade-in-out { + -webkit-transition-property: opacity; + -moz-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; + -webkit-transition-duration: 0.2s; + -moz-transition-duration: 0.2s; + -ms-transition-duration: 0.2s; + -o-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: linear; + -moz-transition-timing-function: linear; + -ms-transition-timing-function: linear; + -o-transition-timing-function: linear; + transition-timing-function: linear; } + .co-an-fade-in-out.ng-hide-add, .co-an-fade-in-out.ng-hide-remove { + display: block !important; } + .co-an-fade-in-out.ng-hide-add.ng-hide-add-active, .co-an-fade-in-out.ng-hide-remove { + opacity: 0; } + .co-an-fade-in-out.ng-hide-add, .co-an-fade-in-out.ng-hide-remove.ng-hide-remove-active { + opacity: 1; } + .co-an-fade-in-out.ng-enter, .co-an-fade-in-out.ng-move { + opacity: 0; } + .co-an-fade-in-out.ng-enter.ng-enter-active, .co-an-fade-in-out.ng-move.ng-move-active { + opacity: 1; } + .co-an-fade-in-out.ng-leave { + opacity: 1; } + .co-an-fade-in-out.ng-leave.ng-leave-active { + opacity: 0; } + +.co-an-highlight { + animation-name: highlightInOut; + animation-duration: 4s; + animation-timing-function: linear; + animation-delay: 0; + animation-direction: normal; + animation-iteration-count: 1; + animation-fill-mode: both; + animation-play-state: running; + -webkit-animation-name: highlightInOut; + -webkit-animation-duration: 4s; + -webkit-animation-timing-function: linear; + -webkit-animation-delay: 0; + -webkit-animation-direction: normal; + -webkit-animation-iteration-count: 1; + -webkit-animation-fill-mode: both; + -webkit-animation-play-state: running; + -moz-animation-name: highlightInOut; + -moz-animation-duration: 4s; + -moz-animation-timing-function: linear; + -moz-animation-delay: 0; + -moz-animation-direction: normal; + -moz-animation-iteration-count: 1; + -moz-animation-fill-mode: both; + -moz-animation-play-state: running; + outline-style: solid; + outline-width: 5px; + outline-color: transparent; } + +@-webkit-keyframes highlightInOut { + 0%, 50% { + outline-color: rgba(255, 250, 170, 0.5); + background-color: rgba(255, 250, 170, 0.5); } + + 100% { + background-color: inherit; + outline-color: transparent; } } + +@-moz-keyframes highlightInOut { + 0%, 50% { + outline-color: rgba(255, 250, 170, 0.5); + background-color: rgba(255, 250, 170, 0.5); } + + 100% { + background-color: inherit; + outline-color: transparent; } } + +@-ms-keyframes highlightInOut { + 0%, 50% { + outline-color: rgba(255, 250, 170, 0.5); + background-color: rgba(255, 250, 170, 0.5); } + + 100% { + background-color: inherit; + outline-color: transparent; } } + +@keyframes highlightInOut { + 0%, 50% { + outline-color: rgba(255, 250, 170, 0.5); + background-color: rgba(255, 250, 170, 0.5); } + + 100% { + background-color: inherit; + outline-color: transparent; } } + +/* Layouts */ +#co-l-view-container { + padding-top: 46px; + height: 100%; } + +.co-l-secondary-nav { + line-height: 60px; } + +.co-l-double-pane .co-l-double-pane__col { + padding: 30px; + border-bottom: solid 1px #eee; } + +@media (min-width: 992px) { + .co-l-double-pane { + border-collapse: collapse; + display: table; + width: 100%; } + .co-l-double-pane .co-l-double-pane__row { + display: table-row; + height: 100%; + border-bottom: solid 1px #eee; } + .co-l-double-pane .co-l-double-pane__col { + display: table-cell; + float: none; + padding: 30px; + width: 50%; + border-bottom: none; } + .co-l-double-pane .co-l-double-pane__col + .co-l-double-pane__col { + border-left: solid 1px #eee; } } + +/* Reusable Modules */ +.co-m-modal-link { + position: relative; + padding-right: 9px; } + .co-m-modal-link:after { + content: "\203a"; + font-weight: 900; + color: #999; + font-size: 112%; + position: absolute; + bottom: -1px; + right: 0px; + pointer-events: none; } + +.co-m-invisible-input { + border: 0; + background: none; + width: 100%; + outline: 0; } + .co-m-invisible-input:hover { + cursor: copy; } + + +.co-m-google-signin__btn { + display: inline-block; + background: #dd4b39; + border: none; + color: white; + width: 120px; + border-radius: 3px; + white-space: nowrap; } + .co-m-google-signin__btn:hover { + background: #e74b37; + cursor: hand; } + +.co-m-google-signin__icon { + background: url('/mod/dashboard/static/coreos-web/img/google-plus.png') transparent 0 50% no-repeat; + display: inline-block; + vertical-align: middle; + width: 40px; + height: 24px; + border-right: #bb3f30 1px solid; } + +.co-m-google-signin__btn-text { + display: inline-block; + vertical-align: middle; + padding: 0 8px; + font-size: 12px; + font-family: 'Roboto', arial, sans-serif; } + +.co-m-primary-action { + color: white; + font-size: 90%; + font-weight: 200; + white-space: nowrap; } + .co-m-primary-action:hover, .co-m-primary-action:visited { + color: white; } + +.co-m-panel, .co-m-panel-padded { + min-height: 200px; } + .co-m-panel h1, .co-m-panel h2, .co-m-panel h3, .co-m-panel h4, .co-m-panel-padded h1, .co-m-panel-padded h2, .co-m-panel-padded h3, .co-m-panel-padded h4 { + margin-top: 0; } + .co-m-panel .panel-heading, .co-m-panel-padded .panel-heading { + background-color: white; + padding: 30px; } + .co-m-panel .panel-heading h1, .co-m-panel .panel-heading h2, .co-m-panel .panel-heading h3, .co-m-panel .panel-heading h4, .co-m-panel-padded .panel-heading h1, .co-m-panel-padded .panel-heading h2, .co-m-panel-padded .panel-heading h3, .co-m-panel-padded .panel-heading h4 { + margin: 0; } + .co-m-panel .panel-heading h4, .co-m-panel-padded .panel-heading h4 { + line-height: 24px; } + .co-m-panel .co-m-panel-body-content, .co-m-panel-padded .co-m-panel-body-content { + padding: 0 15px 30px 15px; } + .co-m-panel .co-m-panel-content-left, .co-m-panel-padded .co-m-panel-content-left { + padding: 30px; + border-bottom: solid 1px #eee; } + .co-m-panel .co-m-panel-content-right, .co-m-panel-padded .co-m-panel-content-right { + padding: 30px; } + @media (min-width: 1200px) { + .co-m-panel .co-m-panel-content-right, .co-m-panel-padded .co-m-panel-content-right { + border-left: solid 1px #eee; } + .co-m-panel .co-m-panel-content-left, .co-m-panel-padded .co-m-panel-content-left { + border-bottom: none; } } + +.co-m-panel-padded .panel-body { + padding-top: 0px; + padding-bottom: 0px; } + +.co-m-page-title { + color: white; + font-weight: 400; + letter-spacing: -0.03em; + text-align: center; + margin: 0; + line-height: inherit; + font-size: 225%; } + +.co-m-message { + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + -ms-border-radius: 1px; + -o-border-radius: 1px; + border-radius: 1px; + padding: 5px 0px 5px 10px; + color: white; + font-size: 81%; } + +.co-m-message__close { + margin-top: 1px; + margin-right: 8px; } + .co-m-message__close:hover { + cursor: pointer; } + +.co-m-message--error { + background-color: #dd1327; } + +.co-m-message--info { + background-color: #2277ad; } + +.co-m-gauges { + padding: 0 15px 20px 15px; + border-bottom: 1px solid #eee; } + +.co-m-gauge { + display: inline-block; + text-align: center; + vertical-align: top; + padding: 10px 20px; + min-width: 150px; } + +.co-m-gauge--content { + display: inline-block; + min-height: 92px; } + +.co-m-gauge--label { + text-align: center; + line-height: 1.2em; + font-size: 85%; + text-transform: capitalize; } + +.co-m-dropdown--dark { + background-color: rgba(33, 33, 33, 0.95); + border: solid 1px rgba(33, 33, 33, 0.95); } + .co-m-dropdown--dark > li > a { + color: white; } + .co-m-dropdown--dark > li > a:hover { + background-color: rgba(33, 33, 33, 0.95); + color: white; } + +.co-m-table-container { + display: block; + width: 100%; } + +.co-m-table__constrain-content { + max-width: 300px; + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } + +.co-m-table .co-m-table-selected-row { + background-position: right 10px center; + background-repeat: no-repeat; + padding-right: 15px; + background-color: #EAF3FF; } +.co-m-table .co-m-table-interact-entire-element:hover { + cursor: pointer; } + +.co-m-stacked-cell .co-m-stacked-cell-secondary, .co-m-stacked-cell .co-m-stacked-cell-primary { + line-height: 20px; } +.co-m-stacked-cell .co-m-stacked-cell-secondary { + color: #999; } + +.co-m-navbar { + background-color: white; + margin: 0; + padding-left: 10px; } + +.co-m-navbar__logo { + width: 129px; + height: 30px; + line-height: 64px; } + +.co-m-navbar--right-dropdown:hover { + cursor: pointer; } + +.co-m-navbar-link { + cursor: pointer; + font-size: 110%; + font-weight: 400; } + +html, body { + height: 100%; } + +#co-l-footer-wrapper { + clear: both; + min-height: 100%; + height: auto !important; + height: 100%; + margin-bottom: -40px; } + #co-l-footer-wrapper #co-l-footer-push { + height: 40px; } + +#co-l-footer { + clear: both; + position: relative; + height: 40px; } + +#co-l-footer { + background-color: white; + margin: 0; + min-height: 40px; + overflow: hidden; } + +.co-m-footer-link { + font-size: 81%; + margin-right: 20px; + line-height: 41px; } + .co-m-footer-link:hover { + text-decoration: none; } + +.co-m-footer-link--icon { + padding-right: 5px; + color: #2277ad; } + +.co-m-nav-title { + line-height: 60px; } + +.co-m-inline-loader { + display: inline-block; + cursor: default; } + .co-m-inline-loader:hover { + text-decoration: none; } + +.co-m-inline-loader-dot__one, .co-m-inline-loader-dot__two, .co-m-inline-loader-dot__three { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + animation-fill-mode: both; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + -ms-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-name: bouncedelay; + animation-duration: 1s; + animation-timing-function: ease-in-out; + animation-delay: 0; + animation-direction: normal; + animation-iteration-count: infinite; + animation-fill-mode: forwards; + animation-play-state: running; + -webkit-animation-name: bouncedelay; + -webkit-animation-duration: 1s; + -webkit-animation-timing-function: ease-in-out; + -webkit-animation-delay: 0; + -webkit-animation-direction: normal; + -webkit-animation-iteration-count: infinite; + -webkit-animation-fill-mode: forwards; + -webkit-animation-play-state: running; + -moz-animation-name: bouncedelay; + -moz-animation-duration: 1s; + -moz-animation-timing-function: ease-in-out; + -moz-animation-delay: 0; + -moz-animation-direction: normal; + -moz-animation-iteration-count: infinite; + -moz-animation-fill-mode: forwards; + -moz-animation-play-state: running; + display: inline-block; + height: 6px; + width: 6px; + background: #419eda; + border-radius: 100%; + display: inline-block; } + +.co-m-inline-loader-dot__one { + animation-delay: -0.32s; + -webkit-animation-delay: -0.32s; + -moz-animation-delay: -0.32s; + -ms-animation-delay: -0.32s; + -o-animation-delay: -0.32s; } + +.co-m-inline-loader-dot__two { + animation-delay: -0.16s; + -webkit-animation-delay: -0.16s; + -moz-animation-delay: -0.16s; + -ms-animation-delay: -0.16s; + -o-animation-delay: -0.16s; } + +@-webkit-keyframes bouncedelay { + 0%, 80%, 100% { + -webkit-transform: scale(0.25, 0.25); + -moz-transform: scale(0.25, 0.25); + -ms-transform: scale(0.25, 0.25); + -o-transform: scale(0.25, 0.25); + transform: scale(0.25, 0.25); } + + 40% { + -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 bouncedelay { + 0%, 80%, 100% { + -webkit-transform: scale(0.25, 0.25); + -moz-transform: scale(0.25, 0.25); + -ms-transform: scale(0.25, 0.25); + -o-transform: scale(0.25, 0.25); + transform: scale(0.25, 0.25); } + + 40% { + -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 bouncedelay { + 0%, 80%, 100% { + -webkit-transform: scale(0.25, 0.25); + -moz-transform: scale(0.25, 0.25); + -ms-transform: scale(0.25, 0.25); + -o-transform: scale(0.25, 0.25); + transform: scale(0.25, 0.25); } + + 40% { + -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 bouncedelay { + 0%, 80%, 100% { + -webkit-transform: scale(0.25, 0.25); + -moz-transform: scale(0.25, 0.25); + -ms-transform: scale(0.25, 0.25); + -o-transform: scale(0.25, 0.25); + transform: scale(0.25, 0.25); } + + 40% { + -webkit-transform: scale(1, 1); + -moz-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); } } + +.co-m-loader { + display: block; + position: absolute; + left: 50%; + top: 50%; + margin: -14px 0 0 -14px; } + +.co-m-loader__spinner { + animation-name: co-spin; + animation-duration: 0.75s; + animation-timing-function: linear; + animation-delay: 0; + animation-direction: normal; + animation-iteration-count: infinite; + animation-fill-mode: forwards; + animation-play-state: running; + -webkit-animation-name: co-spin; + -webkit-animation-duration: 0.75s; + -webkit-animation-timing-function: linear; + -webkit-animation-delay: 0; + -webkit-animation-direction: normal; + -webkit-animation-iteration-count: infinite; + -webkit-animation-fill-mode: forwards; + -webkit-animation-play-state: running; + -moz-animation-name: co-spin; + -moz-animation-duration: 0.75s; + -moz-animation-timing-function: linear; + -moz-animation-delay: 0; + -moz-animation-direction: normal; + -moz-animation-iteration-count: infinite; + -moz-animation-fill-mode: forwards; + -moz-animation-play-state: running; + width: 28px; + height: 28px; + border: 2px solid #419eda; + border-radius: 50%; } + .co-m-loader__spinner::before, .co-m-loader__spinner::after { + left: -2px; + top: -2px; + position: absolute; + content: ''; + width: inherit; + height: inherit; + border: inherit; + border-radius: inherit; } + .co-m-loader__spinner::before { + -webkit-transform: rotate(120deg); + -moz-transform: rotate(120deg); + -ms-transform: rotate(120deg); + -o-transform: rotate(120deg); + transform: rotate(120deg); } + .co-m-loader__spinner::after { + -webkit-transform: rotate(240deg); + -moz-transform: rotate(240deg); + -ms-transform: rotate(240deg); + -o-transform: rotate(240deg); + transform: rotate(240deg); } + +.co-m-loader__spinner, .co-m-loader__spinner::before, .co-m-loader__spinner::after { + display: inline-block; + border-color: transparent; + border-top-color: #419eda; } + +@-webkit-keyframes co-spin { + from { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-moz-keyframes co-spin { + from { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@-ms-keyframes co-spin { + from { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes co-spin { + from { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); } + + to { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); } } + +.co-m-toast { + position: fixed; + top: 48px; + margin: 0 auto; + width: 100%; + z-index: 1000; } + +.co-m-toast__message { + margin: 0 auto; + margin-bottom: 3px; } + +@media (min-width: 768px) { + .co-m-toast__message { + width: 300px; } } + +.co-m-cog { + position: relative; + color: #999; + display: inline-block; } + .co-m-cog:hover { + cursor: pointer; } + .co-m-cog.open .co-m-cog__icon { + color: #2277ad; } + +.co-m-cog__icon { + vertical-align: middle; } + +.co-m-cog__icon--size-large { + font-size: 140%; } + +.co-m-cog__icon--size-small { + font-size: 125%; } + +.co-m-cog__dropdown--anchor-left { + left: 0px; + right: auto; } + +.co-m-cog__dropdown--anchor-right { + right: 0px; + left: auto; } + +.co-m-svg { + display: inline-block; } + .co-m-svg > svg { + width: 100%; + height: 100%; } + +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.eot?v=4.0.3'); + src: url('/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.woff?v=4.0.3') format('woff'), url('/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; } + +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -15%; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-fw { + width: 1.28571em; + text-align: center; } + +.fa-ul { + padding-left: 0; + margin-left: 2.14286em; + list-style-type: none; } + .fa-ul > li { + position: relative; } + +.fa-li { + position: absolute; + left: -2.14286em; + width: 2.14286em; + top: 0.14286em; + text-align: center; } + .fa-li.fa-lg { + left: -1.85714em; } + +.fa-border { + padding: 0.2em 0.25em 0.15em; + border: solid 0.08em #eee; + border-radius: 0.1em; } + +.pull-right { + float: right; } + +.pull-left { + float: left; } + +.fa.pull-left { + margin-right: 0.3em; } +.fa.pull-right { + margin-left: 0.3em; } + +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; } + +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); } + + 100% { + -moz-transform: rotate(359deg); } } + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); } + + 100% { + -webkit-transform: rotate(359deg); } } + +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); } + + 100% { + -o-transform: rotate(359deg); } } + +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); } + + 100% { + -ms-transform: rotate(359deg); } } + +@keyframes spin { + 0% { + transform: rotate(0deg); } + + 100% { + transform: rotate(359deg); } } + +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; } + +.fa-stack-1x, .fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; } + +.fa-music:before { + content: "\f001"; } + +.fa-search:before { + content: "\f002"; } + +.fa-envelope-o:before { + content: "\f003"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-o:before { + content: "\f006"; } + +.fa-user:before { + content: "\f007"; } + +.fa-film:before { + content: "\f008"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-gear:before, .fa-cog:before { + content: "\f013"; } + +.fa-trash-o:before { + content: "\f014"; } + +.fa-home:before { + content: "\f015"; } + +.fa-file-o:before { + content: "\f016"; } + +.fa-clock-o:before { + content: "\f017"; } + +.fa-road:before { + content: "\f018"; } + +.fa-download:before { + content: "\f019"; } + +.fa-arrow-circle-o-down:before { + content: "\f01a"; } + +.fa-arrow-circle-o-up:before { + content: "\f01b"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-play-circle-o:before { + content: "\f01d"; } + +.fa-rotate-right:before, .fa-repeat:before { + content: "\f01e"; } + +.fa-refresh:before { + content: "\f021"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-font:before { + content: "\f031"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-dedent:before, .fa-outdent:before { + content: "\f03b"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-video-camera:before { + content: "\f03d"; } + +.fa-picture-o:before { + content: "\f03e"; } + +.fa-pencil:before { + content: "\f040"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-edit:before, .fa-pencil-square-o:before { + content: "\f044"; } + +.fa-share-square-o:before { + content: "\f045"; } + +.fa-check-square-o:before { + content: "\f046"; } + +.fa-arrows:before { + content: "\f047"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-times-circle-o:before { + content: "\f05c"; } + +.fa-check-circle-o:before { + content: "\f05d"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-mail-forward:before, .fa-share:before { + content: "\f064"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-warning:before, .fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-calendar:before { + content: "\f073"; } + +.fa-random:before { + content: "\f074"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-arrows-v:before { + content: "\f07d"; } + +.fa-arrows-h:before { + content: "\f07e"; } + +.fa-bar-chart-o:before { + content: "\f080"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-key:before { + content: "\f084"; } + +.fa-gears:before, .fa-cogs:before { + content: "\f085"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-thumbs-o-up:before { + content: "\f087"; } + +.fa-thumbs-o-down:before { + content: "\f088"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-heart-o:before { + content: "\f08a"; } + +.fa-sign-out:before { + content: "\f08b"; } + +.fa-linkedin-square:before { + content: "\f08c"; } + +.fa-thumb-tack:before { + content: "\f08d"; } + +.fa-external-link:before { + content: "\f08e"; } + +.fa-sign-in:before { + content: "\f090"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-lemon-o:before { + content: "\f094"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-square-o:before { + content: "\f096"; } + +.fa-bookmark-o:before { + content: "\f097"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-hdd-o:before { + content: "\f0a0"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-group:before, .fa-users:before { + content: "\f0c0"; } + +.fa-chain:before, .fa-link:before { + content: "\f0c1"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-cut:before, .fa-scissors:before { + content: "\f0c4"; } + +.fa-copy:before, .fa-files-o:before { + content: "\f0c5"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-save:before, .fa-floppy-o:before { + content: "\f0c7"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-plus:before { + content: "\f0d5"; } + +.fa-money:before { + content: "\f0d6"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-unsorted:before, .fa-sort:before { + content: "\f0dc"; } + +.fa-sort-down:before, .fa-sort-asc:before { + content: "\f0dd"; } + +.fa-sort-up:before, .fa-sort-desc:before { + content: "\f0de"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-linkedin:before { + content: "\f0e1"; } + +.fa-rotate-left:before, .fa-undo:before { + content: "\f0e2"; } + +.fa-legal:before, .fa-gavel:before { + content: "\f0e3"; } + +.fa-dashboard:before, .fa-tachometer:before { + content: "\f0e4"; } + +.fa-comment-o:before { + content: "\f0e5"; } + +.fa-comments-o:before { + content: "\f0e6"; } + +.fa-flash:before, .fa-bolt:before { + content: "\f0e7"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-paste:before, .fa-clipboard:before { + content: "\f0ea"; } + +.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa-exchange:before { + content: "\f0ec"; } + +.fa-cloud-download:before { + content: "\f0ed"; } + +.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-bell-o:before { + content: "\f0a2"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cutlery:before { + content: "\f0f5"; } + +.fa-file-text-o:before { + content: "\f0f6"; } + +.fa-building-o:before { + content: "\f0f7"; } + +.fa-hospital-o:before { + content: "\f0f8"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-mobile-phone:before, .fa-mobile:before { + content: "\f10b"; } + +.fa-circle-o:before { + content: "\f10c"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-mail-reply:before, .fa-reply:before { + content: "\f112"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-folder-o:before { + content: "\f114"; } + +.fa-folder-open-o:before { + content: "\f115"; } + +.fa-smile-o:before { + content: "\f118"; } + +.fa-frown-o:before { + content: "\f119"; } + +.fa-meh-o:before { + content: "\f11a"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-keyboard-o:before { + content: "\f11c"; } + +.fa-flag-o:before { + content: "\f11d"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-code:before { + content: "\f121"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-mail-reply-all:before { + content: "\f122"; } + +.fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { + content: "\f123"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-code-fork:before { + content: "\f126"; } + +.fa-unlink:before, .fa-chain-broken:before { + content: "\f127"; } + +.fa-question:before { + content: "\f128"; } + +.fa-info:before { + content: "\f129"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-shield:before { + content: "\f132"; } + +.fa-calendar-o:before { + content: "\f133"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-ticket:before { + content: "\f145"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-minus-square-o:before { + content: "\f147"; } + +.fa-level-up:before { + content: "\f148"; } + +.fa-level-down:before { + content: "\f149"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-pencil-square:before { + content: "\f14b"; } + +.fa-external-link-square:before { + content: "\f14c"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-toggle-down:before, .fa-caret-square-o-down:before { + content: "\f150"; } + +.fa-toggle-up:before, .fa-caret-square-o-up:before { + content: "\f151"; } + +.fa-toggle-right:before, .fa-caret-square-o-right:before { + content: "\f152"; } + +.fa-euro:before, .fa-eur:before { + content: "\f153"; } + +.fa-gbp:before { + content: "\f154"; } + +.fa-dollar:before, .fa-usd:before { + content: "\f155"; } + +.fa-rupee:before, .fa-inr:before { + content: "\f156"; } + +.fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { + content: "\f157"; } + +.fa-ruble:before, .fa-rouble:before, .fa-rub:before { + content: "\f158"; } + +.fa-won:before, .fa-krw:before { + content: "\f159"; } + +.fa-bitcoin:before, .fa-btc:before { + content: "\f15a"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-text:before { + content: "\f15c"; } + +.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa-sort-alpha-desc:before { + content: "\f15e"; } + +.fa-sort-amount-asc:before { + content: "\f160"; } + +.fa-sort-amount-desc:before { + content: "\f161"; } + +.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa-sort-numeric-desc:before { + content: "\f163"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-youtube-square:before { + content: "\f166"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-youtube-play:before { + content: "\f16a"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitbucket-square:before { + content: "\f172"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-long-arrow-down:before { + content: "\f175"; } + +.fa-long-arrow-up:before { + content: "\f176"; } + +.fa-long-arrow-left:before { + content: "\f177"; } + +.fa-long-arrow-right:before { + content: "\f178"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-female:before { + content: "\f182"; } + +.fa-male:before { + content: "\f183"; } + +.fa-gittip:before { + content: "\f184"; } + +.fa-sun-o:before { + content: "\f185"; } + +.fa-moon-o:before { + content: "\f186"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-arrow-circle-o-right:before { + content: "\f18e"; } + +.fa-arrow-circle-o-left:before { + content: "\f190"; } + +.fa-toggle-left:before, .fa-caret-square-o-left:before { + content: "\f191"; } + +.fa-dot-circle-o:before { + content: "\f192"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-turkish-lira:before, .fa-try:before { + content: "\f195"; } + +.fa-plus-square-o:before { + content: "\f196"; } diff --git a/mod/dashboard/app/coreos-web/coreos.js b/mod/dashboard/app/coreos-web/coreos.js new file mode 100644 index 000000000..0345fef2f --- /dev/null +++ b/mod/dashboard/app/coreos-web/coreos.js @@ -0,0 +1,1957 @@ +'use strict'; + +angular.module('underscore', []).factory('_', function($window) { + return $window._; +}); + +angular.module('jquery', []).factory('$', function($window) { + return $window.$; +}); + +angular.module('d3', []).factory('d3', function($window) { + return $window.d3; +}); + +angular.module('coreos.services', [ + 'coreos.events', + 'underscore', + 'jquery' +]); +angular.module('coreos.ui', [ + 'coreos.events', + 'underscore', + 'jquery', + 'd3', + 'ui.bootstrap' +]); +angular.module('coreos.filters', []); +angular.module('coreos.events', []); +angular.module('coreos', [ + 'coreos.events', + 'coreos.services', + 'coreos.ui', + 'coreos.filters', + 'coreos-templates-html', + 'coreos-templates-svg', + + // External deps. + 'ngRoute', + 'ngResource', + 'ngAnimate', + 'ui.bootstrap', + 'underscore', + 'jquery', + 'd3' +]) +.config(function($compileProvider) { + // Allow irc links. + $compileProvider + .aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|irc):/); +}); + +'use strict'; + +angular.module('coreos.filters') +.filter('orderObjectBy', function() { + return function(items, field, reverse) { + var filtered = []; + angular.forEach(items, function(item) { + filtered.push(item); + }); + filtered.sort(function (a, b) { + return (a[field] > b[field]); + }); + if (reverse) { + filtered.reverse(); + } + return filtered; + }; +}); + +'use strict'; + +angular.module('coreos.filters') +.filter('utc', function(_) { + + function convertToUtc(date) { + return new Date(date.getUTCFullYear(), + date.getUTCMonth(), + date.getUTCDate(), + date.getUTCHours(), + date.getUTCMinutes(), + date.getUTCSeconds()); + } + + return function(input) { + if (_.isNumber(input)) { + return convertToUtc(new Date(input)); + } + if (_.isString(input)) { + return convertToUtc(new Date(Date.parse(input))); + } + if (_.isDate(input)) { + return convertToUtc(input); + } + return ''; + }; + +}); + +/** + * Broadcast when the window size breakpoints change. + * TODO(sym3tri): change implementation to use window.matchMedia instead. + */ + +'use strict'; + +angular.module('coreos.services') +.factory('breakpointSvc', function(_, $window, $rootScope, CORE_CONST, + CORE_EVENT) { + + var previousName; + + function getSize() { + var width = $window.innerWidth; + return _.find(CORE_CONST.BREAKPOINTS, function(bp) { + if (bp.min <= width && bp.max > width) { + return true; + } + }).name; + } + + function onResize() { + var breakpointName = getSize(); + if (breakpointName !== previousName) { + $rootScope.$broadcast(CORE_EVENT.BREAKPOINT, breakpointName); + previousName = breakpointName; + } + } + + // Broadcast initial size. + $rootScope.$broadcast(CORE_EVENT.BREAKPOINT, getSize()); + + // Watch for resizes. + angular.element($window).on('resize', _.debounce(onResize, 20, true)); + + return { + getSize: getSize + }; + +}); + +'use strict'; + +angular.module('coreos.services').provider('configSvc', function() { + var configValues = {}; + + this.config = function(newConfig) { + if (newConfig) { + configValues = newConfig; + } else { + return configValues; + } + }; + + this.$get = function() { + return { + get: function(key) { + if (key) { + return configValues[key]; + } else { + return angular.copy(configValues); + } + }, + + set: function(key, value) { + configValues[key] = value; + } + }; + }; + +}); + +'use strict'; + +angular.module('coreos').constant('CORE_CONST', { + + HIGHLIGHT_CSS_CLASS: 'co-an-highlight', + + BREAKPOINTS: [ + { + name: 'xs', + min: 0, + max: 480 + }, + { + name: 'sm', + min: 480, + max: 768 + }, + { + name: 'md', + min: 768, + max: 992 + }, + { + name: 'lg', + min: 992, + max: 1200 + }, + { + name: 'xl', + min: 1200, + max: Infinity + } + ] + +}); + +/** + * @fileoverview + * + * Service for working with cookies since angular's built-in cookie service + * leaves much to be desired. + */ + +'use strict'; + +angular.module('coreos.services').factory('cookieSvc', + function($window, timeSvc) { + + return { + + /** + * Create a new cookie. + */ + create: function(name, value, daysUtilExpires) { + var date, expires; + if (daysUtilExpires) { + date = new Date(); + date.setTime(date.getTime() + + (daysUtilExpires * timeSvc.ONE_DAY_IN_MS)); + expires = '; expires=' + date.toGMTString(); + } + else { + expires = ''; + } + $window.document.cookie = name + '=' + value + expires + '; path=/'; + }, + + /** + * Retrieve a cookie by name. + */ + get: function(name) { + var nameEq, cookieList, i, cookieStr; + nameEq = name + '='; + cookieList = $window.document.cookie.split(';'); + for (i = 0; i < cookieList.length; i++) { + cookieStr = cookieList[i]; + while (cookieStr.charAt(0) === ' ') { + cookieStr = cookieStr.substring(1, cookieStr.length); + } + if (cookieStr.indexOf(nameEq) === 0) { + return cookieStr.substring(nameEq.length, cookieStr.length); + } + } + return null; + }, + + /** + * Delete a cookie by name. + */ + remove: function(name) { + this.create(name, '', -1); + } + + }; + +}); + +/** + * @fileoverview + * + * Simply inject this service to start broadcasting events. + * It will feature-detect any available browser visibility api. + * If the feature exists it will broadcast an event when browser visibiltiy + * changes. + */ + +'use strict'; + +angular.module('coreos.services') +.factory('documentVisibilitySvc', function($rootScope, $document, _, + CORE_EVENT) { + + var document = $document[0], + features, + detectedFeature; + + function broadcastChangeEvent() { + $rootScope.$broadcast(CORE_EVENT.DOC_VISIBILITY_CHANGE, + document[detectedFeature.propertyName]); + } + + features = { + standard: { + eventName: 'visibilitychange', + propertyName: 'hidden' + }, + moz: { + eventName: 'mozvisibilitychange', + propertyName: 'mozHidden' + }, + ms: { + eventName: 'msvisibilitychange', + propertyName: 'msHidden' + }, + webkit: { + eventName: 'webkitvisibilitychange', + propertyName: 'webkitHidden' + } + }; + + Object.keys(features).some(function(feature) { + if (_.isBoolean(document[features[feature].propertyName])) { + detectedFeature = features[feature]; + return true; + } + }); + + if (detectedFeature) { + $document.on(detectedFeature.eventName, broadcastChangeEvent); + } + + return { + + /** + * Is the window currently hidden or not. + */ + isHidden: function() { + if (detectedFeature) { + return document[detectedFeature.propertyName]; + } + } + + }; + +}); + +'use strict'; + +angular.module('coreos.events').constant('CORE_EVENT', { + PAGE_NOT_FOUND: 'core.event.page_not_found', + BREAKPOINT: 'core.event.breakpoint', + RESP_ERROR: 'core.event.resp_error', + RESP_MUTATE: 'core.event.resp_mutate', + DOC_VISIBILITY_CHANGE: 'core.event.doc_visibility_change', + POLL_ERROR: 'core.event.poll_error' +}); + +/** + * @fileoverview + * + * Utility service to highlight an element or selection of elements. + * NOTE: Expects a [HIGHLIGHT_CSS_CLASS] class to be defined in constants. + */ + +'use strict'; + +angular.module('coreos.services') +.factory('highlighterSvc', function($timeout, $, CORE_CONST) { + + var pendingTimeout; + + return { + + /** + * Highlight an element in the DOM. + * + * @param {String|Element} elemOrSelector + */ + highlight: function(elemOrSelector) { + var elem; + if (!elemOrSelector) { + return; + } + elem = $(elemOrSelector); + if (elem.hasClass(CORE_CONST.HIGHLIGHT_CSS_CLASS)) { + $timeout.cancel(pendingTimeout); + elem.removeClass(CORE_CONST.HIGHLIGHT_CSS_CLASS); + } + elem.addClass(CORE_CONST.HIGHLIGHT_CSS_CLASS); + pendingTimeout = $timeout( + elem.removeClass.bind(elem, CORE_CONST.HIGHLIGHT_CSS_CLASS), 5000); + } + + }; + +}); + +'use strict'; + +angular.module('coreos.services') +.factory('interceptorErrorSvc', function($q, $rootScope, CORE_EVENT) { + + function parseMessage(rejection) { + var errorMsg; + if (rejection.config.description) { + errorMsg = 'Error attempting: ' + rejection.config.description; + } else { + errorMsg = 'A network error occurred.'; + } + return errorMsg; + } + + return { + + /** + * For every failing $http request: broadcast an error event. + */ + 'responseError': function(rejection) { + if (!rejection.config.supressNotifications) { + $rootScope.$broadcast(CORE_EVENT.RESP_ERROR, + rejection, + parseMessage(rejection)); + } + return $q.reject(rejection); + } + + }; + +}); + +'use strict'; + +angular.module('coreos.services') +.factory('interceptorMutateSvc', function($q, $rootScope, CORE_EVENT) { + + // Remove last path segement of a url. + function removeLastPath(url) { + var newUrl = url.split('/'); + newUrl.pop(); + newUrl = newUrl.join('/'); + return newUrl; + } + + return { + + /** + * For every successful mutating $http request broadcast the urls. + * Useful for cache invalidation. + */ + 'response': function(response) { + var method = response.config.method, + url = response.config.url, + cacheKeys; + + if (method !== 'GET') { + cacheKeys = []; + cacheKeys.push(url); + if (method !== 'POST') { + cacheKeys.push(removeLastPath(url)); + } + $rootScope.$broadcast(CORE_EVENT.RESP_MUTATE, response); + } + return response || $q.when(response); + } + + }; + +}); + +/** + * A general purpose polling service. + * + * Provide a series of options with callacks and this service will start a + * poller for the task. + * + * On failure it will try up to `maxRetries`, then will be killed and callback + * to the `catchMaxFail()` function if provided. + * + * Optionally pass in a `scope` associated with the poller to automatically + * kill the poller when the scope is destroyed. + * + * Global settings for this provider can be configured in the app `config` + * stage. Instance will override defaults if provided ot the `register()` + * function. + * + * EXAMPLE USAGE: + * + * poller.register('myPoller', { + * fn: functionToRunRepeadedly, + * then: successCallback, + * catch: errorCallback, + * catchMaxFail: afterMaxFailuresCallback, + * scope: $scope, + * startIn: 0, + * interval: 5000 + * }); + */ + + +'use strict'; + +angular.module('coreos.services').provider('pollerSvc', function() { + var settings = {}, + pollers = {}; + + /** + * Update global settings for the provider. + * @param {Object} newSettings + */ + this.settings = function(newSettings) { + if (newSettings) { + settings = newSettings; + } else { + return settings; + } + }; + + /** + * The main factory method. + * Dependencies are injected and is invoked by angular. + */ + this.$get = function pollerFactory($q, $http, $timeout, _, CORE_EVENT) { + /* jshint unused:false */ + + function isRegistered(name) { + return !!pollers[name]; + } + + /** + * Schedule the `execute` function to run. + * @param {Number} delay When to start in ms. + */ + function schedule(name, executor, delay) { + var poller = pollers[name]; + if (!poller || poller._errorCount > poller.maxRetries) { + return; + } + poller._state = 'waiting'; + poller._timeoutPromise = $timeout(executor, delay); + } + + /** + * Wrap a function to prevent it from running if the current state + * is "terminated". + */ + function runIfActive(name, fn) { + var poller = pollers[name]; + if (!poller) { + return angular.noop; + } + return function() { + if (poller._state !== 'terminated') { + return fn.apply(null, arguments); + } + }; + } + + function killPoller(name) { + var poller; + if (!isRegistered(name)) { + return; + } + poller = pollers[name]; + poller._state = 'terminated'; + // Cancel the interval timer. + if (poller._timeoutPromise) { + $timeout.cancel(poller._timeoutPromise); + } + // Remove the scope.$destroy handler. + poller._unlistenDestroy(); + // Delete from the list. + delete pollers[name]; + } + + /** + * Create an executor function for a poller with the given name. + */ + function createExecutor(name) { + var poller = pollers[name]; + if (!poller) { + return angular.noop; + } + + /** + * The main function that will be run on an interval for a poller. + * This wraps the user-provided function, executes callbacks after + * completion, and handles scheduling. + */ + return function execute() { + if (poller._paused) { + schedule(name, poller._executor, poller.interval); + return; + } + poller._state = 'executing'; + poller.fn() + .then(runIfActive(name, function() { + poller._state = 'success'; + poller._errorCount = 0; + poller.then.apply(null, arguments); + })) + .catch(runIfActive(name, function() { + var args; + poller._state = 'error'; + poller._errorCount += 1; + poller.catch.apply(null, arguments); + if (poller._errorCount > poller.maxRetries) { + args = _.toArray(arguments); + args.unshift(name); + poller.catchMaxFail.apply(null, args); + killPoller(name); + } + })) + .finally(runIfActive(name, function() { + poller.finally.apply(null, arguments); + schedule(name, poller._executor, poller.interval); + })); + }; + } + + return { + + /** + * Determines if a poller is already registered by name. + * @param {String} name + * @return {Boolean} + */ + isRegistered: isRegistered, + + /** + * Register the promise in the index, and schedule it to start polling. + * + * @param {String} name The uniqe name to associate with the poller. + * @param {Object} options + */ + register: function(name, options) { + // kill the old poller if one by same name already exists. + if (isRegistered(name)) { + this.kill(name); + } + + // Initialize all poller options. + _.defaults(options, settings, { + startIn: 0, + maxRetries: 0, + catch: angular.noop, + then: angular.noop, + finally: angular.noop, + catchMaxFail: function() { + if (options.scope) { + options.scope.$emit(CORE_EVENT.POLL_ERROR); + } + }, + _unlistenDestroy: angular.noop, + _errorCount: 0, + _state: 'starting' + }); + + if (options.scope) { + // If a scope is provided, automatically kill the poller when the + // scope is destroyed. + options._unlistenDestroy = + options.scope.$on('$destroy', this.kill.bind(this, name)); + + // When scope is prvided automatically pause polling when tab + // loses visability. + // TODO: add pauseAll() function and move this to app.run() + options.scope.$on(CORE_EVENT.DOC_VISIBILITY_CHANGE, + function(e, isHidden) { + if (isHidden) { + options._paused = true; + } else { + options._paused = false; + } + }); + } + + // Keep track of the poller in the index. + pollers[name] = options; + + // Generate the executor wrapper for the poller. + options._executor = createExecutor(name); + + // Schedule the initial run of the poller. + schedule(name, options._executor, options.startIn); + }, + + /** + * Kill a poller by name and remove all references, callbacks, etc. + * @param {String} name + */ + kill: function(name) { + killPoller(name); + }, + + /** + * Kill all registered pollers. + */ + killAll: function() { + Object.keys(pollers).forEach(this.kill.bind(this)); + } + + }; + + }; + +}); + +/** + * @fileoverview + * + * Utility service that scrolls elements into view. + */ + +'use strict'; + +angular.module('coreos.services') +.factory('scrollerSvc', function($timeout, $) { + + function scroll(elem) { + elem.first()[0].scrollIntoView(); + } + + var scrollerSvc = { + + /** + * Scroll to the element on the page with matching id. + * Adds and removes highlight classes too. + * + * @param {String|Element} elemOrSelector + */ + scrollTo: function(elemOrSelector) { + var maxTries = 100, + numTries = 0, + interval = 10, + elem; + + if (!elemOrSelector) { + return; + } + + // Wait for element to appear in DOM if it doesn't exist yet, + // then scroll to it. + function attemptScroll() { + elem = $(elemOrSelector); + if (numTries < maxTries) { + if (!elem.length) { + numTries++; + $timeout(attemptScroll, interval); + } else { + scroll(elem); + } + } + } + + $timeout(attemptScroll, 0); + } + + }; + + return scrollerSvc; + +}); + +'use strict'; + +angular.module('coreos.services') +.factory('arraySvc', function() { + + return { + + /** + * Remove first occurance of an item from an array in-place. + * + * @param {Arrray} ary Array to mutate. + * @param {*} item Array item to remove. + * @return {Array} The input array. + */ + remove: function(ary, item) { + var index; + if (!ary || !ary.length) { + return []; + } + index = ary.indexOf(item); + if (index > -1) { + ary.splice(index, 1); + } + return ary; + } + + }; + +}); + +'use strict'; + +angular.module('coreos.services') +.factory('mathSvc', function(_) { + + return { + + /** + * If passed an array sums all items in the array. + * Otherwise sums all arguments together. + * + * @param {Array|Number...} + * @return {Number} + */ + sum: function() { + var ary; + if (_.isArray(arguments[0])) { + ary = arguments[0]; + } else { + ary = _.toArray(arguments); + } + return ary.reduce(function(prev, curr) { + return prev + curr; + }, 0); + } + + }; + +}); + +'use strict'; + +angular.module('coreos.services') +.factory('timeSvc', function(_) { + + var ONE_MINUTE_IN_MS = 60 * 1000, + ONE_HOUR_IN_MS = ONE_MINUTE_IN_MS * 60, + ONE_DAY_IN_MS = ONE_HOUR_IN_MS * 24, + ONE_WEEK_IN_MS = ONE_DAY_IN_MS * 7, + THIRTY_DAYS_IN_MS = ONE_DAY_IN_MS * 30; + + function getTimestamp(val) { + if (val && _.isNumber(val)) { + return val; + } + return Date.now(); + } + + return { + ONE_MINUTE_IN_MS: ONE_MINUTE_IN_MS, + ONE_HOUR_IN_MS: ONE_HOUR_IN_MS, + ONE_DAY_IN_MS: ONE_DAY_IN_MS, + ONE_WEEK_IN_MS: ONE_WEEK_IN_MS, + THIRTY_DAYS_IN_MS: THIRTY_DAYS_IN_MS, + + milliToSecs: function(ms) { + return Math.floor(ms / 1000); + }, + + secsToMins: function(secs) { + return Math.floor(parseInt(secs, 10) / 60) || 0; + }, + + minsToSecs: function(mins) { + return Math.abs(parseInt(mins, 10) * 60) || 0; + }, + + oneHourAgo: function(ts) { + return getTimestamp(ts) - this.ONE_HOUR_IN_MS; + }, + + oneDayAgo: function(ts) { + return getTimestamp(ts) - this.ONE_DAY_IN_MS; + }, + + oneWeekAgo: function(ts) { + return getTimestamp(ts) - this.ONE_WEEK_IN_MS; + }, + + thirtyDaysAgo: function(ts) { + return getTimestamp(ts) - this.THIRTY_DAYS_IN_MS; + }, + + getRelativeTimestamp: function(term) { + var now = Date.now(); + switch(term) { + case 'month': + return this.thirtyDaysAgo(now); + case 'week': + return this.oneWeekAgo(now); + case 'day': + return this.oneDayAgo(now); + case 'hour': + return this.oneHourAgo(now); + } + } + + }; + +}); + +/** + * @fileoverview + * Wrap buttons and automatically enable/disbale and show loading indicator. + */ + +'use strict'; + +angular.module('coreos.ui') +.directive('coBtnBar', function($, $timeout, $compile) { + + return { + templateUrl: '/coreos.ui/btn-bar/btn-bar.html', + restrict: 'EA', + transclude: true, + replace: true, + scope: { + // A promise that indicates completion of async operation. + 'completePromise': '=' + }, + link: function(scope, elem) { + var linkButton, + loaderDirectiveEl; + + linkButton = $('.btn-link', elem).last(); + loaderDirectiveEl = + angular.element(''); + $compile(loaderDirectiveEl)(scope); + + function disableButtons() { + elem.append(loaderDirectiveEl); + $('button', elem).attr('disabled', 'disabled'); + linkButton.addClass('hidden'); + } + + function enableButtons() { + loaderDirectiveEl.remove(); + $('button', elem).removeAttr('disabled'); + linkButton.removeClass('hidden'); + } + + scope.$watch('completePromise', function(completePromise) { + if (completePromise) { + // Force async execution so disabling the button won't prevent form + // submission. + $timeout(disableButtons, 0); + completePromise.finally(function() { + // Also enable buttons asynchronously in case the request completes + // before disableButtons() runs. + $timeout(enableButtons, 0); + }); + } + }); + } + + }; + +}); + +/** + * Simple directive to navigate to a route when the + * element is clicked on. + */ + +'use strict'; + +angular.module('coreos.ui') +.directive('coClickNav', function($location) { + + return { + restrict: 'A', + link: function(scope, elem, attrs) { + function onClickHandler(event) { + $location.url(attrs.coClickNav); + scope.$apply(); + event.preventDefault(); + event.stopPropagation(); + } + elem.on('click', onClickHandler); + elem.on('$destroy', function() { + elem.off('click', onClickHandler); + }); + } + }; + +}); + +/** + * @fileoverview + * Display a cog icon and construct dropdown menu. + */ + +'use strict'; + +angular.module('coreos.ui') +.directive('coCog', function() { + + return { + templateUrl: '/coreos.ui/cog/cog.html', + restrict: 'E', + replace: true, + scope: { + 'apps': '=', + 'options': '=', + 'size': '@', + 'anchor': '@' + }, + link: function(scope, elem) { + scope.clickHandler = function($event, option) { + $event.stopPropagation(); + $event.preventDefault(); + if (option.callback) { + option.callback(); + } + elem.removeClass('open'); + }; + } + }; + +}); + +'use strict'; + +angular.module('coreos.ui') +.controller('ConfirmModalCtrl', function($scope, $modalInstance, + executeFn, title, message, btnText, errorFormatter) { + + $scope.errorFormatter = errorFormatter; + $scope.title = title; + $scope.message = message; + $scope.btnText = btnText || 'Confirm'; + + $scope.execute = function() { + $scope.requestPromise = executeFn(null, { + supressNotifications: true + }) + .then($modalInstance.close); + }; + + $scope.cancel = function() { + $modalInstance.dismiss('cancel'); + }; + +}); + +/** + * @fileoverview + * An arc donut chart. + */ + +// TDOO(sym3tri): add hover text. + +'use strict'; + +angular.module('coreos.ui') +.directive('coDonut', function(d3, _) { + + return { + + templateUrl: '/coreos.ui/donut/donut.html', + transclude: true, + restrict: 'E', + replace: true, + scope: { + // The original source data to graph. + percent: '=', + color: '@' + }, + controller: function($scope) { + var outerRadius, circleWidth; + $scope.width = $scope.height = 80; + outerRadius = $scope.width / 2; + circleWidth = 15; + $scope.arc = d3.svg.arc() + .innerRadius(outerRadius - circleWidth) + .outerRadius(outerRadius) + .startAngle(0); + // Constant to turn percents into radian angles. + $scope.tau = 2 * Math.PI; + }, + link: function(scope, elem) { + scope.isRendered = false; + + function render() { + var endAngle = scope.tau, // 100% + textColor = '#333', + bgcolor = '#eee', + color = scope.color || '#000', + fontSize = 18; + + // Keep track of added DOM elements. + scope.el = {}; + + scope.el.svg = d3.select(elem.find('.co-m-gauge__content')[0]) + .append('svg') + .attr('width', scope.width) + .attr('height', scope.height) + .append('g') + .attr('transform', + 'translate(' + + scope.width / 2 + ',' + + scope.height / 2 + ')'); + + scope.el.text = scope.el.svg.append('text') + .attr('fill', textColor) + .attr('y', Math.floor(fontSize / 3)) + .attr('font-size', fontSize + 'px') + .attr('text-anchor', 'middle'); + + scope.el.arcGroup = scope.el.svg.append('g') + .attr('transform', 'rotate(180)'); + + scope.el.background = scope.el.arcGroup.append('path') + .datum({ + endAngle: endAngle + }) + .style('fill', bgcolor) + .attr('d', scope.arc); + + scope.el.foreground = scope.el.arcGroup.append('path') + .datum({ + endAngle: scope.tau * (scope.percent || 0) + }) + .style('fill', color) + .style('opacity', 0.8) + .attr('d', scope.arc); + + scope.isRendered = true; + } + + /** + * Update the value of the donut chart. + */ + function updateValue() { + if (!_.isNumber(scope.percent)) { + scope.el.text.text('?'); + return; + } + scope.el.text.text(Math.round(scope.percent * 100) + '%'); + scope.el.foreground.transition() + .duration(750) + .call(arcTween, scope.percent * scope.tau); + } + + /** + * Transition function to animate the arc. + */ + function arcTween(transition, newAngle) { + transition.attrTween('d', function(d) { + var interpolate = d3.interpolate(d.endAngle, newAngle); + return function(t) { + d.endAngle = interpolate(t); + return scope.arc(d); + }; + }); + } + + /** + * Cleanup. + */ + elem.on('$destroy', function() { + scope.el.svg.remove(); + }); + + render(); + + scope.$watch('percent', function() { + if (scope.isRendered) { + updateValue(); + } + }); + } + }; + +}); + +/** + * @fileoverview + * Displays a message based on a promise. + */ + +'use strict'; +angular.module('coreos.ui') + + +.provider('errorMessageSvc', function() { + + var formatters = {}; + + this.registerFormatter = function(name, fn) { + formatters[name] = fn; + }; + + this.$get = function() { + return { + getFormatter: function(name) { + return formatters[name] || angular.noop; + } + }; + }; + +}) + + +.directive('coErrorMessage', function(errorMessageSvc) { + + return { + templateUrl: '/coreos.ui/error-message/error-message.html', + restrict: 'E', + replace: true, + scope: { + promise: '=', + formatter: '@', + customMessage: '@message' + }, + controller: function postLink($scope) { + $scope.show = false; + + function handler(resp) { + if ($scope.formatter) { + $scope.message = + errorMessageSvc.getFormatter($scope.formatter)(resp); + } else if ($scope.customMessage) { + $scope.message = $scope.customMessage; + } else { + return; + } + $scope.show = true; + } + + $scope.$watch('promise', function(promise) { + $scope.show = false; + if (promise && promise.catch) { + promise.catch(handler); + } + }); + + } + }; + +}); + +/** + * @fileoverview + * Inject favicons into the . + * Only use on tag. + */ + + +'use strict'; +angular.module('coreos.ui') + +.directive('coFavicons', function($compile, $rootScope, configSvc) { + /*jshint maxlen:false */ + + return { + restrict: 'A', + replace: true, + link: function postLink(scope, elem) { + var newScope = $rootScope.$new(), + htmlTemplate = + '' + + '' + + '' + + '' + + ''; + newScope.path = configSvc.get('libPath') + '/img'; + elem.append($compile(htmlTemplate)(newScope)); + } + }; + +}); + +/* +*/ + +/** + * @fileoverview + * Standard CoreOS footer. + * + */ + +'use strict'; +angular.module('coreos.ui') + +.directive('coFooter', function() { + return { + templateUrl: '/coreos.ui/footer/footer.html', + transclude: true, + restrict: 'E', + replace: true + }; +}) + +.directive('coFooterLink', function() { + return { + templateUrl: '/coreos.ui/footer/footer-link.html', + transclude: true, + restrict: 'E', + replace: true, + scope: { + href: '@', + iconClass: '@' + } + }; +}) + + +/** + * Convenience wrapper for doing sticky footers. + */ +.directive('coFooterWrapper', function() { + return { + templateUrl: '/coreos.ui/footer/footer-wrapper.html', + transclude: true, + restrict: 'E', + replace: true + }; + +}); + +/** + * @fileoverview + * Highlight an item when its bound data changes. + */ + +'use strict'; + +angular.module('coreos.ui') +.directive('coHighlight', function(highlighterSvc) { + + return { + restrict: 'A', + link: function(scope, elem, attrs) { + + scope.$watch(attrs.coHighlight, function(newValue, oldValue) { + if (newValue !== oldValue) { + highlighterSvc.highlight(elem); + } + }); + + } + }; + +}); + +/** + * @fileoverview + * + * Inline loading indicator widget. + */ + +'use strict'; +angular.module('coreos.ui') + +.directive('coInlineLoader', function() { + + return { + templateUrl: '/coreos.ui/inline-loader/inline-loader.html', + restrict: 'E', + replace: true + }; + +}); + +/** + * @fileoverview + * + * Loading indicator that centers itself inside its parent. + */ + + +'use strict'; +angular.module('coreos.ui') + +.directive('coLoader', function() { + return { + templateUrl: '/coreos.ui/loader/loader.html', + restrict: 'E', + replace: true + }; +}); + +/** + * @fileoverview + * Display page title with primary action link. + */ + + +'use strict'; +angular.module('coreos.ui') + +.directive('coNavTitle', function() { + return { + templateUrl: '/coreos.ui/nav-title/nav-title.html', + transclude: true, + restrict: 'E', + replace: true, + scope: { + title: '@' + } + }; +}); + +/** + * @fileoverview + * Top navbar which inlcudes nav links. + */ + + +'use strict'; +angular.module('coreos.ui') + +.directive('coNavbar', function(configSvc) { + + return { + templateUrl: '/coreos.ui/navbar/navbar.html', + transclude: true, + restrict: 'E', + replace: true, + controller: function($scope) { + $scope.config = configSvc.get(); + $scope.isCollapsed = true; + } + }; + +}) + + +/** + * Simple directive to create bootstrap friendly navbar links. + * Will automatically add the 'active' class based on the route. + */ +.directive('coNavbarLink', function($location) { + + return { + templateUrl: '/coreos.ui/navbar/navbar-link.html', + transclude: true, + restrict: 'E', + replace: true, + scope: { + // The path to link to. + 'href': '@' + }, + link: function(scope) { + scope.isActive = function() { + return $location.path() === scope.href; + }; + } + }; + +}) + +/** + * Optional dropdown menu to put in the right of the navbar. + */ +.directive('coNavbarDropdown', function() { + + return { + templateUrl: '/coreos.ui/navbar/navbar-dropdown.html', + transclude: true, + restrict: 'E', + replace: true, + scope: { + text: '@' + } + }; + +}); + + +/** + * @fileoverview + * Directive to easily inline svg images. + * NOTE: kind of a hack to get ng-include to work properly within a directive + * without wrapping it with an extra DOM element. + */ + +'use strict'; + +angular.module('coreos.ui') +.directive('coSvg', function($, $rootScope, $compile) { + + return { + template: '
', + restrict: 'E', + replace: true, + scope: { + src: '@', + width: '@', + height: '@' + }, + link: function(scope, elem, attrs) { + var containerEl, html, newScope; + newScope = $rootScope.$new(); + html = '
'; + newScope.style = {}; + if (scope.width) { + newScope.style.width = scope.width + 'px'; + } + if (scope.height) { + newScope.style.height = scope.height + 'px'; + } + if (attrs.class) { + newScope.classes = attrs.class; + } + scope.$watch('src', function(src) { + if (src) { + newScope.src = src; + containerEl = $compile(html)(newScope); + elem.replaceWith(containerEl); + } + }); + } + }; + +}); + +'use strict'; + +angular.module('coreos.ui') +.directive('coTextCopy', function() { + + return { + restrict: 'A', + replace: true, + link: function(scope, elem) { + function onClickHandler(event) { + elem.select(); + event.preventDefault(); + event.stopPropagation(); + } + elem.on('click', onClickHandler); + elem.on('$destroy', function() { + elem.off('click', onClickHandler); + }); + } + }; + +}); + +/** + * @fileoverview + * + * Keeps the title tag updated. + */ + +'use strict'; +angular.module('coreos.ui') + + +.directive('coTitle', function() { + + return { + transclude: false, + restrict: 'A', + scope: { + suffix: '@coTitleSuffix' + }, + controller: function($scope, $rootScope, $route) { + $scope.pageTitle = ''; + $scope.defaultTitle = null; + $rootScope.$on('$routeChangeSuccess', function() { + $scope.pageTitle = $route.current.title || $route.current.$$route.title; + }); + }, + link: function(scope, elem) { + scope.$watch('pageTitle', function(title) { + if (title) { + if (!scope.defaultTitle) { + scope.defaultTitle = elem.text(); + } + elem.text(title + ' ' + scope.suffix); + } else { + if (scope.defaultTitle) { + elem.text(scope.defaultTitle); + } + } + }); + } + }; + +}); + +/** + * @fileoverview + * Directive to display global error or info messages. + * Enqueue messages through the toastSvc. + */ + + +'use strict'; + +angular.module('coreos.ui') +.directive('coToast', function() { + return { + templateUrl: '/coreos.ui/toast/toast.html', + restrict: 'E', + replace: true, + scope: true, + controller: function($scope, toastSvc) { + $scope.messages = toastSvc.messages; + $scope.dismiss = toastSvc.dismiss; + } + }; +}); + + +angular.module('coreos.services') +.factory('toastSvc', function($timeout) { + + var AUTO_DISMISS_TIME = 5000, + service, + lastTimeoutPromise; + + function dequeue() { + if (service.messages.length) { + service.messages.shift(); + } + } + + function enqueue(type, text) { + service.messages.push({ + type: type, + text: text + }); + lastTimeoutPromise = $timeout(dequeue, AUTO_DISMISS_TIME); + } + + function cancelTimeout() { + if (lastTimeoutPromise) { + $timeout.cancel(lastTimeoutPromise); + } + } + + service = { + + messages: [], + + error: enqueue.bind(null, 'error'), + + info: enqueue.bind(null, 'info'), + + dismiss: function(index) { + cancelTimeout(); + service.messages.splice(index, 1); + }, + + dismissAll: function() { + cancelTimeout(); + service.messages.length = 0; + } + + }; + + return service; + +}); + +angular.module('coreos-templates-html', ['/coreos.ui/btn-bar/btn-bar.html', '/coreos.ui/cog/cog.html', '/coreos.ui/confirm-modal/confirm-modal.html', '/coreos.ui/donut/donut.html', '/coreos.ui/error-message/error-message.html', '/coreos.ui/favicons/favicons.html', '/coreos.ui/footer/footer-link.html', '/coreos.ui/footer/footer-wrapper.html', '/coreos.ui/footer/footer.html', '/coreos.ui/inline-loader/inline-loader.html', '/coreos.ui/loader/loader.html', '/coreos.ui/nav-title/nav-title.html', '/coreos.ui/navbar/navbar-dropdown.html', '/coreos.ui/navbar/navbar-link.html', '/coreos.ui/navbar/navbar.html', '/coreos.ui/toast/toast.html']); + +angular.module("/coreos.ui/btn-bar/btn-bar.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/btn-bar/btn-bar.html", + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/cog/cog.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/cog/cog.html", + "
\n" + + " \n" + + " \n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/confirm-modal/confirm-modal.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/confirm-modal/confirm-modal.html", + "
\n" + + "
\n" + + "
\n" + + "

\n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/donut/donut.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/donut/donut.html", + "
\n" + + "
\n" + + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/error-message/error-message.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/error-message/error-message.html", + "
{{message}}
\n" + + ""); +}]); + +angular.module("/coreos.ui/favicons/favicons.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/favicons/favicons.html", + ""); +}]); + +angular.module("/coreos.ui/footer/footer-link.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/footer/footer-link.html", + "\n" + + " \n" + + " \n" + + "\n" + + ""); +}]); + +angular.module("/coreos.ui/footer/footer-wrapper.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/footer/footer-wrapper.html", + "\n" + + ""); +}]); + +angular.module("/coreos.ui/footer/footer.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/footer/footer.html", + "
\n" + + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/inline-loader/inline-loader.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/inline-loader/inline-loader.html", + "
\n" + + "
\n" + + "
\n" + + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/loader/loader.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/loader/loader.html", + "
\n" + + " \n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/nav-title/nav-title.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/nav-title/nav-title.html", + "
\n" + + "
\n" + + "
\n" + + "

{{title}}

\n" + + "
\n" + + "
\n" + + ""); +}]); + +angular.module("/coreos.ui/navbar/navbar-dropdown.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/navbar/navbar-dropdown.html", + "
    \n" + + "
  • \n" + + " {{text}} \n" + + "
      \n" + + "
    • \n" + + "
    \n" + + ""); +}]); + +angular.module("/coreos.ui/navbar/navbar-link.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/navbar/navbar-link.html", + "
  • \n" + + " \n" + + "
  • \n" + + ""); +}]); + +angular.module("/coreos.ui/navbar/navbar.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/navbar/navbar.html", + "
    \n" + + "\n" + + "
    \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
    \n" + + "\n" + + "
    \n" + + "\n" + + "
    \n" + + ""); +}]); + +angular.module("/coreos.ui/toast/toast.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.ui/toast/toast.html", + "
    \n" + + "
    \n" + + " {{message.text}}\n" + + " \n" + + "
    \n" + + "
    \n" + + ""); +}]); + +angular.module('coreos-templates-svg', ['/coreos.svg/globe-only.svg', '/coreos.svg/icon-add.svg', '/coreos.svg/icon-back.svg', '/coreos.svg/icon-delete.svg', '/coreos.svg/icon-reboot.svg', '/coreos.svg/icon-right-arrow.svg', '/coreos.svg/logo.svg']); + +angular.module("/coreos.svg/globe-only.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/globe-only.svg", + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + "\n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/icon-add.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/icon-add.svg", + "\n" + + " \n" + + " \n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/icon-back.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/icon-back.svg", + "\n" + + " \n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/icon-delete.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/icon-delete.svg", + "\n" + + " \n" + + " \n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/icon-reboot.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/icon-reboot.svg", + "\n" + + "\n" + + " \n" + + " \n" + + "\n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/icon-right-arrow.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/icon-right-arrow.svg", + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + " \n" + + "\n" + + "\n" + + ""); +}]); + +angular.module("/coreos.svg/logo.svg", []).run(["$templateCache", function($templateCache) { + $templateCache.put("/coreos.svg/logo.svg", + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + + ""); +}]); diff --git a/mod/dashboard/app/coreos-web/coreos.min.css b/mod/dashboard/app/coreos-web/coreos.min.css new file mode 100644 index 000000000..fa58b0cc6 --- /dev/null +++ b/mod/dashboard/app/coreos-web/coreos.min.css @@ -0,0 +1 @@ +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}h1{margin:.67em 0}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}button,input,select,textarea{margin:0}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}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{@page{margin:2cm .5cm}*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{line-height:1.42857;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{text-decoration:none}a:focus,a:hover{color:#2a6596;text-decoration:underline}a:focus{outline:5px auto-webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail,.thumbnail{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3073a9}.text-warning{color:#c09853}.text-warning:hover{color:#a47c3c}.text-danger{color:#b94a48}.text-danger:hover{color:#953b39}.text-success{color:#468847}.text-success:hover{color:#356635}.text-info{color:#3a87ad}.text-info:hover{color:#2d6a87}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{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:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h6,h6{font-size:12px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.list-inline>li:first-child{padding-left:0}dd,dt{line-height:1.42857}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:after,.dl-horizontal dd:before{content:" ";display:table}.dl-horizontal dd:after{clear:both}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right .small,blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right .small:before,blockquote.pull-right small:before{content:''}blockquote.pull-right .small:after,blockquote.pull-right small:after{content:'\00A0 \2014'}blockquote:after,blockquote:before{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;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}.container:after,.container:before{content:" ";display:table}.container:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:after,.row:before{content:" ";display:table}.row:after{clear:both}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:0}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:0}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.container{width:750px}.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:0}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:0}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.container{width:970px}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:0}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:0}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.container{width:1170px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:0}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:0}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857;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>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}table col[class*=col-]{float:none;display:table-column}table td[class*=col-],table th[class*=col-]{float:none;display:table-cell}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal}input[type=file]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-size:inherit;font-style:inherit;font-family:inherit}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:5px auto-webkit-focus-ring-color;outline-offset:-2px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555;vertical-align:middle}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.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}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.checkbox,.radio{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px;vertical-align:middle}.checkbox label,.radio label{display:inline;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{float:left;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline[disabled],.checkbox[disabled],.radio-inline[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,textarea.input-sm{height:auto}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:45px;line-height:45px}.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,textarea.input-lg{height:auto}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#a47c3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc49e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc49e}.has-warning .input-group-addon{color:#c09853;border-color:#c09853;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;border-color:#b94a48;background-color:#f2dede}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7a}.has-success .input-group-addon{color:#468847;border-color:#468847;background-color:#dff0d8}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;color:#737373}@media (min-width:768px){.form-inline .form-group,.form-inline .navbar-form{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.form-inline .navbar-form{display:inline-block}.form-inline .checkbox,.form-inline .navbar-form,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0}.form-inline .checkbox .navbar-form,.form-inline .checkbox input[type=checkbox],.form-inline .radio .navbar-form,.form-inline .radio input[type=radio]{float:none;margin-left:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline-offset:-2px}.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{border-color:#ccc}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .btn-default.dropdown-toggle{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default.active,.btn-default:active,.open .btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-primary{border-color:#3580bd}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .btn-primary.dropdown-toggle{color:#fff;background-color:#3278b1;border-color:#28608e}.btn-primary.active,.btn-primary:active,.open .btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#3580bd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .btn-warning.dropdown-toggle{color:#fff;background-color:#ed9b28;border-color:#d58112}.btn-warning.active,.btn-warning:active,.open .btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43d3a}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .btn-danger.dropdown-toggle{color:#fff;background-color:#d2302d;border-color:#ac2525}.btn-danger.active,.btn-danger:active,.open .btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43d3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4eae4c}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .btn-success.dropdown-toggle{color:#fff;background-color:#49a447;border-color:#3b8439}.btn-success.active,.btn-success:active,.open .btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4eae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46bada}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .btn-info.dropdown-toggle{color:#fff;background-color:#39b5d7;border-color:#269cbc}.btn-info.active,.btn-info:active,.open .btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46bada}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#2a6596;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group-sm>.btn,.btn-group-xs>.btn,.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.eot);src:url(/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(/mod/dashboard/static/coreos-web/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;border-bottom:0 dotted}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;clear:both;font-weight:400;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{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-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;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}}.btn-default .caret{border-top-color:#333}.btn-danger .caret,.btn-info .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-danger .caret,.dropup .btn-info .caret,.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group-vertical>.btn:focus,.btn-group>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn-group+.btn-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-lg>.btn-group>.btn-lg+.btn,.btn-group>.btn-lg+.btn-group-lg>.btn,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn-lg .btn,.btn-lg .btn-group-lg>.btn,.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.btn-group-lg>.dropup .btn-lg .btn,.dropup .btn-lg .btn-group-lg>.btn,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{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>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-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{float:none;display:table-cell;width:1%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-left:0;padding-right:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-addon.form-control,.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-addon.form-control,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{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>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){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:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn:first-child>.btn{margin-right:-1px}.input-group-btn:last-child>.btn{margin-left:-1px}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:active,.input-group-btn>.btn:hover{z-index:2}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{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:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#428bca}.nav .open>a .caret,.nav .open>a:focus .caret,.nav .open>a:hover .caret{border-top-color:#2a6596;border-bottom-color:#2a6596}.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.42857;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:focus,.nav-tabs>li.active>a:hover{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:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.nav-pills>li.active>a .caret,.nav-pills>li.active>a:focus .caret,.nav-pills>li.active>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.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>.nav-tabs.nav-justified,.nav-justified>li{float:none}.nav-justified>li>.nav-tabs.nav-justified,.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu,.nav-justified>.dropdown .nav-tabs.nav-justified{top:auto;left:auto}@media (min-width:768px){.nav-justified>.nav-tabs.nav-justified,.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>.nav-tabs.nav-justified,.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>.nav-tabs.nav-justified,.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>.nav-tabs.nav-justified,.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>.nav-tabs.nav-justified,.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>.nav-tabs.nav-justified,.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6596;border-bottom-color:#2a6596}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;margin-bottom:20px;border:1px solid transparent}.navbar:after,.navbar:before{content:" ";display:table}.navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-header:after,.navbar-header:before{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{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;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:auto}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;background-color:transparent;border:1px solid transparent;border-radius:4px}.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}@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 .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{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}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{margin-left:15px;margin-right:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.dropdown>a:focus .caret,.navbar-default .navbar-nav>.dropdown>a:hover .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:focus .caret,.navbar-default .navbar-nav>.open>a:hover .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{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:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret{border-top-color:#fff;border-bottom-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>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;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:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#eee}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:after,.pager:before{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:focus,.pager li>a:hover{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:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:focus,.label-default[href]:hover{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#3073a9}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#469d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b2d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c92e2c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}.nav-pills>.active>a>.badge,a.list-group-item.active>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.14286;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:block;margin-bottom:20px}.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#428bca}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d7e9c6;color:#468847}.alert-success hr{border-top-color:#cae2b3}.alert-success .alert-link{color:#356635}.alert-info{background-color:#d9edf7;border-color:#bce9f1;color:#3a87ad}.alert-info hr{border-top-color:#a6e2ec}.alert-info .alert-link{color:#2d6a87}.alert-warning{background-color:#fcf8e3;border-color:#faeacc;color:#c09853}.alert-warning hr{border-top-color:#f7e0b5}.alert-warning .alert-link{color:#a47c3c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#b94a48}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:focus,a.list-group-item.active:hover{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:focus .list-group-item-text,a.list-group-item.active:hover .list-group-item-text{color:#e1edf7}.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;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive{margin-bottom:0}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right: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-bordered>thead>tr:last-child>td,.panel>.table-bordered>thead>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,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th{border-bottom:0}.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}.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-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-heading>.dropdown .caret{border-color:#333 transparent}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-heading>.dropdown .caret{border-color:#fff transparent}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d7e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d7e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d7e9c6}.panel-success>.panel-heading>.dropdown .caret{border-color:#468847 transparent}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d7e9c6}.panel-warning{border-color:#faeacc}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#faeacc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faeacc}.panel-warning>.panel-heading>.dropdown .caret{border-color:#c09853 transparent}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faeacc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading>.dropdown .caret{border-color:#b94a48 transparent}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.panel-info{border-color:#bce9f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce9f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce9f1}.panel-info>.panel-heading>.dropdown .caret{border-color:#3a87ad transparent}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce9f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;margin-left:auto;margin-right:auto;width:auto;padding:10px;z-index:1050}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative}.modal-footer:after,.modal-footer:before{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}@media screen and (min-width:768px){.modal-dialog{width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5)0),color-stop(rgba(0,0,0,.0001)100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-image:linear-gradient(to right,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001)0),color-stop(rgba(0,0,0,.5)100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{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-lg,.visible-md,.visible-sm,.visible-xs,td.visible-lg,td.visible-md,td.visible-sm,td.visible-xs,th.visible-lg,th.visible-md,th.visible-sm,th.visible-xs,tr.visible-lg,tr.visible-md,tr.visible-sm,tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}td.hidden-xs,th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}td.hidden-sm,th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}td.hidden-md,th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}td.hidden-lg,th.hidden-lg{display:table-cell!important}@media (max-width:767px){.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md,td.hidden-lg.hidden-md,th.hidden-lg.hidden-md,tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg,td.hidden-lg,th.hidden-lg,tr.hidden-lg{display:none!important}}.visible-print,td.visible-print,th.visible-print,tr.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}.hidden-print,td.hidden-print,th.hidden-print,tr.hidden-print{display:none!important}}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:'Source Sans Pro',Helvetica,sans-serif}.h1,h1{font-size:112%}.h2,h2{font-size:93%}.h3,h3{font-size:89%}.h4,h4{font-size:85%}.h5,h5{font-size:81%}small{font-size:80%}dl{margin:0}.control-label{line-height:30px}.help-block{margin-bottom:0}.glyphicon{color:#fff}.btn{border:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.25);margin-right:10px;margin-top:10px}.btn:focus{outline:0}.btn-primary{color:#fff;background-color:#f04c5c;text-shadow:0 0 3px rgba(0,0,0,.25)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.btn-primary[disabled],.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover{color:#fff;background-color:#dd1327}.btn-default,.btn-default.active,.btn-default.disabled,.btn-default:active,.btn-default:hover,.btn-default[disabled]{color:#999;background-color:#fff}.btn-link{background:0 0;box-shadow:none;padding-right:0;padding-left:0}.container{width:100%;padding-left:0;padding-right:0}@media (min-width:480px){.container{width:99%;padding-left:15px;padding-right:15px}}.dropdown-menu{-webkit-border-radius:1px;-moz-border-radius:1px;-ms-border-radius:1px;-o-border-radius:1px;border-radius:1px}.dropdown-menu>li>a{padding:3px 20px 3px 10px}.form-control:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-ms-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-o-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.modal-header{border-bottom:none;padding:30px 30px 20px}.modal-header .modal-title{font-weight:700;font-size:100%}.modal-body{padding:0 30px;font-size:90%}.modal-footer{border-top:none;padding:10px 30px 30px;text-align:left;margin:0}.navbar{min-height:46px}.navbar-nav>li>a{line-height:16px}.navbar-brand{padding:0;position:relative}.navbar-fixed-top{border:0}.navbar-toggle{margin-top:0;margin-bottom:0;padding:8px}.navbar-toggle .glyphicon-align-justify{color:#333}.modal-content,.panel{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}.panel{border:0}.table{margin-bottom:0}.table thead>tr>th{border-bottom:0}.table th{color:#999;font-size:80%;text-transform:uppercase;font-weight:300;padding-top:0!important}.table tr:last-child{border-bottom:1px solid #eee}.table td{font-size:80%;border-color:#eee!important;vertical-align:middle!important}.table td input[type=checkbox],.table td input[type=radio]{margin-top:0;vertical-align:middle}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#EAF3FF}.tooltip-inner{background-color:rgba(0,0,0,.8)}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-top-color:rgba(0,0,0,.8)}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-bottom-color:rgba(0,0,0,.8)}.tooltip.right .tooltip-arrow{border-right-color:rgba(0,0,0,.8)}.tooltip.left .tooltip-arrow{border-left-color:rgba(0,0,0,.8)}body{background-color:#f5f5f5;font-family:'Source Sans Pro',Helvetica,sans-serif;font-size:16px}a{color:#419eda}a:focus,button:focus{outline-style:none}dt{text-transform:uppercase;color:#999;font-weight:300;font-size:80%}dd{margin-bottom:15px}dd:last-child{margin-bottom:0}h2{font-size:110%}kbd{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;background-color:#eee;border:solid 1px #ccc;padding:4px 8px}input[type=number]{max-width:100px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.modal .form-row{margin-bottom:20px}.modal .form-row:last-child{margin-bottom:0}.co-img-bg-hexagons{background:url(/mod/dashboard/static/coreos-web/img/hexagons.png) left top repeat,linear-gradient(30deg,#2277ad,#6ec654) no-repeat left top fixed;background-color:#2277ad;background-size:auto,100% 100%}.co-img-bg-right-arrow{background:url(/mod/dashboard/static/coreos-web/img/icon-right-arrow.svg)}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-regular-webfont.svg#Source Sans Pro') format('svg');font-weight:400;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-black-webfont.svg#Source Sans Pro') format('svg');font-weight:900;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-blackitalic-webfont.svg#Source Sans Pro') format('svg');font-weight:900;font-style:italic;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bold-webfont.svg#Source Sans Pro') format('svg');font-weight:700;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-bolditalic-webfont.svg#Source Sans Pro') format('svg');font-weight:700;font-style:italic;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralight-webfont.svg#Source Sans Pro') format('svg');font-weight:200;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-extralightitalic-webfont.svg#Source Sans Pro') format('svg');font-weight:200;font-style:italic;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-italic-webfont.svg#Source Sans Pro') format('svg');font-weight:400;font-style:italic;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-light-webfont.svg#Source Sans Pro') format('svg');font-weight:300;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-lightitalic-webfont.svg#Source Sans Pro') format('svg');font-weight:300;font-style:italic;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibold-webfont.svg#Source Sans Pro') format('svg');font-weight:600;font-style:normal;font-stretch:normal}@font-face{font-family:'Source Sans Pro';src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.eot);src:url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.eot?#iefix) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.woff) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.ttf) format('truetype'),url('/mod/dashboard/static/coreos-web/fonts//sourcesanspro-semibolditalic-webfont.svg#Source Sans Pro') format('svg');font-weight:600;font-style:italic;font-stretch:normal}.co-fx-box-shadow{-webkit-box-shadow:0 2px 2px rgba(0,0,0,.2);-moz-box-shadow:0 2px 2px rgba(0,0,0,.2);-ms-box-shadow:0 2px 2px rgba(0,0,0,.2);-o-box-shadow:0 2px 2px rgba(0,0,0,.2);box-shadow:0 2px 2px rgba(0,0,0,.2)}.co-fx-box-shadow-heavy{-webkit-box-shadow:0 2px 2px rgba(0,0,0,.4);-moz-box-shadow:0 2px 2px rgba(0,0,0,.4);-ms-box-shadow:0 2px 2px rgba(0,0,0,.4);-o-box-shadow:0 2px 2px rgba(0,0,0,.4);box-shadow:0 2px 2px rgba(0,0,0,.4)}.co-fx-box-shadow-super-heavy{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);-moz-box-shadow:0 5px 15px rgba(0,0,0,.5);-ms-box-shadow:0 5px 15px rgba(0,0,0,.5);-o-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.co-fx-text-shadow{text-shadow:rgba(0,0,0,.25)1px 1px 2px}.co-img-icon{position:relative;height:24px;width:24px;display:inline-block;margin-right:5px;vertical-align:middle}.co-img-icon>svg{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);position:absolute;top:50%;left:0;right:0;margin:0 auto;width:24px;height:24px}.co-img-icon-light{fill:#fff;color:#fff}.co-img-icon-dark{fill:#000;color:#000}.co-m-icon-inline{vertical-align:middle;margin-right:2px}.ng-dirty.ng-invalid{border-color:#f04c5c;border-bottom-left-radius:0;border-bottom-right-radius:0}.co-m-huge-text{font-size:400%;vertical-align:baseline}svg .axis line,svg .axis path{fill:none;stroke:#ccc;shape-rendering:crispEdges}svg .axis .tick text{stroke:none;fill:#999;font-weight:100;font-size:80%}svg .x-axis path{display:none}.co-m-radio-label{margin-left:7px}.co-an-fade-in-out{-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:linear;-moz-transition-timing-function:linear;-ms-transition-timing-function:linear;-o-transition-timing-function:linear;transition-timing-function:linear}.co-an-fade-in-out.ng-hide-add,.co-an-fade-in-out.ng-hide-remove{display:block!important}.co-an-fade-in-out.ng-hide-add.ng-hide-add-active,.co-an-fade-in-out.ng-hide-remove{opacity:0}.co-an-fade-in-out.ng-hide-add,.co-an-fade-in-out.ng-hide-remove.ng-hide-remove-active{opacity:1}.co-an-fade-in-out.ng-enter,.co-an-fade-in-out.ng-move{opacity:0}.co-an-fade-in-out.ng-enter.ng-enter-active,.co-an-fade-in-out.ng-leave,.co-an-fade-in-out.ng-move.ng-move-active{opacity:1}.co-an-fade-in-out.ng-leave.ng-leave-active{opacity:0}.co-an-highlight{animation-name:highlightInOut;animation-duration:4s;animation-timing-function:linear;animation-delay:0;animation-direction:normal;animation-iteration-count:1;animation-fill-mode:both;animation-play-state:running;-webkit-animation-name:highlightInOut;-webkit-animation-duration:4s;-webkit-animation-timing-function:linear;-webkit-animation-delay:0;-webkit-animation-direction:normal;-webkit-animation-iteration-count:1;-webkit-animation-fill-mode:both;-webkit-animation-play-state:running;-moz-animation-name:highlightInOut;-moz-animation-duration:4s;-moz-animation-timing-function:linear;-moz-animation-delay:0;-moz-animation-direction:normal;-moz-animation-iteration-count:1;-moz-animation-fill-mode:both;-moz-animation-play-state:running;outline-style:solid;outline-width:5px;outline-color:transparent}@-webkit-keyframes highlightInOut{0%,50%{outline-color:rgba(255,250,170,.5);background-color:rgba(255,250,170,.5)}100%{background-color:inherit;outline-color:transparent}}@-moz-keyframes highlightInOut{0%,50%{outline-color:rgba(255,250,170,.5);background-color:rgba(255,250,170,.5)}100%{background-color:inherit;outline-color:transparent}}@-ms-keyframes highlightInOut{0%,50%{outline-color:rgba(255,250,170,.5);background-color:rgba(255,250,170,.5)}100%{background-color:inherit;outline-color:transparent}}@keyframes highlightInOut{0%,50%{outline-color:rgba(255,250,170,.5);background-color:rgba(255,250,170,.5)}100%{background-color:inherit;outline-color:transparent}}#co-l-view-container{padding-top:46px;height:100%}.co-l-secondary-nav{line-height:60px}.co-l-double-pane .co-l-double-pane__col{padding:30px;border-bottom:solid 1px #eee}@media (min-width:992px){.co-l-double-pane{border-collapse:collapse;display:table;width:100%}.co-l-double-pane .co-l-double-pane__row{display:table-row;height:100%;border-bottom:solid 1px #eee}.co-l-double-pane .co-l-double-pane__col{display:table-cell;float:none;padding:30px;width:50%;border-bottom:none}.co-l-double-pane .co-l-double-pane__col+.co-l-double-pane__col{border-left:solid 1px #eee}}.co-m-modal-link{position:relative;padding-right:9px}.co-m-modal-link:after{content:"\203a";font-weight:900;color:#999;font-size:112%;position:absolute;bottom:-1px;right:0;pointer-events:none}.co-m-invisible-input{border:0;background:0 0;width:100%;outline:0}.co-m-invisible-input:hover{cursor:copy}.co-m-google-signin__btn{display:inline-block;background:#dd4b39;border:none;color:#fff;width:120px;border-radius:3px;white-space:nowrap}.co-m-google-signin__btn:hover{background:#e74b37;cursor:hand}.co-m-google-signin__icon{background:url(/mod/dashboard/static/coreos-web/img/google-plus.png) transparent 0 50% no-repeat;display:inline-block;vertical-align:middle;width:40px;height:24px;border-right:#bb3f30 1px solid}.co-m-google-signin__btn-text{display:inline-block;vertical-align:middle;padding:0 8px;font-size:12px;font-family:Roboto,arial,sans-serif}.co-m-primary-action{color:#fff;font-size:90%;font-weight:200;white-space:nowrap}.co-m-primary-action:hover,.co-m-primary-action:visited{color:#fff}.co-m-panel,.co-m-panel-padded{min-height:200px}.co-m-panel h1,.co-m-panel h2,.co-m-panel h3,.co-m-panel h4,.co-m-panel-padded h1,.co-m-panel-padded h2,.co-m-panel-padded h3,.co-m-panel-padded h4{margin-top:0}.co-m-panel .panel-heading,.co-m-panel-padded .panel-heading{background-color:#fff;padding:30px}.co-m-panel .panel-heading h1,.co-m-panel .panel-heading h2,.co-m-panel .panel-heading h3,.co-m-panel .panel-heading h4,.co-m-panel-padded .panel-heading h1,.co-m-panel-padded .panel-heading h2,.co-m-panel-padded .panel-heading h3,.co-m-panel-padded .panel-heading h4{margin:0}.co-m-panel .panel-heading h4,.co-m-panel-padded .panel-heading h4{line-height:24px}.co-m-panel .co-m-panel-body-content,.co-m-panel-padded .co-m-panel-body-content{padding:0 15px 30px}.co-m-panel .co-m-panel-content-left,.co-m-panel-padded .co-m-panel-content-left{padding:30px;border-bottom:solid 1px #eee}.co-m-panel .co-m-panel-content-right,.co-m-panel-padded .co-m-panel-content-right{padding:30px}@media (min-width:1200px){.co-m-panel .co-m-panel-content-right,.co-m-panel-padded .co-m-panel-content-right{border-left:solid 1px #eee}.co-m-panel .co-m-panel-content-left,.co-m-panel-padded .co-m-panel-content-left{border-bottom:none}}.co-m-panel-padded .panel-body{padding-top:0;padding-bottom:0}.co-m-page-title{color:#fff;font-weight:400;letter-spacing:-.03em;text-align:center;margin:0;line-height:inherit;font-size:225%}.co-m-message{-webkit-border-radius:1px;-moz-border-radius:1px;-ms-border-radius:1px;-o-border-radius:1px;border-radius:1px;padding:5px 0 5px 10px;color:#fff;font-size:81%}.co-m-message__close{margin-top:1px;margin-right:8px}.co-m-message__close:hover{cursor:pointer}.co-m-message--error{background-color:#dd1327}.co-m-message--info{background-color:#2277ad}.co-m-gauges{padding:0 15px 20px;border-bottom:1px solid #eee}.co-m-gauge{display:inline-block;text-align:center;vertical-align:top;padding:10px 20px;min-width:150px}.co-m-gauge--content{display:inline-block;min-height:92px}.co-m-gauge--label{text-align:center;line-height:1.2em;font-size:85%;text-transform:capitalize}.co-m-dropdown--dark{background-color:rgba(33,33,33,.95);border:solid 1px rgba(33,33,33,.95)}.co-m-dropdown--dark>li>a{color:#fff}.co-m-dropdown--dark>li>a:hover{background-color:rgba(33,33,33,.95);color:#fff}.co-m-table-container{display:block;width:100%}.co-m-table__constrain-content{max-width:300px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.co-m-table .co-m-table-selected-row{background-position:right 10px center;background-repeat:no-repeat;padding-right:15px;background-color:#EAF3FF}.co-m-table .co-m-table-interact-entire-element:hover{cursor:pointer}.co-m-stacked-cell .co-m-stacked-cell-primary,.co-m-stacked-cell .co-m-stacked-cell-secondary{line-height:20px}.co-m-stacked-cell .co-m-stacked-cell-secondary{color:#999}.co-m-navbar{background-color:#fff;margin:0;padding-left:10px}.co-m-navbar__logo{width:129px;height:30px;line-height:64px}.co-m-navbar--right-dropdown:hover{cursor:pointer}.co-m-navbar-link{cursor:pointer;font-size:110%;font-weight:400}body,html{height:100%}#co-l-footer-wrapper{clear:both;min-height:100%;height:auto!important;height:100%;margin-bottom:-40px}#co-l-footer-wrapper #co-l-footer-push{height:40px}#co-l-footer{clear:both;position:relative;height:40px;background-color:#fff;margin:0;min-height:40px;overflow:hidden}.co-m-footer-link{font-size:81%;margin-right:20px;line-height:41px}.co-m-footer-link:hover{text-decoration:none}.co-m-footer-link--icon{padding-right:5px;color:#2277ad}.co-m-nav-title{line-height:60px}.co-m-inline-loader{display:inline-block;cursor:default}.co-m-inline-loader:hover{text-decoration:none}.co-m-inline-loader-dot__one,.co-m-inline-loader-dot__three,.co-m-inline-loader-dot__two{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-name:bouncedelay;animation-duration:1s;animation-timing-function:ease-in-out;animation-delay:0;animation-direction:normal;animation-iteration-count:infinite;animation-fill-mode:forwards;animation-play-state:running;-webkit-animation-name:bouncedelay;-webkit-animation-duration:1s;-webkit-animation-timing-function:ease-in-out;-webkit-animation-delay:0;-webkit-animation-direction:normal;-webkit-animation-iteration-count:infinite;-webkit-animation-fill-mode:forwards;-webkit-animation-play-state:running;-moz-animation-name:bouncedelay;-moz-animation-duration:1s;-moz-animation-timing-function:ease-in-out;-moz-animation-delay:0;-moz-animation-direction:normal;-moz-animation-iteration-count:infinite;-moz-animation-fill-mode:forwards;-moz-animation-play-state:running;height:6px;width:6px;background:#419eda;border-radius:100%;display:inline-block}.co-m-inline-loader-dot__one{animation-delay:-.32s;-webkit-animation-delay:-.32s;-moz-animation-delay:-.32s;-ms-animation-delay:-.32s;-o-animation-delay:-.32s}.co-m-inline-loader-dot__two{animation-delay:-.16s;-webkit-animation-delay:-.16s;-moz-animation-delay:-.16s;-ms-animation-delay:-.16s;-o-animation-delay:-.16s}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0.25,.25);-moz-transform:scale(0.25,.25);-ms-transform:scale(0.25,.25);-o-transform:scale(0.25,.25);transform:scale(0.25,.25)}40%{-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 bouncedelay{0%,100%,80%{-webkit-transform:scale(0.25,.25);-moz-transform:scale(0.25,.25);-ms-transform:scale(0.25,.25);-o-transform:scale(0.25,.25);transform:scale(0.25,.25)}40%{-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 bouncedelay{0%,100%,80%{-webkit-transform:scale(0.25,.25);-moz-transform:scale(0.25,.25);-ms-transform:scale(0.25,.25);-o-transform:scale(0.25,.25);transform:scale(0.25,.25)}40%{-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 bouncedelay{0%,100%,80%{-webkit-transform:scale(0.25,.25);-moz-transform:scale(0.25,.25);-ms-transform:scale(0.25,.25);-o-transform:scale(0.25,.25);transform:scale(0.25,.25)}40%{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-ms-transform:scale(1,1);-o-transform:scale(1,1);transform:scale(1,1)}}.co-m-loader{display:block;position:absolute;left:50%;top:50%;margin:-14px 0 0 -14px}.co-m-loader__spinner{animation-name:co-spin;animation-duration:.75s;animation-timing-function:linear;animation-delay:0;animation-direction:normal;animation-iteration-count:infinite;animation-fill-mode:forwards;animation-play-state:running;-webkit-animation-name:co-spin;-webkit-animation-duration:.75s;-webkit-animation-timing-function:linear;-webkit-animation-delay:0;-webkit-animation-direction:normal;-webkit-animation-iteration-count:infinite;-webkit-animation-fill-mode:forwards;-webkit-animation-play-state:running;-moz-animation-name:co-spin;-moz-animation-duration:.75s;-moz-animation-timing-function:linear;-moz-animation-delay:0;-moz-animation-direction:normal;-moz-animation-iteration-count:infinite;-moz-animation-fill-mode:forwards;-moz-animation-play-state:running;width:28px;height:28px;border:2px solid #419eda;border-radius:50%}.co-m-loader__spinner::after,.co-m-loader__spinner::before{left:-2px;top:-2px;position:absolute;content:'';width:inherit;height:inherit;border:inherit;border-radius:inherit}.co-m-loader__spinner::before{-webkit-transform:rotate(120deg);-moz-transform:rotate(120deg);-ms-transform:rotate(120deg);-o-transform:rotate(120deg);transform:rotate(120deg)}.co-m-loader__spinner::after{-webkit-transform:rotate(240deg);-moz-transform:rotate(240deg);-ms-transform:rotate(240deg);-o-transform:rotate(240deg);transform:rotate(240deg)}.co-m-loader__spinner,.co-m-loader__spinner::after,.co-m-loader__spinner::before{display:inline-block;border-color:transparent;border-top-color:#419eda}@-webkit-keyframes co-spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes co-spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes co-spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes co-spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.co-m-toast{position:fixed;top:48px;margin:0 auto;width:100%;z-index:1000}.co-m-toast__message{margin:0 auto;margin-bottom:3px}@media (min-width:768px){.co-m-toast__message{width:300px}}.co-m-cog{position:relative;color:#999;display:inline-block}.co-m-cog:hover{cursor:pointer}.co-m-cog.open .co-m-cog__icon{color:#2277ad}.co-m-cog__icon{vertical-align:middle}.co-m-cog__icon--size-large{font-size:140%}.co-m-cog__icon--size-small{font-size:125%}.co-m-cog__dropdown--anchor-left{left:0;right:auto}.co-m-cog__dropdown--anchor-right{right:0;left:auto}.co-m-svg{display:inline-block}.co-m-svg>svg{width:100%;height:100%}@font-face{font-family:FontAwesome;src:url(/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.eot?v=4.0.3);src:url(/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.eot?#iefix&v=4.0.3) format('embedded-opentype'),url(/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.woff?v=4.0.3) format('woff'),url(/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.ttf?v=4.0.3) format('truetype'),url(/mod/dashboard/static/coreos-web/fonts//fontawesome-webfont.svg?v=4.0.3#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=$rotation);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-asc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-desc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/mod/dashboard/app/coreos-web/coreos.min.js b/mod/dashboard/app/coreos-web/coreos.min.js new file mode 100644 index 000000000..176aaa540 --- /dev/null +++ b/mod/dashboard/app/coreos-web/coreos.min.js @@ -0,0 +1,3 @@ +"use strict";angular.module("underscore",[]).factory("_",["$window",function(a){return a._}]),angular.module("jquery",[]).factory("$",["$window",function(a){return a.$}]),angular.module("d3",[]).factory("d3",["$window",function(a){return a.d3}]),angular.module("coreos.services",["coreos.events","underscore","jquery"]),angular.module("coreos.ui",["coreos.events","underscore","jquery","d3","ui.bootstrap"]),angular.module("coreos.filters",[]),angular.module("coreos.events",[]),angular.module("coreos",["coreos.events","coreos.services","coreos.ui","coreos.filters","coreos-templates-html","coreos-templates-svg","ngRoute","ngResource","ngAnimate","ui.bootstrap","underscore","jquery","d3"]).config(["$compileProvider",function(a){a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|irc):/)}]),angular.module("coreos.filters").filter("orderObjectBy",function(){return function(a,b,c){var d=[];return angular.forEach(a,function(a){d.push(a)}),d.sort(function(a,c){return a[b]>c[b]}),c&&d.reverse(),d}}),angular.module("coreos.filters").filter("utc",["_",function(a){function b(a){return new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds())}return function(c){return a.isNumber(c)?b(new Date(c)):a.isString(c)?b(new Date(Date.parse(c))):a.isDate(c)?b(c):""}}]),angular.module("coreos.services").factory("breakpointSvc",["_","$window","$rootScope","CORE_CONST","CORE_EVENT",function(a,b,c,d,e){function f(){var c=b.innerWidth;return a.find(d.BREAKPOINTS,function(a){return a.min<=c&&a.max>c?!0:void 0}).name}function g(){var a=f();a!==h&&(c.$broadcast(e.BREAKPOINT,a),h=a)}var h;return c.$broadcast(e.BREAKPOINT,f()),angular.element(b).on("resize",a.debounce(g,20,!0)),{getSize:f}}]),angular.module("coreos.services").provider("configSvc",function(){var a={};this.config=function(b){return b?void(a=b):a},this.$get=function(){return{get:function(b){return b?a[b]:angular.copy(a)},set:function(b,c){a[b]=c}}}}),angular.module("coreos").constant("CORE_CONST",{HIGHLIGHT_CSS_CLASS:"co-an-highlight",BREAKPOINTS:[{name:"xs",min:0,max:480},{name:"sm",min:480,max:768},{name:"md",min:768,max:992},{name:"lg",min:992,max:1200},{name:"xl",min:1200,max:1/0}]}),angular.module("coreos.services").factory("cookieSvc",["$window","timeSvc",function(a,b){return{create:function(c,d,e){var f,g;e?(f=new Date,f.setTime(f.getTime()+e*b.ONE_DAY_IN_MS),g="; expires="+f.toGMTString()):g="",a.document.cookie=c+"="+d+g+"; path=/"},get:function(b){var c,d,e,f;for(c=b+"=",d=a.document.cookie.split(";"),e=0;ef.maxRetries||(f._state="waiting",f._timeoutPromise=e(c,d))}function j(a,c){var d=b[a];return d?function(){return"terminated"!==d._state?c.apply(null,arguments):void 0}:angular.noop}function k(a){var c;h(a)&&(c=b[a],c._state="terminated",c._timeoutPromise&&e.cancel(c._timeoutPromise),c._unlistenDestroy(),delete b[a])}function l(a){var c=b[a];return c?function(){return c._paused?void i(a,c._executor,c.interval):(c._state="executing",void c.fn().then(j(a,function(){c._state="success",c._errorCount=0,c.then.apply(null,arguments)})).catch(j(a,function(){var b;c._state="error",c._errorCount+=1,c.catch.apply(null,arguments),c._errorCount>c.maxRetries&&(b=f.toArray(arguments),b.unshift(a),c.catchMaxFail.apply(null,b),k(a))})).finally(j(a,function(){c.finally.apply(null,arguments),i(a,c._executor,c.interval)})))}:angular.noop}return{isRegistered:h,register:function(c,d){h(c)&&this.kill(c),f.defaults(d,a,{startIn:0,maxRetries:0,"catch":angular.noop,then:angular.noop,"finally":angular.noop,catchMaxFail:function(){d.scope&&d.scope.$emit(g.POLL_ERROR)},_unlistenDestroy:angular.noop,_errorCount:0,_state:"starting"}),d.scope&&(d._unlistenDestroy=d.scope.$on("$destroy",this.kill.bind(this,c)),d.scope.$on(g.DOC_VISIBILITY_CHANGE,function(a,b){d._paused=b?!0:!1})),b[c]=d,d._executor=l(c),i(c,d._executor,d.startIn)},kill:function(a){k(a)},killAll:function(){Object.keys(b).forEach(this.kill.bind(this))}}}]}),angular.module("coreos.services").factory("scrollerSvc",["$timeout","$",function(a,b){function c(a){a.first()[0].scrollIntoView()}var d={scrollTo:function(d){function e(){f=b(d),g>h&&(f.length?c(f):(h++,a(e,i)))}var f,g=100,h=0,i=10;d&&a(e,0)}};return d}]),angular.module("coreos.services").factory("arraySvc",function(){return{remove:function(a,b){var c;return a&&a.length?(c=a.indexOf(b),c>-1&&a.splice(c,1),a):[]}}}),angular.module("coreos.services").factory("mathSvc",["_",function(a){return{sum:function(){var b;return b=a.isArray(arguments[0])?arguments[0]:a.toArray(arguments),b.reduce(function(a,b){return a+b},0)}}}]),angular.module("coreos.services").factory("timeSvc",["_",function(a){function b(b){return b&&a.isNumber(b)?b:Date.now()}var c=6e4,d=60*c,e=24*d,f=7*e,g=30*e;return{ONE_MINUTE_IN_MS:c,ONE_HOUR_IN_MS:d,ONE_DAY_IN_MS:e,ONE_WEEK_IN_MS:f,THIRTY_DAYS_IN_MS:g,milliToSecs:function(a){return Math.floor(a/1e3)},secsToMins:function(a){return Math.floor(parseInt(a,10)/60)||0},minsToSecs:function(a){return Math.abs(60*parseInt(a,10))||0},oneHourAgo:function(a){return b(a)-this.ONE_HOUR_IN_MS},oneDayAgo:function(a){return b(a)-this.ONE_DAY_IN_MS},oneWeekAgo:function(a){return b(a)-this.ONE_WEEK_IN_MS},thirtyDaysAgo:function(a){return b(a)-this.THIRTY_DAYS_IN_MS},getRelativeTimestamp:function(a){var b=Date.now();switch(a){case"month":return this.thirtyDaysAgo(b);case"week":return this.oneWeekAgo(b);case"day":return this.oneDayAgo(b);case"hour":return this.oneHourAgo(b)}}}}]),angular.module("coreos.ui").directive("coBtnBar",["$","$timeout","$compile",function(a,b,c){return{templateUrl:"/coreos.ui/btn-bar/btn-bar.html",restrict:"EA",transclude:!0,replace:!0,scope:{completePromise:"="},link:function(d,e){function f(){e.append(i),a("button",e).attr("disabled","disabled"),h.addClass("hidden")}function g(){i.remove(),a("button",e).removeAttr("disabled"),h.removeClass("hidden")}var h,i;h=a(".btn-link",e).last(),i=angular.element(""),c(i)(d),d.$watch("completePromise",function(a){a&&(b(f,0),a.finally(function(){b(g,0)}))})}}}]),angular.module("coreos.ui").directive("coClickNav",["$location",function(a){return{restrict:"A",link:function(b,c,d){function e(c){a.url(d.coClickNav),b.$apply(),c.preventDefault(),c.stopPropagation()}c.on("click",e),c.on("$destroy",function(){c.off("click",e)})}}}]),angular.module("coreos.ui").directive("coCog",function(){return{templateUrl:"/coreos.ui/cog/cog.html",restrict:"E",replace:!0,scope:{apps:"=",options:"=",size:"@",anchor:"@"},link:function(a,b){a.clickHandler=function(a,c){a.stopPropagation(),a.preventDefault(),c.callback&&c.callback(),b.removeClass("open")}}}}),angular.module("coreos.ui").controller("ConfirmModalCtrl",["$scope","$modalInstance","executeFn","title","message","btnText","errorFormatter",function(a,b,c,d,e,f,g){a.errorFormatter=g,a.title=d,a.message=e,a.btnText=f||"Confirm",a.execute=function(){a.requestPromise=c(null,{supressNotifications:!0}).then(b.close)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("coreos.ui").directive("coDonut",["d3","_",function(a,b){return{templateUrl:"/coreos.ui/donut/donut.html",transclude:!0,restrict:"E",replace:!0,scope:{percent:"=",color:"@"},controller:["$scope",function(b){var c,d;b.width=b.height=80,c=b.width/2,d=15,b.arc=a.svg.arc().innerRadius(c-d).outerRadius(c).startAngle(0),b.tau=2*Math.PI}],link:function(c,d){function e(){var b=c.tau,e="#333",f="#eee",g=c.color||"#000",h=18;c.el={},c.el.svg=a.select(d.find(".co-m-gauge__content")[0]).append("svg").attr("width",c.width).attr("height",c.height).append("g").attr("transform","translate("+c.width/2+","+c.height/2+")"),c.el.text=c.el.svg.append("text").attr("fill",e).attr("y",Math.floor(h/3)).attr("font-size",h+"px").attr("text-anchor","middle"),c.el.arcGroup=c.el.svg.append("g").attr("transform","rotate(180)"),c.el.background=c.el.arcGroup.append("path").datum({endAngle:b}).style("fill",f).attr("d",c.arc),c.el.foreground=c.el.arcGroup.append("path").datum({endAngle:c.tau*(c.percent||0)}).style("fill",g).style("opacity",.8).attr("d",c.arc),c.isRendered=!0}function f(){return b.isNumber(c.percent)?(c.el.text.text(Math.round(100*c.percent)+"%"),void c.el.foreground.transition().duration(750).call(g,c.percent*c.tau)):void c.el.text.text("?")}function g(b,d){b.attrTween("d",function(b){var e=a.interpolate(b.endAngle,d);return function(a){return b.endAngle=e(a),c.arc(b)}})}c.isRendered=!1,d.on("$destroy",function(){c.el.svg.remove()}),e(),c.$watch("percent",function(){c.isRendered&&f()})}}}]),angular.module("coreos.ui").provider("errorMessageSvc",function(){var a={};this.registerFormatter=function(b,c){a[b]=c},this.$get=function(){return{getFormatter:function(b){return a[b]||angular.noop}}}}).directive("coErrorMessage",["errorMessageSvc",function(a){return{templateUrl:"/coreos.ui/error-message/error-message.html",restrict:"E",replace:!0,scope:{promise:"=",formatter:"@",customMessage:"@message"},controller:["$scope",function(b){function c(c){if(b.formatter)b.message=a.getFormatter(b.formatter)(c);else{if(!b.customMessage)return;b.message=b.customMessage}b.show=!0}b.show=!1,b.$watch("promise",function(a){b.show=!1,a&&a.catch&&a.catch(c)})}]}}]),angular.module("coreos.ui").directive("coFavicons",["$compile","$rootScope","configSvc",function(a,b,c){return{restrict:"A",replace:!0,link:function(d,e){var f=b.$new(),g='';f.path=c.get("libPath")+"/img",e.append(a(g)(f))}}}]),angular.module("coreos.ui").directive("coFooter",function(){return{templateUrl:"/coreos.ui/footer/footer.html",transclude:!0,restrict:"E",replace:!0}}).directive("coFooterLink",function(){return{templateUrl:"/coreos.ui/footer/footer-link.html",transclude:!0,restrict:"E",replace:!0,scope:{href:"@",iconClass:"@"}}}).directive("coFooterWrapper",function(){return{templateUrl:"/coreos.ui/footer/footer-wrapper.html",transclude:!0,restrict:"E",replace:!0}}),angular.module("coreos.ui").directive("coHighlight",["highlighterSvc",function(a){return{restrict:"A",link:function(b,c,d){b.$watch(d.coHighlight,function(b,d){b!==d&&a.highlight(c)})}}}]),angular.module("coreos.ui").directive("coInlineLoader",function(){return{templateUrl:"/coreos.ui/inline-loader/inline-loader.html",restrict:"E",replace:!0}}),angular.module("coreos.ui").directive("coLoader",function(){return{templateUrl:"/coreos.ui/loader/loader.html",restrict:"E",replace:!0}}),angular.module("coreos.ui").directive("coNavTitle",function(){return{templateUrl:"/coreos.ui/nav-title/nav-title.html",transclude:!0,restrict:"E",replace:!0,scope:{title:"@"}}}),angular.module("coreos.ui").directive("coNavbar",["configSvc",function(a){return{templateUrl:"/coreos.ui/navbar/navbar.html",transclude:!0,restrict:"E",replace:!0,controller:["$scope",function(b){b.config=a.get(),b.isCollapsed=!0}]}}]).directive("coNavbarLink",["$location",function(a){return{templateUrl:"/coreos.ui/navbar/navbar-link.html",transclude:!0,restrict:"E",replace:!0,scope:{href:"@"},link:function(b){b.isActive=function(){return a.path()===b.href}}}}]).directive("coNavbarDropdown",function(){return{templateUrl:"/coreos.ui/navbar/navbar-dropdown.html",transclude:!0,restrict:"E",replace:!0,scope:{text:"@"}}}),angular.module("coreos.ui").directive("coSvg",["$","$rootScope","$compile",function(a,b,c){return{template:"
    ",restrict:"E",replace:!0,scope:{src:"@",width:"@",height:"@"},link:function(a,d,e){var f,g,h;h=b.$new(),g='
    ',h.style={},a.width&&(h.style.width=a.width+"px"),a.height&&(h.style.height=a.height+"px"),e.class&&(h.classes=e.class),a.$watch("src",function(a){a&&(h.src=a,f=c(g)(h),d.replaceWith(f))})}}}]),angular.module("coreos.ui").directive("coTextCopy",function(){return{restrict:"A",replace:!0,link:function(a,b){function c(a){b.select(),a.preventDefault(),a.stopPropagation()}b.on("click",c),b.on("$destroy",function(){b.off("click",c)})}}}),angular.module("coreos.ui").directive("coTitle",function(){return{transclude:!1,restrict:"A",scope:{suffix:"@coTitleSuffix"},controller:["$scope","$rootScope","$route",function(a,b,c){a.pageTitle="",a.defaultTitle=null,b.$on("$routeChangeSuccess",function(){a.pageTitle=c.current.title||c.current.$$route.title})}],link:function(a,b){a.$watch("pageTitle",function(c){c?(a.defaultTitle||(a.defaultTitle=b.text()),b.text(c+" "+a.suffix)):a.defaultTitle&&b.text(a.defaultTitle)})}}}),angular.module("coreos.ui").directive("coToast",function(){return{templateUrl:"/coreos.ui/toast/toast.html",restrict:"E",replace:!0,scope:!0,controller:["$scope","toastSvc",function(a,b){a.messages=b.messages,a.dismiss=b.dismiss}]}}),angular.module("coreos.services").factory("toastSvc",["$timeout",function(a){function b(){e.messages.length&&e.messages.shift()}function c(c,d){e.messages.push({type:c,text:d}),f=a(b,g)}function d(){f&&a.cancel(f)}var e,f,g=5e3;return e={messages:[],error:c.bind(null,"error"),info:c.bind(null,"info"),dismiss:function(a){d(),e.messages.splice(a,1)},dismissAll:function(){d(),e.messages.length=0}}}]),angular.module("coreos-templates-html",["/coreos.ui/btn-bar/btn-bar.html","/coreos.ui/cog/cog.html","/coreos.ui/confirm-modal/confirm-modal.html","/coreos.ui/donut/donut.html","/coreos.ui/error-message/error-message.html","/coreos.ui/favicons/favicons.html","/coreos.ui/footer/footer-link.html","/coreos.ui/footer/footer-wrapper.html","/coreos.ui/footer/footer.html","/coreos.ui/inline-loader/inline-loader.html","/coreos.ui/loader/loader.html","/coreos.ui/nav-title/nav-title.html","/coreos.ui/navbar/navbar-dropdown.html","/coreos.ui/navbar/navbar-link.html","/coreos.ui/navbar/navbar.html","/coreos.ui/toast/toast.html"]),angular.module("/coreos.ui/btn-bar/btn-bar.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/btn-bar/btn-bar.html",'
    \n
    \n')}]),angular.module("/coreos.ui/cog/cog.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/cog/cog.html",'
    \n \n \n
    \n')}]),angular.module("/coreos.ui/confirm-modal/confirm-modal.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/confirm-modal/confirm-modal.html",'
    \n
    \n \n \n \n
    \n
    \n')}]),angular.module("/coreos.ui/donut/donut.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/donut/donut.html",'
    \n
    \n
    \n
    \n')}]),angular.module("/coreos.ui/error-message/error-message.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/error-message/error-message.html",'
    {{message}}
    \n')}]),angular.module("/coreos.ui/favicons/favicons.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/favicons/favicons.html","")}]),angular.module("/coreos.ui/footer/footer-link.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/footer/footer-link.html",'\n \n \n\n')}]),angular.module("/coreos.ui/footer/footer-wrapper.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/footer/footer-wrapper.html",'\n')}]),angular.module("/coreos.ui/footer/footer.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/footer/footer.html",'\n')}]),angular.module("/coreos.ui/inline-loader/inline-loader.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/inline-loader/inline-loader.html",'
    \n
    \n
    \n
    \n
    \n')}]),angular.module("/coreos.ui/loader/loader.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/loader/loader.html",'
    \n \n
    \n')}]),angular.module("/coreos.ui/nav-title/nav-title.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/nav-title/nav-title.html",'
    \n
    \n
    \n

    {{title}}

    \n
    \n
    \n')}]),angular.module("/coreos.ui/navbar/navbar-dropdown.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/navbar/navbar-dropdown.html",'\n')}]),angular.module("/coreos.ui/navbar/navbar-link.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/navbar/navbar-link.html",'\n')}]),angular.module("/coreos.ui/navbar/navbar.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/navbar/navbar.html",'\n')}]),angular.module("/coreos.ui/toast/toast.html",[]).run(["$templateCache",function(a){a.put("/coreos.ui/toast/toast.html",'
    \n
    \n {{message.text}}\n \n
    \n
    \n')}]),angular.module("coreos-templates-svg",["/coreos.svg/globe-only.svg","/coreos.svg/icon-add.svg","/coreos.svg/icon-back.svg","/coreos.svg/icon-delete.svg","/coreos.svg/icon-reboot.svg","/coreos.svg/icon-right-arrow.svg","/coreos.svg/logo.svg"]),angular.module("/coreos.svg/globe-only.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/globe-only.svg",'\n\n\n\n\n \n \n \n\n\n')}]),angular.module("/coreos.svg/icon-add.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/icon-add.svg",'\n \n \n\n')}]),angular.module("/coreos.svg/icon-back.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/icon-back.svg",'\n \n\n')}]),angular.module("/coreos.svg/icon-delete.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/icon-delete.svg",'\n \n \n\n')}]),angular.module("/coreos.svg/icon-reboot.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/icon-reboot.svg",'\n\n \n \n\n\n')}]),angular.module("/coreos.svg/icon-right-arrow.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/icon-right-arrow.svg",'\n\n\n\n\n \n\n\n')}]),angular.module("/coreos.svg/logo.svg",[]).run(["$templateCache",function(a){a.put("/coreos.svg/logo.svg",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n') +}]); +//# sourceMappingURL=coreos.min.map \ No newline at end of file diff --git a/mod/dashboard/app/coreos-web/coreos.min.map b/mod/dashboard/app/coreos-web/coreos.min.map new file mode 100644 index 000000000..0b74f46a5 --- /dev/null +++ b/mod/dashboard/app/coreos-web/coreos.min.map @@ -0,0 +1 @@ +{"version":3,"file":"coreos.min.js","sources":["coreos.min.js"],"names":["angular","module","factory","$window","_","$","d3","config","$compileProvider","aHrefSanitizationWhitelist","filter","items","field","reverse","filtered","forEach","item","push","sort","a","b","convertToUtc","date","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","input","isNumber","isString","parse","isDate","$rootScope","CORE_CONST","CORE_EVENT","getSize","width","innerWidth","find","BREAKPOINTS","bp","min","max","name","onResize","breakpointName","previousName","$broadcast","BREAKPOINT","element","on","debounce","provider","configValues","this","newConfig","$get","get","key","copy","set","value","constant","HIGHLIGHT_CSS_CLASS","Infinity","timeSvc","create","daysUtilExpires","expires","setTime","getTime","ONE_DAY_IN_MS","toGMTString","document","cookie","nameEq","cookieList","i","cookieStr","split","length","charAt","substring","indexOf","remove","$document","broadcastChangeEvent","DOC_VISIBILITY_CHANGE","detectedFeature","propertyName","features","standard","eventName","moz","ms","webkit","Object","keys","some","feature","isBoolean","isHidden","PAGE_NOT_FOUND","RESP_ERROR","RESP_MUTATE","POLL_ERROR","$timeout","pendingTimeout","highlight","elemOrSelector","elem","hasClass","cancel","removeClass","addClass","bind","$q","parseMessage","rejection","errorMsg","description","responseError","supressNotifications","reject","removeLastPath","url","newUrl","pop","join","response","cacheKeys","method","when","settings","pollers","newSettings","$http","isRegistered","schedule","executor","delay","poller","_errorCount","maxRetries","_state","_timeoutPromise","runIfActive","fn","apply","arguments","noop","killPoller","_unlistenDestroy","createExecutor","_paused","_executor","interval","then","catch","args","toArray","unshift","catchMaxFail","finally","register","options","kill","defaults","startIn","scope","$emit","$on","e","killAll","scroll","first","scrollIntoView","scrollerSvc","scrollTo","attemptScroll","maxTries","numTries","ary","index","splice","sum","isArray","reduce","prev","curr","getTimestamp","val","now","ONE_MINUTE_IN_MS","ONE_HOUR_IN_MS","ONE_WEEK_IN_MS","THIRTY_DAYS_IN_MS","milliToSecs","Math","floor","secsToMins","secs","parseInt","minsToSecs","mins","abs","oneHourAgo","ts","oneDayAgo","oneWeekAgo","thirtyDaysAgo","getRelativeTimestamp","term","directive","$compile","templateUrl","restrict","transclude","replace","completePromise","link","disableButtons","append","loaderDirectiveEl","attr","linkButton","enableButtons","removeAttr","last","$watch","$location","attrs","onClickHandler","event","coClickNav","$apply","preventDefault","stopPropagation","off","apps","size","anchor","clickHandler","$event","option","callback","controller","$scope","$modalInstance","executeFn","title","message","btnText","errorFormatter","execute","requestPromise","close","dismiss","percent","color","outerRadius","circleWidth","height","arc","svg","innerRadius","startAngle","tau","PI","render","endAngle","textColor","bgcolor","fontSize","el","select","text","arcGroup","background","datum","style","foreground","isRendered","updateValue","round","transition","duration","call","arcTween","newAngle","attrTween","d","interpolate","t","formatters","registerFormatter","getFormatter","errorMessageSvc","promise","formatter","customMessage","handler","resp","show","configSvc","newScope","$new","htmlTemplate","path","href","iconClass","highlighterSvc","coHighlight","newValue","oldValue","isCollapsed","isActive","template","src","containerEl","html","class","classes","replaceWith","suffix","$route","pageTitle","defaultTitle","current","$$route","toastSvc","messages","dequeue","service","shift","enqueue","type","lastTimeoutPromise","AUTO_DISMISS_TIME","cancelTimeout","error","info","dismissAll","run","$templateCache","put"],"mappings":"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"} \ No newline at end of file diff --git a/mod/dashboard/app/coreos-web/fonts/FontAwesome.otf b/mod/dashboard/app/coreos-web/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..8b0f54e47e1d356dcf1496942a50e228e0f1ee14 GIT binary patch literal 62856 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