├── README.md ├── views ├── partials │ ├── _sidebar.handlebars │ ├── _footer.handlebars │ └── _navbar.handlebars ├── pages │ ├── categoria │ │ ├── register.handlebars │ │ └── _list.handlebars │ ├── errors │ │ ├── 500.handlebars │ │ └── 404.handlebars │ ├── produtos │ │ ├── products.handlebars │ │ └── product-datail.handlebars │ └── user │ │ ├── _login.handlebars │ │ ├── _user-edit.handlebars │ │ ├── _users-list.handlebars │ │ └── _register.handlebars ├── layouts │ └── main.handlebars └── home.handlebars ├── .gitignore ├── .prettierrc.json ├── public ├── css │ ├── .DS_Store │ └── responsive.css ├── images │ ├── voce.jpg │ ├── items │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 4.jpg │ │ └── 7.jpg │ └── banners │ │ └── bg-cpu.jpg ├── fonts │ └── fontawesome │ │ ├── .DS_Store │ │ ├── webfonts │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.ttf │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.woff │ │ └── fa-regular-400.woff2 │ │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _screen-reader.scss │ │ ├── _core.scss │ │ ├── _animated.scss │ │ ├── _list.scss │ │ ├── _larger.scss │ │ ├── fontawesome.scss │ │ ├── _bordered-pulled.scss │ │ ├── _stacked.scss │ │ ├── fa-brands.scss │ │ ├── fa-solid.scss │ │ ├── fa-regular.scss │ │ ├── _rotated-flipped.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ │ └── css │ │ ├── fa-brands.min.css │ │ ├── fa-solid.min.css │ │ ├── fa-regular.min.css │ │ ├── fa-brands.css │ │ ├── fa-solid.css │ │ ├── fa-regular.css │ │ ├── fontawesome.min.css │ │ └── fontawesome-all.min.css ├── plugins │ ├── slickslider │ │ ├── ajax-loader.gif │ │ ├── fonts │ │ │ ├── slick.eot │ │ │ ├── slick.ttf │ │ │ ├── slick.woff │ │ │ └── slick.svg │ │ ├── slick.css │ │ └── slick-theme.css │ ├── owlcarousel │ │ └── assets │ │ │ ├── ajax-loader.gif │ │ │ ├── owl.video.play.png │ │ │ ├── owl.theme.default.min.css │ │ │ ├── owl.theme.green.min.css │ │ │ ├── owl.theme.green.css │ │ │ ├── owl.theme.default.css │ │ │ ├── owl.carousel.min.css │ │ │ └── owl.carousel.css │ ├── prism │ │ ├── prism.css │ │ └── prism.js │ └── fancybox │ │ └── fancybox.min.css └── js │ └── script.js ├── .editorconfig ├── src ├── app.js ├── env.js ├── routes │ ├── product.routes.js │ └── user.routes.js ├── models │ ├── customer.js │ ├── user.js │ ├── categoria.js │ ├── order.js │ └── product.js ├── middlewares │ ├── authentication │ │ └── jwt.js │ └── authentication.js ├── controller │ ├── product.js │ ├── category.js │ └── user.js ├── repositories │ ├── product.js │ └── user.js └── config │ └── server.js └── package.json /README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/partials/_sidebar.handlebars: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/pages/categoria/register.handlebars: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn.lock 3 | package-lock.json -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": true 4 | } -------------------------------------------------------------------------------- /public/css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/css/.DS_Store -------------------------------------------------------------------------------- /public/images/voce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/voce.jpg -------------------------------------------------------------------------------- /public/images/items/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/items/1.jpg -------------------------------------------------------------------------------- /public/images/items/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/items/2.jpg -------------------------------------------------------------------------------- /public/images/items/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/items/4.jpg -------------------------------------------------------------------------------- /public/images/items/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/items/7.jpg -------------------------------------------------------------------------------- /public/images/banners/bg-cpu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/images/banners/bg-cpu.jpg -------------------------------------------------------------------------------- /public/fonts/fontawesome/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/.DS_Store -------------------------------------------------------------------------------- /public/plugins/slickslider/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/slickslider/ajax-loader.gif -------------------------------------------------------------------------------- /public/plugins/slickslider/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/slickslider/fonts/slick.eot -------------------------------------------------------------------------------- /public/plugins/slickslider/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/slickslider/fonts/slick.ttf -------------------------------------------------------------------------------- /public/plugins/slickslider/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/slickslider/fonts/slick.woff -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = false 8 | insert_final_newline = false -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/owlcarousel/assets/ajax-loader.gif -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/plugins/owlcarousel/assets/owl.video.play.png -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /public/fonts/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deyvisonborges/ecommerce-js-nodejs-mongodb/HEAD/public/fonts/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | text-align: center; 5 | width: (20em / 16); 6 | } 7 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only; } 5 | .sr-only-focusable { @include sr-only-focusable; } 6 | -------------------------------------------------------------------------------- /views/partials/_footer.handlebars: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const app = require('./config/server'); 4 | const environments = require('./env'); 5 | 6 | const port = environments.api.port; 7 | const host = environments.api.host; 8 | 9 | app.listen(environments.api.port, () => { 10 | console.log(`${host}:${port}`); 11 | }); 12 | -------------------------------------------------------------------------------- /src/env.js: -------------------------------------------------------------------------------- 1 | const environments = { 2 | api: { 3 | port: 3000, 4 | host: 'localhost', 5 | }, 6 | database: { 7 | connection: process.env.connection || 'mongodb://127.0.0.1:27017/ecommerce', 8 | }, 9 | authenticationToken: { 10 | secret: '232ioh3po4u23h42e23e03023ieh230he23', 11 | }, 12 | }; 13 | 14 | module.exports = environments; 15 | -------------------------------------------------------------------------------- /src/routes/product.routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const productRoutes = express.Router(); 5 | const productControllers = require('../controller/product'); 6 | 7 | productRoutes.get('/', productControllers.getAll); 8 | productRoutes.post('/cadastro', productControllers.create); 9 | 10 | module.exports = productRoutes; 11 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}, 5 | .fas, 6 | .far, 7 | .fal, 8 | .fab { 9 | -moz-osx-font-smoothing: grayscale; 10 | -webkit-font-smoothing: antialiased; 11 | display: inline-block; 12 | font-style: normal; 13 | font-variant: normal; 14 | text-rendering: auto; 15 | line-height: 1; 16 | } 17 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | animation: fa-spin 2s infinite linear; 6 | } 7 | 8 | .#{$fa-css-prefix}-pulse { 9 | animation: fa-spin 1s infinite steps(8); 10 | } 11 | 12 | @keyframes fa-spin { 13 | 0% { 14 | transform: rotate(0deg); 15 | } 16 | 17 | 100% { 18 | transform: rotate(360deg); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | list-style-type: none; 6 | margin-left: $fa-li-width * 5/4; 7 | padding-left: 0; 8 | 9 | > li { position: relative; } 10 | } 11 | 12 | .#{$fa-css-prefix}-li { 13 | left: -$fa-li-width; 14 | position: absolute; 15 | text-align: center; 16 | width: $fa-li-width; 17 | line-height: inherit; 18 | } 19 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/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: -.0667em; 9 | } 10 | 11 | .#{$fa-css-prefix}-xs { 12 | font-size: .75em; 13 | } 14 | 15 | .#{$fa-css-prefix}-sm { 16 | font-size: .875em; 17 | } 18 | 19 | @for $i from 1 through 10 { 20 | .#{$fa-css-prefix}-#{$i}x { 21 | font-size: $i * 1em; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/fontawesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | @import 'mixins'; 7 | @import 'core'; 8 | @import 'larger'; 9 | @import 'fixed-width'; 10 | @import 'list'; 11 | @import 'bordered-pulled'; 12 | @import 'animated'; 13 | @import 'rotated-flipped'; 14 | @import 'stacked'; 15 | @import 'icons'; 16 | @import 'screen-reader'; 17 | -------------------------------------------------------------------------------- /src/models/customer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const schema = mongoose.Schema; 5 | 6 | const customer_model = new schema( 7 | { 8 | name: { 9 | type: String, 10 | required: true, 11 | }, 12 | email: { 13 | type: String, 14 | required: true, 15 | }, 16 | password: { 17 | type: String, 18 | required: true, 19 | }, 20 | }, 21 | { versionKey: false } 22 | ); 23 | 24 | module.exports = mongoose.model('Customer', customer_model); 25 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | border: solid .08em $fa-border-color; 6 | border-radius: .1em; 7 | padding: .2em .25em .15em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix}, 14 | .fas, 15 | .far, 16 | .fal, 17 | .fab { 18 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 19 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 20 | } 21 | -------------------------------------------------------------------------------- /views/pages/categoria/_list.handlebars: -------------------------------------------------------------------------------- 1 |


