├── .gitignore ├── .DS_Store ├── preview.png ├── public ├── .DS_Store ├── img │ ├── 2fa.png │ ├── .DS_Store │ ├── backgrounds │ │ └── 1.jpg │ └── placeholder-profile.jpg ├── font-awesome │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── less │ │ ├── fixed-width.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── core.less │ │ ├── font-awesome.less │ │ ├── stacked.less │ │ ├── bordered-pulled.less │ │ ├── rotated-flipped.less │ │ ├── path.less │ │ ├── animated.less │ │ ├── mixins.less │ │ └── variables.less │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── font-awesome.scss │ │ ├── _core.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── _rotated-flipped.scss │ │ ├── _path.scss │ │ ├── _animated.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ ├── HELP-US-OUT.txt │ └── css │ │ └── font-awesome.min.css ├── js │ ├── placeholder.js │ ├── npm.js │ ├── scripts.js │ ├── app.js │ ├── jquery.backstretch.min.js │ └── jquery.backstretch.js └── stylesheets │ ├── form-elements.css │ ├── style.css │ ├── bootstrap-theme.min.css │ └── bootstrap-theme.css ├── auth ├── local.js └── github.js ├── README.md ├── models └── user.js ├── middlewares └── index.js ├── package.json ├── LICENSE ├── app.js ├── routes ├── ajax │ └── index.js ├── tfa.js └── index.js └── views ├── dashboard.ejs ├── verification.ejs ├── register.ejs └── login.ejs /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/.DS_Store -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/preview.png -------------------------------------------------------------------------------- /public/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/.DS_Store -------------------------------------------------------------------------------- /public/img/2fa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/img/2fa.png -------------------------------------------------------------------------------- /public/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/img/.DS_Store -------------------------------------------------------------------------------- /public/img/backgrounds/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/img/backgrounds/1.jpg -------------------------------------------------------------------------------- /public/img/placeholder-profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/img/placeholder-profile.jpg -------------------------------------------------------------------------------- /public/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThalKod/node-2fa/HEAD/public/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /public/js/placeholder.js: -------------------------------------------------------------------------------- 1 | 2 | $(document).ready(function(){ 3 | 4 | $('input[type="text"], input[type="password"], textarea').each(function() { 5 | $(this).val( $(this).attr('placeholder') ); 6 | }); 7 | 8 | }); -------------------------------------------------------------------------------- /public/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /public/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /public/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /auth/local.js: -------------------------------------------------------------------------------- 1 | const LocalStrategy = require("passport-local"); 2 | const User = require("../models/user"); 3 | const passport = require("passport"); 4 | 5 | // Using local strategy 6 | passport.use(new LocalStrategy(User.authenticate())); 7 | 8 | 9 | passport.serializeUser(function(user, done){ 10 | done(null, user._id); 11 | }); 12 | 13 | passport.deserializeUser(function(id, done){ 14 | 15 | User.findById(id, (err, user)=>{ 16 | done(null, user); 17 | }); 18 | }); 19 | 20 | module.exports = passport; -------------------------------------------------------------------------------- /public/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /public/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /public/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /public/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node-2fa 2 | 3 |

4 |
5 | Two Factor Authentication with nodejs 6 |

