├── .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 | 
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 |
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 |
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 |
35 |
36 |
37 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
©2018 Node-2fa, All Rights Reserved
73 |
74 |
75 |
76 |
77 |
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 |
38 |
39 |
40 |
41 |
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 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
70 |
71 |
72 |
...or login with:
73 |
78 |
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 |
--------------------------------------------------------------------------------