2 |
3 |
4 | {{#each categorias}} 5 |
6 |
7 |
{{titulo}}
8 |
{{descricao}}
9 |
10 |
11 | {{else}} 12 |
13 |
14 |

Nenhuma categoria encontrada!

15 |
16 |
17 | {{/each}} 18 |
19 |
-------------------------------------------------------------------------------- /src/middlewares/authentication/jwt.js: -------------------------------------------------------------------------------- 1 | const cookie = require('js-cookie'); 2 | 3 | 4 | const authorize = (SECRET_AUTH) => async (req, res, next) => { 5 | try { 6 | if (!SECRET_AUTH) { 7 | throw new Error('Security token not injected'); 8 | } else { 9 | const headerToken = req.headers['authorization']; 10 | const localToken = await cookie.get('login'); 11 | 12 | if (!headerToken || !localToken) { 13 | throw new Error('Token not found'); 14 | } 15 | return next(); 16 | } 17 | } catch (err) { 18 | next(err.message); 19 | } 20 | }; 21 | 22 | module.exports = { 23 | authorize, 24 | }; 25 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | display: inline-block; 6 | height: 2em; 7 | line-height: 2em; 8 | position: relative; 9 | vertical-align: middle; 10 | width: 2em; 11 | } 12 | 13 | .#{$fa-css-prefix}-stack-1x, 14 | .#{$fa-css-prefix}-stack-2x { 15 | left: 0; 16 | position: absolute; 17 | text-align: center; 18 | width: 100%; 19 | } 20 | 21 | .#{$fa-css-prefix}-stack-1x { 22 | line-height: inherit; 23 | } 24 | 25 | .#{$fa-css-prefix}-stack-2x { 26 | font-size: 2em; 27 | } 28 | 29 | .#{$fa-css-prefix}-inverse { 30 | color: $fa-inverse; 31 | } 32 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands} -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900} -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:Font Awesome\ 5 Free;font-weight:400} -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: normal; 9 | src: url("../webfonts/fa-brands-400.eot"); 10 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 11 | 12 | .fab { 13 | font-family: 'Font Awesome 5 Brands'; } 14 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | src: url("../webfonts/fa-solid-900.eot"); 10 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 11 | 12 | .fa, 13 | .fas { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 900; } 16 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fa-regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | src: url("../webfonts/fa-regular-400.eot"); 10 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 11 | 12 | .far { 13 | font-family: 'Font Awesome 5 Free'; 14 | font-weight: 400; } 15 | -------------------------------------------------------------------------------- /src/controller/product.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const Produto = require('../repositories/product'); 4 | 5 | // criando produto 6 | exports.create = async (req, res, next) => { 7 | try { 8 | const tags = req.body.tag; 9 | const produtoExiste = Produto.verifyProduct(req.body); 10 | if (!produtoExiste) { 11 | await Produto.create(req.body); 12 | return res.send('Produto cadastrado com sucesso!'); 13 | } else { 14 | return res.send('Esse produto já foi cadastrado!'); 15 | } 16 | } catch (err) { 17 | next(err); 18 | } 19 | }; 20 | 21 | // buscando produtos 22 | exports.getAll = async (req, res, next) => { 23 | try { 24 | const products = await Produto.getAll(); 25 | return res.json(products); 26 | } catch (err) { 27 | next(err); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /src/models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const usuario_model = new mongoose.Schema( 4 | { 5 | nome: { 6 | trim: true, 7 | createIndexes: true, 8 | required: true, 9 | type: String, 10 | }, 11 | email: { 12 | type: String, 13 | unique: true, 14 | required: true, 15 | lowercase: true, 16 | }, 17 | senha: { 18 | type: String, 19 | required: true, 20 | select: false, // pra nao retornar a senha quando for uma consulta publica 21 | }, 22 | }, 23 | { versionKey: false } 24 | ); 25 | 26 | /* 27 | usuario_model.pre('save', async next => { 28 | const hash = await crypt.hash(this.senha, 10) 29 | this.senha = hash 30 | next() 31 | }) */ 32 | module.exports = mongoose.model('Usuario', usuario_model); 33 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/fa-brands.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Brands'; 9 | font-style: normal; 10 | font-weight: normal; 11 | src: url('#{$fa-font-path}/fa-brands-400.eot'); 12 | src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-brands-400.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .fab { 20 | font-family: 'Font Awesome 5 Brands'; 21 | } 22 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/fa-solid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 900; 11 | src: url('#{$fa-font-path}/fa-solid-900.eot'); 12 | src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-solid-900.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .fa, 20 | .fas { 21 | font-family: 'Font Awesome 5 Free'; 22 | font-weight: 900; 23 | } 24 | -------------------------------------------------------------------------------- /src/models/categoria.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const schema = mongoose.Schema; 5 | 6 | // definindo o modelo 7 | const categoria_model = new schema( 8 | { 9 | titulo: { 10 | trim: true, 11 | createIndexes: true, 12 | required: true, 13 | type: String, 14 | }, 15 | descricao: { 16 | type: String, 17 | required: true, 18 | }, 19 | dataCriacao: { 20 | type: Date, 21 | default: Date.now, 22 | }, 23 | }, 24 | { versionKey: false } 25 | ); 26 | 27 | // antes de salvar ele verifica se foi setado a data 28 | categoria_model.pre('save', (next) => { 29 | let agora = new Date(); 30 | if (!this.dataCriacao) { 31 | this.dataCriacao = agora; 32 | next(); // prossiga pro salvamento 33 | } 34 | }); 35 | 36 | module.exports = mongoose.model('Categoria', categoria_model); 37 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/fa-regular.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 400; 11 | src: url('#{$fa-font-path}/fa-regular-400.eot'); 12 | src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), 13 | url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'), 14 | url('#{$fa-font-path}/fa-regular-400.woff') format('woff'), 15 | url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'), 16 | url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg'); 17 | } 18 | 19 | .far { 20 | font-family: 'Font Awesome 5 Free'; 21 | font-weight: 400; 22 | } 23 | -------------------------------------------------------------------------------- /src/middlewares/authentication.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const jwt = require('jsonwebtoken'); 4 | const cookie = require('js-cookie').noConflict; 5 | 6 | const environments = require('../env'); 7 | 8 | const authenticationToken = environments.authenticationToken.secret; 9 | 10 | module.exports.authorize = (req, res, next) => { 11 | try { 12 | const data = cookie.get('login'); 13 | if (!data) { 14 | return res.send('Acesso restrito'); 15 | } 16 | next(); 17 | } catch (err) { 18 | next(err); 19 | } 20 | }; 21 | 22 | // gerando token 23 | module.exports.generateToken = (data) => { 24 | return jwt.sign(data, authenticationToken, { 25 | expiresIn: 86400, // o meu token vai expirar em 1 dia 26 | }); 27 | }; 28 | 29 | // decodificando token 30 | module.exports.decoded = (token) => { 31 | const data = jwt.decode(token, authenticationToken); 32 | return data; 33 | }; 34 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/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 | .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); } 11 | 12 | // Hook for IE8-9 13 | // ------------------------- 14 | 15 | :root { 16 | .#{$fa-css-prefix}-rotate-90, 17 | .#{$fa-css-prefix}-rotate-180, 18 | .#{$fa-css-prefix}-rotate-270, 19 | .#{$fa-css-prefix}-flip-horizontal, 20 | .#{$fa-css-prefix}-flip-vertical { 21 | filter: none; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/routes/user.routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const userRoutes = express.Router(); 5 | const userControllers = require('../controller/user'); 6 | const authentication = require('../middlewares/authentication'); 7 | 8 | // GET for rotas 9 | userRoutes.get('/', userControllers.get); 10 | userRoutes.get('/registro', userControllers.getRegistro); 11 | userRoutes.get('/login', userControllers.getLogin); 12 | userRoutes.get('/logout', userControllers.logout); 13 | userRoutes.get('/edit/id/:id', authentication.authorize, userControllers.getById); 14 | 15 | // POST for rotas 16 | userRoutes.post('/registro', userControllers.postRegistro); 17 | userRoutes.post('/login', userControllers.postLogin); 18 | userRoutes.post('/edit', authentication.authorize, userControllers.update); 19 | userRoutes.post('/update/:id', authentication.authorize, userControllers.update); 20 | userRoutes.post('/delete/:id', authentication.authorize, userControllers.delete); 21 | 22 | module.exports = userRoutes; 23 | -------------------------------------------------------------------------------- /src/repositories/product.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('../models/product'); 4 | const mongoose = require('mongoose'); 5 | const product_model = mongoose.model('Produto'); 6 | 7 | class Produto { 8 | // adicionando produto 9 | static async create(id, data) { 10 | const tags = data.tag.split(','); 11 | await product_model(data); 12 | await product_model.insertMany(tags); 13 | return await product_model.save(); 14 | } 15 | 16 | // atualizando produto 17 | static async update(id, data) { 18 | return await product_model.findOneAndUpdate(id, { $set: data }); 19 | } 20 | 21 | // deletando produto 22 | static async delete(id) { 23 | return await product_model.findByIdAndRemove(id); 24 | } 25 | 26 | // buscando 27 | static async getAll() { 28 | return await product_model.find({}); 29 | } 30 | 31 | // verificando se o produto já existe 32 | static async verifyProduct(data) { 33 | return await product_model.findOne(data); 34 | } 35 | } 36 | 37 | module.exports = Produto; 38 | -------------------------------------------------------------------------------- /src/models/order.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const schema = mongoose.Schema; 5 | 6 | const order_model = new schema( 7 | { 8 | customer: { 9 | type: mongoose.Schema.Types.ObjectId, 10 | ref: 'Customer', 11 | }, 12 | number: { 13 | type: String, 14 | required: true, 15 | }, 16 | createDate: { 17 | type: Date, 18 | required: true, 19 | default: Date.now, 20 | }, 21 | status: { 22 | type: String, 23 | required: true, 24 | enum: ['created', 'done'], 25 | default: 'created', 26 | }, 27 | items: [ 28 | { 29 | quantity: { 30 | type: Number, 31 | required: true, 32 | default: 1, 33 | }, 34 | price: { 35 | type: Number, 36 | required: true, 37 | }, 38 | }, 39 | ], 40 | }, 41 | { versionKey: false } 42 | ); 43 | 44 | module.exports = mongoose.model('Order', order_model); 45 | -------------------------------------------------------------------------------- /src/models/product.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const schema = mongoose.Schema; 5 | 6 | const produto_model = new schema( 7 | { 8 | nome: { 9 | type: String, 10 | required: true, 11 | trim: true, 12 | index: true, 13 | }, 14 | description: { 15 | type: String, 16 | required: true, 17 | }, 18 | price: { 19 | type: Number, 20 | required: true, 21 | }, 22 | active: { 23 | type: Boolean, 24 | required: true, 25 | default: true, 26 | }, 27 | tag: [ 28 | { 29 | type: String, 30 | required: true, 31 | }, 32 | ], 33 | dataCriacao: { 34 | type: Date, 35 | default: Date.now, 36 | }, 37 | }, 38 | { versionKey: false } 39 | ); 40 | 41 | produto_model.pre('save', (next) => { 42 | let agora = new Date(); 43 | if (!this.dataCriacao) { 44 | this.dataCriacao = agora; 45 | next(); 46 | } 47 | }); 48 | 49 | module.exports = mongoose.model('Produto', produto_model); 50 | -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.theme.green.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} -------------------------------------------------------------------------------- /src/repositories/user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('../models/user'); 4 | 5 | const mongoose = require('mongoose'); 6 | const userModel = mongoose.model('Usuario'); 7 | 8 | class User { 9 | static async create(data) { 10 | return await userModel(data).save(); 11 | } 12 | 13 | static async update(id, data) { 14 | return await userModel.findOneAndUpdate(id, { $set: data }); 15 | } 16 | 17 | static async delete(id) { 18 | return userModel.findOneAndDelete(id); 19 | } 20 | 21 | static async getById(id) { 22 | return await userModel.findById(id); 23 | } 24 | 25 | static async getAll() { 26 | return await userModel.find({}); 27 | } 28 | 29 | static async registerVerification(data) { 30 | const { email } = data; 31 | const user = await userModel.findOne({ email }); 32 | return user; 33 | } 34 | 35 | static async loginVerification(data) { 36 | const { email, senha } = data; 37 | const user = await userModel.findOne({ email }).select('+senha'); 38 | return user; 39 | } 40 | 41 | static async getUsersQtd() { 42 | const qtd = await userModel.collection.estimatedDocumentCount(); 43 | return qtd; 44 | } 45 | } 46 | 47 | module.exports = User; 48 | -------------------------------------------------------------------------------- /public/css/responsive.css: -------------------------------------------------------------------------------- 1 | @media (max-width: 1200px) { 2 | /* tablet devices */ } 3 | @media (max-width: 992px) { 4 | /* small tablet devices */ 5 | .slider-main .item-slide { 6 | height: auto; } 7 | 8 | .menu-category .submenu { 9 | max-width: 100%; 10 | left: 0; 11 | top: 100%; } 12 | 13 | .border-cols > [class*="col-"] { 14 | border-width: 0 0 1px 1px; } } 15 | @media all and (max-width: 768px) { 16 | /* mobile devices */ 17 | .navbar { 18 | padding: 1rem; } 19 | 20 | .navbar-landing { 21 | transition: .5s; 22 | padding-top: 7px; 23 | padding-bottom: 7px; } 24 | 25 | .nav-item .btn { 26 | margin: 7px 0 !important; } 27 | 28 | .list-inline-item { 29 | vertical-align: middle; 30 | margin-bottom: 5px; 31 | margin-top: 5px; } 32 | 33 | .section-header .logo, .header-main .logo { 34 | max-height: 30px; 35 | width: auto; } 36 | .section-header .logo-text, .header-main .logo-text { 37 | font-size: 24px; } 38 | .section-header .brand-wrap, .section-header .search-wrap, .section-header .widget-header, .header-main .brand-wrap, .header-main .search-wrap, .header-main .widget-header { 39 | margin-bottom: 1rem; } } 40 | 41 | /*# sourceMappingURL=responsive.css.map */ 42 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ecommerce-nodejs", 3 | "version": "1.0.0", 4 | "main": "server.js", 5 | "bin": { 6 | "ionicFood": "express.js" 7 | }, 8 | "dependencies": { 9 | "bcryptjs": "^2.4.3", 10 | "body-parser": "^1.18.3", 11 | "bulma": "^0.7.2", 12 | "connect-flash": "^0.1.1", 13 | "connect-mongo": "^2.0.3", 14 | "consolidate": "^0.15.1", 15 | "cookie-parser": "^1.4.3", 16 | "cors": "^2.8.5", 17 | "csrf": "^3.0.6", 18 | "ejs": "^2.6.1", 19 | "express": "^4.16.4", 20 | "express-flash": "0.0.2", 21 | "express-handlebars": "^3.0.0", 22 | "express-session": "^1.15.6", 23 | "express-validator": "^5.3.0", 24 | "flash": "^1.1.0", 25 | "js-cookie": "^2.2.1", 26 | "jsonwebtoken": "^8.4.0", 27 | "localtoken": "^0.1.2", 28 | "md5": "^2.2.1", 29 | "mongodb": "^3.1.10", 30 | "mongoose": "^5.3.13", 31 | "node-sessionstorage": "^1.0.0", 32 | "nodemon": "^1.18.9", 33 | "passport": "^0.4.0", 34 | "passport-local": "^1.0.0" 35 | }, 36 | "devDependencies": {}, 37 | "scripts": { 38 | "test": "echo \"Error: no test specified\" && exit 1", 39 | "start": "nodemon ./src/app.js" 40 | }, 41 | "keywords": [], 42 | "author": "", 43 | "license": "ISC", 44 | "description": "" 45 | } 46 | -------------------------------------------------------------------------------- /src/controller/category.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const Categoria = require('../repositories/category'); 3 | 4 | exports.get = async (req, res, next) => { 5 | try { 6 | let categorias = await Categoria.getAll(); 7 | res.render('pages/categoria/_list', { categorias: categorias }); 8 | } catch (err) { 9 | next(err); 10 | } 11 | }; 12 | 13 | exports.getById = async (req, res, next) => { 14 | try { 15 | let categoria = await Categoria.getById(req.params.id); 16 | res.send(categoria); 17 | } catch (err) { 18 | next(err); 19 | } 20 | }; 21 | 22 | exports.post = async (req, res, next) => { 23 | try { 24 | await Categoria.create(req.body); 25 | res.redirect('/api/categoria'); 26 | } catch (err) { 27 | next(err); 28 | } 29 | }; 30 | 31 | exports.put = async (req, res, next) => { 32 | let resultado = await Categoria.update(req.params.id, req.body); 33 | res.send(resultado); 34 | }; 35 | 36 | exports.delete = async (req, res) => { 37 | let deletado = await Categoria.delete(req.params.id); 38 | res.send(deletado); 39 | }; 40 | 41 | exports.register = async (req, res, next) => { 42 | try { 43 | let categorias = await Categoria.getAll(); 44 | res.render('pages/admin/register-category', { categorias: categorias }); 45 | } catch (err) { 46 | next(err); 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /views/pages/errors/500.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

500

9 |
10 |
11 |

Desculpe!

12 |

Ocorreu um erro interno!

13 |
14 |
15 |
16 |
17 | Voltar 18 |
19 |
20 |
21 |
22 |

Copyright © 2018 All rights reserved.

23 |
24 |
25 |
26 |
27 |
28 |
29 |
-------------------------------------------------------------------------------- /src/config/server.js: -------------------------------------------------------------------------------- 1 | // módulos 2 | const express = require('express'); 3 | const bodyParser = require('body-parser'); 4 | const mongoose = require('mongoose'); 5 | const hbs = require('express-handlebars'); 6 | 7 | const environments = require('../env'); 8 | 9 | // app 10 | const app = express(); 11 | 12 | // chamando as rotas 13 | const userRoutes = require('../routes/user.routes'); 14 | const productRoutes = require('../routes/product.routes'); 15 | 16 | // configurando a conexao com o bando de dados 17 | mongoose.Promise = global.Promise; 18 | mongoose.connect(environments.database.connection, { 19 | useNewUrlParser: true, 20 | useUnifiedTopology: true, 21 | useCreateIndex: true, 22 | }); 23 | 24 | // configurando o parse 25 | app.use(bodyParser.json({ limit: '5mb' })); 26 | app.use(bodyParser.urlencoded({ extended: true })); 27 | 28 | // definindo o meu template engine 29 | app.engine('handlebars', hbs({ defaultLayout: 'main' })); 30 | 31 | // definindo o motor de renderização 32 | app.set('view engine', 'handlebars'); 33 | 34 | // carregando arquivos estáticos 35 | app.use(express.static('public')); 36 | 37 | // nomeando as rotas 38 | app.use('/api/usuario', userRoutes); 39 | app.use('/api/produto', productRoutes); 40 | 41 | app.use('/', (req, res, next) => { 42 | res.render('home'); 43 | }); // rota principal 44 | app.use((req, res, next) => { 45 | res.render('pages/errors/404'); 46 | }); // tratamento para erro 404 47 | app.use((err, req, res, next) => { 48 | res.send(err); 49 | }); // tratamento para demais erros 50 | 51 | module.exports = app; 52 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon { 5 | -webkit-font-smoothing: antialiased; 6 | -moz-osx-font-smoothing: grayscale; 7 | display: inline-block; 8 | font-style: normal; 9 | font-variant: normal; 10 | font-weight: normal; 11 | line-height: 1; 12 | vertical-align: -.125em; 13 | } 14 | 15 | @mixin fa-icon-rotate($degrees, $rotation) { 16 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 22 | transform: scale($horiz, $vert); 23 | } 24 | 25 | 26 | // Only display content to screen readers. A la Bootstrap 4. 27 | // 28 | // See: http://a11yproject.com/posts/how-to-hide-content/ 29 | 30 | @mixin sr-only { 31 | border: 0; 32 | clip: rect(0, 0, 0, 0); 33 | height: 1px; 34 | margin: -1px; 35 | overflow: hidden; 36 | padding: 0; 37 | position: absolute; 38 | width: 1px; 39 | } 40 | 41 | // Use in conjunction with .sr-only to only display content when it's focused. 42 | // 43 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 44 | // 45 | // Credit: HTML5 Boilerplate 46 | 47 | @mixin sr-only-focusable { 48 | &:active, 49 | &:focus { 50 | clip: auto; 51 | height: auto; 52 | margin: 0; 53 | overflow: visible; 54 | position: static; 55 | width: auto; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.theme.green.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Green theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #4DC7A0; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #4DC7A0; } 51 | -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.theme.default.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Default theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #869791; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #869791; } 51 | -------------------------------------------------------------------------------- /views/layouts/main.handlebars: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Painel Administrativo 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 47 | 48 | {{>_navbar}} 49 | {{{body}}} 50 | {{>_footer}} 51 | 52 | 53 | -------------------------------------------------------------------------------- /views/pages/produtos/products.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 | 14 |
15 |
16 | 17 |
18 |
19 | 33 |
34 |
35 | 36 |
37 |
38 | 49 |
50 |
51 | 52 |
53 |
54 | 68 |
69 |
-------------------------------------------------------------------------------- /views/pages/user/_login.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

Login

9 |
10 | {{#if error}} 11 |
12 | {{error}} 13 |
14 | {{/if}} 15 | {{#if success}} 16 |
17 | {{success}} 18 |
19 | {{/if}} 20 | {{#if token}} 21 | 22 | {{/if}} 23 |
24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 |
33 |
34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 | 42 |
43 |

Esqueceu a senha?

44 |
45 |
46 |
47 |
48 |
49 |
50 |
-------------------------------------------------------------------------------- /views/pages/user/_user-edit.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

Edição de usuário

9 |
10 | {{#if error}} 11 |
12 | {{error}} 13 |
14 | {{/if}} 15 | {{#if success}} 16 |
17 | {{success}} 18 |
19 | {{/if}} 20 | {{#if token}} 21 | 22 | {{/if}} 23 |
24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 |
33 |
34 |
35 | 36 |
37 | 39 |
40 |
41 |
42 | 43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
-------------------------------------------------------------------------------- /public/plugins/slickslider/fonts/slick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /views/pages/user/_users-list.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{#each user}} 14 | 15 | 33 | 34 | 35 | 50 | 51 | {{else}} 52 |
53 | Nenhum usuário na lista! 54 |
55 | {{/each}} 56 | 57 |
Lista de usuários
16 |
17 |
18 | 19 |
20 |
21 |
{{nome}}
22 |
23 |
Email:
24 |
{{email}}
25 |
26 |
27 |
Perfil criado em:
28 |
À definir
29 |
30 |
31 |
32 |
36 | 37 | 38 | 39 | 40 |
41 | 42 | 47 |
48 |
49 |
58 |
59 |
-------------------------------------------------------------------------------- /public/plugins/slickslider/slick.css: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | .slick-slider 3 | { 4 | position: relative; 5 | 6 | display: block; 7 | box-sizing: border-box; 8 | 9 | -webkit-user-select: none; 10 | -moz-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | 14 | -webkit-touch-callout: none; 15 | -khtml-user-select: none; 16 | -ms-touch-action: pan-y; 17 | touch-action: pan-y; 18 | -webkit-tap-highlight-color: transparent; 19 | } 20 | 21 | .slick-list 22 | { 23 | position: relative; 24 | 25 | display: block; 26 | overflow: hidden; 27 | 28 | margin: 0; 29 | padding: 0; 30 | } 31 | .slick-list:focus 32 | { 33 | outline: none; 34 | } 35 | .slick-list.dragging 36 | { 37 | cursor: pointer; 38 | cursor: hand; 39 | } 40 | 41 | .slick-slider .slick-track, 42 | .slick-slider .slick-list 43 | { 44 | -webkit-transform: translate3d(0, 0, 0); 45 | -moz-transform: translate3d(0, 0, 0); 46 | -ms-transform: translate3d(0, 0, 0); 47 | -o-transform: translate3d(0, 0, 0); 48 | transform: translate3d(0, 0, 0); 49 | } 50 | 51 | .slick-track 52 | { 53 | position: relative; 54 | top: 0; 55 | left: 0; 56 | 57 | display: block; 58 | margin-left: auto; 59 | margin-right: auto; 60 | } 61 | .slick-track:before, 62 | .slick-track:after 63 | { 64 | display: table; 65 | 66 | content: ''; 67 | } 68 | .slick-track:after 69 | { 70 | clear: both; 71 | } 72 | .slick-loading .slick-track 73 | { 74 | visibility: hidden; 75 | } 76 | 77 | .slick-slide 78 | { 79 | display: none; 80 | float: left; 81 | 82 | height: 100%; 83 | min-height: 1px; 84 | } 85 | [dir='rtl'] .slick-slide 86 | { 87 | float: right; 88 | } 89 | .slick-slide img 90 | { 91 | display: block; width:100%; 92 | } 93 | .slick-slide.slick-loading img 94 | { 95 | display: none; 96 | } 97 | .slick-slide.dragging img 98 | { 99 | pointer-events: none; 100 | } 101 | .slick-initialized .slick-slide 102 | { 103 | display: block; 104 | } 105 | .slick-loading .slick-slide 106 | { 107 | visibility: hidden; 108 | } 109 | .slick-vertical .slick-slide 110 | { 111 | display: block; 112 | 113 | height: auto; 114 | 115 | border: 1px solid transparent; 116 | } 117 | .slick-arrow.slick-hidden { 118 | display: none; 119 | } 120 | -------------------------------------------------------------------------------- /views/pages/user/_register.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

Registro

9 |
10 | {{#if error}} 11 |
12 | {{error}} 13 |
14 | {{/if}} 15 | {{#if success}} 16 |
17 | {{success}} 18 |
19 | {{/if}} 20 | {{#if token}} 21 | 22 | {{/if}} 23 |
24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 |
33 |
34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 |
42 |
43 | 44 |
45 | 46 |
47 |
48 |
49 | 50 |
51 |

Esqueceu a senha?

52 |
53 |
54 |
55 |
56 |
57 |
58 |
-------------------------------------------------------------------------------- /public/plugins/prism/prism.css: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.11.0 2 | http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ 3 | /** 4 | * prism.js default theme for JavaScript, CSS and HTML 5 | * Based on dabblet (http://dabblet.com) 6 | * @author Lea Verou 7 | */ 8 | 9 | code[class*="language-"], 10 | pre[class*="language-"] { 11 | color: black; 12 | background: none; 13 | text-shadow: 0 1px white; 14 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 15 | text-align: left; 16 | white-space: pre; 17 | word-spacing: normal; 18 | word-break: normal; 19 | word-wrap: normal; 20 | line-height: 1.5; 21 | 22 | -moz-tab-size: 4; 23 | -o-tab-size: 4; 24 | tab-size: 4; 25 | 26 | -webkit-hyphens: none; 27 | -moz-hyphens: none; 28 | -ms-hyphens: none; 29 | hyphens: none; 30 | } 31 | 32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 34 | text-shadow: none; 35 | background: #b3d4fc; 36 | } 37 | 38 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 39 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 40 | text-shadow: none; 41 | background: #b3d4fc; 42 | } 43 | 44 | @media print { 45 | code[class*="language-"], 46 | pre[class*="language-"] { 47 | text-shadow: none; 48 | } 49 | } 50 | 51 | /* Code blocks */ 52 | pre[class*="language-"] { 53 | padding: 0 1em; 54 | margin: 0 0; 55 | overflow: auto; 56 | } 57 | 58 | :not(pre) > code[class*="language-"], 59 | pre[class*="language-"] { 60 | background: #f5f2f0; 61 | } 62 | 63 | /* Inline code */ 64 | :not(pre) > code[class*="language-"] { 65 | padding: .1em; 66 | border-radius: .3em; 67 | white-space: normal; 68 | } 69 | 70 | .token.comment, 71 | .token.prolog, 72 | .token.doctype, 73 | .token.cdata { 74 | color: slategray; 75 | } 76 | 77 | .token.punctuation { 78 | color: #999; 79 | } 80 | 81 | .namespace { 82 | opacity: .7; 83 | } 84 | 85 | .token.property, 86 | .token.tag, 87 | .token.boolean, 88 | .token.number, 89 | .token.constant, 90 | .token.symbol, 91 | .token.deleted { 92 | color: #905; 93 | } 94 | 95 | .token.selector, 96 | .token.attr-name, 97 | .token.string, 98 | .token.char, 99 | .token.builtin, 100 | .token.inserted { 101 | color: #690; 102 | } 103 | 104 | .token.operator, 105 | .token.entity, 106 | .token.url, 107 | .language-css .token.string, 108 | .style .token.string { 109 | color: #a67f59; 110 | background: hsla(0, 0%, 100%, .5); 111 | } 112 | 113 | .token.atrule, 114 | .token.attr-value, 115 | .token.keyword { 116 | color: #07a; 117 | } 118 | 119 | .token.function { 120 | color: #DD4A68; 121 | } 122 | 123 | .token.regex, 124 | .token.important, 125 | .token.variable { 126 | color: #e90; 127 | } 128 | 129 | .token.important, 130 | .token.bold { 131 | font-weight: bold; 132 | } 133 | .token.italic { 134 | font-style: italic; 135 | } 136 | 137 | .token.entity { 138 | cursor: help; 139 | } 140 | 141 | -------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{border:none;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /src/controller/user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const User = require('../repositories/user'); // acessando repositorio do banco de dados 4 | const auth = require('../middlewares/authentication'); // token 5 | const crypt = require('bcryptjs'); // para criptografar a senha 6 | const cookie = require('js-cookie').noConflict; 7 | 8 | // buscando usuario 9 | exports.get = async (req, res, next) => { 10 | try { 11 | console.log('1'); 12 | const users = await User.getAll(); 13 | console.log(users); 14 | const qtd = await User.getUsersQtd(); 15 | return res.render('pages/user/_users-list', { user: users, qtd: qtd }); 16 | } catch (err) { 17 | next(err); 18 | } 19 | }; 20 | 21 | // buscando usuario pela ID 22 | exports.getById = async (req, res, next) => { 23 | try { 24 | const user = await User.getById(req.params.id); 25 | if (user) { 26 | return res.render('pages/user/_user-edit', { 27 | user: user, 28 | success: 'Encontramos o usuário!', 29 | }); 30 | } else { 31 | return res.render('pages/user/_user-edit', { 32 | error: 'Não conseguimos encontrar o usuário!', 33 | }); 34 | } 35 | } catch (err) { 36 | next(err); 37 | } 38 | }; 39 | 40 | // atualizando usuario 41 | exports.update = async (req, res, next) => { 42 | try { 43 | await User.update(req.params.id, req.body); 44 | return res.render('pages/user/_user-edit', { 45 | success: 'Dados atualizados com sucesso!', 46 | }); 47 | } catch (err) { 48 | next(err); 49 | } 50 | }; 51 | 52 | // deletando usuario 53 | exports.delete = async (req, res, next) => { 54 | try { 55 | await User.delete(req.params.id); 56 | return res.redirect('/api/usuario'); 57 | } catch (err) { 58 | next(err); 59 | } 60 | }; 61 | 62 | // GET for registro de usuário 63 | exports.getRegistro = (req, res) => { 64 | return res.render('pages/user/_register'); 65 | }; 66 | 67 | // POST for registro de usuário 68 | exports.postRegistro = async (req, res, next) => { 69 | try { 70 | const user = await User.registerVerification(req.body); 71 | if (!user) { 72 | await User.create(req.body); 73 | return res.render('pages/user/_register', { 74 | success: 'Usuário cadastrado com sucesso!', 75 | }); 76 | } else { 77 | return res.render('pages/user/_register', { 78 | error: 'Usuário já foi cadastrado!', 79 | }); 80 | } 81 | } catch (err) { 82 | next(err); 83 | } 84 | }; 85 | 86 | // GET for login de usuário 87 | exports.getLogin = (req, res) => { 88 | return res.render('pages/user/_login'); 89 | }; 90 | 91 | // POST for login de usuário 92 | exports.postLogin = async (req, res, next) => { 93 | try { 94 | const user = await User.loginVerification(req.body); 95 | 96 | if (!user) { 97 | // se o usuario nao existe... 98 | return res.render('pages/user/_login', { 99 | error: 'O Usuário não foi encontrado!', 100 | }); 101 | } 102 | 103 | if (!(await crypt.compare(req.body.senha, user.senha))) { 104 | // se as senhas nao combinam... 105 | return res.render('pages/user/_login', { error: 'Senha inválida!' }); 106 | } 107 | 108 | const token = auth.generateToken({ user }); 109 | console.log(token); 110 | cookie.set('login', token, { expires: 1 }); 111 | console.log(cookie.getJSON('login')); 112 | 113 | return res.render('pages/user/_login', { 114 | success: 'Usuário logado com sucesso!', 115 | }); 116 | } catch (err) { 117 | next(err); 118 | } 119 | }; 120 | 121 | // logout - removendo token da 'sessão' 122 | exports.logout = (req, res, next) => { 123 | try { 124 | cookie.remove('login'); 125 | return res.redirect('/'); 126 | } catch (err) { 127 | next(err); 128 | } 129 | }; 130 | -------------------------------------------------------------------------------- /public/js/script.js: -------------------------------------------------------------------------------- 1 | // some scripts 2 | 3 | // jquery ready start 4 | $(document).ready(function() { 5 | // jQuery code 6 | 7 | 8 | 9 | 10 | /* /////////////////////////////////////// 11 | 12 | THESE FOLLOWING SCRIPTS ONLY FOR BASIC USAGE, 13 | For sliders, interactions and other 14 | 15 | */ /////////////////////////////////////// 16 | 17 | 18 | //////////////////////// Prevent closing from click inside dropdown 19 | $(document).on('click', '.dropdown-menu', function (e) { 20 | e.stopPropagation(); 21 | }); 22 | 23 | ///////////////// fixed menu on scroll for desctop 24 | if ($(window).width() > 768) { 25 | 26 | $(window).scroll(function(){ 27 | if ($(this).scrollTop() > 125) { 28 | $('.navbar-landing').addClass("fixed-top"); 29 | }else{ 30 | $('.navbar-landing').removeClass("fixed-top"); 31 | } 32 | }); 33 | } // end if 34 | 35 | //////////////////////// Fancybox. /plugins/fancybox/ 36 | if($("[data-fancybox]").length>0) { // check if element exists 37 | $("[data-fancybox]").fancybox(); 38 | } // end if 39 | 40 | //////////////////////// Bootstrap tooltip 41 | if($('[data-toggle="tooltip"]').length>0) { // check if element exists 42 | $('[data-toggle="tooltip"]').tooltip() 43 | } // end if 44 | 45 | /////////////////////// Closes the Responsive Menu on Menu Item Click 46 | $('.navbar-collapse ul li a.page-scroll').click(function() { 47 | $('.navbar-toggler:visible').click(); 48 | }); 49 | 50 | //////////////////////// Menu scroll to section for landing 51 | $('a.page-scroll').click(function(event) { 52 | var $anchor = $(this); 53 | $('html, body').stop().animate({ scrollTop: $($anchor.attr('href')).offset().top - 50 }, 1000); 54 | event.preventDefault(); 55 | }); 56 | 57 | ///////////////// items slider. /plugins/slickslider/ 58 | if ($('.slick-slider').length > 0) { // check if element exists 59 | $('.slick-slider').slick(); 60 | } // end if 61 | 62 | ///////////////// items carousel. /plugins/owlcarousel/ 63 | if ($('.owl-init').length > 0) { // check if element exists 64 | 65 | $(".owl-init").each(function(){ 66 | 67 | var myOwl = $(this); 68 | var data_items = myOwl.data('items'); 69 | var data_nav = myOwl.data('nav'); 70 | var data_dots = myOwl.data('dots'); 71 | var data_margin = myOwl.data('margin'); 72 | var data_custom_nav = myOwl.data('custom-nav'); 73 | var id_owl = myOwl.attr('id'); 74 | 75 | myOwl.owlCarousel({ 76 | loop: true, 77 | margin: data_margin, 78 | nav: eval(data_nav), 79 | dots: eval(data_dots), 80 | autoplay: false, 81 | items: data_items, 82 | navText: ["", ""], 83 | //items: 4, 84 | responsive: { 85 | 0: { 86 | items: 1 87 | }, 88 | 600: { 89 | items: data_items 90 | }, 91 | 1000: { 92 | items: data_items 93 | } 94 | } 95 | }); 96 | 97 | // for custom navigation. See example page: example-sliders.html 98 | $('.'+data_custom_nav+'.owl-custom-next').click(function(){ 99 | $('#'+id_owl).trigger('next.owl.carousel'); 100 | }); 101 | 102 | $('.'+data_custom_nav+'.owl-custom-prev').click(function(){ 103 | $('#'+id_owl).trigger('prev.owl.carousel'); 104 | }); 105 | 106 | }); // each end.// 107 | } // end if 108 | 109 | 110 | }); 111 | // jquery end 112 | 113 | -------------------------------------------------------------------------------- /public/plugins/slickslider/slick-theme.css: -------------------------------------------------------------------------------- 1 | @charset 'UTF-8'; 2 | /* Slider */ 3 | .slick-loading .slick-list 4 | { 5 | background: #fff url('./ajax-loader.gif') center center no-repeat; 6 | } 7 | 8 | /* Icons */ 9 | @font-face 10 | { 11 | font-family: 'slick'; 12 | font-weight: normal; 13 | font-style: normal; 14 | 15 | src: url('./fonts/slick.eot'); 16 | src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg'); 17 | } 18 | /* Arrows */ 19 | .slick-prev, 20 | .slick-next 21 | { 22 | font-size: 0; 23 | line-height: 0; 24 | 25 | position: absolute; 26 | top: 50%; 27 | 28 | display: block; 29 | 30 | width: 20px; 31 | height: 20px; 32 | padding: 0; 33 | -webkit-transform: translate(0, -50%); 34 | -ms-transform: translate(0, -50%); 35 | transform: translate(0, -50%); 36 | 37 | cursor: pointer; 38 | 39 | color: transparent; 40 | border: none; 41 | outline: none; 42 | background: transparent; 43 | } 44 | .slick-prev:hover, 45 | .slick-prev:focus, 46 | .slick-next:hover, 47 | .slick-next:focus 48 | { 49 | color: transparent; 50 | outline: none; 51 | background: transparent; 52 | } 53 | .slick-prev:hover:before, 54 | .slick-prev:focus:before, 55 | .slick-next:hover:before, 56 | .slick-next:focus:before 57 | { 58 | opacity: 1; 59 | } 60 | .slick-prev.slick-disabled:before, 61 | .slick-next.slick-disabled:before 62 | { 63 | opacity: .25; 64 | } 65 | 66 | .slick-prev:before, 67 | .slick-next:before 68 | { 69 | font-family: 'slick'; 70 | font-size: 20px; 71 | line-height: 1; 72 | 73 | opacity: .75; 74 | color: rgba(0,0,0,.3); 75 | 76 | -webkit-font-smoothing: antialiased; 77 | -moz-osx-font-smoothing: grayscale; 78 | } 79 | 80 | .slick-prev 81 | { 82 | left: -25px; 83 | } 84 | [dir='rtl'] .slick-prev 85 | { 86 | right: -25px; 87 | left: auto; 88 | } 89 | .slick-prev:before 90 | { 91 | content: '←'; 92 | } 93 | [dir='rtl'] .slick-prev:before 94 | { 95 | content: '→'; 96 | } 97 | 98 | .slick-next 99 | { 100 | right: -25px; 101 | } 102 | [dir='rtl'] .slick-next 103 | { 104 | right: auto; 105 | left: -25px; 106 | } 107 | .slick-next:before 108 | { 109 | content: '→'; 110 | } 111 | [dir='rtl'] .slick-next:before 112 | { 113 | content: '←'; 114 | } 115 | 116 | /* Dots */ 117 | .slick-dotted.slick-slider 118 | { 119 | margin-bottom: 30px; 120 | } 121 | 122 | .slick-dots 123 | { 124 | position: absolute; 125 | bottom: -25px; 126 | 127 | display: block; 128 | 129 | width: 100%; 130 | padding: 0; 131 | margin: 0; 132 | 133 | list-style: none; 134 | 135 | text-align: center; 136 | } 137 | .slick-dots li 138 | { 139 | position: relative; 140 | 141 | display: inline-block; 142 | 143 | width: 20px; 144 | height: 20px; 145 | margin: 0 5px; 146 | padding: 0; 147 | 148 | cursor: pointer; 149 | } 150 | .slick-dots li button 151 | { 152 | font-size: 0; 153 | line-height: 0; 154 | 155 | display: block; 156 | 157 | width: 20px; 158 | height: 20px; 159 | padding: 5px; 160 | 161 | cursor: pointer; 162 | 163 | color: transparent; 164 | border: 0; 165 | outline: none; 166 | background: transparent; 167 | } 168 | .slick-dots li button:hover, 169 | .slick-dots li button:focus 170 | { 171 | outline: none; 172 | } 173 | .slick-dots li button:hover:before, 174 | .slick-dots li button:focus:before 175 | { 176 | opacity: 1; 177 | } 178 | .slick-dots li button:before 179 | { 180 | font-family: 'slick'; 181 | font-size: 6px; 182 | line-height: 20px; 183 | 184 | position: absolute; 185 | top: 0; 186 | left: 0; 187 | 188 | width: 20px; 189 | height: 20px; 190 | 191 | content: '•'; 192 | text-align: center; 193 | 194 | opacity: .25; 195 | color: black; 196 | 197 | -webkit-font-smoothing: antialiased; 198 | -moz-osx-font-smoothing: grayscale; 199 | } 200 | .slick-dots li.slick-active button:before 201 | { 202 | opacity: .75; 203 | color: black; 204 | } 205 | -------------------------------------------------------------------------------- /views/partials/_navbar.handlebars: -------------------------------------------------------------------------------- 1 |
2 | 29 | 30 |
31 |
32 | 110 |
111 |
112 |
-------------------------------------------------------------------------------- /views/pages/errors/404.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

404

9 |
10 |
11 |

Desculpe!

12 |

Página não encontrada.

13 |
14 |
15 |
16 |
17 | Voltar 18 |
19 |
20 |
21 |
22 |

Copyright © 2018 All rights reserved.

23 |
24 |
25 |
26 |
27 |
28 |
29 | 30 | 57 | 58 |
59 |
60 | 61 |
67 | 68 |

Lorem ipsum dolor sit amet constur adipisicing elit sed eiusmtempor incid sed dolore magna aliqu enim minim veniam quis nostrud exercittion ullamco labo ris nisi aliquip excepteur.

69 |

Julia Robertson

70 |
Happy Clients
71 |
77 | 78 | 79 | 80 | 81 |
82 |
83 |
-------------------------------------------------------------------------------- /public/plugins/owlcarousel/assets/owl.carousel.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | /* 7 | * Owl Carousel - Core 8 | */ 9 | .owl-carousel { 10 | display: none; 11 | width: 100%; 12 | -webkit-tap-highlight-color: transparent; 13 | /* position relative and z-index fix webkit rendering fonts issue */ 14 | position: relative; 15 | z-index: 1; } 16 | .owl-carousel .owl-stage { 17 | position: relative; 18 | -ms-touch-action: pan-Y; 19 | touch-action: manipulation; 20 | -moz-backface-visibility: hidden; 21 | /* fix firefox animation glitch */ } 22 | .owl-carousel .owl-stage:after { 23 | content: "."; 24 | display: block; 25 | clear: both; 26 | visibility: hidden; 27 | line-height: 0; 28 | height: 0; } 29 | .owl-carousel .owl-stage-outer { 30 | position: relative; 31 | overflow: hidden; 32 | /* fix for flashing background */ 33 | -webkit-transform: translate3d(0px, 0px, 0px); } 34 | .owl-carousel .owl-wrapper, 35 | .owl-carousel .owl-item { 36 | -webkit-backface-visibility: hidden; 37 | -moz-backface-visibility: hidden; 38 | -ms-backface-visibility: hidden; 39 | -webkit-transform: translate3d(0, 0, 0); 40 | -moz-transform: translate3d(0, 0, 0); 41 | -ms-transform: translate3d(0, 0, 0); } 42 | .owl-carousel .owl-item { 43 | position: relative; 44 | min-height: 1px; 45 | float: left; 46 | -webkit-backface-visibility: hidden; 47 | -webkit-tap-highlight-color: transparent; 48 | -webkit-touch-callout: none; } 49 | .owl-carousel .owl-item img { 50 | display: block; 51 | width: 100%; } 52 | .owl-carousel .owl-nav.disabled, 53 | .owl-carousel .owl-dots.disabled { 54 | display: none; } 55 | .owl-carousel .owl-nav .owl-prev, 56 | .owl-carousel .owl-nav .owl-next, 57 | .owl-carousel .owl-dot { 58 | cursor: pointer; 59 | -webkit-user-select: none; 60 | -khtml-user-select: none; 61 | -moz-user-select: none; 62 | -ms-user-select: none; 63 | user-select: none; } 64 | .owl-carousel .owl-nav button.owl-prev, 65 | .owl-carousel .owl-nav button.owl-next, 66 | .owl-carousel button.owl-dot { 67 | border: none; 68 | font: inherit; } 69 | .owl-carousel.owl-loaded { 70 | display: block; } 71 | .owl-carousel.owl-loading { 72 | opacity: 0; 73 | display: block; } 74 | .owl-carousel.owl-hidden { 75 | opacity: 0; } 76 | .owl-carousel.owl-refresh .owl-item { 77 | visibility: hidden; } 78 | .owl-carousel.owl-drag .owl-item { 79 | -ms-touch-action: pan-y; 80 | touch-action: pan-y; 81 | -webkit-user-select: none; 82 | -moz-user-select: none; 83 | -ms-user-select: none; 84 | user-select: none; } 85 | .owl-carousel.owl-grab { 86 | cursor: move; 87 | cursor: grab; } 88 | .owl-carousel.owl-rtl { 89 | direction: rtl; } 90 | .owl-carousel.owl-rtl .owl-item { 91 | float: right; } 92 | 93 | /* No Js */ 94 | .no-js .owl-carousel { 95 | display: block; } 96 | 97 | /* 98 | * Owl Carousel - Animate Plugin 99 | */ 100 | .owl-carousel .animated { 101 | animation-duration: 1000ms; 102 | animation-fill-mode: both; } 103 | 104 | .owl-carousel .owl-animated-in { 105 | z-index: 0; } 106 | 107 | .owl-carousel .owl-animated-out { 108 | z-index: 1; } 109 | 110 | .owl-carousel .fadeOut { 111 | animation-name: fadeOut; } 112 | 113 | @keyframes fadeOut { 114 | 0% { 115 | opacity: 1; } 116 | 100% { 117 | opacity: 0; } } 118 | 119 | /* 120 | * Owl Carousel - Auto Height Plugin 121 | */ 122 | .owl-height { 123 | transition: height 500ms ease-in-out; } 124 | 125 | /* 126 | * Owl Carousel - Lazy Load Plugin 127 | */ 128 | .owl-carousel .owl-item { 129 | /** 130 | This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong 131 | calculation of the height of the owl-item that breaks page layouts 132 | */ } 133 | .owl-carousel .owl-item .owl-lazy { 134 | opacity: 0; 135 | transition: opacity 400ms ease; } 136 | .owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) { 137 | max-height: 0; } 138 | .owl-carousel .owl-item img.owl-lazy { 139 | transform-style: preserve-3d; } 140 | 141 | /* 142 | * Owl Carousel - Video Plugin 143 | */ 144 | .owl-carousel .owl-video-wrapper { 145 | position: relative; 146 | height: 100%; 147 | background: #000; } 148 | 149 | .owl-carousel .owl-video-play-icon { 150 | position: absolute; 151 | height: 80px; 152 | width: 80px; 153 | left: 50%; 154 | top: 50%; 155 | margin-left: -40px; 156 | margin-top: -40px; 157 | background: url("owl.video.play.png") no-repeat; 158 | cursor: pointer; 159 | z-index: 1; 160 | -webkit-backface-visibility: hidden; 161 | transition: transform 100ms ease; } 162 | 163 | .owl-carousel .owl-video-play-icon:hover { 164 | -ms-transform: scale(1.3, 1.3); 165 | transform: scale(1.3, 1.3); } 166 | 167 | .owl-carousel .owl-video-playing .owl-video-tn, 168 | .owl-carousel .owl-video-playing .owl-video-play-icon { 169 | display: none; } 170 | 171 | .owl-carousel .owl-video-tn { 172 | opacity: 0; 173 | height: 100%; 174 | background-position: center center; 175 | background-repeat: no-repeat; 176 | background-size: contain; 177 | transition: opacity 400ms ease; } 178 | 179 | .owl-carousel .owl-video-frame { 180 | position: relative; 181 | z-index: 1; 182 | height: 100%; 183 | width: 100%; } 184 | -------------------------------------------------------------------------------- /views/home.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 12 |
13 |

14 |
15 |
16 |
17 | LANÇAR TAGS AQUI 18 |
19 |
20 |
TÍTULO DO PRODUTO
21 |
22 |
    23 |
  • 24 | 25 | 26 | 27 |
  • 28 |
  • 29 | 30 | 31 | 32 |
  • 33 |
34 |
132 visualizações
35 |
154 pessoas compraram
36 |
37 |

38 | 39 | Adicionar ao carrinho 40 | 41 |

42 |
43 |
44 |
45 |
46 |
47 | LANÇAR TAGS AQUI 48 |
49 |
50 |
TÍTULO DO PRODUTO
51 |
52 |
    53 |
  • 54 | 55 | 56 | 57 |
  • 58 |
  • 59 | 60 | 61 | 62 |
  • 63 |
64 |
132 visualizações
65 |
154 pessoas compraram
66 |
67 |

68 | 69 | Adicionar ao carrinho 70 | 71 |

72 |
73 |
74 |
75 |
76 |
77 | LANÇAR TAGS AQUI 78 |
79 |
80 |
TÍTULO DO PRODUTO
81 |
82 |
    83 |
  • 84 | 85 | 86 | 87 |
  • 88 |
  • 89 | 90 | 91 | 92 |
  • 93 |
94 |
132 visualizações
95 |
154 pessoas compraram
96 |
97 |

98 | 99 | Adicionar ao carrinho 100 | 101 |

102 |
103 |
104 |
105 |
106 |
107 | LANÇAR TAGS AQUI 108 |
109 |
110 |
TÍTULO DO PRODUTO
111 |
112 |
    113 |
  • 114 | 115 | 116 | 117 |
  • 118 |
  • 119 | 120 | 121 | 122 |
  • 123 |
124 |
132 visualizações
125 |
154 pessoas compraram
126 |
127 |

128 | 129 | Adicionar ao carrinho 130 | 131 |

132 |
133 |
134 |
135 |
136 |
137 | 138 | -------------------------------------------------------------------------------- /views/pages/produtos/product-datail.handlebars: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 17 | 101 |
102 |
103 | 104 | 105 |
106 |
107 |

Detail overview

108 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 109 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 110 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 111 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 112 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 113 | proident, sunt in culpa qui officia ididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 114 | quis nostrud exercitation ullamco laboris nisi deserunt mollit anim id est laborum.

115 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 116 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 117 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 118 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 119 | cillum dolore eu fugiat nulla pariatur. Excepteurididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 120 | quis nostrud exercitation ullamco laboris nisi sint occaecat cupidatat non 121 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

122 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 123 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 124 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 125 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 126 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 127 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

128 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 129 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 130 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 131 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 132 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 133 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

134 |
135 |
136 | 137 |
138 | 139 | -------------------------------------------------------------------------------- /public/plugins/prism/prism.js: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.11.0 2 | http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ 3 | var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof r?new r(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(w instanceof s)){h.lastIndex=0;var _=h.exec(w),P=1;if(!_&&m&&b!=t.length-1){if(h.lastIndex=k,_=h.exec(e),!_)break;for(var A=_.index+(d?_[1].length:0),j=_.index+_[0].length,x=b,O=k,N=t.length;N>x&&(j>O||!t[x].type&&!t[x-1].greedy);++x)O+=t[x].length,A>=O&&(++b,k=O);if(t[b]instanceof s||t[x-1].greedy)continue;P=x-b,w=e.slice(k,O),_.index-=k}if(_){d&&(p=_[1].length);var A=_.index+p,_=_[0].slice(p),j=A+_.length,S=w.slice(0,A),C=w.slice(j),M=[b,P];S&&(++b,k+=S.length,M.push(S));var E=new s(g,f?n.tokenize(_,f):_,y,_,m);if(M.push(E),C&&M.push(C),Array.prototype.splice.apply(t,M),1!=P&&n.matchGrammar(e,t,r,b,k,!0,g),i)break}else if(i)break}}}}},tokenize:function(e,t){var r=[e],a=t.rest;if(a){for(var l in a)t[l]=a[l];delete t.rest}return n.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){var r=n.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){var r=n.hooks.all[e];if(r&&r.length)for(var a,l=0;a=r[l++];)a(t)}}},r=n.Token=function(e,t,n,r,a){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!a};if(r.stringify=function(e,t,a){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return r.stringify(n,t,e)}).join("");var l={type:e.type,content:r.stringify(e.content,t,a),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:a};if(e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o=Object.keys(l.attributes).map(function(e){return e+'="'+(l.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+l.tag+' class="'+l.classes.join(" ")+'"'+(o?" "+o:"")+">"+l.content+""},!_self.document)return _self.addEventListener?(n.disableWorkerMessageHandler||_self.addEventListener("message",function(e){var t=JSON.parse(e.data),r=t.language,a=t.code,l=t.immediateClose;_self.postMessage(n.highlight(a,n.languages[r],r)),l&&_self.close()},!1),_self.Prism):_self.Prism;var a=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return a&&(n.filename=a.src,n.manual||a.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); 4 | Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; 5 | Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/()[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css",greedy:!0}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)); 6 | Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/}; 7 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+(?:[Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:"function"}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript",greedy:!0}}),Prism.languages.js=Prism.languages.javascript; 8 | -------------------------------------------------------------------------------- /public/plugins/fancybox/fancybox.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.fancybox-enabled{overflow:hidden}.fancybox-enabled body{overflow:visible;height:100%}.fancybox-is-hidden{position:absolute;top:-9999px;left:-9999px;visibility:hidden}.fancybox-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99993;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.fancybox-container~.fancybox-container{z-index:99992}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{position:absolute;top:0;right:0;bottom:0;left:0}.fancybox-outer{overflow-y:auto;-webkit-overflow-scrolling:touch}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption-wrap,.fancybox-infobar,.fancybox-toolbar{position:absolute;direction:ltr;z-index:99997;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s;box-sizing:border-box}.fancybox-show-caption .fancybox-caption-wrap,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;visibility:visible;transition:opacity .25s,visibility 0s}.fancybox-infobar{top:0;left:50%;margin-left:-79px}.fancybox-infobar__body{display:inline-block;width:70px;line-height:44px;font-size:13px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center;color:#ddd;background-color:rgba(30,30,30,.7);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:subpixel-antialiased}.fancybox-toolbar{top:0;right:0}.fancybox-stage{overflow:hidden;direction:ltr;z-index:99994;-webkit-transform:translateZ(0)}.fancybox-slide{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:auto;outline:none;white-space:normal;box-sizing:border-box;text-align:center;z-index:99994;-webkit-overflow-scrolling:touch;display:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.fancybox-slide:before{content:"";display:inline-block;vertical-align:middle;height:100%;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:visible}.fancybox-slide--image:before{display:none}.fancybox-slide--video .fancybox-content,.fancybox-slide--video iframe{background:#000}.fancybox-slide--map .fancybox-content,.fancybox-slide--map iframe{background:#e5e3df}.fancybox-slide--next{z-index:99995}.fancybox-slide>*{display:inline-block;position:relative;padding:24px;margin:44px 0;border-width:0;vertical-align:middle;text-align:left;background-color:#fff;overflow:auto;box-sizing:border-box}.fancybox-slide .fancybox-image-wrap{position:absolute;top:0;left:0;margin:0;padding:0;border:0;z-index:99995;background:transparent;cursor:default;overflow:visible;-webkit-transform-origin:top left;transform-origin:top left;background-size:100% 100%;background-repeat:no-repeat;-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-can-zoomOut .fancybox-image-wrap{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-image-wrap{cursor:zoom-in}.fancybox-can-drag .fancybox-image-wrap{cursor:-webkit-grab;cursor:grab}.fancybox-is-dragging .fancybox-image-wrap{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-image,.fancybox-spaceball{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;border:0;max-width:none;max-height:none}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content{padding:0;width:80%;height:80%;max-width:calc(100% - 100px);max-height:calc(100% - 88px);overflow:visible;background:#fff}.fancybox-iframe{display:block;padding:0;border:0;height:100%}.fancybox-error,.fancybox-iframe{margin:0;width:100%;background:#fff}.fancybox-error{padding:40px;max-width:380px;cursor:default}.fancybox-error p{margin:0;padding:0;color:#444;font:16px/20px Helvetica Neue,Helvetica,Arial,sans-serif}.fancybox-close-small{position:absolute;top:0;right:0;width:44px;height:44px;padding:0;margin:0;border:0;border-radius:0;outline:none;background:transparent;z-index:10;cursor:pointer}.fancybox-close-small:after{content:"×";position:absolute;top:5px;right:5px;width:30px;height:30px;font:20px/30px Arial,Helvetica Neue,Helvetica,sans-serif;color:#888;font-weight:300;text-align:center;border-radius:50%;border-width:0;background:#fff;transition:background .25s;box-sizing:border-box;z-index:2}.fancybox-close-small:focus:after{outline:1px dotted #888}.fancybox-close-small:hover:after{color:#555;background:#eee}.fancybox-slide--iframe .fancybox-close-small{top:0;right:-44px}.fancybox-slide--iframe .fancybox-close-small:after{background:transparent;font-size:35px;color:#aaa}.fancybox-slide--iframe .fancybox-close-small:hover:after{color:#fff}.fancybox-caption-wrap{bottom:0;left:0;right:0;padding:60px 30px 0;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.1) 20%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.8));pointer-events:none}.fancybox-caption{padding:30px 0;border-top:1px solid hsla(0,0%,100%,.4);font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#fff;line-height:20px;-webkit-text-size-adjust:none}.fancybox-caption a,.fancybox-caption button,.fancybox-caption select{pointer-events:all}.fancybox-caption a{color:#fff;text-decoration:underline}.fancybox-button{display:inline-block;position:relative;margin:0;padding:0;border:0;width:44px;height:44px;line-height:44px;text-align:center;background:transparent;color:#ddd;border-radius:0;cursor:pointer;vertical-align:top;outline:none}.fancybox-button[disabled]{cursor:default;pointer-events:none}.fancybox-button,.fancybox-infobar__body{background:rgba(30,30,30,.6)}.fancybox-button:hover:not([disabled]){color:#fff;background:rgba(0,0,0,.8)}.fancybox-button:after,.fancybox-button:before{content:"";pointer-events:none;position:absolute;background-color:currentColor;color:currentColor;opacity:.9;box-sizing:border-box;display:inline-block}.fancybox-button[disabled]:after,.fancybox-button[disabled]:before{opacity:.3}.fancybox-button--left:after,.fancybox-button--right:after{top:18px;width:6px;height:6px;background:transparent;border-top:2px solid currentColor;border-right:2px solid currentColor}.fancybox-button--left:after{left:20px;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.fancybox-button--right:after{right:20px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--left{border-bottom-left-radius:5px}.fancybox-button--right{border-bottom-right-radius:5px}.fancybox-button--close:after,.fancybox-button--close:before{content:"";display:inline-block;position:absolute;height:2px;width:16px;top:calc(50% - 1px);left:calc(50% - 8px)}.fancybox-button--close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.fancybox-arrow{position:absolute;top:50%;margin:-50px 0 0;height:100px;width:54px;padding:0;border:0;outline:none;background:none;cursor:pointer;z-index:99995;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:opacity .25s}.fancybox-arrow:after{content:"";position:absolute;top:28px;width:44px;height:44px;background-color:rgba(30,30,30,.8);background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);background-repeat:no-repeat;background-position:50%;background-size:24px 24px}.fancybox-arrow--right{right:0}.fancybox-arrow--left{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fancybox-arrow--left:after,.fancybox-arrow--right:after{left:0}.fancybox-show-nav .fancybox-arrow{opacity:.6}.fancybox-show-nav .fancybox-arrow[disabled]{opacity:.3}.fancybox-loading{border:6px solid hsla(0,0%,39%,.4);border-top:6px solid hsla(0,0%,100%,.6);border-radius:100%;height:50px;width:50px;-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;position:absolute;top:50%;left:50%;margin-top:-25px;margin-left:-25px;z-index:99999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--current{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--next{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--current{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.fancybox-fx-rotate.fancybox-slide--previous{-webkit-transform:rotate(-1turn);transform:rotate(-1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--next{-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--current{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.fancybox-fx-circular.fancybox-slide--previous{-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--next{-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--current{-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0);opacity:1}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}@media (max-width:800px){.fancybox-infobar{left:0;margin-left:0}.fancybox-button--left,.fancybox-button--right{display:none!important}.fancybox-caption{padding:20px 0;margin:0}}.fancybox-button--fullscreen:before{width:15px;height:11px;left:calc(50% - 7px);top:calc(50% - 6px);border:2px solid;background:none}.fancybox-button--pause:before,.fancybox-button--play:before{top:calc(50% - 6px);left:calc(50% - 4px);background:transparent}.fancybox-button--play:before{width:0;height:0;border-top:6px inset transparent;border-bottom:6px inset transparent;border-left:10px solid;border-radius:1px}.fancybox-button--pause:before{width:7px;height:11px;border-style:solid;border-width:0 2px}.fancybox-button--thumbs,.fancybox-thumbs{display:none}@media (min-width:800px){.fancybox-button--thumbs{display:inline-block}.fancybox-button--thumbs span{font-size:23px}.fancybox-button--thumbs:before{width:3px;height:3px;top:calc(50% - 2px);left:calc(50% - 2px);box-shadow:0 -4px 0,-4px -4px 0,4px -4px 0,inset 0 0 0 32px,-4px 0 0,4px 0 0,0 4px 0,-4px 4px 0,4px 4px 0}.fancybox-thumbs{position:absolute;top:0;right:0;bottom:0;left:auto;width:220px;margin:0;padding:5px 5px 0 0;background:#fff;word-break:normal;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;box-sizing:border-box;z-index:99995}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:220px}.fancybox-thumbs>ul{list-style:none;position:absolute;position:relative;width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;font-size:0}.fancybox-thumbs>ul>li{float:left;overflow:hidden;max-width:50%;padding:0;margin:0;width:105px;height:75px;position:relative;cursor:pointer;outline:none;border:5px solid transparent;border-top-width:0;border-right-width:0;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}li.fancybox-thumbs-loading{background:rgba(0,0,0,.1)}.fancybox-thumbs>ul>li>img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;max-height:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-thumbs>ul>li:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;border:4px solid #4ea7f9;z-index:99991;opacity:0;transition:all .2s cubic-bezier(.25,.46,.45,.94)}.fancybox-thumbs>ul>li.fancybox-thumbs-active:before{opacity:1}} -------------------------------------------------------------------------------- /public/fonts/fontawesome/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../webfonts" !default; 5 | $fa-font-size-base: 16px !default; 6 | $fa-css-prefix: fa !default; 7 | $fa-version: "5.0.8" !default; 8 | $fa-border-color: #eee !default; 9 | $fa-inverse: #fff !default; 10 | $fa-li-width: 2em !default; 11 | 12 | // Convenience function used to set content property 13 | @function fa-content($fa-var) { 14 | @return unquote("\"#{ $fa-var }\""); 15 | } 16 | 17 | $fa-var-500px: \f26e; 18 | $fa-var-accessible-icon: \f368; 19 | $fa-var-accusoft: \f369; 20 | $fa-var-address-book: \f2b9; 21 | $fa-var-address-card: \f2bb; 22 | $fa-var-adjust: \f042; 23 | $fa-var-adn: \f170; 24 | $fa-var-adversal: \f36a; 25 | $fa-var-affiliatetheme: \f36b; 26 | $fa-var-algolia: \f36c; 27 | $fa-var-align-center: \f037; 28 | $fa-var-align-justify: \f039; 29 | $fa-var-align-left: \f036; 30 | $fa-var-align-right: \f038; 31 | $fa-var-amazon: \f270; 32 | $fa-var-amazon-pay: \f42c; 33 | $fa-var-ambulance: \f0f9; 34 | $fa-var-american-sign-language-interpreting: \f2a3; 35 | $fa-var-amilia: \f36d; 36 | $fa-var-anchor: \f13d; 37 | $fa-var-android: \f17b; 38 | $fa-var-angellist: \f209; 39 | $fa-var-angle-double-down: \f103; 40 | $fa-var-angle-double-left: \f100; 41 | $fa-var-angle-double-right: \f101; 42 | $fa-var-angle-double-up: \f102; 43 | $fa-var-angle-down: \f107; 44 | $fa-var-angle-left: \f104; 45 | $fa-var-angle-right: \f105; 46 | $fa-var-angle-up: \f106; 47 | $fa-var-angrycreative: \f36e; 48 | $fa-var-angular: \f420; 49 | $fa-var-app-store: \f36f; 50 | $fa-var-app-store-ios: \f370; 51 | $fa-var-apper: \f371; 52 | $fa-var-apple: \f179; 53 | $fa-var-apple-pay: \f415; 54 | $fa-var-archive: \f187; 55 | $fa-var-arrow-alt-circle-down: \f358; 56 | $fa-var-arrow-alt-circle-left: \f359; 57 | $fa-var-arrow-alt-circle-right: \f35a; 58 | $fa-var-arrow-alt-circle-up: \f35b; 59 | $fa-var-arrow-circle-down: \f0ab; 60 | $fa-var-arrow-circle-left: \f0a8; 61 | $fa-var-arrow-circle-right: \f0a9; 62 | $fa-var-arrow-circle-up: \f0aa; 63 | $fa-var-arrow-down: \f063; 64 | $fa-var-arrow-left: \f060; 65 | $fa-var-arrow-right: \f061; 66 | $fa-var-arrow-up: \f062; 67 | $fa-var-arrows-alt: \f0b2; 68 | $fa-var-arrows-alt-h: \f337; 69 | $fa-var-arrows-alt-v: \f338; 70 | $fa-var-assistive-listening-systems: \f2a2; 71 | $fa-var-asterisk: \f069; 72 | $fa-var-asymmetrik: \f372; 73 | $fa-var-at: \f1fa; 74 | $fa-var-audible: \f373; 75 | $fa-var-audio-description: \f29e; 76 | $fa-var-autoprefixer: \f41c; 77 | $fa-var-avianex: \f374; 78 | $fa-var-aviato: \f421; 79 | $fa-var-aws: \f375; 80 | $fa-var-backward: \f04a; 81 | $fa-var-balance-scale: \f24e; 82 | $fa-var-ban: \f05e; 83 | $fa-var-band-aid: \f462; 84 | $fa-var-bandcamp: \f2d5; 85 | $fa-var-barcode: \f02a; 86 | $fa-var-bars: \f0c9; 87 | $fa-var-baseball-ball: \f433; 88 | $fa-var-basketball-ball: \f434; 89 | $fa-var-bath: \f2cd; 90 | $fa-var-battery-empty: \f244; 91 | $fa-var-battery-full: \f240; 92 | $fa-var-battery-half: \f242; 93 | $fa-var-battery-quarter: \f243; 94 | $fa-var-battery-three-quarters: \f241; 95 | $fa-var-bed: \f236; 96 | $fa-var-beer: \f0fc; 97 | $fa-var-behance: \f1b4; 98 | $fa-var-behance-square: \f1b5; 99 | $fa-var-bell: \f0f3; 100 | $fa-var-bell-slash: \f1f6; 101 | $fa-var-bicycle: \f206; 102 | $fa-var-bimobject: \f378; 103 | $fa-var-binoculars: \f1e5; 104 | $fa-var-birthday-cake: \f1fd; 105 | $fa-var-bitbucket: \f171; 106 | $fa-var-bitcoin: \f379; 107 | $fa-var-bity: \f37a; 108 | $fa-var-black-tie: \f27e; 109 | $fa-var-blackberry: \f37b; 110 | $fa-var-blind: \f29d; 111 | $fa-var-blogger: \f37c; 112 | $fa-var-blogger-b: \f37d; 113 | $fa-var-bluetooth: \f293; 114 | $fa-var-bluetooth-b: \f294; 115 | $fa-var-bold: \f032; 116 | $fa-var-bolt: \f0e7; 117 | $fa-var-bomb: \f1e2; 118 | $fa-var-book: \f02d; 119 | $fa-var-bookmark: \f02e; 120 | $fa-var-bowling-ball: \f436; 121 | $fa-var-box: \f466; 122 | $fa-var-boxes: \f468; 123 | $fa-var-braille: \f2a1; 124 | $fa-var-briefcase: \f0b1; 125 | $fa-var-btc: \f15a; 126 | $fa-var-bug: \f188; 127 | $fa-var-building: \f1ad; 128 | $fa-var-bullhorn: \f0a1; 129 | $fa-var-bullseye: \f140; 130 | $fa-var-buromobelexperte: \f37f; 131 | $fa-var-bus: \f207; 132 | $fa-var-buysellads: \f20d; 133 | $fa-var-calculator: \f1ec; 134 | $fa-var-calendar: \f133; 135 | $fa-var-calendar-alt: \f073; 136 | $fa-var-calendar-check: \f274; 137 | $fa-var-calendar-minus: \f272; 138 | $fa-var-calendar-plus: \f271; 139 | $fa-var-calendar-times: \f273; 140 | $fa-var-camera: \f030; 141 | $fa-var-camera-retro: \f083; 142 | $fa-var-car: \f1b9; 143 | $fa-var-caret-down: \f0d7; 144 | $fa-var-caret-left: \f0d9; 145 | $fa-var-caret-right: \f0da; 146 | $fa-var-caret-square-down: \f150; 147 | $fa-var-caret-square-left: \f191; 148 | $fa-var-caret-square-right: \f152; 149 | $fa-var-caret-square-up: \f151; 150 | $fa-var-caret-up: \f0d8; 151 | $fa-var-cart-arrow-down: \f218; 152 | $fa-var-cart-plus: \f217; 153 | $fa-var-cc-amazon-pay: \f42d; 154 | $fa-var-cc-amex: \f1f3; 155 | $fa-var-cc-apple-pay: \f416; 156 | $fa-var-cc-diners-club: \f24c; 157 | $fa-var-cc-discover: \f1f2; 158 | $fa-var-cc-jcb: \f24b; 159 | $fa-var-cc-mastercard: \f1f1; 160 | $fa-var-cc-paypal: \f1f4; 161 | $fa-var-cc-stripe: \f1f5; 162 | $fa-var-cc-visa: \f1f0; 163 | $fa-var-centercode: \f380; 164 | $fa-var-certificate: \f0a3; 165 | $fa-var-chart-area: \f1fe; 166 | $fa-var-chart-bar: \f080; 167 | $fa-var-chart-line: \f201; 168 | $fa-var-chart-pie: \f200; 169 | $fa-var-check: \f00c; 170 | $fa-var-check-circle: \f058; 171 | $fa-var-check-square: \f14a; 172 | $fa-var-chess: \f439; 173 | $fa-var-chess-bishop: \f43a; 174 | $fa-var-chess-board: \f43c; 175 | $fa-var-chess-king: \f43f; 176 | $fa-var-chess-knight: \f441; 177 | $fa-var-chess-pawn: \f443; 178 | $fa-var-chess-queen: \f445; 179 | $fa-var-chess-rook: \f447; 180 | $fa-var-chevron-circle-down: \f13a; 181 | $fa-var-chevron-circle-left: \f137; 182 | $fa-var-chevron-circle-right: \f138; 183 | $fa-var-chevron-circle-up: \f139; 184 | $fa-var-chevron-down: \f078; 185 | $fa-var-chevron-left: \f053; 186 | $fa-var-chevron-right: \f054; 187 | $fa-var-chevron-up: \f077; 188 | $fa-var-child: \f1ae; 189 | $fa-var-chrome: \f268; 190 | $fa-var-circle: \f111; 191 | $fa-var-circle-notch: \f1ce; 192 | $fa-var-clipboard: \f328; 193 | $fa-var-clipboard-check: \f46c; 194 | $fa-var-clipboard-list: \f46d; 195 | $fa-var-clock: \f017; 196 | $fa-var-clone: \f24d; 197 | $fa-var-closed-captioning: \f20a; 198 | $fa-var-cloud: \f0c2; 199 | $fa-var-cloud-download-alt: \f381; 200 | $fa-var-cloud-upload-alt: \f382; 201 | $fa-var-cloudscale: \f383; 202 | $fa-var-cloudsmith: \f384; 203 | $fa-var-cloudversify: \f385; 204 | $fa-var-code: \f121; 205 | $fa-var-code-branch: \f126; 206 | $fa-var-codepen: \f1cb; 207 | $fa-var-codiepie: \f284; 208 | $fa-var-coffee: \f0f4; 209 | $fa-var-cog: \f013; 210 | $fa-var-cogs: \f085; 211 | $fa-var-columns: \f0db; 212 | $fa-var-comment: \f075; 213 | $fa-var-comment-alt: \f27a; 214 | $fa-var-comments: \f086; 215 | $fa-var-compass: \f14e; 216 | $fa-var-compress: \f066; 217 | $fa-var-connectdevelop: \f20e; 218 | $fa-var-contao: \f26d; 219 | $fa-var-copy: \f0c5; 220 | $fa-var-copyright: \f1f9; 221 | $fa-var-cpanel: \f388; 222 | $fa-var-creative-commons: \f25e; 223 | $fa-var-credit-card: \f09d; 224 | $fa-var-crop: \f125; 225 | $fa-var-crosshairs: \f05b; 226 | $fa-var-css3: \f13c; 227 | $fa-var-css3-alt: \f38b; 228 | $fa-var-cube: \f1b2; 229 | $fa-var-cubes: \f1b3; 230 | $fa-var-cut: \f0c4; 231 | $fa-var-cuttlefish: \f38c; 232 | $fa-var-d-and-d: \f38d; 233 | $fa-var-dashcube: \f210; 234 | $fa-var-database: \f1c0; 235 | $fa-var-deaf: \f2a4; 236 | $fa-var-delicious: \f1a5; 237 | $fa-var-deploydog: \f38e; 238 | $fa-var-deskpro: \f38f; 239 | $fa-var-desktop: \f108; 240 | $fa-var-deviantart: \f1bd; 241 | $fa-var-digg: \f1a6; 242 | $fa-var-digital-ocean: \f391; 243 | $fa-var-discord: \f392; 244 | $fa-var-discourse: \f393; 245 | $fa-var-dna: \f471; 246 | $fa-var-dochub: \f394; 247 | $fa-var-docker: \f395; 248 | $fa-var-dollar-sign: \f155; 249 | $fa-var-dolly: \f472; 250 | $fa-var-dolly-flatbed: \f474; 251 | $fa-var-dot-circle: \f192; 252 | $fa-var-download: \f019; 253 | $fa-var-draft2digital: \f396; 254 | $fa-var-dribbble: \f17d; 255 | $fa-var-dribbble-square: \f397; 256 | $fa-var-dropbox: \f16b; 257 | $fa-var-drupal: \f1a9; 258 | $fa-var-dyalog: \f399; 259 | $fa-var-earlybirds: \f39a; 260 | $fa-var-edge: \f282; 261 | $fa-var-edit: \f044; 262 | $fa-var-eject: \f052; 263 | $fa-var-elementor: \f430; 264 | $fa-var-ellipsis-h: \f141; 265 | $fa-var-ellipsis-v: \f142; 266 | $fa-var-ember: \f423; 267 | $fa-var-empire: \f1d1; 268 | $fa-var-envelope: \f0e0; 269 | $fa-var-envelope-open: \f2b6; 270 | $fa-var-envelope-square: \f199; 271 | $fa-var-envira: \f299; 272 | $fa-var-eraser: \f12d; 273 | $fa-var-erlang: \f39d; 274 | $fa-var-ethereum: \f42e; 275 | $fa-var-etsy: \f2d7; 276 | $fa-var-euro-sign: \f153; 277 | $fa-var-exchange-alt: \f362; 278 | $fa-var-exclamation: \f12a; 279 | $fa-var-exclamation-circle: \f06a; 280 | $fa-var-exclamation-triangle: \f071; 281 | $fa-var-expand: \f065; 282 | $fa-var-expand-arrows-alt: \f31e; 283 | $fa-var-expeditedssl: \f23e; 284 | $fa-var-external-link-alt: \f35d; 285 | $fa-var-external-link-square-alt: \f360; 286 | $fa-var-eye: \f06e; 287 | $fa-var-eye-dropper: \f1fb; 288 | $fa-var-eye-slash: \f070; 289 | $fa-var-facebook: \f09a; 290 | $fa-var-facebook-f: \f39e; 291 | $fa-var-facebook-messenger: \f39f; 292 | $fa-var-facebook-square: \f082; 293 | $fa-var-fast-backward: \f049; 294 | $fa-var-fast-forward: \f050; 295 | $fa-var-fax: \f1ac; 296 | $fa-var-female: \f182; 297 | $fa-var-fighter-jet: \f0fb; 298 | $fa-var-file: \f15b; 299 | $fa-var-file-alt: \f15c; 300 | $fa-var-file-archive: \f1c6; 301 | $fa-var-file-audio: \f1c7; 302 | $fa-var-file-code: \f1c9; 303 | $fa-var-file-excel: \f1c3; 304 | $fa-var-file-image: \f1c5; 305 | $fa-var-file-pdf: \f1c1; 306 | $fa-var-file-powerpoint: \f1c4; 307 | $fa-var-file-video: \f1c8; 308 | $fa-var-file-word: \f1c2; 309 | $fa-var-film: \f008; 310 | $fa-var-filter: \f0b0; 311 | $fa-var-fire: \f06d; 312 | $fa-var-fire-extinguisher: \f134; 313 | $fa-var-firefox: \f269; 314 | $fa-var-first-aid: \f479; 315 | $fa-var-first-order: \f2b0; 316 | $fa-var-firstdraft: \f3a1; 317 | $fa-var-flag: \f024; 318 | $fa-var-flag-checkered: \f11e; 319 | $fa-var-flask: \f0c3; 320 | $fa-var-flickr: \f16e; 321 | $fa-var-flipboard: \f44d; 322 | $fa-var-fly: \f417; 323 | $fa-var-folder: \f07b; 324 | $fa-var-folder-open: \f07c; 325 | $fa-var-font: \f031; 326 | $fa-var-font-awesome: \f2b4; 327 | $fa-var-font-awesome-alt: \f35c; 328 | $fa-var-font-awesome-flag: \f425; 329 | $fa-var-fonticons: \f280; 330 | $fa-var-fonticons-fi: \f3a2; 331 | $fa-var-football-ball: \f44e; 332 | $fa-var-fort-awesome: \f286; 333 | $fa-var-fort-awesome-alt: \f3a3; 334 | $fa-var-forumbee: \f211; 335 | $fa-var-forward: \f04e; 336 | $fa-var-foursquare: \f180; 337 | $fa-var-free-code-camp: \f2c5; 338 | $fa-var-freebsd: \f3a4; 339 | $fa-var-frown: \f119; 340 | $fa-var-futbol: \f1e3; 341 | $fa-var-gamepad: \f11b; 342 | $fa-var-gavel: \f0e3; 343 | $fa-var-gem: \f3a5; 344 | $fa-var-genderless: \f22d; 345 | $fa-var-get-pocket: \f265; 346 | $fa-var-gg: \f260; 347 | $fa-var-gg-circle: \f261; 348 | $fa-var-gift: \f06b; 349 | $fa-var-git: \f1d3; 350 | $fa-var-git-square: \f1d2; 351 | $fa-var-github: \f09b; 352 | $fa-var-github-alt: \f113; 353 | $fa-var-github-square: \f092; 354 | $fa-var-gitkraken: \f3a6; 355 | $fa-var-gitlab: \f296; 356 | $fa-var-gitter: \f426; 357 | $fa-var-glass-martini: \f000; 358 | $fa-var-glide: \f2a5; 359 | $fa-var-glide-g: \f2a6; 360 | $fa-var-globe: \f0ac; 361 | $fa-var-gofore: \f3a7; 362 | $fa-var-golf-ball: \f450; 363 | $fa-var-goodreads: \f3a8; 364 | $fa-var-goodreads-g: \f3a9; 365 | $fa-var-google: \f1a0; 366 | $fa-var-google-drive: \f3aa; 367 | $fa-var-google-play: \f3ab; 368 | $fa-var-google-plus: \f2b3; 369 | $fa-var-google-plus-g: \f0d5; 370 | $fa-var-google-plus-square: \f0d4; 371 | $fa-var-google-wallet: \f1ee; 372 | $fa-var-graduation-cap: \f19d; 373 | $fa-var-gratipay: \f184; 374 | $fa-var-grav: \f2d6; 375 | $fa-var-gripfire: \f3ac; 376 | $fa-var-grunt: \f3ad; 377 | $fa-var-gulp: \f3ae; 378 | $fa-var-h-square: \f0fd; 379 | $fa-var-hacker-news: \f1d4; 380 | $fa-var-hacker-news-square: \f3af; 381 | $fa-var-hand-lizard: \f258; 382 | $fa-var-hand-paper: \f256; 383 | $fa-var-hand-peace: \f25b; 384 | $fa-var-hand-point-down: \f0a7; 385 | $fa-var-hand-point-left: \f0a5; 386 | $fa-var-hand-point-right: \f0a4; 387 | $fa-var-hand-point-up: \f0a6; 388 | $fa-var-hand-pointer: \f25a; 389 | $fa-var-hand-rock: \f255; 390 | $fa-var-hand-scissors: \f257; 391 | $fa-var-hand-spock: \f259; 392 | $fa-var-handshake: \f2b5; 393 | $fa-var-hashtag: \f292; 394 | $fa-var-hdd: \f0a0; 395 | $fa-var-heading: \f1dc; 396 | $fa-var-headphones: \f025; 397 | $fa-var-heart: \f004; 398 | $fa-var-heartbeat: \f21e; 399 | $fa-var-hips: \f452; 400 | $fa-var-hire-a-helper: \f3b0; 401 | $fa-var-history: \f1da; 402 | $fa-var-hockey-puck: \f453; 403 | $fa-var-home: \f015; 404 | $fa-var-hooli: \f427; 405 | $fa-var-hospital: \f0f8; 406 | $fa-var-hospital-symbol: \f47e; 407 | $fa-var-hotjar: \f3b1; 408 | $fa-var-hourglass: \f254; 409 | $fa-var-hourglass-end: \f253; 410 | $fa-var-hourglass-half: \f252; 411 | $fa-var-hourglass-start: \f251; 412 | $fa-var-houzz: \f27c; 413 | $fa-var-html5: \f13b; 414 | $fa-var-hubspot: \f3b2; 415 | $fa-var-i-cursor: \f246; 416 | $fa-var-id-badge: \f2c1; 417 | $fa-var-id-card: \f2c2; 418 | $fa-var-image: \f03e; 419 | $fa-var-images: \f302; 420 | $fa-var-imdb: \f2d8; 421 | $fa-var-inbox: \f01c; 422 | $fa-var-indent: \f03c; 423 | $fa-var-industry: \f275; 424 | $fa-var-info: \f129; 425 | $fa-var-info-circle: \f05a; 426 | $fa-var-instagram: \f16d; 427 | $fa-var-internet-explorer: \f26b; 428 | $fa-var-ioxhost: \f208; 429 | $fa-var-italic: \f033; 430 | $fa-var-itunes: \f3b4; 431 | $fa-var-itunes-note: \f3b5; 432 | $fa-var-jenkins: \f3b6; 433 | $fa-var-joget: \f3b7; 434 | $fa-var-joomla: \f1aa; 435 | $fa-var-js: \f3b8; 436 | $fa-var-js-square: \f3b9; 437 | $fa-var-jsfiddle: \f1cc; 438 | $fa-var-key: \f084; 439 | $fa-var-keyboard: \f11c; 440 | $fa-var-keycdn: \f3ba; 441 | $fa-var-kickstarter: \f3bb; 442 | $fa-var-kickstarter-k: \f3bc; 443 | $fa-var-korvue: \f42f; 444 | $fa-var-language: \f1ab; 445 | $fa-var-laptop: \f109; 446 | $fa-var-laravel: \f3bd; 447 | $fa-var-lastfm: \f202; 448 | $fa-var-lastfm-square: \f203; 449 | $fa-var-leaf: \f06c; 450 | $fa-var-leanpub: \f212; 451 | $fa-var-lemon: \f094; 452 | $fa-var-less: \f41d; 453 | $fa-var-level-down-alt: \f3be; 454 | $fa-var-level-up-alt: \f3bf; 455 | $fa-var-life-ring: \f1cd; 456 | $fa-var-lightbulb: \f0eb; 457 | $fa-var-line: \f3c0; 458 | $fa-var-link: \f0c1; 459 | $fa-var-linkedin: \f08c; 460 | $fa-var-linkedin-in: \f0e1; 461 | $fa-var-linode: \f2b8; 462 | $fa-var-linux: \f17c; 463 | $fa-var-lira-sign: \f195; 464 | $fa-var-list: \f03a; 465 | $fa-var-list-alt: \f022; 466 | $fa-var-list-ol: \f0cb; 467 | $fa-var-list-ul: \f0ca; 468 | $fa-var-location-arrow: \f124; 469 | $fa-var-lock: \f023; 470 | $fa-var-lock-open: \f3c1; 471 | $fa-var-long-arrow-alt-down: \f309; 472 | $fa-var-long-arrow-alt-left: \f30a; 473 | $fa-var-long-arrow-alt-right: \f30b; 474 | $fa-var-long-arrow-alt-up: \f30c; 475 | $fa-var-low-vision: \f2a8; 476 | $fa-var-lyft: \f3c3; 477 | $fa-var-magento: \f3c4; 478 | $fa-var-magic: \f0d0; 479 | $fa-var-magnet: \f076; 480 | $fa-var-male: \f183; 481 | $fa-var-map: \f279; 482 | $fa-var-map-marker: \f041; 483 | $fa-var-map-marker-alt: \f3c5; 484 | $fa-var-map-pin: \f276; 485 | $fa-var-map-signs: \f277; 486 | $fa-var-mars: \f222; 487 | $fa-var-mars-double: \f227; 488 | $fa-var-mars-stroke: \f229; 489 | $fa-var-mars-stroke-h: \f22b; 490 | $fa-var-mars-stroke-v: \f22a; 491 | $fa-var-maxcdn: \f136; 492 | $fa-var-medapps: \f3c6; 493 | $fa-var-medium: \f23a; 494 | $fa-var-medium-m: \f3c7; 495 | $fa-var-medkit: \f0fa; 496 | $fa-var-medrt: \f3c8; 497 | $fa-var-meetup: \f2e0; 498 | $fa-var-meh: \f11a; 499 | $fa-var-mercury: \f223; 500 | $fa-var-microchip: \f2db; 501 | $fa-var-microphone: \f130; 502 | $fa-var-microphone-slash: \f131; 503 | $fa-var-microsoft: \f3ca; 504 | $fa-var-minus: \f068; 505 | $fa-var-minus-circle: \f056; 506 | $fa-var-minus-square: \f146; 507 | $fa-var-mix: \f3cb; 508 | $fa-var-mixcloud: \f289; 509 | $fa-var-mizuni: \f3cc; 510 | $fa-var-mobile: \f10b; 511 | $fa-var-mobile-alt: \f3cd; 512 | $fa-var-modx: \f285; 513 | $fa-var-monero: \f3d0; 514 | $fa-var-money-bill-alt: \f3d1; 515 | $fa-var-moon: \f186; 516 | $fa-var-motorcycle: \f21c; 517 | $fa-var-mouse-pointer: \f245; 518 | $fa-var-music: \f001; 519 | $fa-var-napster: \f3d2; 520 | $fa-var-neuter: \f22c; 521 | $fa-var-newspaper: \f1ea; 522 | $fa-var-nintendo-switch: \f418; 523 | $fa-var-node: \f419; 524 | $fa-var-node-js: \f3d3; 525 | $fa-var-npm: \f3d4; 526 | $fa-var-ns8: \f3d5; 527 | $fa-var-nutritionix: \f3d6; 528 | $fa-var-object-group: \f247; 529 | $fa-var-object-ungroup: \f248; 530 | $fa-var-odnoklassniki: \f263; 531 | $fa-var-odnoklassniki-square: \f264; 532 | $fa-var-opencart: \f23d; 533 | $fa-var-openid: \f19b; 534 | $fa-var-opera: \f26a; 535 | $fa-var-optin-monster: \f23c; 536 | $fa-var-osi: \f41a; 537 | $fa-var-outdent: \f03b; 538 | $fa-var-page4: \f3d7; 539 | $fa-var-pagelines: \f18c; 540 | $fa-var-paint-brush: \f1fc; 541 | $fa-var-palfed: \f3d8; 542 | $fa-var-pallet: \f482; 543 | $fa-var-paper-plane: \f1d8; 544 | $fa-var-paperclip: \f0c6; 545 | $fa-var-paragraph: \f1dd; 546 | $fa-var-paste: \f0ea; 547 | $fa-var-patreon: \f3d9; 548 | $fa-var-pause: \f04c; 549 | $fa-var-pause-circle: \f28b; 550 | $fa-var-paw: \f1b0; 551 | $fa-var-paypal: \f1ed; 552 | $fa-var-pen-square: \f14b; 553 | $fa-var-pencil-alt: \f303; 554 | $fa-var-percent: \f295; 555 | $fa-var-periscope: \f3da; 556 | $fa-var-phabricator: \f3db; 557 | $fa-var-phoenix-framework: \f3dc; 558 | $fa-var-phone: \f095; 559 | $fa-var-phone-square: \f098; 560 | $fa-var-phone-volume: \f2a0; 561 | $fa-var-php: \f457; 562 | $fa-var-pied-piper: \f2ae; 563 | $fa-var-pied-piper-alt: \f1a8; 564 | $fa-var-pied-piper-pp: \f1a7; 565 | $fa-var-pills: \f484; 566 | $fa-var-pinterest: \f0d2; 567 | $fa-var-pinterest-p: \f231; 568 | $fa-var-pinterest-square: \f0d3; 569 | $fa-var-plane: \f072; 570 | $fa-var-play: \f04b; 571 | $fa-var-play-circle: \f144; 572 | $fa-var-playstation: \f3df; 573 | $fa-var-plug: \f1e6; 574 | $fa-var-plus: \f067; 575 | $fa-var-plus-circle: \f055; 576 | $fa-var-plus-square: \f0fe; 577 | $fa-var-podcast: \f2ce; 578 | $fa-var-pound-sign: \f154; 579 | $fa-var-power-off: \f011; 580 | $fa-var-print: \f02f; 581 | $fa-var-product-hunt: \f288; 582 | $fa-var-pushed: \f3e1; 583 | $fa-var-puzzle-piece: \f12e; 584 | $fa-var-python: \f3e2; 585 | $fa-var-qq: \f1d6; 586 | $fa-var-qrcode: \f029; 587 | $fa-var-question: \f128; 588 | $fa-var-question-circle: \f059; 589 | $fa-var-quidditch: \f458; 590 | $fa-var-quinscape: \f459; 591 | $fa-var-quora: \f2c4; 592 | $fa-var-quote-left: \f10d; 593 | $fa-var-quote-right: \f10e; 594 | $fa-var-random: \f074; 595 | $fa-var-ravelry: \f2d9; 596 | $fa-var-react: \f41b; 597 | $fa-var-rebel: \f1d0; 598 | $fa-var-recycle: \f1b8; 599 | $fa-var-red-river: \f3e3; 600 | $fa-var-reddit: \f1a1; 601 | $fa-var-reddit-alien: \f281; 602 | $fa-var-reddit-square: \f1a2; 603 | $fa-var-redo: \f01e; 604 | $fa-var-redo-alt: \f2f9; 605 | $fa-var-registered: \f25d; 606 | $fa-var-rendact: \f3e4; 607 | $fa-var-renren: \f18b; 608 | $fa-var-reply: \f3e5; 609 | $fa-var-reply-all: \f122; 610 | $fa-var-replyd: \f3e6; 611 | $fa-var-resolving: \f3e7; 612 | $fa-var-retweet: \f079; 613 | $fa-var-road: \f018; 614 | $fa-var-rocket: \f135; 615 | $fa-var-rocketchat: \f3e8; 616 | $fa-var-rockrms: \f3e9; 617 | $fa-var-rss: \f09e; 618 | $fa-var-rss-square: \f143; 619 | $fa-var-ruble-sign: \f158; 620 | $fa-var-rupee-sign: \f156; 621 | $fa-var-safari: \f267; 622 | $fa-var-sass: \f41e; 623 | $fa-var-save: \f0c7; 624 | $fa-var-schlix: \f3ea; 625 | $fa-var-scribd: \f28a; 626 | $fa-var-search: \f002; 627 | $fa-var-search-minus: \f010; 628 | $fa-var-search-plus: \f00e; 629 | $fa-var-searchengin: \f3eb; 630 | $fa-var-sellcast: \f2da; 631 | $fa-var-sellsy: \f213; 632 | $fa-var-server: \f233; 633 | $fa-var-servicestack: \f3ec; 634 | $fa-var-share: \f064; 635 | $fa-var-share-alt: \f1e0; 636 | $fa-var-share-alt-square: \f1e1; 637 | $fa-var-share-square: \f14d; 638 | $fa-var-shekel-sign: \f20b; 639 | $fa-var-shield-alt: \f3ed; 640 | $fa-var-ship: \f21a; 641 | $fa-var-shipping-fast: \f48b; 642 | $fa-var-shirtsinbulk: \f214; 643 | $fa-var-shopping-bag: \f290; 644 | $fa-var-shopping-basket: \f291; 645 | $fa-var-shopping-cart: \f07a; 646 | $fa-var-shower: \f2cc; 647 | $fa-var-sign-in-alt: \f2f6; 648 | $fa-var-sign-language: \f2a7; 649 | $fa-var-sign-out-alt: \f2f5; 650 | $fa-var-signal: \f012; 651 | $fa-var-simplybuilt: \f215; 652 | $fa-var-sistrix: \f3ee; 653 | $fa-var-sitemap: \f0e8; 654 | $fa-var-skyatlas: \f216; 655 | $fa-var-skype: \f17e; 656 | $fa-var-slack: \f198; 657 | $fa-var-slack-hash: \f3ef; 658 | $fa-var-sliders-h: \f1de; 659 | $fa-var-slideshare: \f1e7; 660 | $fa-var-smile: \f118; 661 | $fa-var-snapchat: \f2ab; 662 | $fa-var-snapchat-ghost: \f2ac; 663 | $fa-var-snapchat-square: \f2ad; 664 | $fa-var-snowflake: \f2dc; 665 | $fa-var-sort: \f0dc; 666 | $fa-var-sort-alpha-down: \f15d; 667 | $fa-var-sort-alpha-up: \f15e; 668 | $fa-var-sort-amount-down: \f160; 669 | $fa-var-sort-amount-up: \f161; 670 | $fa-var-sort-down: \f0dd; 671 | $fa-var-sort-numeric-down: \f162; 672 | $fa-var-sort-numeric-up: \f163; 673 | $fa-var-sort-up: \f0de; 674 | $fa-var-soundcloud: \f1be; 675 | $fa-var-space-shuttle: \f197; 676 | $fa-var-speakap: \f3f3; 677 | $fa-var-spinner: \f110; 678 | $fa-var-spotify: \f1bc; 679 | $fa-var-square: \f0c8; 680 | $fa-var-square-full: \f45c; 681 | $fa-var-stack-exchange: \f18d; 682 | $fa-var-stack-overflow: \f16c; 683 | $fa-var-star: \f005; 684 | $fa-var-star-half: \f089; 685 | $fa-var-staylinked: \f3f5; 686 | $fa-var-steam: \f1b6; 687 | $fa-var-steam-square: \f1b7; 688 | $fa-var-steam-symbol: \f3f6; 689 | $fa-var-step-backward: \f048; 690 | $fa-var-step-forward: \f051; 691 | $fa-var-stethoscope: \f0f1; 692 | $fa-var-sticker-mule: \f3f7; 693 | $fa-var-sticky-note: \f249; 694 | $fa-var-stop: \f04d; 695 | $fa-var-stop-circle: \f28d; 696 | $fa-var-stopwatch: \f2f2; 697 | $fa-var-strava: \f428; 698 | $fa-var-street-view: \f21d; 699 | $fa-var-strikethrough: \f0cc; 700 | $fa-var-stripe: \f429; 701 | $fa-var-stripe-s: \f42a; 702 | $fa-var-studiovinari: \f3f8; 703 | $fa-var-stumbleupon: \f1a4; 704 | $fa-var-stumbleupon-circle: \f1a3; 705 | $fa-var-subscript: \f12c; 706 | $fa-var-subway: \f239; 707 | $fa-var-suitcase: \f0f2; 708 | $fa-var-sun: \f185; 709 | $fa-var-superpowers: \f2dd; 710 | $fa-var-superscript: \f12b; 711 | $fa-var-supple: \f3f9; 712 | $fa-var-sync: \f021; 713 | $fa-var-sync-alt: \f2f1; 714 | $fa-var-syringe: \f48e; 715 | $fa-var-table: \f0ce; 716 | $fa-var-table-tennis: \f45d; 717 | $fa-var-tablet: \f10a; 718 | $fa-var-tablet-alt: \f3fa; 719 | $fa-var-tachometer-alt: \f3fd; 720 | $fa-var-tag: \f02b; 721 | $fa-var-tags: \f02c; 722 | $fa-var-tasks: \f0ae; 723 | $fa-var-taxi: \f1ba; 724 | $fa-var-telegram: \f2c6; 725 | $fa-var-telegram-plane: \f3fe; 726 | $fa-var-tencent-weibo: \f1d5; 727 | $fa-var-terminal: \f120; 728 | $fa-var-text-height: \f034; 729 | $fa-var-text-width: \f035; 730 | $fa-var-th: \f00a; 731 | $fa-var-th-large: \f009; 732 | $fa-var-th-list: \f00b; 733 | $fa-var-themeisle: \f2b2; 734 | $fa-var-thermometer: \f491; 735 | $fa-var-thermometer-empty: \f2cb; 736 | $fa-var-thermometer-full: \f2c7; 737 | $fa-var-thermometer-half: \f2c9; 738 | $fa-var-thermometer-quarter: \f2ca; 739 | $fa-var-thermometer-three-quarters: \f2c8; 740 | $fa-var-thumbs-down: \f165; 741 | $fa-var-thumbs-up: \f164; 742 | $fa-var-thumbtack: \f08d; 743 | $fa-var-ticket-alt: \f3ff; 744 | $fa-var-times: \f00d; 745 | $fa-var-times-circle: \f057; 746 | $fa-var-tint: \f043; 747 | $fa-var-toggle-off: \f204; 748 | $fa-var-toggle-on: \f205; 749 | $fa-var-trademark: \f25c; 750 | $fa-var-train: \f238; 751 | $fa-var-transgender: \f224; 752 | $fa-var-transgender-alt: \f225; 753 | $fa-var-trash: \f1f8; 754 | $fa-var-trash-alt: \f2ed; 755 | $fa-var-tree: \f1bb; 756 | $fa-var-trello: \f181; 757 | $fa-var-tripadvisor: \f262; 758 | $fa-var-trophy: \f091; 759 | $fa-var-truck: \f0d1; 760 | $fa-var-tty: \f1e4; 761 | $fa-var-tumblr: \f173; 762 | $fa-var-tumblr-square: \f174; 763 | $fa-var-tv: \f26c; 764 | $fa-var-twitch: \f1e8; 765 | $fa-var-twitter: \f099; 766 | $fa-var-twitter-square: \f081; 767 | $fa-var-typo3: \f42b; 768 | $fa-var-uber: \f402; 769 | $fa-var-uikit: \f403; 770 | $fa-var-umbrella: \f0e9; 771 | $fa-var-underline: \f0cd; 772 | $fa-var-undo: \f0e2; 773 | $fa-var-undo-alt: \f2ea; 774 | $fa-var-uniregistry: \f404; 775 | $fa-var-universal-access: \f29a; 776 | $fa-var-university: \f19c; 777 | $fa-var-unlink: \f127; 778 | $fa-var-unlock: \f09c; 779 | $fa-var-unlock-alt: \f13e; 780 | $fa-var-untappd: \f405; 781 | $fa-var-upload: \f093; 782 | $fa-var-usb: \f287; 783 | $fa-var-user: \f007; 784 | $fa-var-user-circle: \f2bd; 785 | $fa-var-user-md: \f0f0; 786 | $fa-var-user-plus: \f234; 787 | $fa-var-user-secret: \f21b; 788 | $fa-var-user-times: \f235; 789 | $fa-var-users: \f0c0; 790 | $fa-var-ussunnah: \f407; 791 | $fa-var-utensil-spoon: \f2e5; 792 | $fa-var-utensils: \f2e7; 793 | $fa-var-vaadin: \f408; 794 | $fa-var-venus: \f221; 795 | $fa-var-venus-double: \f226; 796 | $fa-var-venus-mars: \f228; 797 | $fa-var-viacoin: \f237; 798 | $fa-var-viadeo: \f2a9; 799 | $fa-var-viadeo-square: \f2aa; 800 | $fa-var-viber: \f409; 801 | $fa-var-video: \f03d; 802 | $fa-var-vimeo: \f40a; 803 | $fa-var-vimeo-square: \f194; 804 | $fa-var-vimeo-v: \f27d; 805 | $fa-var-vine: \f1ca; 806 | $fa-var-vk: \f189; 807 | $fa-var-vnv: \f40b; 808 | $fa-var-volleyball-ball: \f45f; 809 | $fa-var-volume-down: \f027; 810 | $fa-var-volume-off: \f026; 811 | $fa-var-volume-up: \f028; 812 | $fa-var-vuejs: \f41f; 813 | $fa-var-warehouse: \f494; 814 | $fa-var-weibo: \f18a; 815 | $fa-var-weight: \f496; 816 | $fa-var-weixin: \f1d7; 817 | $fa-var-whatsapp: \f232; 818 | $fa-var-whatsapp-square: \f40c; 819 | $fa-var-wheelchair: \f193; 820 | $fa-var-whmcs: \f40d; 821 | $fa-var-wifi: \f1eb; 822 | $fa-var-wikipedia-w: \f266; 823 | $fa-var-window-close: \f410; 824 | $fa-var-window-maximize: \f2d0; 825 | $fa-var-window-minimize: \f2d1; 826 | $fa-var-window-restore: \f2d2; 827 | $fa-var-windows: \f17a; 828 | $fa-var-won-sign: \f159; 829 | $fa-var-wordpress: \f19a; 830 | $fa-var-wordpress-simple: \f411; 831 | $fa-var-wpbeginner: \f297; 832 | $fa-var-wpexplorer: \f2de; 833 | $fa-var-wpforms: \f298; 834 | $fa-var-wrench: \f0ad; 835 | $fa-var-xbox: \f412; 836 | $fa-var-xing: \f168; 837 | $fa-var-xing-square: \f169; 838 | $fa-var-y-combinator: \f23b; 839 | $fa-var-yahoo: \f19e; 840 | $fa-var-yandex: \f413; 841 | $fa-var-yandex-international: \f414; 842 | $fa-var-yelp: \f1e9; 843 | $fa-var-yen-sign: \f157; 844 | $fa-var-yoast: \f2b1; 845 | $fa-var-youtube: \f167; 846 | $fa-var-youtube-square: \f431; 847 | -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fontawesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | .fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-briefcase:before{content:"\f0b1"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-car:before{content:"\f1b9"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comments:before{content:"\f086"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crosshairs:before{content:"\f05b"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dot-circle:before{content:"\f192"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-excel:before{content:"\f1c3"}.fa-file-image:before{content:"\f1c5"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-firstdraft:before{content:"\f3a1"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frown:before{content:"\f119"}.fa-futbol:before{content:"\f1e3"}.fa-gamepad:before{content:"\f11b"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-male:before{content:"\f183"}.fa-map:before{content:"\f279"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-maxcdn:before{content:"\f136"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-meh:before{content:"\f11a"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-moon:before{content:"\f186"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-paragraph:before{content:"\f1dd"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-percent:before{content:"\f295"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phone:before{content:"\f095"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-print:before{content:"\f02f"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-rebel:before{content:"\f1d0"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-road:before{content:"\f018"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-rupee-sign:before{content:"\f156"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shower:before{content:"\f2cc"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-spotify:before{content:"\f1bc"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-strava:before{content:"\f428"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-trademark:before{content:"\f25c"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-circle:before{content:"\f2bd"}.fa-user-md:before{content:"\f0f0"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-warehouse:before{content:"\f494"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} -------------------------------------------------------------------------------- /public/fonts/fontawesome/css/fontawesome-all.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | .fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-briefcase:before{content:"\f0b1"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-car:before{content:"\f1b9"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before{content:"\f0a3"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comments:before{content:"\f086"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crosshairs:before{content:"\f05b"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-deviantart:before{content:"\f1bd"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dot-circle:before{content:"\f192"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-excel:before{content:"\f1c3"}.fa-file-image:before{content:"\f1c5"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fire:before{content:"\f06d"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-firstdraft:before{content:"\f3a1"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frown:before{content:"\f119"}.fa-futbol:before{content:"\f1e3"}.fa-gamepad:before{content:"\f11b"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-gift:before{content:"\f06b"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before{content:"\f000"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-handshake:before{content:"\f2b5"}.fa-hashtag:before{content:"\f292"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-heart:before{content:"\f004"}.fa-heartbeat:before{content:"\f21e"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-male:before{content:"\f183"}.fa-map:before{content:"\f279"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-maxcdn:before{content:"\f136"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-meh:before{content:"\f11a"}.fa-mercury:before{content:"\f223"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-moon:before{content:"\f186"}.fa-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before{content:"\f245"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-paragraph:before{content:"\f1dd"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-percent:before{content:"\f295"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phone:before{content:"\f095"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-plane:before{content:"\f072"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-print:before{content:"\f02f"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-random:before{content:"\f074"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-rebel:before{content:"\f1d0"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before{content:"\f079"}.fa-road:before{content:"\f018"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-rupee-sign:before{content:"\f156"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-scribd:before{content:"\f28a"}.fa-search:before{content:"\f002"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shower:before{content:"\f2cc"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before{content:"\f2dc"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before{content:"\f110"}.fa-spotify:before{content:"\f1bc"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-star:before{content:"\f005"}.fa-star-half:before{content:"\f089"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-strava:before{content:"\f428"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-trademark:before{content:"\f25c"}.fa-train:before{content:"\f238"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-circle:before{content:"\f2bd"}.fa-user-md:before{content:"\f0f0"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-warehouse:before{content:"\f494"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wrench:before{content:"\f0ad"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:Font Awesome\ 5 Free}.fa,.fas{font-weight:900} --------------------------------------------------------------------------------