7 | 8 | ![Node-2fa](https://github.com/ThalKod/node-2fa/blob/master/preview.png) 9 | 10 | [Demo](https://node-tfa.herokuapp.com/login) 11 | 12 | # :floppy_disk: Installation 13 | 14 | ```bash 15 | # clone the repo 16 | $ git clone https://github.com/ThalKod/node-2fa.git 17 | 18 | # install the requirements 19 | $ npm install 20 | ``` 21 | 22 | ## Usage 23 | ```bash 24 | npm start 25 | ``` 26 | -------------------------------------------------------------------------------- /models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const passportLocalMongoose = require("passport-local-mongoose"); 3 | 4 | const userSchema = new mongoose.Schema({ 5 | username: { 6 | type: String, 7 | required: true, 8 | unique: true 9 | }, 10 | password: String, 11 | githubId: String, 12 | secret_key: { 13 | secret: String, 14 | authenticated: { 15 | type: Boolean, 16 | default: false 17 | } 18 | }, 19 | tfa:{ 20 | type: Boolean, 21 | default: false 22 | } 23 | }); 24 | 25 | userSchema.plugin(passportLocalMongoose); 26 | 27 | 28 | module.exports = mongoose.model("User", userSchema); -------------------------------------------------------------------------------- /public/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /public/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /public/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /public/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /middlewares/index.js: -------------------------------------------------------------------------------- 1 | const User = require("../models/user"); 2 | 3 | module.exports = { 4 | isLoggedIn: (req, res, next)=>{ 5 | if(req.isAuthenticated()){ 6 | next(); 7 | }else{ 8 | res.redirect("/login"); 9 | } 10 | }, 11 | isTfa: (req, res, next)=>{ 12 | User.findById(req.user._id).then((rUser)=>{ 13 | if(rUser.tfa){ 14 | res.redirect("/verification/tfa"); 15 | }else{ 16 | next(); 17 | } 18 | }); 19 | }, 20 | ensureTfa: (req, res, next)=>{ 21 | User.findById(req.user._id).then((rUser)=>{ 22 | if(rUser.tfa){ 23 | if(rUser.secret_key.authenticated){ 24 | next(); 25 | }else{ 26 | res.redirect("/verification/tfa"); 27 | } 28 | }else{ 29 | next(); 30 | } 31 | }) 32 | } 33 | }; -------------------------------------------------------------------------------- /public/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | -------------------------------------------------------------------------------- /public/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "2fa", 3 | "version": "1.0.0", 4 | "description": "Two factor authentification with nodejs", 5 | "main": "app.js", 6 | "scripts": { 7 | "start": "node app.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/ThalKod/node-2fa.git" 13 | }, 14 | "author": "Thal Marcelin", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/ThalKod/node-2fa/issues" 18 | }, 19 | "homepage": "https://github.com/ThalKod/node-2fa#readme", 20 | "dependencies": { 21 | "bcrypt-nodejs": "0.0.3", 22 | "body-parser": "^1.18.3", 23 | "ejs": "^2.6.1", 24 | "express": "^4.16.4", 25 | "express-session": "^1.15.6", 26 | "js-sha512": "^0.8.0", 27 | "mongoose": "^5.1.5", 28 | "nodemon": "^1.17.5", 29 | "passport": "^0.4.0", 30 | "passport-github": "^1.1.0", 31 | "passport-local": "^1.0.0", 32 | "passport-local-mongoose": "^5.0.0", 33 | "qrcode": "^1.2.0", 34 | "speakeasy": "^2.0.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /auth/github.js: -------------------------------------------------------------------------------- 1 | const User = require("../models/user"); 2 | const passport = require("passport"); 3 | const GitHubStrategy = require('passport-github').Strategy; 4 | 5 | 6 | passport.use(new GitHubStrategy({ 7 | clientID: process.env.GITHUB_ID || "", 8 | clientSecret: process.env.GITHUB_SECRET || "", 9 | callbackURL: "http://127.0.0.1:5000/auth/github/callback" 10 | }, 11 | (accessToken, refreshToken, profile, cb) => { 12 | User.findOne({githubId: profile.id}).then((rUser)=>{ 13 | if(!rUser){ 14 | console.log(profile); 15 | user = new User({ 16 | username: profile.username, 17 | githubId: profile.id 18 | }); 19 | 20 | user.save((err)=>{ 21 | if(err) console.log(err); 22 | cb(err,user); 23 | }); 24 | }else{ 25 | return cb(null,rUser); 26 | } 27 | }).catch((err)=>{ 28 | cb(err); 29 | }); 30 | } 31 | )); 32 | 33 | // passport.serializeUser(function(user, done){ 34 | // console.log("1:",user._id); 35 | // done(null, user._id); 36 | // }); 37 | 38 | // passport.deserializeUser(function(id, done){ 39 | // User.findById(id, (err, user)=>{ 40 | // done(err, user); 41 | // }); 42 | // }); 43 | 44 | module.exports = passport; -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const mongoose = require("mongoose"); 3 | const app = express(); 4 | const bodyParser = require("body-parser"); 5 | const routes = require("./routes/index"); 6 | const ajax = require("./routes/ajax/index"); 7 | const tfa = require("./routes/tfa"); 8 | const expressSession = require("express-session"); 9 | const passport = require("passport"); 10 | 11 | const DATABASE_URL = process.env.DATABASE_URL || "mongodb://localhost/node2fa"; 12 | const PORT = process.env.PORT || 5000; 13 | 14 | // Configure app 15 | app.set("view engine", "ejs"); 16 | 17 | // middlewares 18 | app.use(express.static(__dirname + "/public")); 19 | app.use(bodyParser.urlencoded({extended: true})); 20 | 21 | // Configure passport 22 | app.use((expressSession)({ 23 | secret: "a4f8542071f-c33873-443447-8ee2321", 24 | resave: true, 25 | saveUninitialized: true 26 | })); 27 | 28 | app.use(passport.initialize()); 29 | app.use(passport.session()); 30 | 31 | // configure mongoose and DB connection 32 | mongoose.Promise = global.Promise; 33 | mongoose.connect(DATABASE_URL, { reconnectTries: Number.MAX_VALUE }).then((db =>{ 34 | // boot 35 | app.listen(PORT, ()=>{ 36 | console.log("listenning on " + PORT); 37 | }); 38 | })).catch(dbErr =>{ 39 | console.log("Connection Error : ", dbErr.message); 40 | process.exit(1); 41 | }); 42 | 43 | app.use(routes); 44 | app.use(ajax); 45 | app.use(tfa); 46 | -------------------------------------------------------------------------------- /routes/ajax/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const User = require("../../models/user"); 4 | const speakeasy = require('speakeasy'); 5 | const { isLoggedIn } = require("../../middlewares/index"); 6 | const QRCode = require('qrcode'); 7 | 8 | 9 | router.post("/users/secret", isLoggedIn, (req, res)=>{ 10 | 11 | User.findById(req.user._id).then((rUser)=>{ 12 | if(!rUser){ 13 | res.redirect("/"); 14 | } 15 | 16 | const activate = rUser.tfa; 17 | const secret = speakeasy.generateSecret({length: 20}); 18 | // const otpAuthUrl = speakeasy.otpauthURL({ secret: secret.base32, label: rUser.username + " Node-2fa" }); 19 | 20 | QRCode.toDataURL(secret.otpauth_url,(err, image_data)=>{ 21 | rUser.secret_key.secret = secret.base32; 22 | rUser.save(); 23 | 24 | res.json({ error: false, activate, data: { secret: secret.base32, secret_uri: image_data}}); 25 | }); 26 | 27 | }).catch((e)=>{ 28 | console.log(e); 29 | res.json({ error: true, data: e}) 30 | }); 31 | }); 32 | 33 | router.post("/disable/tfa", isLoggedIn, (req, res)=>{ 34 | User.findByIdAndUpdate(req.user._id,{ tfa: false }).then((rUser)=>{ 35 | res.json({ error: false,}); 36 | }).catch((err)=>{ 37 | res.json({ error: true,}); 38 | }) 39 | }); 40 | 41 | 42 | module.exports = router; 43 | 44 | -------------------------------------------------------------------------------- /public/js/scripts.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | jQuery(document).ready(function() { 4 | 5 | /* 6 | Fullscreen background 7 | */ 8 | $.backstretch("/img/backgrounds/1.jpg"); 9 | 10 | /* 11 | Login form validation 12 | */ 13 | $('.login-form input[type="text"], .login-form input[type="password"], .login-form textarea').on('focus', function() { 14 | $(this).removeClass('input-error'); 15 | }); 16 | 17 | $('.login-form').on('submit', function(e) { 18 | 19 | $(this).find('input[type="text"], input[type="password"], textarea').each(function(){ 20 | if( $(this).val() == "" ) { 21 | e.preventDefault(); 22 | $(this).addClass('input-error'); 23 | } 24 | else { 25 | $(this).removeClass('input-error'); 26 | } 27 | }); 28 | 29 | }); 30 | 31 | /* 32 | Registration form validation 33 | */ 34 | $('.registration-form input[type="text"], .registration-form textarea').on('focus', function() { 35 | $(this).removeClass('input-error'); 36 | }); 37 | 38 | $('.registration-form').on('submit', function(e) { 39 | 40 | $(this).find('input[type="text"], textarea').each(function(){ 41 | if( $(this).val() == "" ) { 42 | e.preventDefault(); 43 | $(this).addClass('input-error'); 44 | } 45 | else { 46 | $(this).removeClass('input-error'); 47 | } 48 | }); 49 | 50 | }); 51 | 52 | 53 | }); 54 | 55 | 56 | -------------------------------------------------------------------------------- /views/dashboard.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Dashboard 10 | 11 | 12 |
13 | Logout 14 |
15 |

Hi, <%= username %>

16 |
17 |
18 |

Enable/Disable Two Factor Authentication :

19 |
20 |
21 | <% if(isChecked){ %> 22 | 23 | <% }else{ %> 24 | 25 | <% } %> 26 | 27 | 28 |
29 |
30 |
31 | 32 |
33 |
34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /routes/tfa.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const speakeasy = require('speakeasy'); 3 | const router = express.Router(); 4 | const User = require("../models/user"); 5 | const middlewares = require("../middlewares/index"); 6 | const { isLoggedIn } = require("../middlewares/index"); 7 | 8 | 9 | router.post("/enable/tfa", isLoggedIn, (req, res)=>{ 10 | User.findById(req.user._id).then((rUser)=>{ 11 | if(!rUser){ 12 | res.redirect("/"); 13 | } 14 | 15 | const secretBase32 = rUser.secret_key.secret 16 | 17 | const verified = speakeasy.totp.verify({ 18 | secret: secretBase32, 19 | encoding: 'base32', 20 | token: req.body.tfa, 21 | window: 2 22 | }); 23 | 24 | if(verified){ 25 | rUser.secret_key.authenticated = true; 26 | rUser.tfa = true; 27 | rUser.save(); 28 | } 29 | res.redirect("/dashboard"); 30 | }).catch((err)=>{ 31 | console.log(err); 32 | }) 33 | }); 34 | 35 | router.get("/verification/tfa", middlewares.isLoggedIn, (req, res)=>{ 36 | User.findById(req.user._id).then((rUser)=>{ 37 | if(!rUser.tfa){ 38 | return res.redirect("/dashboard"); 39 | } 40 | res.render("verification"); 41 | }) 42 | }); 43 | 44 | 45 | router.post("/verification/tfa", middlewares.isLoggedIn, (req, res)=>{ 46 | User.findById(req.user._id).then((rUser)=>{ 47 | if(!rUser.tfa){ 48 | return res.redirect("/dashboard"); 49 | } 50 | 51 | const secretBase32 = rUser.secret_key.secret 52 | 53 | const token = speakeasy.totp({ 54 | secret: secretBase32, 55 | encoding: 'base32', 56 | }); 57 | 58 | const verified = speakeasy.totp.verify({ 59 | secret: secretBase32, 60 | encoding: 'base32', 61 | token: req.body.tfa, 62 | window: 2 63 | }); 64 | 65 | if(verified){ 66 | rUser.secret_key.authenticated = true; 67 | rUser.tfa = true; 68 | rUser.save(); 69 | return res.redirect("/dashboard"); 70 | }else{ 71 | res.redirect("/verification/tfa"); 72 | } 73 | }) 74 | }); 75 | 76 | module.exports = router; -------------------------------------------------------------------------------- /public/js/app.js: -------------------------------------------------------------------------------- 1 | const checkbox = $(".onoffswitch-checkbox"); 2 | const tfa_box = $(".tfa-box"); 3 | const activate = $(".activate"); 4 | 5 | $(function() { 6 | if(checkbox.prop("checked")){ 7 | promptMessage(); 8 | } 9 | }); 10 | 11 | checkbox.change(function(){ 12 | if(this.checked){ 13 | $.post("users/secret") 14 | .done(function(data){ 15 | if(!data.error){ 16 | console.log(data.activate); 17 | if(data.activate){ 18 | promptMessage(); 19 | }else{ 20 | promptSetup(data); 21 | } 22 | } 23 | }); 24 | }else{ 25 | 26 | $.post("disable/tfa") 27 | .done(function(data){ 28 | console.log(data); 29 | if(!data.error){ 30 | tfa_box.hide(); 31 | activate.hide(); 32 | } 33 | }); 34 | } 35 | }); 36 | 37 | 38 | 39 | function promptSetup(data){ 40 | 41 | tfa_box.html(` 42 |

SETTING UP GOOGLE AUTHENTICATOR (OR OTHER TOTP APP)

43 |
44 |

IMPORTANT, READ BEFORE CONTINUING: Please make sure that you have an email set in your account settings. If you don't have one and you lose access to your 2FA app for any reason, you won't be able to get back into your account. 45 |

To enable 2 Factor Authentication, scan the QR code above into your favourite authenticator app such as Google Authenticator or Authy . Once done, enter the access token you get from the app into the text box below, it looks like 123456 .

46 | 47 |
48 |

49 | 50 |

Manual key entry: ${data.data.secret}

51 |
52 | 53 |
54 | `); 55 | 56 | tfa_box.show(); 57 | 58 | } 59 | 60 | function promptMessage(){ 61 | activate.html("

Activate !

"); 62 | activate.show(); 63 | } -------------------------------------------------------------------------------- /public/stylesheets/form-elements.css: -------------------------------------------------------------------------------- 1 | 2 | input[type="text"], 3 | input[type="password"], 4 | textarea, 5 | textarea.form-control { 6 | height: 50px; 7 | margin: 0; 8 | padding: 0 20px; 9 | vertical-align: middle; 10 | background: #fff; 11 | border: 3px solid #fff; 12 | font-family: 'Roboto', sans-serif; 13 | font-size: 16px; 14 | font-weight: 300; 15 | line-height: 50px; 16 | color: #888; 17 | -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; 18 | -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; 19 | -o-transition: all .3s; -moz-transition: all .3s; -webkit-transition: all .3s; -ms-transition: all .3s; transition: all .3s; 20 | } 21 | 22 | textarea, 23 | textarea.form-control { 24 | padding-top: 10px; 25 | padding-bottom: 10px; 26 | line-height: 30px; 27 | } 28 | 29 | input[type="text"]:focus, 30 | input[type="password"]:focus, 31 | textarea:focus, 32 | textarea.form-control:focus { 33 | outline: 0; 34 | background: #fff; 35 | border: 3px solid #fff; 36 | -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; 37 | } 38 | 39 | input[type="text"]:-moz-placeholder, input[type="password"]:-moz-placeholder, 40 | textarea:-moz-placeholder, textarea.form-control:-moz-placeholder { color: #888; } 41 | 42 | input[type="text"]:-ms-input-placeholder, input[type="password"]:-ms-input-placeholder, 43 | textarea:-ms-input-placeholder, textarea.form-control:-ms-input-placeholder { color: #888; } 44 | 45 | input[type="text"]::-webkit-input-placeholder, input[type="password"]::-webkit-input-placeholder, 46 | textarea::-webkit-input-placeholder, textarea.form-control::-webkit-input-placeholder { color: #888; } 47 | 48 | 49 | 50 | button.btn { 51 | height: 50px; 52 | margin: 0; 53 | padding: 0 20px; 54 | vertical-align: middle; 55 | background: #19b9e7; 56 | border: 0; 57 | font-family: 'Roboto', sans-serif; 58 | font-size: 16px; 59 | font-weight: 300; 60 | line-height: 50px; 61 | color: #fff; 62 | -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; 63 | text-shadow: none; 64 | -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; 65 | -o-transition: all .3s; -moz-transition: all .3s; -webkit-transition: all .3s; -ms-transition: all .3s; transition: all .3s; 66 | } 67 | 68 | button.btn:hover { opacity: 0.6; color: #fff; } 69 | 70 | button.btn:active { outline: 0; opacity: 0.6; color: #fff; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } 71 | 72 | button.btn:focus { outline: 0; opacity: 0.6; background: #19b9e7; color: #fff; } 73 | 74 | button.btn:active:focus, button.btn.active:focus { outline: 0; opacity: 0.6; background: #19b9e7; color: #fff; } 75 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const User = require("../models/user"); 4 | const middlewares = require("../middlewares/index"); 5 | const passportLocal = require("../auth/local"); 6 | const passportGithub = require("../auth/github"); 7 | 8 | 9 | 10 | // rendering signin page 11 | router.get("/", (req, res)=>{ 12 | res.redirect("/login"); 13 | }); 14 | 15 | // rendering the dashboard 16 | router.get("/dashboard", middlewares.isLoggedIn, middlewares.ensureTfa, (req, res)=>{ 17 | User.findById(req.user.id).then((rUser)=>{ 18 | if(!rUser){ 19 | return res.redirect("/login"); 20 | } 21 | let isChecked = rUser.tfa; 22 | console.log("isChecked: ", isChecked); 23 | res.render("dashboard", {username: rUser.username, isChecked}); 24 | }) 25 | }); 26 | 27 | // rendering registration page 28 | router.get("/register", (req, res)=>{ 29 | res.render("register"); 30 | }); 31 | 32 | // handling registration 33 | router.post("/register", (req, res)=>{ 34 | const user = {username: req.body.username}; 35 | User.register(user, req.body.password, (err, rUser)=>{ 36 | if(err){ 37 | console.log(err); 38 | res.render("register"); 39 | } 40 | passportLocal.authenticate("local")(req, res, ()=>{ 41 | res.redirect("/dashboard"); 42 | }); 43 | }); 44 | }); 45 | 46 | 47 | // rendering the login page 48 | router.get("/login", (req, res)=>{ 49 | if(req.user){ 50 | return res.redirect("/dashboard"); 51 | } 52 | res.render("login"); 53 | }); 54 | 55 | // handling login 56 | router.post("/login", passportLocal.authenticate("local", { 57 | // successRedirect: "/dashboard", 58 | failureRedirect: "/login" 59 | }), (req, res, next)=>{ 60 | User.findById(req.user._id).then((rUser)=>{ 61 | next(); 62 | }); 63 | 64 | }, middlewares.isTfa, (req, res)=>{ 65 | res.redirect("/dashboard"); 66 | }); 67 | 68 | // hanling login with github 69 | router.get('/login/github', passportGithub.authenticate('github', { scope: [ 'user:email' ] }), 70 | (req,res)=>{ 71 | // console.log("In /login/github :",req.user); 72 | } 73 | ); 74 | 75 | // Github Oauth Callback 76 | router.get('/auth/github/callback', passportGithub.authenticate('github', { failureRedirect: '/login' }), 77 | (req, res)=> { 78 | // Successful authentication, redirect home. 79 | res.redirect('/dashboard'); 80 | }); 81 | 82 | 83 | // loggin out 84 | router.get("/logout", middlewares.isLoggedIn, (req, res)=>{ 85 | User.findById(req.user._id).then((rUser)=>{ 86 | rUser.secret_key.authenticated = false; 87 | rUser.save(); 88 | req.logOut(); 89 | res.redirect("/"); 90 | }); 91 | }); 92 | 93 | 94 | module.exports = router; -------------------------------------------------------------------------------- /views/verification.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Two Factor Authentication | Verification 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |
33 |
34 | 2fa logo 35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |

Enter your two factor code

43 |
44 |
45 | 46 |
47 |
48 |
49 | 56 |
57 |
58 |
59 |
60 | 61 |
62 |
63 |
64 | 65 | 66 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /public/js/jquery.backstretch.min.js: -------------------------------------------------------------------------------- 1 | /*! Backstretch - v2.0.4 - 2013-06-19 2 | * http://srobbin.com/jquery-plugins/backstretch/ 3 | * Copyright (c) 2013 Scott Robbin; Licensed MIT */ 4 | (function(a,d,p){a.fn.backstretch=function(c,b){(c===p||0===c.length)&&a.error("No images were supplied for Backstretch");0===a(d).scrollTop()&&d.scrollTo(0,0);return this.each(function(){var d=a(this),g=d.data("backstretch");if(g){if("string"==typeof c&&"function"==typeof g[c]){g[c](b);return}b=a.extend(g.options,b);g.destroy(!0)}g=new q(this,c,b);d.data("backstretch",g)})};a.backstretch=function(c,b){return a("body").backstretch(c,b).data("backstretch")};a.expr[":"].backstretch=function(c){return a(c).data("backstretch")!==p};a.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5E3,fade:0};var r={left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},s={position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxHeight:"none",maxWidth:"none",zIndex:-999999},q=function(c,b,e){this.options=a.extend({},a.fn.backstretch.defaults,e||{});this.images=a.isArray(b)?b:[b];a.each(this.images,function(){a("")[0].src=this});this.isBody=c===document.body;this.$container=a(c);this.$root=this.isBody?l?a(d):a(document):this.$container;c=this.$container.children(".backstretch").first();this.$wrap=c.length?c:a('
').css(r).appendTo(this.$container);this.isBody||(c=this.$container.css("position"),b=this.$container.css("zIndex"),this.$container.css({position:"static"===c?"relative":c,zIndex:"auto"===b?0:b,background:"none"}),this.$wrap.css({zIndex:-999998}));this.$wrap.css({position:this.isBody&&l?"fixed":"absolute"});this.index=0;this.show(this.index);a(d).on("resize.backstretch",a.proxy(this.resize,this)).on("orientationchange.backstretch",a.proxy(function(){this.isBody&&0===d.pageYOffset&&(d.scrollTo(0,1),this.resize())},this))};q.prototype={resize:function(){try{var a={left:0,top:0},b=this.isBody?this.$root.width():this.$root.innerWidth(),e=b,g=this.isBody?d.innerHeight?d.innerHeight:this.$root.height():this.$root.innerHeight(),j=e/this.$img.data("ratio"),f;j>=g?(f=(j-g)/2,this.options.centeredY&&(a.top="-"+f+"px")):(j=g,e=j*this.$img.data("ratio"),f=(e-b)/2,this.options.centeredX&&(a.left="-"+f+"px"));this.$wrap.css({width:b,height:g}).find("img:not(.deleteable)").css({width:e,height:j}).css(a)}catch(h){}return this},show:function(c){if(!(Math.abs(c)>this.images.length-1)){var b=this,e=b.$wrap.find("img").addClass("deleteable"),d={relatedTarget:b.$container[0]};b.$container.trigger(a.Event("backstretch.before",d),[b,c]);this.index=c;clearInterval(b.interval);b.$img=a("").css(s).bind("load",function(f){var h=this.width||a(f.target).width();f=this.height||a(f.target).height();a(this).data("ratio",h/f);a(this).fadeIn(b.options.speed||b.options.fade,function(){e.remove();b.paused||b.cycle();a(["after","show"]).each(function(){b.$container.trigger(a.Event("backstretch."+this,d),[b,c])})});b.resize()}).appendTo(b.$wrap);b.$img.attr("src",b.images[c]);return b}},next:function(){return this.show(this.indexe||d.operamini&&"[object OperaMini]"==={}.toString.call(d.operamini)||n&&7458>t||-1e||h&&6>h||"palmGetResource"in d&&e&&534>e||-1=k)})(jQuery,window); -------------------------------------------------------------------------------- /views/register.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Nodejs 2fa | Login 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |
33 |
34 | 35 |
36 |
37 | 2fa logo 38 |
39 |
40 | 41 |
42 | 43 |
44 | 45 |
46 |
47 |
48 |

Sign up now

49 |

Fill in the form below to get instant access:

50 |
51 |
52 | 53 |
54 |
55 |
56 |
57 |
58 | 59 | 60 |
61 |
62 | 63 | 64 |
65 | 66 |

OR

67 | Login 68 |
69 |
70 |
71 | 72 |
73 |
74 | 75 |
76 |
77 | 78 |
79 | 80 | 81 |
82 |
83 |
84 | 85 |
86 | 87 |

©2018 Node-2fa, All Rights Reserved

88 |
89 | 90 |
91 |
92 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /views/login.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Nodejs 2fa | Login 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |
33 |
34 | 35 |
36 |
37 | 2fa logo 38 |
39 |
40 | 41 |
42 |
43 | 44 |
45 |
46 |
47 |

Login to Node-2fa

48 |

Enter username and password to log on:

49 |
50 |
51 | 52 |
53 |
54 |
55 | 68 |
69 |
70 | 71 | 79 | 80 |
81 |
82 | 83 |
84 |
85 | 86 |
87 | 88 | 89 |
90 |
91 |
92 | 93 |
94 | 95 |

©2018 Node-2fa, All Rights Reserved

96 |
97 | 98 |
99 |
100 |
101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | font-family: 'Roboto', sans-serif; 4 | font-size: 16px; 5 | font-weight: 300; 6 | color: #888; 7 | line-height: 30px; 8 | text-align: center; 9 | margin-bottom: 50px; 10 | background-color: #fcfcfc; 11 | } 12 | 13 | strong { font-weight: 500; } 14 | 15 | a, a:hover, a:focus { 16 | color: #19b9e7; 17 | text-decoration: none; 18 | -o-transition: all .3s; -moz-transition: all .3s; -webkit-transition: all .3s; -ms-transition: all .3s; transition: all .3s; 19 | } 20 | 21 | h1, h2 { 22 | margin-top: 10px; 23 | font-size: 38px; 24 | font-weight: 100; 25 | color: #555; 26 | line-height: 50px; 27 | } 28 | 29 | h3 { 30 | font-size: 22px; 31 | font-weight: 300; 32 | color: #555; 33 | line-height: 30px; 34 | } 35 | 36 | .center{ 37 | display: flex; 38 | justify-content: space-around; 39 | } 40 | 41 | img { max-width: 100%; } 42 | 43 | ::-moz-selection { background: #19b9e7; color: #fff; text-shadow: none; } 44 | ::selection { background: #19b9e7; color: #fff; text-shadow: none; } 45 | 46 | 47 | .btn-link-1 { 48 | display: inline-block; 49 | height: 50px; 50 | margin: 5px; 51 | padding: 16px 20px 0 20px; 52 | background: #19b9e7; 53 | font-size: 16px; 54 | font-weight: 300; 55 | line-height: 16px; 56 | color: #fff; 57 | -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; 58 | } 59 | .btn-link-1:hover, .btn-link-1:focus, .btn-link-1:active { outline: 0; opacity: 0.6; color: #fff; } 60 | 61 | .btn-link-1.btn-link-1-facebook { background: #4862a3; } 62 | .btn-link-1.btn-link-1-twitter { background: #55acee; } 63 | .btn-link-1.btn-link-1-google-plus { background: #dd4b39; } 64 | 65 | .btn-link-1 i { 66 | padding-right: 5px; 67 | vertical-align: middle; 68 | font-size: 20px; 69 | line-height: 20px; 70 | } 71 | 72 | .btn-link-2 { 73 | display: inline-block; 74 | height: 50px; 75 | margin: 5px; 76 | padding: 15px 20px 0 20px; 77 | background: rgba(0, 0, 0, 0.3); 78 | border: 1px solid #fff; 79 | font-size: 16px; 80 | font-weight: 300; 81 | line-height: 16px; 82 | color: #fff; 83 | -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; 84 | } 85 | .btn-link-2:hover, .btn-link-2:focus, 86 | .btn-link-2:active, .btn-link-2:active:focus { outline: 0; opacity: 0.6; background: rgba(0, 0, 0, 0.3); color: #fff; } 87 | 88 | .btn-link-2 i { 89 | padding-right: 5px; 90 | vertical-align: middle; 91 | font-size: 20px; 92 | line-height: 20px; 93 | } 94 | 95 | 96 | /***** Top content *****/ 97 | 98 | .inner-bg { 99 | padding: 60px 0 80px 0; 100 | } 101 | 102 | .top-content .text { 103 | color: #fff; 104 | } 105 | 106 | .top-content .text h1 { color: #fff; } 107 | 108 | .top-content .description { 109 | margin: 20px 0 10px 0; 110 | } 111 | 112 | .top-content .description p { opacity: 0.8; } 113 | 114 | .top-content .description a { 115 | color: #fff; 116 | } 117 | .top-content .description a:hover, 118 | .top-content .description a:focus { border-bottom: 1px dotted #fff; } 119 | 120 | .form-box { 121 | margin-top: 70px; 122 | } 123 | 124 | .form-top { 125 | overflow: hidden; 126 | padding: 0 25px 15px 25px; 127 | background: #444; 128 | background: rgba(0, 0, 0, 0.35); 129 | -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; 130 | text-align: left; 131 | } 132 | 133 | .form-top-left { 134 | float: left; 135 | width: 75%; 136 | padding-top: 25px; 137 | } 138 | 139 | .form-top-left h3 { margin-top: 0; color: #fff; } 140 | .form-top-left p { opacity: 0.8; color: #fff; } 141 | 142 | .form-top-right { 143 | float: left; 144 | width: 25%; 145 | padding-top: 5px; 146 | font-size: 66px; 147 | color: #fff; 148 | line-height: 100px; 149 | text-align: right; 150 | opacity: 0.3; 151 | } 152 | 153 | .form-bottom { 154 | padding: 25px 25px 30px 25px; 155 | background: #444; 156 | background: rgba(0, 0, 0, 0.3); 157 | -moz-border-radius: 0 0 4px 4px; -webkit-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; 158 | text-align: left; 159 | } 160 | 161 | .form-bottom form textarea { 162 | height: 100px; 163 | } 164 | 165 | .form-bottom form button.btn { 166 | width: 100%; 167 | } 168 | 169 | .form-bottom form a { 170 | width: 100%; 171 | color: white; 172 | background: #19b9e7; 173 | } 174 | 175 | .form-bottom form p { 176 | text-align: center; 177 | color: white; 178 | } 179 | 180 | .form-bottom form .input-error { 181 | border-color: #19b9e7; 182 | } 183 | 184 | .social-login { 185 | margin-top: 35px; 186 | } 187 | 188 | .social-login h3 { 189 | color: #fff; 190 | } 191 | 192 | .social-login-buttons { 193 | margin-top: 25px; 194 | } 195 | 196 | .middle-border { 197 | min-height: 300px; 198 | margin-top: 170px; 199 | border-right: 1px solid #fff; 200 | border-right: 1px solid rgba(255, 255, 255, 0.6); 201 | } 202 | 203 | 204 | /***** Footer *****/ 205 | 206 | footer { 207 | padding-bottom: 70px; 208 | color: #fff; 209 | } 210 | 211 | footer .footer-border { 212 | width: 200px; 213 | margin: 0 auto; 214 | padding-bottom: 30px; 215 | border-top: 1px solid #fff; 216 | border-top: 1px solid rgba(255, 255, 255, 0.6); 217 | } 218 | 219 | footer p { opacity: 0.8; } 220 | 221 | footer a { 222 | color: #fff; 223 | } 224 | footer a:hover, footer a:focus { color: #fff; border-bottom: 1px dotted #fff; } 225 | 226 | 227 | /***** Media queries *****/ 228 | 229 | @media (min-width: 992px) and (max-width: 1199px) {} 230 | 231 | @media (min-width: 768px) and (max-width: 991px) {} 232 | 233 | @media (max-width: 767px) { 234 | 235 | .middle-border { min-height: auto; margin: 65px 30px 0 30px; border-right: 0; 236 | border-top: 1px solid #fff; border-top: 1px solid rgba(255, 255, 255, 0.6); } 237 | 238 | } 239 | 240 | @media (max-width: 415px) { 241 | 242 | h1, h2 { font-size: 32px; } 243 | 244 | } 245 | 246 | .tfa-switch{ 247 | display: inline-block; 248 | } 249 | 250 | /* Toggle */ 251 | 252 | .onoffswitch { 253 | position: relative; width: 90px; 254 | margin-left: 100px; 255 | margin-bottom: 10px; 256 | -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none; 257 | } 258 | .onoffswitch-checkbox { 259 | display: none; 260 | } 261 | .onoffswitch-label { 262 | display: block; overflow: hidden; cursor: pointer; 263 | height: 30px; padding: 0; line-height: 30px; 264 | border: 2px solid #999999; border-radius: 30px; 265 | background-color: #ADA6A6; 266 | transition: background-color 0.3s ease-in; 267 | } 268 | .onoffswitch-label:before { 269 | content: ""; 270 | display: block; width: 30px; margin: 0px; 271 | background: #FFFFFF; 272 | position: absolute; top: 0; bottom: 0; 273 | right: 58px; 274 | border: 2px solid #999999; border-radius: 30px; 275 | transition: all 0.3s ease-in 0s; 276 | } 277 | .onoffswitch-checkbox:checked + .onoffswitch-label { 278 | background-color: #4AC234; 279 | } 280 | .onoffswitch-checkbox:checked + .onoffswitch-label, .onoffswitch-checkbox:checked + .onoffswitch-label:before { 281 | border-color: #4AC234; 282 | } 283 | .onoffswitch-checkbox:checked + .onoffswitch-label:before { 284 | right: 0px; 285 | } 286 | 287 | /* 2fa box */ 288 | .tfa-box{ 289 | margin: auto; 290 | width: 75%; 291 | border: 1px solid grey; 292 | box-shadow: 2px 2px 5px 5px #888888; 293 | display: none; 294 | } 295 | 296 | .tfa-code-input{ 297 | font-size: 20px; 298 | width: 75%; 299 | height: 30px; 300 | margin-bottom: 10px; 301 | } 302 | 303 | .color-red{ 304 | color: red; 305 | } 306 | 307 | .btn-green{ 308 | background-color: #4AC234; 309 | width: 100px; 310 | font-size: 15px; 311 | border-radius: 5px; 312 | } 313 | 314 | .btn-yellow{ 315 | background-color: #f0582a; 316 | width: 100px; 317 | font-size: 15px; 318 | border-radius: 5px; 319 | } 320 | 321 | /* Activate */ 322 | 323 | .activate{ 324 | font-size: 25px; 325 | display: none; 326 | color: #4AC234; 327 | } 328 | 329 | /* Form */ 330 | 331 | .marB{ 332 | margin-bottom: 15px; 333 | } -------------------------------------------------------------------------------- /public/js/jquery.backstretch.js: -------------------------------------------------------------------------------- 1 | /*! Backstretch - v2.0.4 - 2013-06-19 2 | * http://srobbin.com/jquery-plugins/backstretch/ 3 | * Copyright (c) 2013 Scott Robbin; Licensed MIT */ 4 | 5 | ;(function ($, window, undefined) { 6 | 'use strict'; 7 | 8 | /* PLUGIN DEFINITION 9 | * ========================= */ 10 | 11 | $.fn.backstretch = function (images, options) { 12 | // We need at least one image or method name 13 | if (images === undefined || images.length === 0) { 14 | $.error("No images were supplied for Backstretch"); 15 | } 16 | 17 | /* 18 | * Scroll the page one pixel to get the right window height on iOS 19 | * Pretty harmless for everyone else 20 | */ 21 | if ($(window).scrollTop() === 0 ) { 22 | window.scrollTo(0, 0); 23 | } 24 | 25 | return this.each(function () { 26 | var $this = $(this) 27 | , obj = $this.data('backstretch'); 28 | 29 | // Do we already have an instance attached to this element? 30 | if (obj) { 31 | 32 | // Is this a method they're trying to execute? 33 | if (typeof images == 'string' && typeof obj[images] == 'function') { 34 | // Call the method 35 | obj[images](options); 36 | 37 | // No need to do anything further 38 | return; 39 | } 40 | 41 | // Merge the old options with the new 42 | options = $.extend(obj.options, options); 43 | 44 | // Remove the old instance 45 | obj.destroy(true); 46 | } 47 | 48 | obj = new Backstretch(this, images, options); 49 | $this.data('backstretch', obj); 50 | }); 51 | }; 52 | 53 | // If no element is supplied, we'll attach to body 54 | $.backstretch = function (images, options) { 55 | // Return the instance 56 | return $('body') 57 | .backstretch(images, options) 58 | .data('backstretch'); 59 | }; 60 | 61 | // Custom selector 62 | $.expr[':'].backstretch = function(elem) { 63 | return $(elem).data('backstretch') !== undefined; 64 | }; 65 | 66 | /* DEFAULTS 67 | * ========================= */ 68 | 69 | $.fn.backstretch.defaults = { 70 | centeredX: true // Should we center the image on the X axis? 71 | , centeredY: true // Should we center the image on the Y axis? 72 | , duration: 5000 // Amount of time in between slides (if slideshow) 73 | , fade: 0 // Speed of fade transition between slides 74 | }; 75 | 76 | /* STYLES 77 | * 78 | * Baked-in styles that we'll apply to our elements. 79 | * In an effort to keep the plugin simple, these are not exposed as options. 80 | * That said, anyone can override these in their own stylesheet. 81 | * ========================= */ 82 | var styles = { 83 | wrap: { 84 | left: 0 85 | , top: 0 86 | , overflow: 'hidden' 87 | , margin: 0 88 | , padding: 0 89 | , height: '100%' 90 | , width: '100%' 91 | , zIndex: -999999 92 | } 93 | , img: { 94 | position: 'absolute' 95 | , display: 'none' 96 | , margin: 0 97 | , padding: 0 98 | , border: 'none' 99 | , width: 'auto' 100 | , height: 'auto' 101 | , maxHeight: 'none' 102 | , maxWidth: 'none' 103 | , zIndex: -999999 104 | } 105 | }; 106 | 107 | /* CLASS DEFINITION 108 | * ========================= */ 109 | var Backstretch = function (container, images, options) { 110 | this.options = $.extend({}, $.fn.backstretch.defaults, options || {}); 111 | 112 | /* In its simplest form, we allow Backstretch to be called on an image path. 113 | * e.g. $.backstretch('/path/to/image.jpg') 114 | * So, we need to turn this back into an array. 115 | */ 116 | this.images = $.isArray(images) ? images : [images]; 117 | 118 | // Preload images 119 | $.each(this.images, function () { 120 | $('')[0].src = this; 121 | }); 122 | 123 | // Convenience reference to know if the container is body. 124 | this.isBody = container === document.body; 125 | 126 | /* We're keeping track of a few different elements 127 | * 128 | * Container: the element that Backstretch was called on. 129 | * Wrap: a DIV that we place the image into, so we can hide the overflow. 130 | * Root: Convenience reference to help calculate the correct height. 131 | */ 132 | this.$container = $(container); 133 | this.$root = this.isBody ? supportsFixedPosition ? $(window) : $(document) : this.$container; 134 | 135 | // Don't create a new wrap if one already exists (from a previous instance of Backstretch) 136 | var $existing = this.$container.children(".backstretch").first(); 137 | this.$wrap = $existing.length ? $existing : $('
').css(styles.wrap).appendTo(this.$container); 138 | 139 | // Non-body elements need some style adjustments 140 | if (!this.isBody) { 141 | // If the container is statically positioned, we need to make it relative, 142 | // and if no zIndex is defined, we should set it to zero. 143 | var position = this.$container.css('position') 144 | , zIndex = this.$container.css('zIndex'); 145 | 146 | this.$container.css({ 147 | position: position === 'static' ? 'relative' : position 148 | , zIndex: zIndex === 'auto' ? 0 : zIndex 149 | , background: 'none' 150 | }); 151 | 152 | // Needs a higher z-index 153 | this.$wrap.css({zIndex: -999998}); 154 | } 155 | 156 | // Fixed or absolute positioning? 157 | this.$wrap.css({ 158 | position: this.isBody && supportsFixedPosition ? 'fixed' : 'absolute' 159 | }); 160 | 161 | // Set the first image 162 | this.index = 0; 163 | this.show(this.index); 164 | 165 | // Listen for resize 166 | $(window).on('resize.backstretch', $.proxy(this.resize, this)) 167 | .on('orientationchange.backstretch', $.proxy(function () { 168 | // Need to do this in order to get the right window height 169 | if (this.isBody && window.pageYOffset === 0) { 170 | window.scrollTo(0, 1); 171 | this.resize(); 172 | } 173 | }, this)); 174 | }; 175 | 176 | /* PUBLIC METHODS 177 | * ========================= */ 178 | Backstretch.prototype = { 179 | resize: function () { 180 | try { 181 | var bgCSS = {left: 0, top: 0} 182 | , rootWidth = this.isBody ? this.$root.width() : this.$root.innerWidth() 183 | , bgWidth = rootWidth 184 | , rootHeight = this.isBody ? ( window.innerHeight ? window.innerHeight : this.$root.height() ) : this.$root.innerHeight() 185 | , bgHeight = bgWidth / this.$img.data('ratio') 186 | , bgOffset; 187 | 188 | // Make adjustments based on image ratio 189 | if (bgHeight >= rootHeight) { 190 | bgOffset = (bgHeight - rootHeight) / 2; 191 | if(this.options.centeredY) { 192 | bgCSS.top = '-' + bgOffset + 'px'; 193 | } 194 | } else { 195 | bgHeight = rootHeight; 196 | bgWidth = bgHeight * this.$img.data('ratio'); 197 | bgOffset = (bgWidth - rootWidth) / 2; 198 | if(this.options.centeredX) { 199 | bgCSS.left = '-' + bgOffset + 'px'; 200 | } 201 | } 202 | 203 | this.$wrap.css({width: rootWidth, height: rootHeight}) 204 | .find('img:not(.deleteable)').css({width: bgWidth, height: bgHeight}).css(bgCSS); 205 | } catch(err) { 206 | // IE7 seems to trigger resize before the image is loaded. 207 | // This try/catch block is a hack to let it fail gracefully. 208 | } 209 | 210 | return this; 211 | } 212 | 213 | // Show the slide at a certain position 214 | , show: function (newIndex) { 215 | 216 | // Validate index 217 | if (Math.abs(newIndex) > this.images.length - 1) { 218 | return; 219 | } 220 | 221 | // Vars 222 | var self = this 223 | , oldImage = self.$wrap.find('img').addClass('deleteable') 224 | , evtOptions = { relatedTarget: self.$container[0] }; 225 | 226 | // Trigger the "before" event 227 | self.$container.trigger($.Event('backstretch.before', evtOptions), [self, newIndex]); 228 | 229 | // Set the new index 230 | this.index = newIndex; 231 | 232 | // Pause the slideshow 233 | clearInterval(self.interval); 234 | 235 | // New image 236 | self.$img = $('') 237 | .css(styles.img) 238 | .bind('load', function (e) { 239 | var imgWidth = this.width || $(e.target).width() 240 | , imgHeight = this.height || $(e.target).height(); 241 | 242 | // Save the ratio 243 | $(this).data('ratio', imgWidth / imgHeight); 244 | 245 | // Show the image, then delete the old one 246 | // "speed" option has been deprecated, but we want backwards compatibilty 247 | $(this).fadeIn(self.options.speed || self.options.fade, function () { 248 | oldImage.remove(); 249 | 250 | // Resume the slideshow 251 | if (!self.paused) { 252 | self.cycle(); 253 | } 254 | 255 | // Trigger the "after" and "show" events 256 | // "show" is being deprecated 257 | $(['after', 'show']).each(function () { 258 | self.$container.trigger($.Event('backstretch.' + this, evtOptions), [self, newIndex]); 259 | }); 260 | }); 261 | 262 | // Resize 263 | self.resize(); 264 | }) 265 | .appendTo(self.$wrap); 266 | 267 | // Hack for IE img onload event 268 | self.$img.attr('src', self.images[newIndex]); 269 | return self; 270 | } 271 | 272 | , next: function () { 273 | // Next slide 274 | return this.show(this.index < this.images.length - 1 ? this.index + 1 : 0); 275 | } 276 | 277 | , prev: function () { 278 | // Previous slide 279 | return this.show(this.index === 0 ? this.images.length - 1 : this.index - 1); 280 | } 281 | 282 | , pause: function () { 283 | // Pause the slideshow 284 | this.paused = true; 285 | return this; 286 | } 287 | 288 | , resume: function () { 289 | // Resume the slideshow 290 | this.paused = false; 291 | this.next(); 292 | return this; 293 | } 294 | 295 | , cycle: function () { 296 | // Start/resume the slideshow 297 | if(this.images.length > 1) { 298 | // Clear the interval, just in case 299 | clearInterval(this.interval); 300 | 301 | this.interval = setInterval($.proxy(function () { 302 | // Check for paused slideshow 303 | if (!this.paused) { 304 | this.next(); 305 | } 306 | }, this), this.options.duration); 307 | } 308 | return this; 309 | } 310 | 311 | , destroy: function (preserveBackground) { 312 | // Stop the resize events 313 | $(window).off('resize.backstretch orientationchange.backstretch'); 314 | 315 | // Clear the interval 316 | clearInterval(this.interval); 317 | 318 | // Remove Backstretch 319 | if(!preserveBackground) { 320 | this.$wrap.remove(); 321 | } 322 | this.$container.removeData('backstretch'); 323 | } 324 | }; 325 | 326 | /* SUPPORTS FIXED POSITION? 327 | * 328 | * Based on code from jQuery Mobile 1.1.0 329 | * http://jquerymobile.com/ 330 | * 331 | * In a nutshell, we need to figure out if fixed positioning is supported. 332 | * Unfortunately, this is very difficult to do on iOS, and usually involves 333 | * injecting content, scrolling the page, etc.. It's ugly. 334 | * jQuery Mobile uses this workaround. It's not ideal, but works. 335 | * 336 | * Modified to detect IE6 337 | * ========================= */ 338 | 339 | var supportsFixedPosition = (function () { 340 | var ua = navigator.userAgent 341 | , platform = navigator.platform 342 | // Rendering engine is Webkit, and capture major version 343 | , wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ) 344 | , wkversion = !!wkmatch && wkmatch[ 1 ] 345 | , ffmatch = ua.match( /Fennec\/([0-9]+)/ ) 346 | , ffversion = !!ffmatch && ffmatch[ 1 ] 347 | , operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ) 348 | , omversion = !!operammobilematch && operammobilematch[ 1 ] 349 | , iematch = ua.match( /MSIE ([0-9]+)/ ) 350 | , ieversion = !!iematch && iematch[ 1 ]; 351 | 352 | return !( 353 | // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5) 354 | ((platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534) || 355 | 356 | // Opera Mini 357 | (window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]") || 358 | (operammobilematch && omversion < 7458) || 359 | 360 | //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2) 361 | (ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533) || 362 | 363 | // Firefox Mobile before 6.0 - 364 | (ffversion && ffversion < 6) || 365 | 366 | // WebOS less than 3 367 | ("palmGetResource" in window && wkversion && wkversion < 534) || 368 | 369 | // MeeGo 370 | (ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1) || 371 | 372 | // IE6 373 | (ieversion && ieversion <= 6) 374 | ); 375 | }()); 376 | 377 | }(jQuery, window)); -------------------------------------------------------------------------------- /public/font-awesome/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | @fa-font-path: "../fonts"; 5 | @fa-font-size-base: 14px; 6 | @fa-line-height-base: 1; 7 | //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.4.0/fonts"; // for referencing Bootstrap CDN font files directly 8 | @fa-css-prefix: fa; 9 | @fa-version: "4.4.0"; 10 | @fa-border-color: #eee; 11 | @fa-inverse: #fff; 12 | @fa-li-width: (30em / 14); 13 | 14 | @fa-var-500px: "\f26e"; 15 | @fa-var-adjust: "\f042"; 16 | @fa-var-adn: "\f170"; 17 | @fa-var-align-center: "\f037"; 18 | @fa-var-align-justify: "\f039"; 19 | @fa-var-align-left: "\f036"; 20 | @fa-var-align-right: "\f038"; 21 | @fa-var-amazon: "\f270"; 22 | @fa-var-ambulance: "\f0f9"; 23 | @fa-var-anchor: "\f13d"; 24 | @fa-var-android: "\f17b"; 25 | @fa-var-angellist: "\f209"; 26 | @fa-var-angle-double-down: "\f103"; 27 | @fa-var-angle-double-left: "\f100"; 28 | @fa-var-angle-double-right: "\f101"; 29 | @fa-var-angle-double-up: "\f102"; 30 | @fa-var-angle-down: "\f107"; 31 | @fa-var-angle-left: "\f104"; 32 | @fa-var-angle-right: "\f105"; 33 | @fa-var-angle-up: "\f106"; 34 | @fa-var-apple: "\f179"; 35 | @fa-var-archive: "\f187"; 36 | @fa-var-area-chart: "\f1fe"; 37 | @fa-var-arrow-circle-down: "\f0ab"; 38 | @fa-var-arrow-circle-left: "\f0a8"; 39 | @fa-var-arrow-circle-o-down: "\f01a"; 40 | @fa-var-arrow-circle-o-left: "\f190"; 41 | @fa-var-arrow-circle-o-right: "\f18e"; 42 | @fa-var-arrow-circle-o-up: "\f01b"; 43 | @fa-var-arrow-circle-right: "\f0a9"; 44 | @fa-var-arrow-circle-up: "\f0aa"; 45 | @fa-var-arrow-down: "\f063"; 46 | @fa-var-arrow-left: "\f060"; 47 | @fa-var-arrow-right: "\f061"; 48 | @fa-var-arrow-up: "\f062"; 49 | @fa-var-arrows: "\f047"; 50 | @fa-var-arrows-alt: "\f0b2"; 51 | @fa-var-arrows-h: "\f07e"; 52 | @fa-var-arrows-v: "\f07d"; 53 | @fa-var-asterisk: "\f069"; 54 | @fa-var-at: "\f1fa"; 55 | @fa-var-automobile: "\f1b9"; 56 | @fa-var-backward: "\f04a"; 57 | @fa-var-balance-scale: "\f24e"; 58 | @fa-var-ban: "\f05e"; 59 | @fa-var-bank: "\f19c"; 60 | @fa-var-bar-chart: "\f080"; 61 | @fa-var-bar-chart-o: "\f080"; 62 | @fa-var-barcode: "\f02a"; 63 | @fa-var-bars: "\f0c9"; 64 | @fa-var-battery-0: "\f244"; 65 | @fa-var-battery-1: "\f243"; 66 | @fa-var-battery-2: "\f242"; 67 | @fa-var-battery-3: "\f241"; 68 | @fa-var-battery-4: "\f240"; 69 | @fa-var-battery-empty: "\f244"; 70 | @fa-var-battery-full: "\f240"; 71 | @fa-var-battery-half: "\f242"; 72 | @fa-var-battery-quarter: "\f243"; 73 | @fa-var-battery-three-quarters: "\f241"; 74 | @fa-var-bed: "\f236"; 75 | @fa-var-beer: "\f0fc"; 76 | @fa-var-behance: "\f1b4"; 77 | @fa-var-behance-square: "\f1b5"; 78 | @fa-var-bell: "\f0f3"; 79 | @fa-var-bell-o: "\f0a2"; 80 | @fa-var-bell-slash: "\f1f6"; 81 | @fa-var-bell-slash-o: "\f1f7"; 82 | @fa-var-bicycle: "\f206"; 83 | @fa-var-binoculars: "\f1e5"; 84 | @fa-var-birthday-cake: "\f1fd"; 85 | @fa-var-bitbucket: "\f171"; 86 | @fa-var-bitbucket-square: "\f172"; 87 | @fa-var-bitcoin: "\f15a"; 88 | @fa-var-black-tie: "\f27e"; 89 | @fa-var-bold: "\f032"; 90 | @fa-var-bolt: "\f0e7"; 91 | @fa-var-bomb: "\f1e2"; 92 | @fa-var-book: "\f02d"; 93 | @fa-var-bookmark: "\f02e"; 94 | @fa-var-bookmark-o: "\f097"; 95 | @fa-var-briefcase: "\f0b1"; 96 | @fa-var-btc: "\f15a"; 97 | @fa-var-bug: "\f188"; 98 | @fa-var-building: "\f1ad"; 99 | @fa-var-building-o: "\f0f7"; 100 | @fa-var-bullhorn: "\f0a1"; 101 | @fa-var-bullseye: "\f140"; 102 | @fa-var-bus: "\f207"; 103 | @fa-var-buysellads: "\f20d"; 104 | @fa-var-cab: "\f1ba"; 105 | @fa-var-calculator: "\f1ec"; 106 | @fa-var-calendar: "\f073"; 107 | @fa-var-calendar-check-o: "\f274"; 108 | @fa-var-calendar-minus-o: "\f272"; 109 | @fa-var-calendar-o: "\f133"; 110 | @fa-var-calendar-plus-o: "\f271"; 111 | @fa-var-calendar-times-o: "\f273"; 112 | @fa-var-camera: "\f030"; 113 | @fa-var-camera-retro: "\f083"; 114 | @fa-var-car: "\f1b9"; 115 | @fa-var-caret-down: "\f0d7"; 116 | @fa-var-caret-left: "\f0d9"; 117 | @fa-var-caret-right: "\f0da"; 118 | @fa-var-caret-square-o-down: "\f150"; 119 | @fa-var-caret-square-o-left: "\f191"; 120 | @fa-var-caret-square-o-right: "\f152"; 121 | @fa-var-caret-square-o-up: "\f151"; 122 | @fa-var-caret-up: "\f0d8"; 123 | @fa-var-cart-arrow-down: "\f218"; 124 | @fa-var-cart-plus: "\f217"; 125 | @fa-var-cc: "\f20a"; 126 | @fa-var-cc-amex: "\f1f3"; 127 | @fa-var-cc-diners-club: "\f24c"; 128 | @fa-var-cc-discover: "\f1f2"; 129 | @fa-var-cc-jcb: "\f24b"; 130 | @fa-var-cc-mastercard: "\f1f1"; 131 | @fa-var-cc-paypal: "\f1f4"; 132 | @fa-var-cc-stripe: "\f1f5"; 133 | @fa-var-cc-visa: "\f1f0"; 134 | @fa-var-certificate: "\f0a3"; 135 | @fa-var-chain: "\f0c1"; 136 | @fa-var-chain-broken: "\f127"; 137 | @fa-var-check: "\f00c"; 138 | @fa-var-check-circle: "\f058"; 139 | @fa-var-check-circle-o: "\f05d"; 140 | @fa-var-check-square: "\f14a"; 141 | @fa-var-check-square-o: "\f046"; 142 | @fa-var-chevron-circle-down: "\f13a"; 143 | @fa-var-chevron-circle-left: "\f137"; 144 | @fa-var-chevron-circle-right: "\f138"; 145 | @fa-var-chevron-circle-up: "\f139"; 146 | @fa-var-chevron-down: "\f078"; 147 | @fa-var-chevron-left: "\f053"; 148 | @fa-var-chevron-right: "\f054"; 149 | @fa-var-chevron-up: "\f077"; 150 | @fa-var-child: "\f1ae"; 151 | @fa-var-chrome: "\f268"; 152 | @fa-var-circle: "\f111"; 153 | @fa-var-circle-o: "\f10c"; 154 | @fa-var-circle-o-notch: "\f1ce"; 155 | @fa-var-circle-thin: "\f1db"; 156 | @fa-var-clipboard: "\f0ea"; 157 | @fa-var-clock-o: "\f017"; 158 | @fa-var-clone: "\f24d"; 159 | @fa-var-close: "\f00d"; 160 | @fa-var-cloud: "\f0c2"; 161 | @fa-var-cloud-download: "\f0ed"; 162 | @fa-var-cloud-upload: "\f0ee"; 163 | @fa-var-cny: "\f157"; 164 | @fa-var-code: "\f121"; 165 | @fa-var-code-fork: "\f126"; 166 | @fa-var-codepen: "\f1cb"; 167 | @fa-var-coffee: "\f0f4"; 168 | @fa-var-cog: "\f013"; 169 | @fa-var-cogs: "\f085"; 170 | @fa-var-columns: "\f0db"; 171 | @fa-var-comment: "\f075"; 172 | @fa-var-comment-o: "\f0e5"; 173 | @fa-var-commenting: "\f27a"; 174 | @fa-var-commenting-o: "\f27b"; 175 | @fa-var-comments: "\f086"; 176 | @fa-var-comments-o: "\f0e6"; 177 | @fa-var-compass: "\f14e"; 178 | @fa-var-compress: "\f066"; 179 | @fa-var-connectdevelop: "\f20e"; 180 | @fa-var-contao: "\f26d"; 181 | @fa-var-copy: "\f0c5"; 182 | @fa-var-copyright: "\f1f9"; 183 | @fa-var-creative-commons: "\f25e"; 184 | @fa-var-credit-card: "\f09d"; 185 | @fa-var-crop: "\f125"; 186 | @fa-var-crosshairs: "\f05b"; 187 | @fa-var-css3: "\f13c"; 188 | @fa-var-cube: "\f1b2"; 189 | @fa-var-cubes: "\f1b3"; 190 | @fa-var-cut: "\f0c4"; 191 | @fa-var-cutlery: "\f0f5"; 192 | @fa-var-dashboard: "\f0e4"; 193 | @fa-var-dashcube: "\f210"; 194 | @fa-var-database: "\f1c0"; 195 | @fa-var-dedent: "\f03b"; 196 | @fa-var-delicious: "\f1a5"; 197 | @fa-var-desktop: "\f108"; 198 | @fa-var-deviantart: "\f1bd"; 199 | @fa-var-diamond: "\f219"; 200 | @fa-var-digg: "\f1a6"; 201 | @fa-var-dollar: "\f155"; 202 | @fa-var-dot-circle-o: "\f192"; 203 | @fa-var-download: "\f019"; 204 | @fa-var-dribbble: "\f17d"; 205 | @fa-var-dropbox: "\f16b"; 206 | @fa-var-drupal: "\f1a9"; 207 | @fa-var-edit: "\f044"; 208 | @fa-var-eject: "\f052"; 209 | @fa-var-ellipsis-h: "\f141"; 210 | @fa-var-ellipsis-v: "\f142"; 211 | @fa-var-empire: "\f1d1"; 212 | @fa-var-envelope: "\f0e0"; 213 | @fa-var-envelope-o: "\f003"; 214 | @fa-var-envelope-square: "\f199"; 215 | @fa-var-eraser: "\f12d"; 216 | @fa-var-eur: "\f153"; 217 | @fa-var-euro: "\f153"; 218 | @fa-var-exchange: "\f0ec"; 219 | @fa-var-exclamation: "\f12a"; 220 | @fa-var-exclamation-circle: "\f06a"; 221 | @fa-var-exclamation-triangle: "\f071"; 222 | @fa-var-expand: "\f065"; 223 | @fa-var-expeditedssl: "\f23e"; 224 | @fa-var-external-link: "\f08e"; 225 | @fa-var-external-link-square: "\f14c"; 226 | @fa-var-eye: "\f06e"; 227 | @fa-var-eye-slash: "\f070"; 228 | @fa-var-eyedropper: "\f1fb"; 229 | @fa-var-facebook: "\f09a"; 230 | @fa-var-facebook-f: "\f09a"; 231 | @fa-var-facebook-official: "\f230"; 232 | @fa-var-facebook-square: "\f082"; 233 | @fa-var-fast-backward: "\f049"; 234 | @fa-var-fast-forward: "\f050"; 235 | @fa-var-fax: "\f1ac"; 236 | @fa-var-feed: "\f09e"; 237 | @fa-var-female: "\f182"; 238 | @fa-var-fighter-jet: "\f0fb"; 239 | @fa-var-file: "\f15b"; 240 | @fa-var-file-archive-o: "\f1c6"; 241 | @fa-var-file-audio-o: "\f1c7"; 242 | @fa-var-file-code-o: "\f1c9"; 243 | @fa-var-file-excel-o: "\f1c3"; 244 | @fa-var-file-image-o: "\f1c5"; 245 | @fa-var-file-movie-o: "\f1c8"; 246 | @fa-var-file-o: "\f016"; 247 | @fa-var-file-pdf-o: "\f1c1"; 248 | @fa-var-file-photo-o: "\f1c5"; 249 | @fa-var-file-picture-o: "\f1c5"; 250 | @fa-var-file-powerpoint-o: "\f1c4"; 251 | @fa-var-file-sound-o: "\f1c7"; 252 | @fa-var-file-text: "\f15c"; 253 | @fa-var-file-text-o: "\f0f6"; 254 | @fa-var-file-video-o: "\f1c8"; 255 | @fa-var-file-word-o: "\f1c2"; 256 | @fa-var-file-zip-o: "\f1c6"; 257 | @fa-var-files-o: "\f0c5"; 258 | @fa-var-film: "\f008"; 259 | @fa-var-filter: "\f0b0"; 260 | @fa-var-fire: "\f06d"; 261 | @fa-var-fire-extinguisher: "\f134"; 262 | @fa-var-firefox: "\f269"; 263 | @fa-var-flag: "\f024"; 264 | @fa-var-flag-checkered: "\f11e"; 265 | @fa-var-flag-o: "\f11d"; 266 | @fa-var-flash: "\f0e7"; 267 | @fa-var-flask: "\f0c3"; 268 | @fa-var-flickr: "\f16e"; 269 | @fa-var-floppy-o: "\f0c7"; 270 | @fa-var-folder: "\f07b"; 271 | @fa-var-folder-o: "\f114"; 272 | @fa-var-folder-open: "\f07c"; 273 | @fa-var-folder-open-o: "\f115"; 274 | @fa-var-font: "\f031"; 275 | @fa-var-fonticons: "\f280"; 276 | @fa-var-forumbee: "\f211"; 277 | @fa-var-forward: "\f04e"; 278 | @fa-var-foursquare: "\f180"; 279 | @fa-var-frown-o: "\f119"; 280 | @fa-var-futbol-o: "\f1e3"; 281 | @fa-var-gamepad: "\f11b"; 282 | @fa-var-gavel: "\f0e3"; 283 | @fa-var-gbp: "\f154"; 284 | @fa-var-ge: "\f1d1"; 285 | @fa-var-gear: "\f013"; 286 | @fa-var-gears: "\f085"; 287 | @fa-var-genderless: "\f22d"; 288 | @fa-var-get-pocket: "\f265"; 289 | @fa-var-gg: "\f260"; 290 | @fa-var-gg-circle: "\f261"; 291 | @fa-var-gift: "\f06b"; 292 | @fa-var-git: "\f1d3"; 293 | @fa-var-git-square: "\f1d2"; 294 | @fa-var-github: "\f09b"; 295 | @fa-var-github-alt: "\f113"; 296 | @fa-var-github-square: "\f092"; 297 | @fa-var-gittip: "\f184"; 298 | @fa-var-glass: "\f000"; 299 | @fa-var-globe: "\f0ac"; 300 | @fa-var-google: "\f1a0"; 301 | @fa-var-google-plus: "\f0d5"; 302 | @fa-var-google-plus-square: "\f0d4"; 303 | @fa-var-google-wallet: "\f1ee"; 304 | @fa-var-graduation-cap: "\f19d"; 305 | @fa-var-gratipay: "\f184"; 306 | @fa-var-group: "\f0c0"; 307 | @fa-var-h-square: "\f0fd"; 308 | @fa-var-hacker-news: "\f1d4"; 309 | @fa-var-hand-grab-o: "\f255"; 310 | @fa-var-hand-lizard-o: "\f258"; 311 | @fa-var-hand-o-down: "\f0a7"; 312 | @fa-var-hand-o-left: "\f0a5"; 313 | @fa-var-hand-o-right: "\f0a4"; 314 | @fa-var-hand-o-up: "\f0a6"; 315 | @fa-var-hand-paper-o: "\f256"; 316 | @fa-var-hand-peace-o: "\f25b"; 317 | @fa-var-hand-pointer-o: "\f25a"; 318 | @fa-var-hand-rock-o: "\f255"; 319 | @fa-var-hand-scissors-o: "\f257"; 320 | @fa-var-hand-spock-o: "\f259"; 321 | @fa-var-hand-stop-o: "\f256"; 322 | @fa-var-hdd-o: "\f0a0"; 323 | @fa-var-header: "\f1dc"; 324 | @fa-var-headphones: "\f025"; 325 | @fa-var-heart: "\f004"; 326 | @fa-var-heart-o: "\f08a"; 327 | @fa-var-heartbeat: "\f21e"; 328 | @fa-var-history: "\f1da"; 329 | @fa-var-home: "\f015"; 330 | @fa-var-hospital-o: "\f0f8"; 331 | @fa-var-hotel: "\f236"; 332 | @fa-var-hourglass: "\f254"; 333 | @fa-var-hourglass-1: "\f251"; 334 | @fa-var-hourglass-2: "\f252"; 335 | @fa-var-hourglass-3: "\f253"; 336 | @fa-var-hourglass-end: "\f253"; 337 | @fa-var-hourglass-half: "\f252"; 338 | @fa-var-hourglass-o: "\f250"; 339 | @fa-var-hourglass-start: "\f251"; 340 | @fa-var-houzz: "\f27c"; 341 | @fa-var-html5: "\f13b"; 342 | @fa-var-i-cursor: "\f246"; 343 | @fa-var-ils: "\f20b"; 344 | @fa-var-image: "\f03e"; 345 | @fa-var-inbox: "\f01c"; 346 | @fa-var-indent: "\f03c"; 347 | @fa-var-industry: "\f275"; 348 | @fa-var-info: "\f129"; 349 | @fa-var-info-circle: "\f05a"; 350 | @fa-var-inr: "\f156"; 351 | @fa-var-instagram: "\f16d"; 352 | @fa-var-institution: "\f19c"; 353 | @fa-var-internet-explorer: "\f26b"; 354 | @fa-var-intersex: "\f224"; 355 | @fa-var-ioxhost: "\f208"; 356 | @fa-var-italic: "\f033"; 357 | @fa-var-joomla: "\f1aa"; 358 | @fa-var-jpy: "\f157"; 359 | @fa-var-jsfiddle: "\f1cc"; 360 | @fa-var-key: "\f084"; 361 | @fa-var-keyboard-o: "\f11c"; 362 | @fa-var-krw: "\f159"; 363 | @fa-var-language: "\f1ab"; 364 | @fa-var-laptop: "\f109"; 365 | @fa-var-lastfm: "\f202"; 366 | @fa-var-lastfm-square: "\f203"; 367 | @fa-var-leaf: "\f06c"; 368 | @fa-var-leanpub: "\f212"; 369 | @fa-var-legal: "\f0e3"; 370 | @fa-var-lemon-o: "\f094"; 371 | @fa-var-level-down: "\f149"; 372 | @fa-var-level-up: "\f148"; 373 | @fa-var-life-bouy: "\f1cd"; 374 | @fa-var-life-buoy: "\f1cd"; 375 | @fa-var-life-ring: "\f1cd"; 376 | @fa-var-life-saver: "\f1cd"; 377 | @fa-var-lightbulb-o: "\f0eb"; 378 | @fa-var-line-chart: "\f201"; 379 | @fa-var-link: "\f0c1"; 380 | @fa-var-linkedin: "\f0e1"; 381 | @fa-var-linkedin-square: "\f08c"; 382 | @fa-var-linux: "\f17c"; 383 | @fa-var-list: "\f03a"; 384 | @fa-var-list-alt: "\f022"; 385 | @fa-var-list-ol: "\f0cb"; 386 | @fa-var-list-ul: "\f0ca"; 387 | @fa-var-location-arrow: "\f124"; 388 | @fa-var-lock: "\f023"; 389 | @fa-var-long-arrow-down: "\f175"; 390 | @fa-var-long-arrow-left: "\f177"; 391 | @fa-var-long-arrow-right: "\f178"; 392 | @fa-var-long-arrow-up: "\f176"; 393 | @fa-var-magic: "\f0d0"; 394 | @fa-var-magnet: "\f076"; 395 | @fa-var-mail-forward: "\f064"; 396 | @fa-var-mail-reply: "\f112"; 397 | @fa-var-mail-reply-all: "\f122"; 398 | @fa-var-male: "\f183"; 399 | @fa-var-map: "\f279"; 400 | @fa-var-map-marker: "\f041"; 401 | @fa-var-map-o: "\f278"; 402 | @fa-var-map-pin: "\f276"; 403 | @fa-var-map-signs: "\f277"; 404 | @fa-var-mars: "\f222"; 405 | @fa-var-mars-double: "\f227"; 406 | @fa-var-mars-stroke: "\f229"; 407 | @fa-var-mars-stroke-h: "\f22b"; 408 | @fa-var-mars-stroke-v: "\f22a"; 409 | @fa-var-maxcdn: "\f136"; 410 | @fa-var-meanpath: "\f20c"; 411 | @fa-var-medium: "\f23a"; 412 | @fa-var-medkit: "\f0fa"; 413 | @fa-var-meh-o: "\f11a"; 414 | @fa-var-mercury: "\f223"; 415 | @fa-var-microphone: "\f130"; 416 | @fa-var-microphone-slash: "\f131"; 417 | @fa-var-minus: "\f068"; 418 | @fa-var-minus-circle: "\f056"; 419 | @fa-var-minus-square: "\f146"; 420 | @fa-var-minus-square-o: "\f147"; 421 | @fa-var-mobile: "\f10b"; 422 | @fa-var-mobile-phone: "\f10b"; 423 | @fa-var-money: "\f0d6"; 424 | @fa-var-moon-o: "\f186"; 425 | @fa-var-mortar-board: "\f19d"; 426 | @fa-var-motorcycle: "\f21c"; 427 | @fa-var-mouse-pointer: "\f245"; 428 | @fa-var-music: "\f001"; 429 | @fa-var-navicon: "\f0c9"; 430 | @fa-var-neuter: "\f22c"; 431 | @fa-var-newspaper-o: "\f1ea"; 432 | @fa-var-object-group: "\f247"; 433 | @fa-var-object-ungroup: "\f248"; 434 | @fa-var-odnoklassniki: "\f263"; 435 | @fa-var-odnoklassniki-square: "\f264"; 436 | @fa-var-opencart: "\f23d"; 437 | @fa-var-openid: "\f19b"; 438 | @fa-var-opera: "\f26a"; 439 | @fa-var-optin-monster: "\f23c"; 440 | @fa-var-outdent: "\f03b"; 441 | @fa-var-pagelines: "\f18c"; 442 | @fa-var-paint-brush: "\f1fc"; 443 | @fa-var-paper-plane: "\f1d8"; 444 | @fa-var-paper-plane-o: "\f1d9"; 445 | @fa-var-paperclip: "\f0c6"; 446 | @fa-var-paragraph: "\f1dd"; 447 | @fa-var-paste: "\f0ea"; 448 | @fa-var-pause: "\f04c"; 449 | @fa-var-paw: "\f1b0"; 450 | @fa-var-paypal: "\f1ed"; 451 | @fa-var-pencil: "\f040"; 452 | @fa-var-pencil-square: "\f14b"; 453 | @fa-var-pencil-square-o: "\f044"; 454 | @fa-var-phone: "\f095"; 455 | @fa-var-phone-square: "\f098"; 456 | @fa-var-photo: "\f03e"; 457 | @fa-var-picture-o: "\f03e"; 458 | @fa-var-pie-chart: "\f200"; 459 | @fa-var-pied-piper: "\f1a7"; 460 | @fa-var-pied-piper-alt: "\f1a8"; 461 | @fa-var-pinterest: "\f0d2"; 462 | @fa-var-pinterest-p: "\f231"; 463 | @fa-var-pinterest-square: "\f0d3"; 464 | @fa-var-plane: "\f072"; 465 | @fa-var-play: "\f04b"; 466 | @fa-var-play-circle: "\f144"; 467 | @fa-var-play-circle-o: "\f01d"; 468 | @fa-var-plug: "\f1e6"; 469 | @fa-var-plus: "\f067"; 470 | @fa-var-plus-circle: "\f055"; 471 | @fa-var-plus-square: "\f0fe"; 472 | @fa-var-plus-square-o: "\f196"; 473 | @fa-var-power-off: "\f011"; 474 | @fa-var-print: "\f02f"; 475 | @fa-var-puzzle-piece: "\f12e"; 476 | @fa-var-qq: "\f1d6"; 477 | @fa-var-qrcode: "\f029"; 478 | @fa-var-question: "\f128"; 479 | @fa-var-question-circle: "\f059"; 480 | @fa-var-quote-left: "\f10d"; 481 | @fa-var-quote-right: "\f10e"; 482 | @fa-var-ra: "\f1d0"; 483 | @fa-var-random: "\f074"; 484 | @fa-var-rebel: "\f1d0"; 485 | @fa-var-recycle: "\f1b8"; 486 | @fa-var-reddit: "\f1a1"; 487 | @fa-var-reddit-square: "\f1a2"; 488 | @fa-var-refresh: "\f021"; 489 | @fa-var-registered: "\f25d"; 490 | @fa-var-remove: "\f00d"; 491 | @fa-var-renren: "\f18b"; 492 | @fa-var-reorder: "\f0c9"; 493 | @fa-var-repeat: "\f01e"; 494 | @fa-var-reply: "\f112"; 495 | @fa-var-reply-all: "\f122"; 496 | @fa-var-retweet: "\f079"; 497 | @fa-var-rmb: "\f157"; 498 | @fa-var-road: "\f018"; 499 | @fa-var-rocket: "\f135"; 500 | @fa-var-rotate-left: "\f0e2"; 501 | @fa-var-rotate-right: "\f01e"; 502 | @fa-var-rouble: "\f158"; 503 | @fa-var-rss: "\f09e"; 504 | @fa-var-rss-square: "\f143"; 505 | @fa-var-rub: "\f158"; 506 | @fa-var-ruble: "\f158"; 507 | @fa-var-rupee: "\f156"; 508 | @fa-var-safari: "\f267"; 509 | @fa-var-save: "\f0c7"; 510 | @fa-var-scissors: "\f0c4"; 511 | @fa-var-search: "\f002"; 512 | @fa-var-search-minus: "\f010"; 513 | @fa-var-search-plus: "\f00e"; 514 | @fa-var-sellsy: "\f213"; 515 | @fa-var-send: "\f1d8"; 516 | @fa-var-send-o: "\f1d9"; 517 | @fa-var-server: "\f233"; 518 | @fa-var-share: "\f064"; 519 | @fa-var-share-alt: "\f1e0"; 520 | @fa-var-share-alt-square: "\f1e1"; 521 | @fa-var-share-square: "\f14d"; 522 | @fa-var-share-square-o: "\f045"; 523 | @fa-var-shekel: "\f20b"; 524 | @fa-var-sheqel: "\f20b"; 525 | @fa-var-shield: "\f132"; 526 | @fa-var-ship: "\f21a"; 527 | @fa-var-shirtsinbulk: "\f214"; 528 | @fa-var-shopping-cart: "\f07a"; 529 | @fa-var-sign-in: "\f090"; 530 | @fa-var-sign-out: "\f08b"; 531 | @fa-var-signal: "\f012"; 532 | @fa-var-simplybuilt: "\f215"; 533 | @fa-var-sitemap: "\f0e8"; 534 | @fa-var-skyatlas: "\f216"; 535 | @fa-var-skype: "\f17e"; 536 | @fa-var-slack: "\f198"; 537 | @fa-var-sliders: "\f1de"; 538 | @fa-var-slideshare: "\f1e7"; 539 | @fa-var-smile-o: "\f118"; 540 | @fa-var-soccer-ball-o: "\f1e3"; 541 | @fa-var-sort: "\f0dc"; 542 | @fa-var-sort-alpha-asc: "\f15d"; 543 | @fa-var-sort-alpha-desc: "\f15e"; 544 | @fa-var-sort-amount-asc: "\f160"; 545 | @fa-var-sort-amount-desc: "\f161"; 546 | @fa-var-sort-asc: "\f0de"; 547 | @fa-var-sort-desc: "\f0dd"; 548 | @fa-var-sort-down: "\f0dd"; 549 | @fa-var-sort-numeric-asc: "\f162"; 550 | @fa-var-sort-numeric-desc: "\f163"; 551 | @fa-var-sort-up: "\f0de"; 552 | @fa-var-soundcloud: "\f1be"; 553 | @fa-var-space-shuttle: "\f197"; 554 | @fa-var-spinner: "\f110"; 555 | @fa-var-spoon: "\f1b1"; 556 | @fa-var-spotify: "\f1bc"; 557 | @fa-var-square: "\f0c8"; 558 | @fa-var-square-o: "\f096"; 559 | @fa-var-stack-exchange: "\f18d"; 560 | @fa-var-stack-overflow: "\f16c"; 561 | @fa-var-star: "\f005"; 562 | @fa-var-star-half: "\f089"; 563 | @fa-var-star-half-empty: "\f123"; 564 | @fa-var-star-half-full: "\f123"; 565 | @fa-var-star-half-o: "\f123"; 566 | @fa-var-star-o: "\f006"; 567 | @fa-var-steam: "\f1b6"; 568 | @fa-var-steam-square: "\f1b7"; 569 | @fa-var-step-backward: "\f048"; 570 | @fa-var-step-forward: "\f051"; 571 | @fa-var-stethoscope: "\f0f1"; 572 | @fa-var-sticky-note: "\f249"; 573 | @fa-var-sticky-note-o: "\f24a"; 574 | @fa-var-stop: "\f04d"; 575 | @fa-var-street-view: "\f21d"; 576 | @fa-var-strikethrough: "\f0cc"; 577 | @fa-var-stumbleupon: "\f1a4"; 578 | @fa-var-stumbleupon-circle: "\f1a3"; 579 | @fa-var-subscript: "\f12c"; 580 | @fa-var-subway: "\f239"; 581 | @fa-var-suitcase: "\f0f2"; 582 | @fa-var-sun-o: "\f185"; 583 | @fa-var-superscript: "\f12b"; 584 | @fa-var-support: "\f1cd"; 585 | @fa-var-table: "\f0ce"; 586 | @fa-var-tablet: "\f10a"; 587 | @fa-var-tachometer: "\f0e4"; 588 | @fa-var-tag: "\f02b"; 589 | @fa-var-tags: "\f02c"; 590 | @fa-var-tasks: "\f0ae"; 591 | @fa-var-taxi: "\f1ba"; 592 | @fa-var-television: "\f26c"; 593 | @fa-var-tencent-weibo: "\f1d5"; 594 | @fa-var-terminal: "\f120"; 595 | @fa-var-text-height: "\f034"; 596 | @fa-var-text-width: "\f035"; 597 | @fa-var-th: "\f00a"; 598 | @fa-var-th-large: "\f009"; 599 | @fa-var-th-list: "\f00b"; 600 | @fa-var-thumb-tack: "\f08d"; 601 | @fa-var-thumbs-down: "\f165"; 602 | @fa-var-thumbs-o-down: "\f088"; 603 | @fa-var-thumbs-o-up: "\f087"; 604 | @fa-var-thumbs-up: "\f164"; 605 | @fa-var-ticket: "\f145"; 606 | @fa-var-times: "\f00d"; 607 | @fa-var-times-circle: "\f057"; 608 | @fa-var-times-circle-o: "\f05c"; 609 | @fa-var-tint: "\f043"; 610 | @fa-var-toggle-down: "\f150"; 611 | @fa-var-toggle-left: "\f191"; 612 | @fa-var-toggle-off: "\f204"; 613 | @fa-var-toggle-on: "\f205"; 614 | @fa-var-toggle-right: "\f152"; 615 | @fa-var-toggle-up: "\f151"; 616 | @fa-var-trademark: "\f25c"; 617 | @fa-var-train: "\f238"; 618 | @fa-var-transgender: "\f224"; 619 | @fa-var-transgender-alt: "\f225"; 620 | @fa-var-trash: "\f1f8"; 621 | @fa-var-trash-o: "\f014"; 622 | @fa-var-tree: "\f1bb"; 623 | @fa-var-trello: "\f181"; 624 | @fa-var-tripadvisor: "\f262"; 625 | @fa-var-trophy: "\f091"; 626 | @fa-var-truck: "\f0d1"; 627 | @fa-var-try: "\f195"; 628 | @fa-var-tty: "\f1e4"; 629 | @fa-var-tumblr: "\f173"; 630 | @fa-var-tumblr-square: "\f174"; 631 | @fa-var-turkish-lira: "\f195"; 632 | @fa-var-tv: "\f26c"; 633 | @fa-var-twitch: "\f1e8"; 634 | @fa-var-twitter: "\f099"; 635 | @fa-var-twitter-square: "\f081"; 636 | @fa-var-umbrella: "\f0e9"; 637 | @fa-var-underline: "\f0cd"; 638 | @fa-var-undo: "\f0e2"; 639 | @fa-var-university: "\f19c"; 640 | @fa-var-unlink: "\f127"; 641 | @fa-var-unlock: "\f09c"; 642 | @fa-var-unlock-alt: "\f13e"; 643 | @fa-var-unsorted: "\f0dc"; 644 | @fa-var-upload: "\f093"; 645 | @fa-var-usd: "\f155"; 646 | @fa-var-user: "\f007"; 647 | @fa-var-user-md: "\f0f0"; 648 | @fa-var-user-plus: "\f234"; 649 | @fa-var-user-secret: "\f21b"; 650 | @fa-var-user-times: "\f235"; 651 | @fa-var-users: "\f0c0"; 652 | @fa-var-venus: "\f221"; 653 | @fa-var-venus-double: "\f226"; 654 | @fa-var-venus-mars: "\f228"; 655 | @fa-var-viacoin: "\f237"; 656 | @fa-var-video-camera: "\f03d"; 657 | @fa-var-vimeo: "\f27d"; 658 | @fa-var-vimeo-square: "\f194"; 659 | @fa-var-vine: "\f1ca"; 660 | @fa-var-vk: "\f189"; 661 | @fa-var-volume-down: "\f027"; 662 | @fa-var-volume-off: "\f026"; 663 | @fa-var-volume-up: "\f028"; 664 | @fa-var-warning: "\f071"; 665 | @fa-var-wechat: "\f1d7"; 666 | @fa-var-weibo: "\f18a"; 667 | @fa-var-weixin: "\f1d7"; 668 | @fa-var-whatsapp: "\f232"; 669 | @fa-var-wheelchair: "\f193"; 670 | @fa-var-wifi: "\f1eb"; 671 | @fa-var-wikipedia-w: "\f266"; 672 | @fa-var-windows: "\f17a"; 673 | @fa-var-won: "\f159"; 674 | @fa-var-wordpress: "\f19a"; 675 | @fa-var-wrench: "\f0ad"; 676 | @fa-var-xing: "\f168"; 677 | @fa-var-xing-square: "\f169"; 678 | @fa-var-y-combinator: "\f23b"; 679 | @fa-var-y-combinator-square: "\f1d4"; 680 | @fa-var-yahoo: "\f19e"; 681 | @fa-var-yc: "\f23b"; 682 | @fa-var-yc-square: "\f1d4"; 683 | @fa-var-yelp: "\f1e9"; 684 | @fa-var-yen: "\f157"; 685 | @fa-var-youtube: "\f167"; 686 | @fa-var-youtube-play: "\f16a"; 687 | @fa-var-youtube-square: "\f166"; 688 | 689 | -------------------------------------------------------------------------------- /public/stylesheets/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.5 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.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.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.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.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.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.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.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.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.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.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.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.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /public/font-awesome/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../fonts" !default; 5 | $fa-font-size-base: 14px !default; 6 | $fa-line-height-base: 1 !default; 7 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.4.0/fonts" !default; // for referencing Bootstrap CDN font files directly 8 | $fa-css-prefix: fa !default; 9 | $fa-version: "4.4.0" !default; 10 | $fa-border-color: #eee !default; 11 | $fa-inverse: #fff !default; 12 | $fa-li-width: (30em / 14) !default; 13 | 14 | $fa-var-500px: "\f26e"; 15 | $fa-var-adjust: "\f042"; 16 | $fa-var-adn: "\f170"; 17 | $fa-var-align-center: "\f037"; 18 | $fa-var-align-justify: "\f039"; 19 | $fa-var-align-left: "\f036"; 20 | $fa-var-align-right: "\f038"; 21 | $fa-var-amazon: "\f270"; 22 | $fa-var-ambulance: "\f0f9"; 23 | $fa-var-anchor: "\f13d"; 24 | $fa-var-android: "\f17b"; 25 | $fa-var-angellist: "\f209"; 26 | $fa-var-angle-double-down: "\f103"; 27 | $fa-var-angle-double-left: "\f100"; 28 | $fa-var-angle-double-right: "\f101"; 29 | $fa-var-angle-double-up: "\f102"; 30 | $fa-var-angle-down: "\f107"; 31 | $fa-var-angle-left: "\f104"; 32 | $fa-var-angle-right: "\f105"; 33 | $fa-var-angle-up: "\f106"; 34 | $fa-var-apple: "\f179"; 35 | $fa-var-archive: "\f187"; 36 | $fa-var-area-chart: "\f1fe"; 37 | $fa-var-arrow-circle-down: "\f0ab"; 38 | $fa-var-arrow-circle-left: "\f0a8"; 39 | $fa-var-arrow-circle-o-down: "\f01a"; 40 | $fa-var-arrow-circle-o-left: "\f190"; 41 | $fa-var-arrow-circle-o-right: "\f18e"; 42 | $fa-var-arrow-circle-o-up: "\f01b"; 43 | $fa-var-arrow-circle-right: "\f0a9"; 44 | $fa-var-arrow-circle-up: "\f0aa"; 45 | $fa-var-arrow-down: "\f063"; 46 | $fa-var-arrow-left: "\f060"; 47 | $fa-var-arrow-right: "\f061"; 48 | $fa-var-arrow-up: "\f062"; 49 | $fa-var-arrows: "\f047"; 50 | $fa-var-arrows-alt: "\f0b2"; 51 | $fa-var-arrows-h: "\f07e"; 52 | $fa-var-arrows-v: "\f07d"; 53 | $fa-var-asterisk: "\f069"; 54 | $fa-var-at: "\f1fa"; 55 | $fa-var-automobile: "\f1b9"; 56 | $fa-var-backward: "\f04a"; 57 | $fa-var-balance-scale: "\f24e"; 58 | $fa-var-ban: "\f05e"; 59 | $fa-var-bank: "\f19c"; 60 | $fa-var-bar-chart: "\f080"; 61 | $fa-var-bar-chart-o: "\f080"; 62 | $fa-var-barcode: "\f02a"; 63 | $fa-var-bars: "\f0c9"; 64 | $fa-var-battery-0: "\f244"; 65 | $fa-var-battery-1: "\f243"; 66 | $fa-var-battery-2: "\f242"; 67 | $fa-var-battery-3: "\f241"; 68 | $fa-var-battery-4: "\f240"; 69 | $fa-var-battery-empty: "\f244"; 70 | $fa-var-battery-full: "\f240"; 71 | $fa-var-battery-half: "\f242"; 72 | $fa-var-battery-quarter: "\f243"; 73 | $fa-var-battery-three-quarters: "\f241"; 74 | $fa-var-bed: "\f236"; 75 | $fa-var-beer: "\f0fc"; 76 | $fa-var-behance: "\f1b4"; 77 | $fa-var-behance-square: "\f1b5"; 78 | $fa-var-bell: "\f0f3"; 79 | $fa-var-bell-o: "\f0a2"; 80 | $fa-var-bell-slash: "\f1f6"; 81 | $fa-var-bell-slash-o: "\f1f7"; 82 | $fa-var-bicycle: "\f206"; 83 | $fa-var-binoculars: "\f1e5"; 84 | $fa-var-birthday-cake: "\f1fd"; 85 | $fa-var-bitbucket: "\f171"; 86 | $fa-var-bitbucket-square: "\f172"; 87 | $fa-var-bitcoin: "\f15a"; 88 | $fa-var-black-tie: "\f27e"; 89 | $fa-var-bold: "\f032"; 90 | $fa-var-bolt: "\f0e7"; 91 | $fa-var-bomb: "\f1e2"; 92 | $fa-var-book: "\f02d"; 93 | $fa-var-bookmark: "\f02e"; 94 | $fa-var-bookmark-o: "\f097"; 95 | $fa-var-briefcase: "\f0b1"; 96 | $fa-var-btc: "\f15a"; 97 | $fa-var-bug: "\f188"; 98 | $fa-var-building: "\f1ad"; 99 | $fa-var-building-o: "\f0f7"; 100 | $fa-var-bullhorn: "\f0a1"; 101 | $fa-var-bullseye: "\f140"; 102 | $fa-var-bus: "\f207"; 103 | $fa-var-buysellads: "\f20d"; 104 | $fa-var-cab: "\f1ba"; 105 | $fa-var-calculator: "\f1ec"; 106 | $fa-var-calendar: "\f073"; 107 | $fa-var-calendar-check-o: "\f274"; 108 | $fa-var-calendar-minus-o: "\f272"; 109 | $fa-var-calendar-o: "\f133"; 110 | $fa-var-calendar-plus-o: "\f271"; 111 | $fa-var-calendar-times-o: "\f273"; 112 | $fa-var-camera: "\f030"; 113 | $fa-var-camera-retro: "\f083"; 114 | $fa-var-car: "\f1b9"; 115 | $fa-var-caret-down: "\f0d7"; 116 | $fa-var-caret-left: "\f0d9"; 117 | $fa-var-caret-right: "\f0da"; 118 | $fa-var-caret-square-o-down: "\f150"; 119 | $fa-var-caret-square-o-left: "\f191"; 120 | $fa-var-caret-square-o-right: "\f152"; 121 | $fa-var-caret-square-o-up: "\f151"; 122 | $fa-var-caret-up: "\f0d8"; 123 | $fa-var-cart-arrow-down: "\f218"; 124 | $fa-var-cart-plus: "\f217"; 125 | $fa-var-cc: "\f20a"; 126 | $fa-var-cc-amex: "\f1f3"; 127 | $fa-var-cc-diners-club: "\f24c"; 128 | $fa-var-cc-discover: "\f1f2"; 129 | $fa-var-cc-jcb: "\f24b"; 130 | $fa-var-cc-mastercard: "\f1f1"; 131 | $fa-var-cc-paypal: "\f1f4"; 132 | $fa-var-cc-stripe: "\f1f5"; 133 | $fa-var-cc-visa: "\f1f0"; 134 | $fa-var-certificate: "\f0a3"; 135 | $fa-var-chain: "\f0c1"; 136 | $fa-var-chain-broken: "\f127"; 137 | $fa-var-check: "\f00c"; 138 | $fa-var-check-circle: "\f058"; 139 | $fa-var-check-circle-o: "\f05d"; 140 | $fa-var-check-square: "\f14a"; 141 | $fa-var-check-square-o: "\f046"; 142 | $fa-var-chevron-circle-down: "\f13a"; 143 | $fa-var-chevron-circle-left: "\f137"; 144 | $fa-var-chevron-circle-right: "\f138"; 145 | $fa-var-chevron-circle-up: "\f139"; 146 | $fa-var-chevron-down: "\f078"; 147 | $fa-var-chevron-left: "\f053"; 148 | $fa-var-chevron-right: "\f054"; 149 | $fa-var-chevron-up: "\f077"; 150 | $fa-var-child: "\f1ae"; 151 | $fa-var-chrome: "\f268"; 152 | $fa-var-circle: "\f111"; 153 | $fa-var-circle-o: "\f10c"; 154 | $fa-var-circle-o-notch: "\f1ce"; 155 | $fa-var-circle-thin: "\f1db"; 156 | $fa-var-clipboard: "\f0ea"; 157 | $fa-var-clock-o: "\f017"; 158 | $fa-var-clone: "\f24d"; 159 | $fa-var-close: "\f00d"; 160 | $fa-var-cloud: "\f0c2"; 161 | $fa-var-cloud-download: "\f0ed"; 162 | $fa-var-cloud-upload: "\f0ee"; 163 | $fa-var-cny: "\f157"; 164 | $fa-var-code: "\f121"; 165 | $fa-var-code-fork: "\f126"; 166 | $fa-var-codepen: "\f1cb"; 167 | $fa-var-coffee: "\f0f4"; 168 | $fa-var-cog: "\f013"; 169 | $fa-var-cogs: "\f085"; 170 | $fa-var-columns: "\f0db"; 171 | $fa-var-comment: "\f075"; 172 | $fa-var-comment-o: "\f0e5"; 173 | $fa-var-commenting: "\f27a"; 174 | $fa-var-commenting-o: "\f27b"; 175 | $fa-var-comments: "\f086"; 176 | $fa-var-comments-o: "\f0e6"; 177 | $fa-var-compass: "\f14e"; 178 | $fa-var-compress: "\f066"; 179 | $fa-var-connectdevelop: "\f20e"; 180 | $fa-var-contao: "\f26d"; 181 | $fa-var-copy: "\f0c5"; 182 | $fa-var-copyright: "\f1f9"; 183 | $fa-var-creative-commons: "\f25e"; 184 | $fa-var-credit-card: "\f09d"; 185 | $fa-var-crop: "\f125"; 186 | $fa-var-crosshairs: "\f05b"; 187 | $fa-var-css3: "\f13c"; 188 | $fa-var-cube: "\f1b2"; 189 | $fa-var-cubes: "\f1b3"; 190 | $fa-var-cut: "\f0c4"; 191 | $fa-var-cutlery: "\f0f5"; 192 | $fa-var-dashboard: "\f0e4"; 193 | $fa-var-dashcube: "\f210"; 194 | $fa-var-database: "\f1c0"; 195 | $fa-var-dedent: "\f03b"; 196 | $fa-var-delicious: "\f1a5"; 197 | $fa-var-desktop: "\f108"; 198 | $fa-var-deviantart: "\f1bd"; 199 | $fa-var-diamond: "\f219"; 200 | $fa-var-digg: "\f1a6"; 201 | $fa-var-dollar: "\f155"; 202 | $fa-var-dot-circle-o: "\f192"; 203 | $fa-var-download: "\f019"; 204 | $fa-var-dribbble: "\f17d"; 205 | $fa-var-dropbox: "\f16b"; 206 | $fa-var-drupal: "\f1a9"; 207 | $fa-var-edit: "\f044"; 208 | $fa-var-eject: "\f052"; 209 | $fa-var-ellipsis-h: "\f141"; 210 | $fa-var-ellipsis-v: "\f142"; 211 | $fa-var-empire: "\f1d1"; 212 | $fa-var-envelope: "\f0e0"; 213 | $fa-var-envelope-o: "\f003"; 214 | $fa-var-envelope-square: "\f199"; 215 | $fa-var-eraser: "\f12d"; 216 | $fa-var-eur: "\f153"; 217 | $fa-var-euro: "\f153"; 218 | $fa-var-exchange: "\f0ec"; 219 | $fa-var-exclamation: "\f12a"; 220 | $fa-var-exclamation-circle: "\f06a"; 221 | $fa-var-exclamation-triangle: "\f071"; 222 | $fa-var-expand: "\f065"; 223 | $fa-var-expeditedssl: "\f23e"; 224 | $fa-var-external-link: "\f08e"; 225 | $fa-var-external-link-square: "\f14c"; 226 | $fa-var-eye: "\f06e"; 227 | $fa-var-eye-slash: "\f070"; 228 | $fa-var-eyedropper: "\f1fb"; 229 | $fa-var-facebook: "\f09a"; 230 | $fa-var-facebook-f: "\f09a"; 231 | $fa-var-facebook-official: "\f230"; 232 | $fa-var-facebook-square: "\f082"; 233 | $fa-var-fast-backward: "\f049"; 234 | $fa-var-fast-forward: "\f050"; 235 | $fa-var-fax: "\f1ac"; 236 | $fa-var-feed: "\f09e"; 237 | $fa-var-female: "\f182"; 238 | $fa-var-fighter-jet: "\f0fb"; 239 | $fa-var-file: "\f15b"; 240 | $fa-var-file-archive-o: "\f1c6"; 241 | $fa-var-file-audio-o: "\f1c7"; 242 | $fa-var-file-code-o: "\f1c9"; 243 | $fa-var-file-excel-o: "\f1c3"; 244 | $fa-var-file-image-o: "\f1c5"; 245 | $fa-var-file-movie-o: "\f1c8"; 246 | $fa-var-file-o: "\f016"; 247 | $fa-var-file-pdf-o: "\f1c1"; 248 | $fa-var-file-photo-o: "\f1c5"; 249 | $fa-var-file-picture-o: "\f1c5"; 250 | $fa-var-file-powerpoint-o: "\f1c4"; 251 | $fa-var-file-sound-o: "\f1c7"; 252 | $fa-var-file-text: "\f15c"; 253 | $fa-var-file-text-o: "\f0f6"; 254 | $fa-var-file-video-o: "\f1c8"; 255 | $fa-var-file-word-o: "\f1c2"; 256 | $fa-var-file-zip-o: "\f1c6"; 257 | $fa-var-files-o: "\f0c5"; 258 | $fa-var-film: "\f008"; 259 | $fa-var-filter: "\f0b0"; 260 | $fa-var-fire: "\f06d"; 261 | $fa-var-fire-extinguisher: "\f134"; 262 | $fa-var-firefox: "\f269"; 263 | $fa-var-flag: "\f024"; 264 | $fa-var-flag-checkered: "\f11e"; 265 | $fa-var-flag-o: "\f11d"; 266 | $fa-var-flash: "\f0e7"; 267 | $fa-var-flask: "\f0c3"; 268 | $fa-var-flickr: "\f16e"; 269 | $fa-var-floppy-o: "\f0c7"; 270 | $fa-var-folder: "\f07b"; 271 | $fa-var-folder-o: "\f114"; 272 | $fa-var-folder-open: "\f07c"; 273 | $fa-var-folder-open-o: "\f115"; 274 | $fa-var-font: "\f031"; 275 | $fa-var-fonticons: "\f280"; 276 | $fa-var-forumbee: "\f211"; 277 | $fa-var-forward: "\f04e"; 278 | $fa-var-foursquare: "\f180"; 279 | $fa-var-frown-o: "\f119"; 280 | $fa-var-futbol-o: "\f1e3"; 281 | $fa-var-gamepad: "\f11b"; 282 | $fa-var-gavel: "\f0e3"; 283 | $fa-var-gbp: "\f154"; 284 | $fa-var-ge: "\f1d1"; 285 | $fa-var-gear: "\f013"; 286 | $fa-var-gears: "\f085"; 287 | $fa-var-genderless: "\f22d"; 288 | $fa-var-get-pocket: "\f265"; 289 | $fa-var-gg: "\f260"; 290 | $fa-var-gg-circle: "\f261"; 291 | $fa-var-gift: "\f06b"; 292 | $fa-var-git: "\f1d3"; 293 | $fa-var-git-square: "\f1d2"; 294 | $fa-var-github: "\f09b"; 295 | $fa-var-github-alt: "\f113"; 296 | $fa-var-github-square: "\f092"; 297 | $fa-var-gittip: "\f184"; 298 | $fa-var-glass: "\f000"; 299 | $fa-var-globe: "\f0ac"; 300 | $fa-var-google: "\f1a0"; 301 | $fa-var-google-plus: "\f0d5"; 302 | $fa-var-google-plus-square: "\f0d4"; 303 | $fa-var-google-wallet: "\f1ee"; 304 | $fa-var-graduation-cap: "\f19d"; 305 | $fa-var-gratipay: "\f184"; 306 | $fa-var-group: "\f0c0"; 307 | $fa-var-h-square: "\f0fd"; 308 | $fa-var-hacker-news: "\f1d4"; 309 | $fa-var-hand-grab-o: "\f255"; 310 | $fa-var-hand-lizard-o: "\f258"; 311 | $fa-var-hand-o-down: "\f0a7"; 312 | $fa-var-hand-o-left: "\f0a5"; 313 | $fa-var-hand-o-right: "\f0a4"; 314 | $fa-var-hand-o-up: "\f0a6"; 315 | $fa-var-hand-paper-o: "\f256"; 316 | $fa-var-hand-peace-o: "\f25b"; 317 | $fa-var-hand-pointer-o: "\f25a"; 318 | $fa-var-hand-rock-o: "\f255"; 319 | $fa-var-hand-scissors-o: "\f257"; 320 | $fa-var-hand-spock-o: "\f259"; 321 | $fa-var-hand-stop-o: "\f256"; 322 | $fa-var-hdd-o: "\f0a0"; 323 | $fa-var-header: "\f1dc"; 324 | $fa-var-headphones: "\f025"; 325 | $fa-var-heart: "\f004"; 326 | $fa-var-heart-o: "\f08a"; 327 | $fa-var-heartbeat: "\f21e"; 328 | $fa-var-history: "\f1da"; 329 | $fa-var-home: "\f015"; 330 | $fa-var-hospital-o: "\f0f8"; 331 | $fa-var-hotel: "\f236"; 332 | $fa-var-hourglass: "\f254"; 333 | $fa-var-hourglass-1: "\f251"; 334 | $fa-var-hourglass-2: "\f252"; 335 | $fa-var-hourglass-3: "\f253"; 336 | $fa-var-hourglass-end: "\f253"; 337 | $fa-var-hourglass-half: "\f252"; 338 | $fa-var-hourglass-o: "\f250"; 339 | $fa-var-hourglass-start: "\f251"; 340 | $fa-var-houzz: "\f27c"; 341 | $fa-var-html5: "\f13b"; 342 | $fa-var-i-cursor: "\f246"; 343 | $fa-var-ils: "\f20b"; 344 | $fa-var-image: "\f03e"; 345 | $fa-var-inbox: "\f01c"; 346 | $fa-var-indent: "\f03c"; 347 | $fa-var-industry: "\f275"; 348 | $fa-var-info: "\f129"; 349 | $fa-var-info-circle: "\f05a"; 350 | $fa-var-inr: "\f156"; 351 | $fa-var-instagram: "\f16d"; 352 | $fa-var-institution: "\f19c"; 353 | $fa-var-internet-explorer: "\f26b"; 354 | $fa-var-intersex: "\f224"; 355 | $fa-var-ioxhost: "\f208"; 356 | $fa-var-italic: "\f033"; 357 | $fa-var-joomla: "\f1aa"; 358 | $fa-var-jpy: "\f157"; 359 | $fa-var-jsfiddle: "\f1cc"; 360 | $fa-var-key: "\f084"; 361 | $fa-var-keyboard-o: "\f11c"; 362 | $fa-var-krw: "\f159"; 363 | $fa-var-language: "\f1ab"; 364 | $fa-var-laptop: "\f109"; 365 | $fa-var-lastfm: "\f202"; 366 | $fa-var-lastfm-square: "\f203"; 367 | $fa-var-leaf: "\f06c"; 368 | $fa-var-leanpub: "\f212"; 369 | $fa-var-legal: "\f0e3"; 370 | $fa-var-lemon-o: "\f094"; 371 | $fa-var-level-down: "\f149"; 372 | $fa-var-level-up: "\f148"; 373 | $fa-var-life-bouy: "\f1cd"; 374 | $fa-var-life-buoy: "\f1cd"; 375 | $fa-var-life-ring: "\f1cd"; 376 | $fa-var-life-saver: "\f1cd"; 377 | $fa-var-lightbulb-o: "\f0eb"; 378 | $fa-var-line-chart: "\f201"; 379 | $fa-var-link: "\f0c1"; 380 | $fa-var-linkedin: "\f0e1"; 381 | $fa-var-linkedin-square: "\f08c"; 382 | $fa-var-linux: "\f17c"; 383 | $fa-var-list: "\f03a"; 384 | $fa-var-list-alt: "\f022"; 385 | $fa-var-list-ol: "\f0cb"; 386 | $fa-var-list-ul: "\f0ca"; 387 | $fa-var-location-arrow: "\f124"; 388 | $fa-var-lock: "\f023"; 389 | $fa-var-long-arrow-down: "\f175"; 390 | $fa-var-long-arrow-left: "\f177"; 391 | $fa-var-long-arrow-right: "\f178"; 392 | $fa-var-long-arrow-up: "\f176"; 393 | $fa-var-magic: "\f0d0"; 394 | $fa-var-magnet: "\f076"; 395 | $fa-var-mail-forward: "\f064"; 396 | $fa-var-mail-reply: "\f112"; 397 | $fa-var-mail-reply-all: "\f122"; 398 | $fa-var-male: "\f183"; 399 | $fa-var-map: "\f279"; 400 | $fa-var-map-marker: "\f041"; 401 | $fa-var-map-o: "\f278"; 402 | $fa-var-map-pin: "\f276"; 403 | $fa-var-map-signs: "\f277"; 404 | $fa-var-mars: "\f222"; 405 | $fa-var-mars-double: "\f227"; 406 | $fa-var-mars-stroke: "\f229"; 407 | $fa-var-mars-stroke-h: "\f22b"; 408 | $fa-var-mars-stroke-v: "\f22a"; 409 | $fa-var-maxcdn: "\f136"; 410 | $fa-var-meanpath: "\f20c"; 411 | $fa-var-medium: "\f23a"; 412 | $fa-var-medkit: "\f0fa"; 413 | $fa-var-meh-o: "\f11a"; 414 | $fa-var-mercury: "\f223"; 415 | $fa-var-microphone: "\f130"; 416 | $fa-var-microphone-slash: "\f131"; 417 | $fa-var-minus: "\f068"; 418 | $fa-var-minus-circle: "\f056"; 419 | $fa-var-minus-square: "\f146"; 420 | $fa-var-minus-square-o: "\f147"; 421 | $fa-var-mobile: "\f10b"; 422 | $fa-var-mobile-phone: "\f10b"; 423 | $fa-var-money: "\f0d6"; 424 | $fa-var-moon-o: "\f186"; 425 | $fa-var-mortar-board: "\f19d"; 426 | $fa-var-motorcycle: "\f21c"; 427 | $fa-var-mouse-pointer: "\f245"; 428 | $fa-var-music: "\f001"; 429 | $fa-var-navicon: "\f0c9"; 430 | $fa-var-neuter: "\f22c"; 431 | $fa-var-newspaper-o: "\f1ea"; 432 | $fa-var-object-group: "\f247"; 433 | $fa-var-object-ungroup: "\f248"; 434 | $fa-var-odnoklassniki: "\f263"; 435 | $fa-var-odnoklassniki-square: "\f264"; 436 | $fa-var-opencart: "\f23d"; 437 | $fa-var-openid: "\f19b"; 438 | $fa-var-opera: "\f26a"; 439 | $fa-var-optin-monster: "\f23c"; 440 | $fa-var-outdent: "\f03b"; 441 | $fa-var-pagelines: "\f18c"; 442 | $fa-var-paint-brush: "\f1fc"; 443 | $fa-var-paper-plane: "\f1d8"; 444 | $fa-var-paper-plane-o: "\f1d9"; 445 | $fa-var-paperclip: "\f0c6"; 446 | $fa-var-paragraph: "\f1dd"; 447 | $fa-var-paste: "\f0ea"; 448 | $fa-var-pause: "\f04c"; 449 | $fa-var-paw: "\f1b0"; 450 | $fa-var-paypal: "\f1ed"; 451 | $fa-var-pencil: "\f040"; 452 | $fa-var-pencil-square: "\f14b"; 453 | $fa-var-pencil-square-o: "\f044"; 454 | $fa-var-phone: "\f095"; 455 | $fa-var-phone-square: "\f098"; 456 | $fa-var-photo: "\f03e"; 457 | $fa-var-picture-o: "\f03e"; 458 | $fa-var-pie-chart: "\f200"; 459 | $fa-var-pied-piper: "\f1a7"; 460 | $fa-var-pied-piper-alt: "\f1a8"; 461 | $fa-var-pinterest: "\f0d2"; 462 | $fa-var-pinterest-p: "\f231"; 463 | $fa-var-pinterest-square: "\f0d3"; 464 | $fa-var-plane: "\f072"; 465 | $fa-var-play: "\f04b"; 466 | $fa-var-play-circle: "\f144"; 467 | $fa-var-play-circle-o: "\f01d"; 468 | $fa-var-plug: "\f1e6"; 469 | $fa-var-plus: "\f067"; 470 | $fa-var-plus-circle: "\f055"; 471 | $fa-var-plus-square: "\f0fe"; 472 | $fa-var-plus-square-o: "\f196"; 473 | $fa-var-power-off: "\f011"; 474 | $fa-var-print: "\f02f"; 475 | $fa-var-puzzle-piece: "\f12e"; 476 | $fa-var-qq: "\f1d6"; 477 | $fa-var-qrcode: "\f029"; 478 | $fa-var-question: "\f128"; 479 | $fa-var-question-circle: "\f059"; 480 | $fa-var-quote-left: "\f10d"; 481 | $fa-var-quote-right: "\f10e"; 482 | $fa-var-ra: "\f1d0"; 483 | $fa-var-random: "\f074"; 484 | $fa-var-rebel: "\f1d0"; 485 | $fa-var-recycle: "\f1b8"; 486 | $fa-var-reddit: "\f1a1"; 487 | $fa-var-reddit-square: "\f1a2"; 488 | $fa-var-refresh: "\f021"; 489 | $fa-var-registered: "\f25d"; 490 | $fa-var-remove: "\f00d"; 491 | $fa-var-renren: "\f18b"; 492 | $fa-var-reorder: "\f0c9"; 493 | $fa-var-repeat: "\f01e"; 494 | $fa-var-reply: "\f112"; 495 | $fa-var-reply-all: "\f122"; 496 | $fa-var-retweet: "\f079"; 497 | $fa-var-rmb: "\f157"; 498 | $fa-var-road: "\f018"; 499 | $fa-var-rocket: "\f135"; 500 | $fa-var-rotate-left: "\f0e2"; 501 | $fa-var-rotate-right: "\f01e"; 502 | $fa-var-rouble: "\f158"; 503 | $fa-var-rss: "\f09e"; 504 | $fa-var-rss-square: "\f143"; 505 | $fa-var-rub: "\f158"; 506 | $fa-var-ruble: "\f158"; 507 | $fa-var-rupee: "\f156"; 508 | $fa-var-safari: "\f267"; 509 | $fa-var-save: "\f0c7"; 510 | $fa-var-scissors: "\f0c4"; 511 | $fa-var-search: "\f002"; 512 | $fa-var-search-minus: "\f010"; 513 | $fa-var-search-plus: "\f00e"; 514 | $fa-var-sellsy: "\f213"; 515 | $fa-var-send: "\f1d8"; 516 | $fa-var-send-o: "\f1d9"; 517 | $fa-var-server: "\f233"; 518 | $fa-var-share: "\f064"; 519 | $fa-var-share-alt: "\f1e0"; 520 | $fa-var-share-alt-square: "\f1e1"; 521 | $fa-var-share-square: "\f14d"; 522 | $fa-var-share-square-o: "\f045"; 523 | $fa-var-shekel: "\f20b"; 524 | $fa-var-sheqel: "\f20b"; 525 | $fa-var-shield: "\f132"; 526 | $fa-var-ship: "\f21a"; 527 | $fa-var-shirtsinbulk: "\f214"; 528 | $fa-var-shopping-cart: "\f07a"; 529 | $fa-var-sign-in: "\f090"; 530 | $fa-var-sign-out: "\f08b"; 531 | $fa-var-signal: "\f012"; 532 | $fa-var-simplybuilt: "\f215"; 533 | $fa-var-sitemap: "\f0e8"; 534 | $fa-var-skyatlas: "\f216"; 535 | $fa-var-skype: "\f17e"; 536 | $fa-var-slack: "\f198"; 537 | $fa-var-sliders: "\f1de"; 538 | $fa-var-slideshare: "\f1e7"; 539 | $fa-var-smile-o: "\f118"; 540 | $fa-var-soccer-ball-o: "\f1e3"; 541 | $fa-var-sort: "\f0dc"; 542 | $fa-var-sort-alpha-asc: "\f15d"; 543 | $fa-var-sort-alpha-desc: "\f15e"; 544 | $fa-var-sort-amount-asc: "\f160"; 545 | $fa-var-sort-amount-desc: "\f161"; 546 | $fa-var-sort-asc: "\f0de"; 547 | $fa-var-sort-desc: "\f0dd"; 548 | $fa-var-sort-down: "\f0dd"; 549 | $fa-var-sort-numeric-asc: "\f162"; 550 | $fa-var-sort-numeric-desc: "\f163"; 551 | $fa-var-sort-up: "\f0de"; 552 | $fa-var-soundcloud: "\f1be"; 553 | $fa-var-space-shuttle: "\f197"; 554 | $fa-var-spinner: "\f110"; 555 | $fa-var-spoon: "\f1b1"; 556 | $fa-var-spotify: "\f1bc"; 557 | $fa-var-square: "\f0c8"; 558 | $fa-var-square-o: "\f096"; 559 | $fa-var-stack-exchange: "\f18d"; 560 | $fa-var-stack-overflow: "\f16c"; 561 | $fa-var-star: "\f005"; 562 | $fa-var-star-half: "\f089"; 563 | $fa-var-star-half-empty: "\f123"; 564 | $fa-var-star-half-full: "\f123"; 565 | $fa-var-star-half-o: "\f123"; 566 | $fa-var-star-o: "\f006"; 567 | $fa-var-steam: "\f1b6"; 568 | $fa-var-steam-square: "\f1b7"; 569 | $fa-var-step-backward: "\f048"; 570 | $fa-var-step-forward: "\f051"; 571 | $fa-var-stethoscope: "\f0f1"; 572 | $fa-var-sticky-note: "\f249"; 573 | $fa-var-sticky-note-o: "\f24a"; 574 | $fa-var-stop: "\f04d"; 575 | $fa-var-street-view: "\f21d"; 576 | $fa-var-strikethrough: "\f0cc"; 577 | $fa-var-stumbleupon: "\f1a4"; 578 | $fa-var-stumbleupon-circle: "\f1a3"; 579 | $fa-var-subscript: "\f12c"; 580 | $fa-var-subway: "\f239"; 581 | $fa-var-suitcase: "\f0f2"; 582 | $fa-var-sun-o: "\f185"; 583 | $fa-var-superscript: "\f12b"; 584 | $fa-var-support: "\f1cd"; 585 | $fa-var-table: "\f0ce"; 586 | $fa-var-tablet: "\f10a"; 587 | $fa-var-tachometer: "\f0e4"; 588 | $fa-var-tag: "\f02b"; 589 | $fa-var-tags: "\f02c"; 590 | $fa-var-tasks: "\f0ae"; 591 | $fa-var-taxi: "\f1ba"; 592 | $fa-var-television: "\f26c"; 593 | $fa-var-tencent-weibo: "\f1d5"; 594 | $fa-var-terminal: "\f120"; 595 | $fa-var-text-height: "\f034"; 596 | $fa-var-text-width: "\f035"; 597 | $fa-var-th: "\f00a"; 598 | $fa-var-th-large: "\f009"; 599 | $fa-var-th-list: "\f00b"; 600 | $fa-var-thumb-tack: "\f08d"; 601 | $fa-var-thumbs-down: "\f165"; 602 | $fa-var-thumbs-o-down: "\f088"; 603 | $fa-var-thumbs-o-up: "\f087"; 604 | $fa-var-thumbs-up: "\f164"; 605 | $fa-var-ticket: "\f145"; 606 | $fa-var-times: "\f00d"; 607 | $fa-var-times-circle: "\f057"; 608 | $fa-var-times-circle-o: "\f05c"; 609 | $fa-var-tint: "\f043"; 610 | $fa-var-toggle-down: "\f150"; 611 | $fa-var-toggle-left: "\f191"; 612 | $fa-var-toggle-off: "\f204"; 613 | $fa-var-toggle-on: "\f205"; 614 | $fa-var-toggle-right: "\f152"; 615 | $fa-var-toggle-up: "\f151"; 616 | $fa-var-trademark: "\f25c"; 617 | $fa-var-train: "\f238"; 618 | $fa-var-transgender: "\f224"; 619 | $fa-var-transgender-alt: "\f225"; 620 | $fa-var-trash: "\f1f8"; 621 | $fa-var-trash-o: "\f014"; 622 | $fa-var-tree: "\f1bb"; 623 | $fa-var-trello: "\f181"; 624 | $fa-var-tripadvisor: "\f262"; 625 | $fa-var-trophy: "\f091"; 626 | $fa-var-truck: "\f0d1"; 627 | $fa-var-try: "\f195"; 628 | $fa-var-tty: "\f1e4"; 629 | $fa-var-tumblr: "\f173"; 630 | $fa-var-tumblr-square: "\f174"; 631 | $fa-var-turkish-lira: "\f195"; 632 | $fa-var-tv: "\f26c"; 633 | $fa-var-twitch: "\f1e8"; 634 | $fa-var-twitter: "\f099"; 635 | $fa-var-twitter-square: "\f081"; 636 | $fa-var-umbrella: "\f0e9"; 637 | $fa-var-underline: "\f0cd"; 638 | $fa-var-undo: "\f0e2"; 639 | $fa-var-university: "\f19c"; 640 | $fa-var-unlink: "\f127"; 641 | $fa-var-unlock: "\f09c"; 642 | $fa-var-unlock-alt: "\f13e"; 643 | $fa-var-unsorted: "\f0dc"; 644 | $fa-var-upload: "\f093"; 645 | $fa-var-usd: "\f155"; 646 | $fa-var-user: "\f007"; 647 | $fa-var-user-md: "\f0f0"; 648 | $fa-var-user-plus: "\f234"; 649 | $fa-var-user-secret: "\f21b"; 650 | $fa-var-user-times: "\f235"; 651 | $fa-var-users: "\f0c0"; 652 | $fa-var-venus: "\f221"; 653 | $fa-var-venus-double: "\f226"; 654 | $fa-var-venus-mars: "\f228"; 655 | $fa-var-viacoin: "\f237"; 656 | $fa-var-video-camera: "\f03d"; 657 | $fa-var-vimeo: "\f27d"; 658 | $fa-var-vimeo-square: "\f194"; 659 | $fa-var-vine: "\f1ca"; 660 | $fa-var-vk: "\f189"; 661 | $fa-var-volume-down: "\f027"; 662 | $fa-var-volume-off: "\f026"; 663 | $fa-var-volume-up: "\f028"; 664 | $fa-var-warning: "\f071"; 665 | $fa-var-wechat: "\f1d7"; 666 | $fa-var-weibo: "\f18a"; 667 | $fa-var-weixin: "\f1d7"; 668 | $fa-var-whatsapp: "\f232"; 669 | $fa-var-wheelchair: "\f193"; 670 | $fa-var-wifi: "\f1eb"; 671 | $fa-var-wikipedia-w: "\f266"; 672 | $fa-var-windows: "\f17a"; 673 | $fa-var-won: "\f159"; 674 | $fa-var-wordpress: "\f19a"; 675 | $fa-var-wrench: "\f0ad"; 676 | $fa-var-xing: "\f168"; 677 | $fa-var-xing-square: "\f169"; 678 | $fa-var-y-combinator: "\f23b"; 679 | $fa-var-y-combinator-square: "\f1d4"; 680 | $fa-var-yahoo: "\f19e"; 681 | $fa-var-yc: "\f23b"; 682 | $fa-var-yc-square: "\f1d4"; 683 | $fa-var-yelp: "\f1e9"; 684 | $fa-var-yen: "\f157"; 685 | $fa-var-youtube: "\f167"; 686 | $fa-var-youtube-play: "\f16a"; 687 | $fa-var-youtube-square: "\f166"; 688 | 689 | -------------------------------------------------------------------------------- /public/font-awesome/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;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.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.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-remove:before,.fa-close:before,.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-photo:before,.fa-image:before,.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,.fa-bar-chart: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-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.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-navicon:before,.fa-reorder:before,.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-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc: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-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-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,.fa-gratipay: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"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} 5 | -------------------------------------------------------------------------------- /public/stylesheets/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.5 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | .btn-default, 7 | .btn-primary, 8 | .btn-success, 9 | .btn-info, 10 | .btn-warning, 11 | .btn-danger { 12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | } 16 | .btn-default:active, 17 | .btn-primary:active, 18 | .btn-success:active, 19 | .btn-info:active, 20 | .btn-warning:active, 21 | .btn-danger:active, 22 | .btn-default.active, 23 | .btn-primary.active, 24 | .btn-success.active, 25 | .btn-info.active, 26 | .btn-warning.active, 27 | .btn-danger.active { 28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | } 31 | .btn-default.disabled, 32 | .btn-primary.disabled, 33 | .btn-success.disabled, 34 | .btn-info.disabled, 35 | .btn-warning.disabled, 36 | .btn-danger.disabled, 37 | .btn-default[disabled], 38 | .btn-primary[disabled], 39 | .btn-success[disabled], 40 | .btn-info[disabled], 41 | .btn-warning[disabled], 42 | .btn-danger[disabled], 43 | fieldset[disabled] .btn-default, 44 | fieldset[disabled] .btn-primary, 45 | fieldset[disabled] .btn-success, 46 | fieldset[disabled] .btn-info, 47 | fieldset[disabled] .btn-warning, 48 | fieldset[disabled] .btn-danger { 49 | -webkit-box-shadow: none; 50 | box-shadow: none; 51 | } 52 | .btn-default .badge, 53 | .btn-primary .badge, 54 | .btn-success .badge, 55 | .btn-info .badge, 56 | .btn-warning .badge, 57 | .btn-danger .badge { 58 | text-shadow: none; 59 | } 60 | .btn:active, 61 | .btn.active { 62 | background-image: none; 63 | } 64 | .btn-default { 65 | text-shadow: 0 1px 0 #fff; 66 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 67 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 68 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 69 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 70 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 71 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 72 | background-repeat: repeat-x; 73 | border-color: #dbdbdb; 74 | border-color: #ccc; 75 | } 76 | .btn-default:hover, 77 | .btn-default:focus { 78 | background-color: #e0e0e0; 79 | background-position: 0 -15px; 80 | } 81 | .btn-default:active, 82 | .btn-default.active { 83 | background-color: #e0e0e0; 84 | border-color: #dbdbdb; 85 | } 86 | .btn-default.disabled, 87 | .btn-default[disabled], 88 | fieldset[disabled] .btn-default, 89 | .btn-default.disabled:hover, 90 | .btn-default[disabled]:hover, 91 | fieldset[disabled] .btn-default:hover, 92 | .btn-default.disabled:focus, 93 | .btn-default[disabled]:focus, 94 | fieldset[disabled] .btn-default:focus, 95 | .btn-default.disabled.focus, 96 | .btn-default[disabled].focus, 97 | fieldset[disabled] .btn-default.focus, 98 | .btn-default.disabled:active, 99 | .btn-default[disabled]:active, 100 | fieldset[disabled] .btn-default:active, 101 | .btn-default.disabled.active, 102 | .btn-default[disabled].active, 103 | fieldset[disabled] .btn-default.active { 104 | background-color: #e0e0e0; 105 | background-image: none; 106 | } 107 | .btn-primary { 108 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 109 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 110 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 111 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 112 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 113 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 114 | background-repeat: repeat-x; 115 | border-color: #245580; 116 | } 117 | .btn-primary:hover, 118 | .btn-primary:focus { 119 | background-color: #265a88; 120 | background-position: 0 -15px; 121 | } 122 | .btn-primary:active, 123 | .btn-primary.active { 124 | background-color: #265a88; 125 | border-color: #245580; 126 | } 127 | .btn-primary.disabled, 128 | .btn-primary[disabled], 129 | fieldset[disabled] .btn-primary, 130 | .btn-primary.disabled:hover, 131 | .btn-primary[disabled]:hover, 132 | fieldset[disabled] .btn-primary:hover, 133 | .btn-primary.disabled:focus, 134 | .btn-primary[disabled]:focus, 135 | fieldset[disabled] .btn-primary:focus, 136 | .btn-primary.disabled.focus, 137 | .btn-primary[disabled].focus, 138 | fieldset[disabled] .btn-primary.focus, 139 | .btn-primary.disabled:active, 140 | .btn-primary[disabled]:active, 141 | fieldset[disabled] .btn-primary:active, 142 | .btn-primary.disabled.active, 143 | .btn-primary[disabled].active, 144 | fieldset[disabled] .btn-primary.active { 145 | background-color: #265a88; 146 | background-image: none; 147 | } 148 | .btn-success { 149 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 150 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 151 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 152 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 153 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 154 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 155 | background-repeat: repeat-x; 156 | border-color: #3e8f3e; 157 | } 158 | .btn-success:hover, 159 | .btn-success:focus { 160 | background-color: #419641; 161 | background-position: 0 -15px; 162 | } 163 | .btn-success:active, 164 | .btn-success.active { 165 | background-color: #419641; 166 | border-color: #3e8f3e; 167 | } 168 | .btn-success.disabled, 169 | .btn-success[disabled], 170 | fieldset[disabled] .btn-success, 171 | .btn-success.disabled:hover, 172 | .btn-success[disabled]:hover, 173 | fieldset[disabled] .btn-success:hover, 174 | .btn-success.disabled:focus, 175 | .btn-success[disabled]:focus, 176 | fieldset[disabled] .btn-success:focus, 177 | .btn-success.disabled.focus, 178 | .btn-success[disabled].focus, 179 | fieldset[disabled] .btn-success.focus, 180 | .btn-success.disabled:active, 181 | .btn-success[disabled]:active, 182 | fieldset[disabled] .btn-success:active, 183 | .btn-success.disabled.active, 184 | .btn-success[disabled].active, 185 | fieldset[disabled] .btn-success.active { 186 | background-color: #419641; 187 | background-image: none; 188 | } 189 | .btn-info { 190 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 191 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 193 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 195 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 196 | background-repeat: repeat-x; 197 | border-color: #28a4c9; 198 | } 199 | .btn-info:hover, 200 | .btn-info:focus { 201 | background-color: #2aabd2; 202 | background-position: 0 -15px; 203 | } 204 | .btn-info:active, 205 | .btn-info.active { 206 | background-color: #2aabd2; 207 | border-color: #28a4c9; 208 | } 209 | .btn-info.disabled, 210 | .btn-info[disabled], 211 | fieldset[disabled] .btn-info, 212 | .btn-info.disabled:hover, 213 | .btn-info[disabled]:hover, 214 | fieldset[disabled] .btn-info:hover, 215 | .btn-info.disabled:focus, 216 | .btn-info[disabled]:focus, 217 | fieldset[disabled] .btn-info:focus, 218 | .btn-info.disabled.focus, 219 | .btn-info[disabled].focus, 220 | fieldset[disabled] .btn-info.focus, 221 | .btn-info.disabled:active, 222 | .btn-info[disabled]:active, 223 | fieldset[disabled] .btn-info:active, 224 | .btn-info.disabled.active, 225 | .btn-info[disabled].active, 226 | fieldset[disabled] .btn-info.active { 227 | background-color: #2aabd2; 228 | background-image: none; 229 | } 230 | .btn-warning { 231 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 232 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 233 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 234 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 236 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 237 | background-repeat: repeat-x; 238 | border-color: #e38d13; 239 | } 240 | .btn-warning:hover, 241 | .btn-warning:focus { 242 | background-color: #eb9316; 243 | background-position: 0 -15px; 244 | } 245 | .btn-warning:active, 246 | .btn-warning.active { 247 | background-color: #eb9316; 248 | border-color: #e38d13; 249 | } 250 | .btn-warning.disabled, 251 | .btn-warning[disabled], 252 | fieldset[disabled] .btn-warning, 253 | .btn-warning.disabled:hover, 254 | .btn-warning[disabled]:hover, 255 | fieldset[disabled] .btn-warning:hover, 256 | .btn-warning.disabled:focus, 257 | .btn-warning[disabled]:focus, 258 | fieldset[disabled] .btn-warning:focus, 259 | .btn-warning.disabled.focus, 260 | .btn-warning[disabled].focus, 261 | fieldset[disabled] .btn-warning.focus, 262 | .btn-warning.disabled:active, 263 | .btn-warning[disabled]:active, 264 | fieldset[disabled] .btn-warning:active, 265 | .btn-warning.disabled.active, 266 | .btn-warning[disabled].active, 267 | fieldset[disabled] .btn-warning.active { 268 | background-color: #eb9316; 269 | background-image: none; 270 | } 271 | .btn-danger { 272 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 273 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 274 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 275 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 276 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 277 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 278 | background-repeat: repeat-x; 279 | border-color: #b92c28; 280 | } 281 | .btn-danger:hover, 282 | .btn-danger:focus { 283 | background-color: #c12e2a; 284 | background-position: 0 -15px; 285 | } 286 | .btn-danger:active, 287 | .btn-danger.active { 288 | background-color: #c12e2a; 289 | border-color: #b92c28; 290 | } 291 | .btn-danger.disabled, 292 | .btn-danger[disabled], 293 | fieldset[disabled] .btn-danger, 294 | .btn-danger.disabled:hover, 295 | .btn-danger[disabled]:hover, 296 | fieldset[disabled] .btn-danger:hover, 297 | .btn-danger.disabled:focus, 298 | .btn-danger[disabled]:focus, 299 | fieldset[disabled] .btn-danger:focus, 300 | .btn-danger.disabled.focus, 301 | .btn-danger[disabled].focus, 302 | fieldset[disabled] .btn-danger.focus, 303 | .btn-danger.disabled:active, 304 | .btn-danger[disabled]:active, 305 | fieldset[disabled] .btn-danger:active, 306 | .btn-danger.disabled.active, 307 | .btn-danger[disabled].active, 308 | fieldset[disabled] .btn-danger.active { 309 | background-color: #c12e2a; 310 | background-image: none; 311 | } 312 | .thumbnail, 313 | .img-thumbnail { 314 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 315 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 316 | } 317 | .dropdown-menu > li > a:hover, 318 | .dropdown-menu > li > a:focus { 319 | background-color: #e8e8e8; 320 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 321 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 322 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 323 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 324 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 325 | background-repeat: repeat-x; 326 | } 327 | .dropdown-menu > .active > a, 328 | .dropdown-menu > .active > a:hover, 329 | .dropdown-menu > .active > a:focus { 330 | background-color: #2e6da4; 331 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 332 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 333 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 334 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .navbar-default { 339 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 340 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 342 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 344 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 345 | background-repeat: repeat-x; 346 | border-radius: 4px; 347 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 348 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 349 | } 350 | .navbar-default .navbar-nav > .open > a, 351 | .navbar-default .navbar-nav > .active > a { 352 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 353 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 354 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 355 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 356 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 357 | background-repeat: repeat-x; 358 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 359 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 360 | } 361 | .navbar-brand, 362 | .navbar-nav > li > a { 363 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 364 | } 365 | .navbar-inverse { 366 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 367 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 368 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 369 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 371 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 372 | background-repeat: repeat-x; 373 | border-radius: 4px; 374 | } 375 | .navbar-inverse .navbar-nav > .open > a, 376 | .navbar-inverse .navbar-nav > .active > a { 377 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 378 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 379 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 380 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 382 | background-repeat: repeat-x; 383 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 384 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 385 | } 386 | .navbar-inverse .navbar-brand, 387 | .navbar-inverse .navbar-nav > li > a { 388 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 389 | } 390 | .navbar-static-top, 391 | .navbar-fixed-top, 392 | .navbar-fixed-bottom { 393 | border-radius: 0; 394 | } 395 | @media (max-width: 767px) { 396 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 397 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 398 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 399 | color: #fff; 400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 405 | background-repeat: repeat-x; 406 | } 407 | } 408 | .alert { 409 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 410 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 411 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 412 | } 413 | .alert-success { 414 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 415 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 416 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 417 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 418 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 419 | background-repeat: repeat-x; 420 | border-color: #b2dba1; 421 | } 422 | .alert-info { 423 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 424 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 425 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 426 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 427 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 428 | background-repeat: repeat-x; 429 | border-color: #9acfea; 430 | } 431 | .alert-warning { 432 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 433 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 434 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 435 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 437 | background-repeat: repeat-x; 438 | border-color: #f5e79e; 439 | } 440 | .alert-danger { 441 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 442 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 443 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 444 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 445 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 446 | background-repeat: repeat-x; 447 | border-color: #dca7a7; 448 | } 449 | .progress { 450 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 451 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 453 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 455 | background-repeat: repeat-x; 456 | } 457 | .progress-bar { 458 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 459 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 461 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 463 | background-repeat: repeat-x; 464 | } 465 | .progress-bar-success { 466 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 467 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 469 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 471 | background-repeat: repeat-x; 472 | } 473 | .progress-bar-info { 474 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 475 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 476 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 477 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 478 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 479 | background-repeat: repeat-x; 480 | } 481 | .progress-bar-warning { 482 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 483 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 485 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 487 | background-repeat: repeat-x; 488 | } 489 | .progress-bar-danger { 490 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 491 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 492 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 493 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 494 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 495 | background-repeat: repeat-x; 496 | } 497 | .progress-bar-striped { 498 | 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); 499 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 500 | 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); 501 | } 502 | .list-group { 503 | border-radius: 4px; 504 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 505 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 506 | } 507 | .list-group-item.active, 508 | .list-group-item.active:hover, 509 | .list-group-item.active:focus { 510 | text-shadow: 0 -1px 0 #286090; 511 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 512 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 513 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 515 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 516 | background-repeat: repeat-x; 517 | border-color: #2b669a; 518 | } 519 | .list-group-item.active .badge, 520 | .list-group-item.active:hover .badge, 521 | .list-group-item.active:focus .badge { 522 | text-shadow: none; 523 | } 524 | .panel { 525 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 526 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 527 | } 528 | .panel-default > .panel-heading { 529 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 530 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 531 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 532 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 533 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 534 | background-repeat: repeat-x; 535 | } 536 | .panel-primary > .panel-heading { 537 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 538 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 539 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 540 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 541 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 542 | background-repeat: repeat-x; 543 | } 544 | .panel-success > .panel-heading { 545 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 546 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 547 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 548 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 549 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 550 | background-repeat: repeat-x; 551 | } 552 | .panel-info > .panel-heading { 553 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 554 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 555 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 556 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 557 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 558 | background-repeat: repeat-x; 559 | } 560 | .panel-warning > .panel-heading { 561 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 562 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 563 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 564 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 565 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 566 | background-repeat: repeat-x; 567 | } 568 | .panel-danger > .panel-heading { 569 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 570 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 571 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 572 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 574 | background-repeat: repeat-x; 575 | } 576 | .well { 577 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 578 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 579 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 580 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 581 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 582 | background-repeat: repeat-x; 583 | border-color: #dcdcdc; 584 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 585 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 586 | } 587 | /*# sourceMappingURL=bootstrap-theme.css.map */ 588 | --------------------------------------------------------------------------------