commit ae45b2bd3e76b1fa623acebb5b57099caa0827b8 Author: Keith Date: Fri Apr 1 01:06:21 2016 +0200 init commit diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e837fbf --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2016 Keith Irwin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c8cc36 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Tracman +node.js application to display a map with user's location. Live at [tracman.org](https://tracman.org/). +The github for the associated android app is [Tracman-org/Android](https://github.com/tracman-org/android). diff --git a/config/auth.js b/config/auth.js new file mode 100644 index 0000000..3cfd21f --- /dev/null +++ b/config/auth.js @@ -0,0 +1,55 @@ +var passport = require('passport'), + secret = require('./secrets.js'), + User = require('./models/user.js'), + GoogleStrategy = require('passport-google-oauth2').Strategy, + GoogleTokenStrategy = require('passport-google-id-token'); + +passport.use(new GoogleStrategy({ + clientID: secret.googleClientId, + clientSecret: secret.googleClientSecret, + callbackURL: secret.url+'/auth/google/callback', + passReqToCallback: true +}, function(req, accessToken, refreshToken, profile, done) { + User.findOne({googleID: profile.id}, function(err, user) { + if(err) {console.log(err);} + if (!err && user !== null) { // Log in + if (!user.name) { + user.name = profile.displayName; + } + user.lastLogin = Date.now(); + user.save(function (err, raw) { + if (err) { console.log(err); } + }); + done(null, user); + } else { // No existing user with google auth + if (req.session.passport) { // Creating new user + User.findById(req.session.passport.user, function(err, user){ + user.googleID = profile.id; + user.lastLogin = Date.now(); + user.save(function(err){ + if (err) { console.log(err); } + done(null, user, {success: 'Your account has been created. Next maybe you should download the android app. '}); + }); + }); + } else { // User wasn't invited + done(null,false, {error: 'User not found. Maybe you want to request an invite? '}); + } + } + }); +})); +passport.use(new GoogleTokenStrategy({ + clientID: secret.googleClientId +}, function(parsedToken, googleId, done) { + User.findOne({googleID:googleId}, function(err, user) { + if (err) { console.log(err); } + if (!err && user !== null) { // Log in + user.lastLogin = Date.now(); + user.save(function (err) { + if (err) { console.log(err); } + }); + return done(err, user); + } else { // No such user + done(null, false); + } + }); +})); diff --git a/config/mail.js b/config/mail.js new file mode 100644 index 0000000..e914b0e --- /dev/null +++ b/config/mail.js @@ -0,0 +1,61 @@ +var emailTemplate = require('email-templates').EmailTemplate, + path = require('path'); +var secret = require('./secrets.js'), + templateDir = path.join(__dirname, '..', 'res', 'mail'); +var mailgun = require('mailgun-js')({ + apiKey: secret.mailgunAPI, + domain: 'tracman.org' +}); + +var renderMail = function(template, params, next) { + new emailTemplate(path.join(templateDir, template)) + .render(params, function (err, msg) { + if (err) { console.log(err); } + next(msg); + }) +} + +module.exports = { + mailgun:mailgun, + + sendInvite: function(params, cb){ + renderMail('invite', {id:params.id, name:params.name}, function(msg) { + mailgun.messages().send({ + from: 'Tracman ', + to: params.email, + subject: 'You are invited to use Tracman beta!', + html: msg.html, + text: msg.text + }, cb); + }); + }, + + sendSuggestion: function(params, cb){ + renderMail('suggestion', params, function(msg) { + var name = (params.name)?params.name:'Tracman'; + var email = (params.email)?' <'+params.email+'>':' '; + mailgun.messages().send({ + from: name+email, + to: 'Keith Irwin ', + subject: 'A suggestion for Tracman', + html: msg.html, + text: msg.text + }, cb); + }); + }, + + sendBugReport: function(params, cb){ + renderMail('suggestion', params, function(msg) { + var name = (params.name)?params.name:'Tracman'; + var email = (params.email)?' <'+params.email+'>':' '; + mailgun.messages().send({ + from: name+email, + to: 'Keith Irwin ', + subject: 'A Bug Report for Tracman', + html: msg.html, + text: msg.text + }, cb); + }); + }, + +}; diff --git a/config/models/request.js b/config/models/request.js new file mode 100644 index 0000000..8942a2b --- /dev/null +++ b/config/models/request.js @@ -0,0 +1,10 @@ +var mongoose = require('mongoose'); + +module.exports = mongoose.model('Request', { + name: {type:String, required:true}, + email: {type:String, required:true, unique:true}, + beg: String, + requestedTime: Date, + granted: Date, + userId: String +}); diff --git a/config/models/user.js b/config/models/user.js new file mode 100644 index 0000000..86d7702 --- /dev/null +++ b/config/models/user.js @@ -0,0 +1,30 @@ +var mongoose = require('mongoose'); + +module.exports = mongoose.model('User', { + name: {type:String, required:true}, + email: String, + slug: {type:String, required:true, unique:true}, + requestId: String, + isAdmin: {type:Boolean, required:true, default:false}, + isPro: {type:Boolean, required:true, default:false}, + created: Date, + lastLogin: Date, + googleID: {type:Number, unique:true}, + settings: { + units: {type:String, default:'imperial'}, + defaultMap: {type:String, default:'road'}, + defaultZoom: {type:Number, default:11}, + showSpeed: {type:Boolean, default:false}, + showTemp: {type:Boolean, default:false}, + showAlt: {type:Boolean, default:false}, + showStreetview: {type:Boolean, default:false} + }, + last: { + time: Date, + lat: Number, + lon: Number, + dir: Number, + alt: Number, + spd: Number + } +}); diff --git a/config/routes.js b/config/routes.js new file mode 100644 index 0000000..c5253f6 --- /dev/null +++ b/config/routes.js @@ -0,0 +1,349 @@ +var app = require('express')(), + server = require('../server.js'), + User = require('./models/user.js'), + Request = require('./models/request.js'), + bodyParser = require('body-parser'), + slug = require('slug'), + secret = require('./secrets.js'), + passport = require('passport'), + mail = require('./mail.js'); + +app.use(bodyParser.urlencoded({ + extended: true +})); +app.use(bodyParser.json()); + +function throwErr(req,err) { + console.log(err); + req.flash('error-message',err); + req.flash('error', (err.message||'')+'
Would you like to report this error?'); +} +function ensureAuth(req,res,next) { + if (req.isAuthenticated()) { return next(); } + else { + req.session.returnTo = req.path; + req.flash('error', 'You must be signed in to do that. Click here to log in. '); + res.redirect('/'); + } +} +function ensureAdmin(req,res,next) { + if (req.user.isAdmin) { return next(); } + else { res.sendStatus(401); } +} + +module.exports = function(app){ + app.get('/robots.txt', function(req,res){ + res.type('text/plain'); + res.send("User-agent: *\n"+ + "Disallow: /trac\n"+ + "Disallow: /dashboard\n"+ + "Disallow: /invited" + ); + }); + + app.route('/') + .all(function(req,res,next){ + next(); + }).get(function(req,res){ + if (req.session.passport) { + User.findById(req.session.passport.user, function(err, user){ + if (err){ throwErr(req,err); } + if (!user){ next(); } + res.render('index.html', { + user: user, + error: req.flash('error')[0], + success: req.flash('succcess')[0] + }); + }); + } else { + res.render('index.html', { + error: req.flash('error')[0], + success: req.flash('success')[0], + inviteSuccess: req.flash('request-success')[0], + inviteError: req.flash('request-error')[0] + }); + } + }).post(function(req,res){ + Request.findOne({email:req.body.email}, function(err, request) { + if (err){ throwErr(req,err); } + if (request){ // Already requested with this email + req.flash('request-error', 'Invite already requested! '); + res.redirect('/#get'); + } else { // Send new request + request = new Request({ + name: req.body.name, + email: req.body.email, + beg: req.body.why, + requestedTime: Date.now() + }); request.save(function(err) { + if (err){ throwErr(req,err); } + mail.mailgun.messages().send({ + from: 'Tracman Requests ', + to: 'Keith Irwin ', + subject: 'New Tracman Invite request', + html: '

'+req.body.name+' requested a Tracman invite.

'+req.body.why+'

See all invites

', + text: '\n'+req.body.name+' requested a Tracman invite. \n\n'+req.body.why+'\n\nhttp://tracman.org/admin/requests' + }, function(err,body){ + if (err){ throwErr(req,err); } + else { req.flash('request-success', 'Invite requested! '); } + res.redirect('/#get'); + }); + }); + } + }); + }); + + app.route('/dashboard') + .all(ensureAuth, function(req,res,next){ + next(); + }).get(function(req,res){ + User.findById(req.session.passport.user, function(err, user){ + if (err){ throwErr(req,err); } + if (!user){ next(); } + else if (req.session.returnTo && req.query.rd) { + res.redirect(req.session.returnTo); + delete req.session.returnTo; + } else { res.render('dashboard.html', { + user: user, + success: req.flash('success')[0], + error: req.flash('error')[0] + }); } + }); + }).post(function(req,res){ + User.findByIdAndUpdate(req.session.passport.user, {$set:{ + name: req.body.name, + slug: slug(req.body.slug), + settings: { + units: req.body.units, + defaultMap: req.body.map, + defaultZoom: req.body.zoom, + showSpeed: (req.body.showSpeed)?true:false, + showAlt: (req.body.showAlt)?true:false, + showStreetview: (req.body.showStreet)?true:false + } + }}, function(err, user){ + if (err) { throwErr(req,err); } + else { req.flash('success', 'Settings updated. '); } + res.redirect('/dashboard'); + }); + }); + app.get('/validate', function(req,res){ + if (req.query.slug) { // validate unique slug + User.findOne({slug:slug(req.query.slug)}, function(err, existingUser){ + if (existingUser && existingUser.id!==req.session.passport.user) { res.sendStatus(400); } + else { res.sendStatus(200); } + }); + } + }); + + app.get('/trac', ensureAuth, function(req,res,next){ + User.findById(req.session.passport.user, function(err, user){ + if (err){ throwErr(req,err); } + if (!user){ next(); } + else { res.redirect('/trac/'+user.slug+((req.url.indexOf('?')<0)?'':('?'+req.url.split('?')[1]))); } + }); + }); + app.get('/trac/:slug', function(req,res,next){ + User.findOne({slug:req.params.slug}, function(err, tracuser) { + if (err){ throwErr(req,err); } + if (!tracuser){ next(); } + else { res.render('trac.html',{ + api: secret.mapAPI, + user: req.user, + tracuser: tracuser, + noFooter: '1', + noHeader: (req.query.noheader)?req.query.noheader.match(/\d/)[0]:'', + disp: (req.query.disp)?req.query.disp.match(/\d/)[0]:'' // 0=map, 1=streetview, 2=both + }); } + }); + }); + app.get('/trac/id/:id', function(req,res){ + User.findById(req.params.id, function(err, user){ + if (err){ throwErr(req,err); } + if (!user){ next(); } + else { res.redirect('/trac/'+user.slug+((req.url.indexOf('?')<0)?'':('?'+req.url.split('?')[1]))); } + }); + }); + app.get('/invited/:invite', function(req,res,next){ + User.findOne({requestId:req.params.invite}, function(err, existingUser) { // User already accepted invite + if (err) { console.log('routes.js:121 ERROR: '+err); } + if (existingUser) { res.redirect('/login'); } + else { + Request.findById(req.params.invite, function(err, request) { // Check for granted invite + if (err) { throwErr(req,err); } + if (!request) { next(); } + else { + user = new User({ // Create new user + requestId: request._id, + email: '', + slug: request._id, + name: request.name, + created: Date.now(), + settings: { + units: 'imperial', + showSpeed: false, + showTemp: false, + showAlt: false, + showStreetview: true + } + }); user.save(function(err) { + if (err) { throwErr(req,err); } + User.findOne({requestId:request._id}, function(err, user) { + if (err) { throwErr(req,err); } + if (user) { + request.userId = user._id; + request.save(function(err, raw){ + if (err){ throwErr(req,err); } + }); + req.logIn(user, function(err) { + if (err) { throwErr(req,err); } + user.lastLogin = Date.now(); + user.save(function(err, raw) { + if (err) { throwErr(req,err); } + res.redirect('/login'); + }); + }); + } + }); + }); + } + }); + } + }); + }); + + app.get('/android', ensureAuth, function(req,res){ + res.redirect('https://play.google.com/store/apps/details?id=us.keithirwin.tracman'); + }); + app.get('/license', function(req,res){ + res.render('license.html', {user:req.user}); + }); + app.route('/pro') + .all(ensureAuth, function(req,res,next){ + next(); + }).get(function(req,res){ + User.findById(req.session.passport.user, function(err, user){ + if (err){ throwErr(req,err); } + if (!user){ next(); } + else { res.render('pro.html', {user:user}); } + }); + }).post(function(req,res){ + User.findByIdAndUpdate(req.session.passport.user, + {$set:{ isPro:true }}, + function(err, user){ + if (err){ throwErr(req,err); } + else { req.flash('success','You have been signed up for pro. '); } + res.redirect('/dashboard'); + } + ); + }); + + app.route('/suggestion') + .get(function(req,res){ + res.render('suggestion.html', {user:req.user}); + }).post(function(req,res){ + mail.sendSuggestion({ + name: (req.body.name)?req.body.name:req.user.name, + email: (req.body.email)?req.body.email:req.user.email, + suggestion: req.body.suggestion + }, function (err, raw) { + if (err){ throwErr(req,err); } + else { req.flash('success','Thanks for the suggestion! '); } + res.redirect('/dashboard'); + }); + }); + app.route('/bug') + .all(ensureAuth, function(req,res,next){ + next(); + }).get(function(req,res){ + res.render('bug.html', { + user: req.user, + errorMessage: req.flash('error-message') + }); + }).post(function(req,res){ + mail.sendBugReport({ + source: (req.query.source)?req.body.name:'web', + name: (req.body.name)?req.body.name:req.user.name, + email: (req.body.email)?req.body.email:req.user.email, + errorMessage: req.body.errorMessage, + recreation: req.body.recreation, + bug: req.body.bug + }, function (err, raw) { + if (err){ throwErr(req,err); } + else { req.flash('success','Thanks for the report! '); } + res.redirect('/dashboard'); + }); + }); + + // ADMIN + app.route('/admin/requests') + .all([ensureAuth, ensureAdmin], function(req,res,next){ + next(); + }).get(function(req,res){ + User.findById(req.session.passport.user, function(err, user){ + if (err){ req.flash('error', err.message); } + Request.find({}, function(err, requests){ + if (err) { req.flash('error', err.message); } + res.render('admin/requests.html', { + user: user, + noFooter: '1', + requests: requests, + success:req.flash('success')[0], + error:req.flash('error')[0] + }); + }); + }); + }).post(function(req,res){ + Request.findById(req.body.invite, function(err, request){ + if (err){ req.flash('error', err.message); } + mail.sendInvite(request, function (err, raw) { + if (err) { req.flash('error', err.message); } + request.granted = Date.now(); + request.save(function(err) { + if (err) { req.flash('error', err.message); } + }); + req.flash('success', 'Invitation sent to '+request.name+'.'); + res.redirect('/admin/requests'); + }); + }); + }); + app.get('/admin/users', [ensureAuth, ensureAdmin], function(req,res){ + User.findById(req.session.passport.user, function(err, user){ + if (err){ req.flash('error', err.message); } + User.find({}, function(err, users){ + if (err) { req.flash('error', err.message); } + res.render('admin/users.html', { + user: user, + users: users, + noFooter: '1', + success:req.flash('success')[0], + error:req.flash('error')[0] + }); + }); + }); + }); + + // AUTH + app.get('/login', function(req,res){ + res.redirect('/auth/google'); + }); + app.get('/logout', function(req,res){ + req.logout(); + res.redirect('/'); + }); + app.get('/auth/google', passport.authenticate('google', { scope: [ + 'https://www.googleapis.com/auth/plus.login', + 'https://www.googleapis.com/auth/plus.profile.emails.read' + ] })); + app.get('/auth/google/callback', passport.authenticate('google', { + failureRedirect: '/', + failureFlash: true, + successRedirect: '/dashboard?rd=1', + successFlash: true + } )); + app.get('/auth/google/idtoken', passport.authenticate('google-id-token'), function (req,res) { + if (!req.user) { res.sendStatus(401); } + else { res.send(req.user); } + } ); + +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..85bab7b --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "tracman", + "version": "0.1.5", + "description": "Tracks user's GPS location", + "main": "server.js", + "dependencies": { + "body-parser": "^1.15.0", + "connect-flash": "^0.1.1", + "cookie-parser": "^1.4.1", + "email-templates": "^2.1.0", + "express": "^4.13.3", + "express-crash": "0.0.2", + "express-session": "^1.13.0", + "kerberos": "0.0.17", + "mailgun-js": "^0.7.7", + "moment": "^2.12.0", + "mongodb": "^2.1.4", + "mongoose": "^4.3.5", + "nunjucks": "^2.3.0", + "passport": "^0.3.2", + "passport-google-id-token": "^0.4.0", + "passport-google-oauth2": "^0.1.6", + "slug": "^0.9.1", + "socket.io": "^1.4.4" + }, + "devDependencies": { + "chai": "^3.5.0", + "chai-http": "^2.0.1" + }, + "scripts": { + "test": "test.js", + "start": "node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tracman-org/server.git" + }, + "keywords": [ + "tracking", + "location", + "map" + ], + "author": "Keith Irwin", + "license": "MIT", + "README": "README.md", + "bugs": { + "url": "https://tracman.org/bug" + }, + "homepage": "https://tracman.org/" +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..cf22636 --- /dev/null +++ b/server.js @@ -0,0 +1,131 @@ +express = require('express'), + crash = require('express-crash'), + bodyParser = require('body-parser'), + cookieParser = require('cookie-parser'), + session = require('express-session'), + mongoose = require('mongoose'), + nunjucks = require('nunjucks'), + passport = require('passport'), + flash = require('connect-flash'), + secret = require('./config/secrets.js'), + auth = require('./config/auth.js'), + User = require('./config/models/user.js'), + routes = require('./config/routes.js'), + app = express(), + http = require('http').Server(app), + io = require('socket.io')(http); + +// SETUP +nunjucks.configure(__dirname+'/views', { + autoescape: true, + express: app +}); +app.use(session({ + secret: secret.session, + saveUninitialized: true, + resave: true +})); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ + extended: true +})); +app.use(cookieParser(secret.cookie)); +app.use(flash()); +app.use(passport.initialize()); +app.use(passport.session()); +app.use('/static', express.static(__dirname+'/static')); +routes(app); +mongoose.connect(secret.mongoSetup, { + server:{socketOptions:{ keepAlive:1, connectTimeoutMS:30000 }}, + replset:{socketOptions:{ keepAlive:1, connectTimeoutMS:30000 }} +}); + + +// Handle errors +var handle404 = function(err,req,res,next) { + res.render('error.html', {code:404}); +}; +var handle500 = function(err,req,res,next) { + res.render('error.html', {code:500}); +}; +if (secret.url.substring(0,16)!='http://localhost') { + app.use(crash.handle404(handle404)); + app.use(crash.handle500(handle500)); + crash.trapRoute(app); + crash.handle(app, handle404, handle500); +} + +// Check for tracking users +function checkForUsers(room) { + if (room) { + io.to('app-'+room).emit('activate', + (io.of("/").adapter.rooms[room])?'true':'false' + ); + } else { + User.find({}, function(err, users){ + if (err) { console.log(err); } + users.forEach( function(user){ + checkForUsers(user.id); + }); + }); + } +} + +// Sockets +io.on('connection', function(socket) { + + socket.on('room', function(room) { + socket.join(room); + if (room.slice(0,4)!='app-'){ + User.findById({_id:room}, function(err, user) { + if (err) { console.log(err); } + if (user) { io.to('app-'+room).emit('activate','true'); } + }); + } else { + checkForUsers(room.slice(4)); + } + }); + + socket.on('app', function(loc){ + loc.time = Date.now(); + io.to(loc.usr).emit('trac', loc); + User.findByIdAndUpdate(loc.usr, {last:{ + lat: parseFloat(loc.lat), + lon: parseFloat(loc.lon), + dir: parseFloat(loc.dir||0), + spd: parseFloat(loc.spd||0), + time: Date.now() + }}, function(err, user) { + if (err) { console.log(err); } + if (!user) { console.log("No user found: "+loc.user); } + }); + }); + + socket.onclose = function(reason){ + var closedroom = Object.keys(socket.adapter.sids[socket.id]).slice(1)[0]; + setTimeout(function() { + checkForUsers(closedroom); + }, 3000); + Object.getPrototypeOf(this).onclose.call(this,reason); + } + +}); + +// Serialize and deserialize users +passport.serializeUser(function(user, done) { + done(null, user.id); +}); +passport.deserializeUser(function(id, done) { + User.findById(id, function(err, user) { + if(!err) done(null, user); + else done(err, null); + }); +}); + +// SERVE +http.listen(62054, function(){ + console.log('Listening for http on port 62054'); + checkForUsers(); +}); + +module.exports = app; diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000..eb1d938 --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,188 @@ +/* Resets, Clears & Defaults */ +*, *:after, *:before { + box-sizing: border-box; +} + +body { + background-color:#000; + color:#eee; +} +body, input, textarea { + padding: 0; margin: 0; + font-family: 'Open Sans', sans-serif; + font-size: 18px; + color: #eee; + font-weight: 600; +} +.flexbox { + width:100%; + display:flex; + justify-content:space-around; +} +.flexbox.stretch { justify-content:space-between; } +pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; +} +.dark pre { + color: #777; + padding: 1%; + border: 1px solid #ccc; + border-radius: .25rem; +} +.dark .form-control:disabled, .dark .form-control:disabled { + background-color: rgba(255,255,255,0.1); +} +.input-group { + margin-bottom:30px; +} +input[type="checkbox"] { + margin: 8px 0; +} +.form-group#buttons { + width: 100%; + display: flex; + justify-content: space-around; +} +input[type="checkbox"] { + display: inline-block; +} +.help-block {margin-top:-20px;} +.alert { + z-index:10; +} +.alert:not(.alert-dismissible) { + text-align: center; +} +.alert a { + color: inherit; + text-decoration: underline; +} +.alert a:hover { + color: inherit; + text-decoration: none; +} +input:focus, textarea:focus { + outline: 0; +} + +h1, h2, h3, p { + margin: 0 0 20px 0; + position: relative; + z-index: 6; +} + +h1,h2,h3,h4 { font-weight: 600; } +h1 { + font-size: 48px; + line-height: 46px; } +h2 { + font-size: 40px; + line-height: 36px; } +h3 { font-size: 28px; } +h4 { font-size: 20px; } + +.red { color: #fb6e3d; } + +a { + color: #fbc93d; + text-decoration: none; +} +a:hover { + color: #fbc93d; + text-decoration: underline; +} +.light a { + color:#111; + text-decoration: underline; +} +.light a:hover { + color:#111; + text-decoration: none; +} + +img { + max-width: 100%; +} +p img { + display: block; + margin: auto; +} + +input[type="checkbox"] { + width: auto; + margin: 8px; +} +.with-errors { + color: #d9534f; +} + +::selection { + background: #999; +} +::-moz-selection { + background: #999; +} + +/* End Resets, Clears & Defaults */ + +.container { + width: 100%; + max-width: 1000px; + margin: 0 auto; +} +.container:after { + content: ""; + display: block; + clear: both; +} +section { + padding: 100px 0 50px; +} + +.btn { + text-decoration: none; + font-weight:600; + display: inline-block; + padding: 15px 30px; + transition: 200ms; + background: transparent; + cursor: pointer; +} +.dark .btn { + color: #fff; + border: 1px solid #fff; +} +.dark .btn:hover:not(.disabled), +.dark .btn:active:not(.disabled), +.dark .btn:focus:not(.disabled) { + background: rgba(255,255,255,0.1); +} +.light .btn { + color: #222; + text-decoration: none; + border: 1px solid #222; +} +.light .btn:hover:not(.disabled), +.light .btn:active:not(.disabled), +.light .btn:focus:not(.disabled) { + background: rgba(0,0,0,0.1); +} +.btn.yellow { + color: #fbc93d; + border: 1px solid #fbc93d; +} +.dark .btn.yellow:hover:not(.disabled), +.dark .btn.yellow:active:not(.disabled), +.dark .btn.yellow:focus:not(.disabled) { + background: rgba(251,201,61,0.1); +} +.btn.smaller { + padding: 10px 25px; +} +.btn .fa { + margin-left: 10px; +} diff --git a/static/css/bootstrap.css b/static/css/bootstrap.css new file mode 100644 index 0000000..766522a --- /dev/null +++ b/static/css/bootstrap.css @@ -0,0 +1,6229 @@ +/*! + * Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active { + outline: 0; +} + +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + margin: .67em 0; + font-size: 2em; +} + +mark { + color: #000; + background: #ff0; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -.5em; +} + +sub { + bottom: -.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + height: 0; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +input { + line-height: normal; +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td, +th { + padding: 0; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +@-moz-viewport { + width: device-width; +} + +@-ms-viewport { + width: device-width; +} + +@-webkit-viewport { + width: device-width; +} + +@viewport { + width: device-width; +} + +html { + font-size: 16px; + + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 1rem; + line-height: 1.5; + color: #373a3c; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #818a91; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +a { + text-decoration: none; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; +} + +[role="button"] { + cursor: pointer; +} + +a, +area, +button, +[role="button"], +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + background-color: transparent; +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #818a91; + text-align: left; + caption-side: bottom; +} + +th { + text-align: left; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +textarea { + margin: 0; + line-height: inherit; + border-radius: 0; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin: 2rem 0 1rem; + font-size: 1.5rem; + line-height: inherit; +} + +input[type="search"] { + -webkit-box-sizing: inherit; + box-sizing: inherit; + -webkit-appearance: none; +} + +output { + display: inline-block; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: .5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1 { + font-size: 2.5rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.75rem; +} + +h4 { + font-size: 1.5rem; +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +.h1 { + font-size: 2.5rem; +} + +.h2 { + font-size: 2rem; +} + +.h3 { + font-size: 1.75rem; +} + +.h4 { + font-size: 1.5rem; +} + +.h5 { + font-size: 1.25rem; +} + +.h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, .1); +} + +small, +.small { + font-size: 80%; + font-weight: normal; +} + +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 5px; +} + +.dl-horizontal { + margin-right: -1.875rem; + margin-left: -1.875rem; +} + +.dl-horizontal::after { + display: table; + clear: both; + content: ""; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + padding: .5rem 1rem; + margin-bottom: 1rem; + font-size: 1.25rem; + border-left: .25rem solid #eceeef; +} + +.blockquote-footer { + display: block; + font-size: 80%; + line-height: 1.5; + color: #818a91; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.blockquote-reverse { + padding-right: 1rem; + padding-left: 0; + text-align: right; + border-right: .25rem solid #eceeef; + border-left: 0; +} + +.blockquote-reverse .blockquote-footer::before { + content: ""; +} + +.blockquote-reverse .blockquote-footer::after { + content: "\00A0 \2014"; +} + +.img-fluid, .carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + display: block; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: .3rem; +} + +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: .25rem; + line-height: 1.5; + background-color: #fff; + border: 1px solid #ddd; + border-radius: .25rem; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: .5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #818a91; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +code { + padding: .2rem .4rem; + font-size: 90%; + color: #bd4147; + background-color: #f7f7f9; + border-radius: .25rem; +} + +kbd { + padding: .2rem .4rem; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: .2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + line-height: 1.5; + color: #373a3c; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: .9375rem; + padding-left: .9375rem; + margin-right: auto; + margin-left: auto; +} + +.container::after { + display: table; + clear: both; + content: ""; +} + +@media (min-width: 544px) { + .container { + max-width: 576px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 940px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + padding-right: .9375rem; + padding-left: .9375rem; + margin-right: auto; + margin-left: auto; +} + +.container-fluid::after { + display: table; + clear: both; + content: ""; +} + +.row { + margin-right: -.9375rem; + margin-left: -.9375rem; +} + +.row::after { + display: table; + clear: both; + content: ""; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + position: relative; + min-height: 1px; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-1 { + width: 8.333333%; +} + +.col-xs-2 { + width: 16.666667%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.333333%; +} + +.col-xs-5 { + width: 41.666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333%; +} + +.col-xs-8 { + width: 66.666667%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.333333%; +} + +.col-xs-11 { + width: 91.666667%; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-pull-1 { + right: 8.333333%; +} + +.col-xs-pull-2 { + right: 16.666667%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-4 { + right: 33.333333%; +} + +.col-xs-pull-5 { + right: 41.666667%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-7 { + right: 58.333333%; +} + +.col-xs-pull-8 { + right: 66.666667%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-10 { + right: 83.333333%; +} + +.col-xs-pull-11 { + right: 91.666667%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-push-1 { + left: 8.333333%; +} + +.col-xs-push-2 { + left: 16.666667%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-4 { + left: 33.333333%; +} + +.col-xs-push-5 { + left: 41.666667%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-7 { + left: 58.333333%; +} + +.col-xs-push-8 { + left: 66.666667%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-10 { + left: 83.333333%; +} + +.col-xs-push-11 { + left: 91.666667%; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-offset-0 { + margin-left: 0; +} + +.col-xs-offset-1 { + margin-left: 8.333333%; +} + +.col-xs-offset-2 { + margin-left: 16.666667%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-4 { + margin-left: 33.333333%; +} + +.col-xs-offset-5 { + margin-left: 41.666667%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-7 { + margin-left: 58.333333%; +} + +.col-xs-offset-8 { + margin-left: 66.666667%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-10 { + margin-left: 83.333333%; +} + +.col-xs-offset-11 { + margin-left: 91.666667%; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 544px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-1 { + width: 8.333333%; + } + .col-sm-2 { + width: 16.666667%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.333333%; + } + .col-sm-5 { + width: 41.666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333%; + } + .col-sm-8 { + width: 66.666667%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.333333%; + } + .col-sm-11 { + width: 91.666667%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-pull-1 { + right: 8.333333%; + } + .col-sm-pull-2 { + right: 16.666667%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.333333%; + } + .col-sm-pull-5 { + right: 41.666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333%; + } + .col-sm-pull-8 { + right: 66.666667%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.333333%; + } + .col-sm-pull-11 { + right: 91.666667%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-push-1 { + left: 8.333333%; + } + .col-sm-push-2 { + left: 16.666667%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.333333%; + } + .col-sm-push-5 { + left: 41.666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333%; + } + .col-sm-push-8 { + left: 66.666667%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.333333%; + } + .col-sm-push-11 { + left: 91.666667%; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-offset-0 { + margin-left: 0; + } + .col-sm-offset-1 { + margin-left: 8.333333%; + } + .col-sm-offset-2 { + margin-left: 16.666667%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.333333%; + } + .col-sm-offset-5 { + margin-left: 41.666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333%; + } + .col-sm-offset-8 { + margin-left: 66.666667%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.333333%; + } + .col-sm-offset-11 { + margin-left: 91.666667%; + } + .col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 768px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-1 { + width: 8.333333%; + } + .col-md-2 { + width: 16.666667%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.333333%; + } + .col-md-5 { + width: 41.666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333%; + } + .col-md-8 { + width: 66.666667%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.333333%; + } + .col-md-11 { + width: 91.666667%; + } + .col-md-12 { + width: 100%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333%; + } + .col-md-pull-2 { + right: 16.666667%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.333333%; + } + .col-md-pull-5 { + right: 41.666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333%; + } + .col-md-pull-8 { + right: 66.666667%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.333333%; + } + .col-md-pull-11 { + right: 91.666667%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333%; + } + .col-md-push-2 { + left: 16.666667%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.333333%; + } + .col-md-push-5 { + left: 41.666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333%; + } + .col-md-push-8 { + left: 66.666667%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.333333%; + } + .col-md-push-11 { + left: 91.666667%; + } + .col-md-push-12 { + left: 100%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333%; + } + .col-md-offset-2 { + margin-left: 16.666667%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.333333%; + } + .col-md-offset-5 { + margin-left: 41.666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333%; + } + .col-md-offset-8 { + margin-left: 66.666667%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.333333%; + } + .col-md-offset-11 { + margin-left: 91.666667%; + } + .col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 992px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-1 { + width: 8.333333%; + } + .col-lg-2 { + width: 16.666667%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.333333%; + } + .col-lg-5 { + width: 41.666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333%; + } + .col-lg-8 { + width: 66.666667%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.333333%; + } + .col-lg-11 { + width: 91.666667%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333%; + } + .col-lg-pull-2 { + right: 16.666667%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.333333%; + } + .col-lg-pull-5 { + right: 41.666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333%; + } + .col-lg-pull-8 { + right: 66.666667%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.333333%; + } + .col-lg-pull-11 { + right: 91.666667%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333%; + } + .col-lg-push-2 { + left: 16.666667%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.333333%; + } + .col-lg-push-5 { + left: 41.666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333%; + } + .col-lg-push-8 { + left: 66.666667%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.333333%; + } + .col-lg-push-11 { + left: 91.666667%; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333%; + } + .col-lg-offset-2 { + margin-left: 16.666667%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.333333%; + } + .col-lg-offset-5 { + margin-left: 41.666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333%; + } + .col-lg-offset-8 { + margin-left: 66.666667%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.333333%; + } + .col-lg-offset-11 { + margin-left: 91.666667%; + } + .col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 1200px) { + .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + float: left; + } + .col-xl-1 { + width: 8.333333%; + } + .col-xl-2 { + width: 16.666667%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-4 { + width: 33.333333%; + } + .col-xl-5 { + width: 41.666667%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-7 { + width: 58.333333%; + } + .col-xl-8 { + width: 66.666667%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-10 { + width: 83.333333%; + } + .col-xl-11 { + width: 91.666667%; + } + .col-xl-12 { + width: 100%; + } + .col-xl-pull-0 { + right: auto; + } + .col-xl-pull-1 { + right: 8.333333%; + } + .col-xl-pull-2 { + right: 16.666667%; + } + .col-xl-pull-3 { + right: 25%; + } + .col-xl-pull-4 { + right: 33.333333%; + } + .col-xl-pull-5 { + right: 41.666667%; + } + .col-xl-pull-6 { + right: 50%; + } + .col-xl-pull-7 { + right: 58.333333%; + } + .col-xl-pull-8 { + right: 66.666667%; + } + .col-xl-pull-9 { + right: 75%; + } + .col-xl-pull-10 { + right: 83.333333%; + } + .col-xl-pull-11 { + right: 91.666667%; + } + .col-xl-pull-12 { + right: 100%; + } + .col-xl-push-0 { + left: auto; + } + .col-xl-push-1 { + left: 8.333333%; + } + .col-xl-push-2 { + left: 16.666667%; + } + .col-xl-push-3 { + left: 25%; + } + .col-xl-push-4 { + left: 33.333333%; + } + .col-xl-push-5 { + left: 41.666667%; + } + .col-xl-push-6 { + left: 50%; + } + .col-xl-push-7 { + left: 58.333333%; + } + .col-xl-push-8 { + left: 66.666667%; + } + .col-xl-push-9 { + left: 75%; + } + .col-xl-push-10 { + left: 83.333333%; + } + .col-xl-push-11 { + left: 91.666667%; + } + .col-xl-push-12 { + left: 100%; + } + .col-xl-offset-0 { + margin-left: 0; + } + .col-xl-offset-1 { + margin-left: 8.333333%; + } + .col-xl-offset-2 { + margin-left: 16.666667%; + } + .col-xl-offset-3 { + margin-left: 25%; + } + .col-xl-offset-4 { + margin-left: 33.333333%; + } + .col-xl-offset-5 { + margin-left: 41.666667%; + } + .col-xl-offset-6 { + margin-left: 50%; + } + .col-xl-offset-7 { + margin-left: 58.333333%; + } + .col-xl-offset-8 { + margin-left: 66.666667%; + } + .col-xl-offset-9 { + margin-left: 75%; + } + .col-xl-offset-10 { + margin-left: 83.333333%; + } + .col-xl-offset-11 { + margin-left: 91.666667%; + } + .col-xl-offset-12 { + margin-left: 100%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; +} + +.table th, +.table td { + padding: .75rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #eceeef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #eceeef; +} + +.table tbody + tbody { + border-top: 2px solid #eceeef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: .3rem; +} + +.table-bordered { + border: 1px solid #eceeef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #eceeef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover { + background-color: rgba(255,255,255,0.075); +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: #050505; +} + +.table-hover .table-active:hover { + background-color: #181818; +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: #181818; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #003600; + color: #d0e9c6; +} +.table-hover .table-success:hover { + background-color: #0c460d; + color: #dff0d8; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #0c460d; + color: #dff0d8; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #00304f; + color: #c4e3f3; +} + +.table-hover .table-info:hover { + background-color: #064564; + color: #d9edf7; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #064564; + color: #d9edf7; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fcf8e3; +} + +.table-hover .table-warning:hover { + background-color: #faf2cc; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #faf2cc; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #691412; + color: #ebcccc; +} + +.table-hover .table-danger:hover { + background-color: #6e1917; + color: #f2dede; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #6e1917; + color: #f2dede; +} + +.table-responsive { + display: block; + width: 100%; + min-height: .01%; + overflow-x: auto; +} + +.thead-inverse th { + color: #fff; + background-color: #373a3c; +} + +.thead-default th { + color: #55595c; + background-color: #eceeef; +} + +.table-inverse { + color: #eceeef; + background-color: #373a3c; +} + +.table-inverse.table-bordered { + border: 0; +} + +.table-inverse th, +.table-inverse td, +.table-inverse thead th { + border-color: #55595c; +} + +.table-reflow thead { + float: left; +} + +.table-reflow tbody { + display: block; + white-space: nowrap; +} + +.table-reflow th, +.table-reflow td { + border-top: 1px solid #eceeef; + border-left: 1px solid #eceeef; +} + +.table-reflow th:last-child, +.table-reflow td:last-child { + border-right: 1px solid #eceeef; +} + +.table-reflow thead:last-child tr:last-child th, +.table-reflow thead:last-child tr:last-child td, +.table-reflow tbody:last-child tr:last-child th, +.table-reflow tbody:last-child tr:last-child td, +.table-reflow tfoot:last-child tr:last-child th, +.table-reflow tfoot:last-child tr:last-child td { + border-bottom: 1px solid #eceeef; +} + +.table-reflow tr { + float: left; +} + +.table-reflow tr th, +.table-reflow tr td { + display: block !important; + border: 1px solid #eceeef; +} + +.form-control { + display: block; + width: 100%; + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + color: #eee; + background-color: transparent; + background-image: none; + border: 1px solid #ccc; + border-radius: .25rem; +} +input[type="checkbox"].form-control { + width: auto; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + border-color: #66afe9; + color:#fff; + outline: none; +} + +.form-control::-webkit-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::placeholder { + color: #999; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #eceeef; + opacity: 1; +} + +.form-control:disabled { + cursor: not-allowed; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.form-control-label { + padding: .375rem .75rem; + margin-bottom: 0; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 2.25rem; + } + input[type="date"].input-sm, + .input-group-sm input[type="date"].form-control, + input[type="time"].input-sm, + .input-group-sm + input[type="time"].form-control, + input[type="datetime-local"].input-sm, + .input-group-sm + input[type="datetime-local"].form-control, + input[type="month"].input-sm, + .input-group-sm + input[type="month"].form-control { + line-height: 1.8625rem; + } + input[type="date"].input-lg, + .input-group-lg input[type="date"].form-control, + input[type="time"].input-lg, + .input-group-lg + input[type="time"].form-control, + input[type="datetime-local"].input-lg, + .input-group-lg + input[type="datetime-local"].form-control, + input[type="month"].input-lg, + .input-group-lg + input[type="month"].form-control { + line-height: 3.166667rem; + } +} + +.form-control-static { + min-height: 2.25rem; + padding-top: .375rem; + padding-bottom: .375rem; + margin-bottom: 0; +} + +.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: .275rem .75rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem; +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: .75rem 1.25rem; + font-size: 1.25rem; + line-height: 1.333333; + border-radius: .3rem; +} + +.form-group:last { + margin-bottom: 1rem; +} + +.radio, +.checkbox { + position: relative; + display: block; + margin-bottom: .75rem; +} + +.radio label, +.checkbox label { + padding-left: 1.25rem; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio label input:only-child, +.checkbox label input:only-child { + position: static; +} + +/* +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: .25rem; + margin-left: -1.25rem; +} +*/ + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -.25rem; +} + +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + margin-bottom: 0; + padding-right: 1.25rem; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: .75rem; +} + +input[type="radio"]:disabled, input[type="radio"].disabled, +input[type="checkbox"]:disabled, +input[type="checkbox"].disabled { + cursor: not-allowed; +} + +.radio-inline.disabled, +.checkbox-inline.disabled { + cursor: not-allowed; +} + +.radio.disabled label, +.checkbox.disabled label { + cursor: not-allowed; +} + +.form-control-success, +.form-control-warning, +.form-control-danger { + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right .5625rem; + -webkit-background-size: 1.4625rem 1.4625rem; + background-size: 1.4625rem 1.4625rem; +} + +.has-success .text-help, +.has-success .form-control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #5cb85c; +} + +.has-success .form-control { + border-color: #5cb85c; +} + +.has-success .input-group-addon { + color: #5cb85c; + border-color: #5cb85c; +} + +.has-success .form-control-feedback { + color: #5cb85c; +} + +.has-success .form-control-success { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="); +} + +.has-warning .text-help, +.has-warning .form-control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #f0ad4e; +} + +.has-warning .form-control { + border-color: #f0ad4e; +} + +.has-warning .input-group-addon { + color: #f0ad4e; + border-color: #f0ad4e; +} + +.has-warning .form-control-feedback { + color: #f0ad4e; +} + +.has-warning .form-control-warning { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"); +} + +.has-danger .text-help, +.has-danger .form-control-label, +.has-danger .radio, +.has-danger .checkbox, +.has-danger .radio-inline, +.has-danger .checkbox-inline, +.has-danger.radio label, +.has-danger.checkbox label, +.has-danger.radio-inline label, +.has-danger.checkbox-inline label { + color: #d9534f; +} + +.has-danger .form-control { + border-color: #d9534f; +} + +.has-danger .input-group-addon { + color: #d9534f; + border-color: #d9534f; +} + +.has-danger .form-control-feedback { + color: #d9534f; +} + +.has-danger .form-control-danger { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="); +} + +@media (min-width: 544px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + padding: .375rem 1rem; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + border-radius: .25rem; +} + +.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:focus, .btn:hover { + text-decoration: none; +} + +.btn.focus { + text-decoration: none; +} + +.btn:active, .btn.active { + background-image: none; + outline: 0; +} + +.btn.disabled, .btn:disabled { + cursor: not-allowed; + opacity: .65; +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:hover { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:active, .btn-primary.active, +.open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #025aa5; + background-image: none; + border-color: #01549b; +} + +.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, +.open > .btn-primary.dropdown-toggle:hover, +.open > .btn-primary.dropdown-toggle:focus, +.open > .btn-primary.dropdown-toggle.focus { + color: #fff; + background-color: #014682; + border-color: #01315a; +} + +.btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary:disabled:focus, .btn-primary:disabled.focus { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary.disabled:hover, .btn-primary:disabled:hover { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-secondary { + color: #373a3c; + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:hover { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:focus, .btn-secondary.focus { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:active, .btn-secondary.active, +.open > .btn-secondary.dropdown-toggle { + color: #373a.form-group { + margin-bottom: 15px; +}3c; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} + +.btn-secondary:active:hover, .btn-secondary:active:focus, .btn-secondary:active.focus, .btn-secondary.active:hover, .btn-secondary.active:focus, .btn-secondary.active.focus, +.open > .btn-secondary.dropdown-toggle:hover, +.open > .btn-secondary.dropdown-toggle:focus, +.open > .btn-secondary.dropdown-toggle.focus { + color: #373a3c; + background-color: #d4d4d4; + border-color: #8c8c8c; +} + +.btn-secondary.disabled:focus, .btn-secondary.disabled.focus, .btn-secondary:disabled:focus, .btn-secondary:disabled.focus { + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary.disabled:hover, .btn-secondary:disabled:hover { + background-color: #fff; + border-color: #ccc; +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:active, .btn-info.active, +.open > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #2aabd2; +} + +.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, +.open > .btn-info.dropdown-toggle:hover, +.open > .btn-info.dropdown-toggle:focus, +.open > .btn-info.dropdown-toggle.focus { + color: #fff; + background-color: #269abc; + border-color: #1f7e9a; +} + +.btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info:disabled:focus, .btn-info:disabled.focus { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info.disabled:hover, .btn-info:disabled:hover { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:active, .btn-success.active, +.open > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #419641; +} + +.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, +.open > .btn-success.dropdown-toggle:hover, +.open > .btn-success.dropdown-toggle:focus, +.open > .btn-success.dropdown-toggle.focus { + color: #fff; + background-color: #398439; + border-color: #2d672d; +} + +.btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success:disabled:focus, .btn-success:disabled.focus { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success.disabled:hover, .btn-success:disabled:hover { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:active, .btn-warning.active, +.open > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #eb9316; +} + +.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, +.open > .btn-warning.dropdown-toggle:hover, +.open > .btn-warning.dropdown-toggle:focus, +.open > .btn-warning.dropdown-toggle.focus { + color: #fff; + background-color: #d58512; + border-color: #b06d0f; +} + +.btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning:disabled:focus, .btn-warning:disabled.focus { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning.disabled:hover, .btn-warning:disabled:hover { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:active, .btn-danger.active, +.open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #c12e2a; +} + +.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, +.open > .btn-danger.dropdown-toggle:hover, +.open > .btn-danger.dropdown-toggle:focus, +.open > .btn-danger.dropdown-toggle.focus { + color: #fff; + background-color: #ac2925; + border-color: #8b211e; +} + +.btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger:disabled:focus, .btn-danger:disabled.focus { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger.disabled:hover, .btn-danger:disabled:hover { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-primary-outline { + color: #0275d8; + background-color: transparent; + background-image: none; + border-color: #0275d8; +} + +.btn-primary-outline:focus, .btn-primary-outline.focus, .btn-primary-outline:active, .btn-primary-outline.active, +.open > .btn-primary-outline.dropdown-toggle { + color: #000; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary-outline:hover { + color: #000; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary-outline.disabled:focus, .btn-primary-outline.disabled.focus, .btn-primary-outline:disabled:focus, .btn-primary-outline:disabled.focus { + border-color: #43a7fd; +} + +.btn-primary-outline.disabled:hover, .btn-primary-outline:disabled:hover { + border-color: #43a7fd; +} + +.btn-secondary-outline { + color: #ccc; + background-color: transparent; + background-image: none; + border-color: #ccc; +} + +.btn-secondary-outline:focus, .btn-secondary-outline.focus, .btn-secondary-outline:active, .btn-secondary-outline.active, +.open > .btn-secondary-outline.dropdown-toggle { + color: #000; + background-color: #ccc; + border-color: #ccc; +} + +.btn-secondary-outline:hover { + color: #000; + background-color: #ccc; + border-color: #ccc; +} + +.btn-secondary-outline.disabled:focus, .btn-secondary-outline.disabled.focus, .btn-secondary-outline:disabled:focus, .btn-secondary-outline:disabled.focus { + border-color: white; +} + +.btn-secondary-outline.disabled:hover, .btn-secondary-outline:disabled:hover { + border-color: white; +} + +.btn-info-outline { + color: #5bc0de; + background-color: transparent; + background-image: none; + border-color: #5bc0de; +} + +.btn-info-outline:focus, .btn-info-outline.focus, .btn-info-outline:active, .btn-info-outline.active, +.open > .btn-info-outline.dropdown-toggle { + color: #000; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info-outline:hover { + color: #000; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info-outline.disabled:focus, .btn-info-outline.disabled.focus, .btn-info-outline:disabled:focus, .btn-info-outline:disabled.focus { + border-color: #b0e1ef; +} + +.btn-info-outline.disabled:hover, .btn-info-outline:disabled:hover { + border-color: #b0e1ef; +} + +.btn-success-outline { + color: #5cb85c; + background-color: transparent; + background-image: none; + border-color: #5cb85c; +} + +.btn-success-outline:focus, .btn-success-outline.focus, .btn-success-outline:active, .btn-success-outline.active, +.open > .btn-success-outline.dropdown-toggle { + color: #000; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success-outline:hover { + color: #000; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success-outline.disabled:focus, .btn-success-outline.disabled.focus, .btn-success-outline:disabled:focus, .btn-success-outline:disabled.focus { + border-color: #a3d7a3; +} + +.btn-success-outline.disabled:hover, .btn-success-outline:disabled:hover { + border-color: #a3d7a3; +} + +.btn-warning-outline { + color: #f0ad4e; + background-color: transparent; + background-image: none; + border-color: #f0ad4e; +} + +.btn-warning-outline:focus, .btn-warning-outline.focus, .btn-warning-outline:active, .btn-warning-outline.active, +.open > .btn-warning-outline.dropdown-toggle { + color: #000; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning-outline:hover { + color: #000; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning-outline.disabled:focus, .btn-warning-outline.disabled.focus, .btn-warning-outline:disabled:focus, .btn-warning-outline:disabled.focus { + border-color: #f8d9ac; +} + +.btn-warning-outline.disabled:hover, .btn-warning-outline:disabled:hover { + border-color: #f8d9ac; +} + +.btn-danger-outline { + color: #d9534f; + background-color: transparent; + background-image: none; + border-color: #d9534f; +} + +.btn-danger-outline:focus, .btn-danger-outline.focus, .btn-danger-outline:active, .btn-danger-outline.active, +.open > .btn-danger-outline.dropdown-toggle { + color: #000; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger-outline:hover { + color: #000; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger-outline.disabled:focus, .btn-danger-outline.disabled.focus, .btn-danger-outline:disabled:focus, .btn-danger-outline:disabled.focus { + border-color: #eba5a3; +} + +.btn-danger-outline.disabled:hover, .btn-danger-outline:disabled:hover { + border-color: #eba5a3; +} + +.btn-link { + font-weight: normal; + color: #0275d8; + border-radius: 0; +} + +.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { + background-color: transparent; +} + +.btn-link, .btn-link:focus, .btn-link:active { + border-color: transparent; +} + +.btn-link:hover { + border-color: transparent; +} + +.btn-link:focus, .btn-link:hover { + color: #014c8c; + text-decoration: underline; + background-color: transparent; +} + +.btn-link:disabled:focus, .btn-link:disabled:hover { + color: #818a91; + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: .75rem 1.25rem; + font-size: 1.25rem; + line-height: 1.333333; + border-radius: .3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: .25rem .75rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height; + -o-transition-property: height; + transition-property: height; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-right: .25rem; + margin-left: .25rem; + vertical-align: middle; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-left: .3em solid transparent; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: .3em solid; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 1rem; + color: #373a3c; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; +} + +.dropdown-divider { + height: 1px; + margin: .5rem 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.5; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #2b2d2f; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-item.active, .dropdown-item.active:focus, .dropdown-item.active:hover { + color: #fff; + text-decoration: none; + background-color: #0275d8; + outline: 0; +} + +.dropdown-item.disabled, .dropdown-item.disabled:focus, .dropdown-item.disabled:hover { + color: #818a91; +} + +.dropdown-item.disabled:focus, .dropdown-item.disabled:hover { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: .875rem; + line-height: 1.5; + color: #818a91; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: .3em solid; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + margin-left: -5px; +} + +.btn-toolbar::after { + display: table; + clear: both; + content: ""; +} + +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} + +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: .3em .3em 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 .3em .3em; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group::after { + display: table; + clear: both; + content: ""; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: .25rem; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: .25rem; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} + +.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: .375rem .5rem; + font-size: 1rem; + font-weight: normal; + line-height: 1; + background-color: #111; + text-align: center; + border: 1px solid #ccc; + border-radius: .25rem; +} + +.input-group-addon.form-control-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: .275rem .75rem; + font-size: .875rem; + border-radius: .2rem; +} + +.input-group-addon.form-control-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: .75rem 1.25rem; + font-size: 1.25rem; + border-radius: .3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +/* +.input-group .form-control:first-child, +*/ +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +/* +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +*/ + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { + z-index: 3; +} + +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} + +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.input-group-btn:last-child > .btn:focus, .input-group-btn:last-child > .btn:active, .input-group-btn:last-child > .btn:hover, +.input-group-btn:last-child > .btn-group:focus, +.input-group-btn:last-child > .btn-group:active, +.input-group-btn:last-child > .btn-group:hover { + z-index: 3; +} + +.c-input { + position: relative; + display: inline; + padding-left: 1.5rem; + color: #555; + cursor: pointer; +} + +.c-input > input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.c-input > input:checked ~ .c-indicator { + color: #fff; + background-color: #0074d9; +} + +.c-input > input:focus ~ .c-indicator { + -webkit-box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; + box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; +} + +.c-input > input:active ~ .c-indicator { + color: #fff; + background-color: #84c6ff; +} + +.c-input + .c-input { + margin-left: 1rem; +} + +.c-indicator { + position: absolute; + top: 0; + left: 0; + display: block; + width: 1rem; + height: 1rem; + font-size: 65%; + line-height: 1rem; + color: #eee; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #eee; + background-repeat: no-repeat; + background-position: center center; + -webkit-background-size: 50% 50%; + background-size: 50% 50%; +} + +.c-checkbox .c-indicator { + border-radius: .25rem; +} + +.c-checkbox input:checked ~ .c-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=); +} + +.c-checkbox input:indeterminate ~ .c-indicator { + background-color: #0074d9; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K); +} + +.c-radio .c-indicator { + border-radius: 50%; +} + +.c-radio input:checked ~ .c-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==); +} + +.c-inputs-stacked .c-input { + display: inline; +} + +.c-inputs-stacked .c-input::after { + display: block; + margin-bottom: .25rem; + content: ""; +} + +.c-inputs-stacked .c-input + .c-input { + margin-left: 0; +} + +.c-select { + display: inline-block; + max-width: 100%; + -webkit-appearance: none; + -moz-appearance: none; + padding: .375rem 1.75rem .375rem .75rem; + padding-right: .75rem \9; + vertical-align: middle; + background: rgba(0,0,0,0) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) no-repeat right .75rem center; + background-image: none \9; + -webkit-background-size: 8px 10px; + background-size: 8px 10px; + border: 1px solid #ccc; + border-radius: .25rem; +} + +.c-select:focus { + border-color: #51a7e8; + outline: none; +} + +.c-select::-ms-expand { + opacity: 0; +} + +.c-select-sm { + padding-top: 3px; + padding-bottom: 3px; + font-size: 12px; +} + +.c-select-sm:not([multiple]) { + height: 26px; + min-height: 26px; +} + +.c-select option { + background-color: #000; + color: #fff; +} +.c-select option:checked { + background-color: #111; +} + +.file { + position: relative; + display: inline-block; + height: 2.5rem; + cursor: pointer; +} + +.file input { + min-width: 14rem; + margin: 0; + filter: alpha(opacity=0); + opacity: 0; +} + +.file-custom { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #555; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid #ddd; + border-radius: .25rem; +} + +.file-custom::after { + content: "Choose file..."; +} + +.file-custom::before { + position: absolute; + top: -.075rem; + right: -.075rem; + bottom: -.075rem; + z-index: 6; + display: block; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #555; + content: "Browse"; + background-color: #eee; + border: 1px solid #ddd; + border-radius: 0 .25rem .25rem 0; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: inline-block; +} + +.nav-link:focus, .nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #818a91; +} + +.nav-link.disabled, .nav-link.disabled:focus, .nav-link.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: transparent; +} + +.nav-inline .nav-item { + display: inline-block; +} + +.nav-inline .nav-item + .nav-item, +.nav-inline .nav-link + .nav-link { + margin-left: 1rem; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs::after { + display: table; + clear: both; + content: ""; +} + +.nav-tabs .nav-item { + float: left; + margin-bottom: -1px; +} + +.nav-tabs .nav-item + .nav-item { + margin-left: .2rem; +} + +.nav-tabs .nav-link { + display: block; + padding: .5em 1em; + border: 1px solid transparent; + border-radius: .25rem .25rem 0 0; +} + +.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { + border-color: #eceeef #eceeef #ddd; +} + +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover { + color: #818a91; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover, +.nav-tabs .nav-item.open .nav-link, +.nav-tabs .nav-item.open .nav-link:focus, +.nav-tabs .nav-item.open .nav-link:hover { + color: #55595c; + background-color: #fff; + border-color: #ddd #ddd transparent; +} + +.nav-pills::after { + display: table; + clear: both; + content: ""; +} + +.nav-pills .nav-item { + float: left; +} + +.nav-pills .nav-item + .nav-item { + margin-left: .2rem; +} + +.nav-pills .nav-link { + display: block; + padding: .5em 1em; + border-radius: .25rem; +} + +.nav-pills .nav-link.active, .nav-pills .nav-link.active:focus, .nav-pills .nav-link.active:hover, +.nav-pills .nav-item.open .nav-link, +.nav-pills .nav-item.open .nav-link:focus, +.nav-pills .nav-item.open .nav-link:hover { + color: #fff; + cursor: default; + background-color: #0275d8; +} + +.nav-stacked .nav-item { + display: block; + float: none; +} + +.nav-stacked .nav-item + .nav-item { + margin-top: .2rem; + margin-left: 0; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar { + position: relative; + padding: .5rem 1rem; +} + +.navbar::after { + display: table; + clear: both; + content: ""; +} + +@media (min-width: 544px) { + .navbar { + border-radius: .25rem; + } +} + +.navbar-full { + z-index: 1000; +} + +@media (min-width: 544px) { + .navbar-full { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} + +@media (min-width: 544px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1030; + width: 100%; +} + +@media (min-width: 544px) { + .navbar-sticky-top { + border-radius: 0; + } +} + +.navbar-brand { + float: left; + padding-top: .25rem; + padding-bottom: .25rem; + margin-right: 1rem; + font-size: 1.25rem; +} + +.navbar-brand:focus, .navbar-brand:hover { + text-decoration: none; +} + +.navbar-brand > img { + display: block; +} + +.navbar-divider { + float: left; + width: 1px; + padding-top: .425rem; + padding-bottom: .425rem; + margin-right: 1rem; + margin-left: 1rem; + overflow: hidden; +} + +.navbar-divider::before { + content: "\00a0"; +} + +.navbar-toggler { + padding: .5rem .75rem; + font-size: 1.25rem; + line-height: 1; + background: none; + border: 1px solid transparent; + border-radius: .25rem; +} + +.navbar-toggler:focus, .navbar-toggler:hover { + text-decoration: none; +} + +@media (min-width: 544px) { + .navbar-toggleable-xs { + display: block !important; + } +} + +@media (min-width: 768px) { + .navbar-toggleable-sm { + display: block !important; + } +} + +@media (min-width: 992px) { + .navbar-toggleable-md { + display: block !important; + } +} + +.navbar-nav .nav-item { + float: left; +} + +.navbar-nav .nav-link { + display: block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-nav .nav-link + .nav-link { + margin-left: 1rem; +} + +.navbar-nav .nav-item + .nav-item { + margin-left: 1rem; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .3); +} + +.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .6); +} + +.navbar-light .navbar-nav .open > .nav-link, .navbar-light .navbar-nav .open > .nav-link:focus, .navbar-light .navbar-nav .open > .nav-link:hover, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .active > .nav-link:focus, +.navbar-light .navbar-nav .active > .nav-link:hover, +.navbar-light .navbar-nav .nav-link.open, +.navbar-light .navbar-nav .nav-link.open:focus, +.navbar-light .navbar-nav .nav-link.open:hover, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.active:focus, +.navbar-light .navbar-nav .nav-link.active:hover { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-divider { + background-color: rgba(0, 0, 0, .075); +} + +.navbar-dark .navbar-brand { + color: white; +} + +.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { + color: white; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .5); +} + +.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, .75); +} + +.navbar-dark .navbar-nav .open > .nav-link, .navbar-dark .navbar-nav .open > .nav-link:focus, .navbar-dark .navbar-nav .open > .nav-link:hover, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link:focus, +.navbar-dark .navbar-nav .active > .nav-link:hover, +.navbar-dark .navbar-nav .nav-link.open, +.navbar-dark .navbar-nav .nav-link.open:focus, +.navbar-dark .navbar-nav .nav-link.open:hover, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.active:focus, +.navbar-dark .navbar-nav .nav-link.active:hover { + color: white; +} + +.navbar-dark .navbar-divider { + background-color: rgba(255, 255, 255, .075); +} + +.card { + position: relative; + display: block; + margin-bottom: .75rem; + background-color: #fff; + border: 1px solid #e5e5e5; + border-radius: .25rem; +} + +.card-block { + padding: 1.25rem; +} + +.card-title { + margin-bottom: .75rem; +} + +.card-subtitle { + margin-top: -.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-radius: .25rem .25rem 0 0; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-radius: 0 0 .25rem .25rem; +} + +.card-header { + padding: .75rem 1.25rem; + background-color: #f5f5f5; + border-bottom: 1px solid #e5e5e5; +} + +.card-header:first-child { + border-radius: .25rem .25rem 0 0; +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; +} + +.card-footer:last-child { + border-radius: 0 0 .25rem .25rem; +} + +.card-primary { + background-color: #0275d8; + border-color: #0275d8; +} + +.card-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.card-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.card-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.card-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.card-primary-outline { + background-color: transparent; + border-color: #0275d8; +} + +.card-secondary-outline { + background-color: transparent; + border-color: #ccc; +} + +.card-info-outline { + background-color: transparent; + border-color: #5bc0de; +} + +.card-success-outline { + background-color: transparent; + border-color: #5cb85c; +} + +.card-warning-outline { + background-color: transparent; + border-color: #f0ad4e; +} + +.card-danger-outline { + background-color: transparent; + border-color: #d9534f; +} + +.card-inverse .card-header, +.card-inverse .card-footer { + border-bottom: 1px solid rgba(255, 255, 255, .2); +} + +.card-inverse .card-header, +.card-inverse .card-footer, +.card-inverse .card-title, +.card-inverse .card-blockquote { + color: #fff; +} + +.card-inverse .card-link, +.card-inverse .card-text, +.card-inverse .card-blockquote > footer { + color: rgba(255, 255, 255, .65); +} + +.card-inverse .card-link:focus, .card-inverse .card-link:hover { + color: #fff; +} + +.card-blockquote { + padding: 0; + margin-bottom: 0; + border-left: 0; +} + +.card-img { + border-radius: .25rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img-top { + border-radius: .25rem .25rem 0 0; +} + +.card-img-bottom { + border-radius: 0 0 .25rem .25rem; +} + +@media (min-width: 544px) { + .card-deck { + display: table; + table-layout: fixed; + border-spacing: 1.25rem 0; + } + .card-deck .card { + display: table-cell; + width: 1%; + vertical-align: top; + } + .card-deck-wrapper { + margin-right: -1.25rem; + margin-left: -1.25rem; + } +} + +@media (min-width: 544px) { + .card-group { + display: table; + width: 100%; + table-layout: fixed; + } + .card-group .card { + display: table-cell; + vertical-align: top; + } + .card-group .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) .card-img-top, + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom { + border-radius: 0; + } +} + +@media (min-width: 544px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.breadcrumb { + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eceeef; + border-radius: .25rem; +} + +.breadcrumb::after { + display: table; + clear: both; + content: ""; +} + +.breadcrumb > li { + float: left; +} + +.breadcrumb > li + li::before { + padding-right: .5rem; + padding-left: .5rem; + color: #818a91; + content: "/"; +} + +.breadcrumb > .active { + color: #818a91; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin-top: 1rem; + margin-bottom: 1rem; + border-radius: .25rem; +} + +.page-item { + display: inline; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +.page-item.active .page-link, .page-item.active .page-link:focus, .page-item.active .page-link:hover { + z-index: 2; + color: #fff; + cursor: default; + background-color: #0275d8; + border-color: #0275d8; +} + +.page-item.disabled .page-link, .page-item.disabled .page-link:focus, .page-item.disabled .page-link:hover { + color: #818a91; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.page-link { + position: relative; + float: left; + padding: .5rem .75rem; + margin-left: -1px; + line-height: 1.5; + color: #0275d8; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} + +.page-link:focus, .page-link:hover { + color: #014c8c; + background-color: #eceeef; + border-color: #ddd; +} + +.pagination-lg .page-link { + padding: .75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.333333; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem; +} + +.pagination-sm .page-link { + padding: .275rem .75rem; + font-size: .875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem; +} + +.pager { + padding-left: 0; + margin-top: 1rem; + margin-bottom: 1rem; + text-align: center; + list-style: none; +} + +.pager::after { + display: table; + clear: both; + content: ""; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} + +.pager li > a:focus, .pager li > a:hover { + text-decoration: none; + background-color: #eceeef; +} + +.pager .disabled > a, .pager .disabled > a:focus, .pager .disabled > a:hover { + color: #818a91; + cursor: not-allowed; + background-color: #fff; +} + +.pager .disabled > span { + color: #818a91; + cursor: not-allowed; + background-color: #fff; +} + +.pager-next > a, +.pager-next > span { + float: right; +} + +.pager-prev > a, +.pager-prev > span { + float: left; +} + +.label { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25rem; +} + +.label:empty { + display: none; +} + +.btn .label { + position: relative; + top: -1px; +} + +a.label:focus, a.label:hover { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label-pill { + padding-right: .6em; + padding-left: .6em; + border-radius: 10rem; +} + +.label-default { + background-color: #818a91; +} + +.label-default[href]:focus, .label-default[href]:hover { + background-color: #687077; +} + +.label-primary { + background-color: #0275d8; +} + +.label-primary[href]:focus, .label-primary[href]:hover { + background-color: #025aa5; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:focus, .label-success[href]:hover { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:focus, .label-info[href]:hover { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:focus, .label-warning[href]:hover { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:focus, .label-danger[href]:hover { + background-color: #c9302c; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eceeef; + border-radius: .3rem; +} + +@media (min-width: 544px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-hr { + border-top-color: #d0d5d8; +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + padding: 15px; + border: 1px solid transparent; + border-radius: .25rem; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: bold; +} + +.alert-dismissible { + padding-right: 35px; +} + +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #dff0d8; + background-color: #3c763d; + border-color: #3c763d; +} + +.alert-success hr { + border-top-color: #c1e2b3; +} + +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + color: #d9edf7; + background-color: #31708f; + border-color: #d9edf7; +} + +.alert-info hr { + border-top-color: #a6d5ec; +} + +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + background-color: #8a6d3b; + color: #fcf8e3; + border-color: #8a6d3b; +} + +.alert-warning hr { + border-top-color: #f7ecb5; +} + +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + background-color: #a94442; + color: #ebcccc; + border-color: #a94442; +} +.alert .close { + color:inherit; +} + +.alert-danger hr { + border-top-color: #e4b9b9; +} + +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: block; + width: 100%; + height: 1rem; + margin-bottom: 1rem; +} + +.progress[value] { + -webkit-appearance: none; + color: #0074d9; + border: 0; + + -moz-appearance: none; + appearance: none; +} + +.progress[value]::-webkit-progress-bar { + background-color: #eee; + border-radius: .25rem; +} + +.progress[value]::-webkit-progress-value::before { + content: attr(value); +} + +.progress[value]::-webkit-progress-value { + background-color: #0074d9; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.progress[value="100"]::-webkit-progress-value { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +@media screen and (min-width: 0\0) { + .progress { + background-color: #eee; + border-radius: .25rem; + } + .progress-bar { + display: inline-block; + height: 1rem; + text-indent: -999rem; + background-color: #0074d9; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; + } + .progress[width^="0"] { + min-width: 2rem; + color: #818a91; + background-color: transparent; + background-image: none; + } + .progress[width="100%"] { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; + } +} + +.progress-striped[value]::-webkit-progress-value { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; +} + +.progress-striped[value]::-moz-progress-bar { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +@media screen and (min-width: 0\0) { + .progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; + } +} + +.progress-animated[value]::-webkit-progress-value { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-animated[value]::-moz-progress-bar { + animation: progress-bar-stripes 2s linear infinite; +} + +@media screen and (min-width: 0\0) { + .progress-animated .progress-bar-striped { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + } +} + +.progress-success[value]::-webkit-progress-value { + background-color: #5cb85c; +} + +.progress-success[value]::-moz-progress-bar { + background-color: #5cb85c; +} + +@media screen and (min-width: 0\0) { + .progress-success .progress-bar { + background-color: #5cb85c; + } +} + +.progress-info[value]::-webkit-progress-value { + background-color: #5bc0de; +} + +.progress-info[value]::-moz-progress-bar { + background-color: #5bc0de; +} + +@media screen and (min-width: 0\0) { + .progress-info .progress-bar { + background-color: #5bc0de; + } +} + +.progress-warning[value]::-webkit-progress-value { + background-color: #f0ad4e; +} + +.progress-warning[value]::-moz-progress-bar { + background-color: #f0ad4e; +} + +@media screen and (min-width: 0\0) { + .progress-warning .progress-bar { + background-color: #f0ad4e; + } +} + +.progress-danger[value]::-webkit-progress-value { + background-color: #d9534f; +} + +.progress-danger[value]::-moz-progress-bar { + background-color: #d9534f; +} + +@media screen and (min-width: 0\0) { + .progress-danger .progress-bar { + background-color: #d9534f; + } +} + +.media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media-body { + width: 10000px; +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-object { + display: block; +} + +.media-object.img-thumbnail { + max-width: none; +} + +.media-right { + padding-left: 10px; +} + +.media-left { + padding-right: 10px; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item { + position: relative; + display: block; + padding: .75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} + +.list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.list-group-flush .list-group-item { + border-width: 1px 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +a.list-group-item, +button.list-group-item { + width: 100%; + color: #555; + text-align: inherit; +} + +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} + +a.list-group-item:focus, a.list-group-item:hover, +button.list-group-item:focus, +button.list-group-item:hover { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: #eceeef; +} + +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { + color: inherit; +} + +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { + color: #818a91; +} + +.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small { + color: inherit; +} + +.list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { + color: #a8d6fe; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} + +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} + +a.list-group-item-success:focus, a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #3c763d; + background-color: #d0e9c6; +} + +a.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover, +button.list-group-item-success.active, +button.list-group-item-success.active:focus, +button.list-group-item-success.active:hover { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} + +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} + +a.list-group-item-info:focus, a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #31708f; + background-color: #c4e3f3; +} + +a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover, +button.list-group-item-info.active, +button.list-group-item-info.active:focus, +button.list-group-item-info.active:hover { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} + +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} + +a.list-group-item-warning:focus, a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #8a6d3b; + background-color: #faf2cc; +} + +a.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover, +button.list-group-item-warning.active, +button.list-group-item-warning.active:focus, +button.list-group-item-warning.active:hover { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} + +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} + +a.list-group-item-danger:focus, a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #a94442; + background-color: #ebcccc; +} + +a.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover, +button.list-group-item-danger.active, +button.list-group-item-danger.active:focus, +button.list-group-item-danger.active:hover { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9 { + padding-bottom: 42.857143%; +} + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.embed-responsive-1by1 { + padding-bottom: 100%; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; +} + +.close:focus, .close:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; +} + +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} + +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: transform .3s ease-out, -o-transform .3s ease-out; + transition: -webkit-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.in { + opacity: .5; +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header::after { + display: table; + clear: both; + content: ""; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer::after { + display: table; + clear: both; + content: ""; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 544px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-sm { + width: 300px; + } +} + +@media (min-width: 768px) { + .modal-lg { + width: 900px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: .875rem; + font-style: normal; + font-weight: normal; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + opacity: 0; + + line-break: auto; +} + +.tooltip.in { + opacity: .9; +} + +.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.tooltip-top .tooltip-arrow, .tooltip.bs-tether-element-attached-bottom .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.tooltip-right .tooltip-arrow, .tooltip.bs-tether-element-attached-left .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.tooltip-bottom .tooltip-arrow, .tooltip.bs-tether-element-attached-top .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip.tooltip-left .tooltip-arrow, .tooltip.bs-tether-element-attached-right .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: .25rem; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: .875rem; + font-style: normal; + font-weight: normal; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + + line-break: auto; +} + +.popover.popover-top, .popover.bs-tether-element-attached-bottom { + margin-top: -10px; +} + +.popover.popover-top .popover-arrow, .popover.bs-tether-element-attached-bottom .popover-arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} + +.popover.popover-top .popover-arrow::after, .popover.bs-tether-element-attached-bottom .popover-arrow::after { + bottom: 1px; + margin-left: -10px; + content: ""; + border-top-color: #fff; + border-bottom-width: 0; +} + +.popover.popover-right, .popover.bs-tether-element-attached-left { + margin-left: 10px; +} + +.popover.popover-right .popover-arrow, .popover.bs-tether-element-attached-left .popover-arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} + +.popover.popover-right .popover-arrow::after, .popover.bs-tether-element-attached-left .popover-arrow::after { + bottom: -10px; + left: 1px; + content: ""; + border-right-color: #fff; + border-left-width: 0; +} + +.popover.popover-bottom, .popover.bs-tether-element-attached-top { + margin-top: 10px; +} + +.popover.popover-bottom .popover-arrow, .popover.bs-tether-element-attached-top .popover-arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: rgba(0, 0, 0, .25); +} + +.popover.popover-bottom .popover-arrow::after, .popover.bs-tether-element-attached-top .popover-arrow::after { + top: 1px; + margin-left: -10px; + content: ""; + border-top-width: 0; + border-bottom-color: #fff; +} + +.popover.popover-left, .popover.bs-tether-element-attached-right { + margin-left: -10px; +} + +.popover.popover-left .popover-arrow, .popover.bs-tether-element-attached-right .popover-arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: rgba(0, 0, 0, .25); +} + +.popover.popover-left .popover-arrow::after, .popover.bs-tether-element-attached-right .popover-arrow::after { + right: 1px; + bottom: -10px; + content: ""; + border-right-width: 0; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: -.7rem -.7rem 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover-arrow, .popover-arrow::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover-arrow { + border-width: 11px; +} + +.popover-arrow::after { + content: ""; + border-width: 10px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .carousel-item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} + +.carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + line-height: 1; +} + +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .carousel-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: transform .6s ease-in-out, -o-transform .6s ease-in-out; + transition: -webkit-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .carousel-item.next, .carousel-inner > .carousel-item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .carousel-item.prev, .carousel-inner > .carousel-item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .carousel-item.next.left, .carousel-inner > .carousel-item.prev.right, .carousel-inner > .carousel-item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + opacity: .5; +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} + +.carousel-control:focus, .carousel-control:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + line-height: 1; +} + +.carousel-control .icon-prev { + left: 50%; + margin-left: -10px; +} + +.carousel-control .icon-next { + right: 50%; + margin-right: -10px; +} + +.carousel-control .icon-prev::before { + content: "\2039"; +} + +.carousel-control .icon-next::before { + content: "\203a"; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: transparent; + border: 1px solid #fff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media (min-width: 544px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix::after { + display: table; + clear: both; + content: ""; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-xs-left { + float: left !important; +} + +.pull-xs-right { + float: right !important; +} + +.pull-xs-none { + float: none !important; +} + +@media (min-width: 544px) { + .pull-sm-left { + float: left !important; + } + .pull-sm-right { + float: right !important; + } + .pull-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .pull-md-left { + float: left !important; + } + .pull-md-right { + float: right !important; + } + .pull-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .pull-lg-left { + float: left !important; + } + .pull-lg-right { + float: right !important; + } + .pull-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .pull-xl-left { + float: left !important; + } + .pull-xl-right { + float: right !important; + } + .pull-xl-none { + float: none !important; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +.invisible { + visibility: hidden !important; +} + +.text-hide { + font: "0/0" a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-xs-left { + text-align: left !important; +} + +.text-xs-right { + text-align: right !important; +} + +.text-xs-center { + text-align: center !important; +} + +@media (min-width: 544px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-normal { + font-weight: normal; +} + +.font-weight-bold { + font-weight: bold; +} + +.font-italic { + font-style: italic; +} + +.text-muted { + color: #818a91; +} + +.text-primary { + color: #0275d8 !important; +} + +a.text-primary:focus, a.text-primary:hover { + color: #025aa5; +} + +.text-success { + color: #5cb85c !important; +} + +a.text-success:focus, a.text-success:hover { + color: #449d44; +} + +.text-info { + color: #5bc0de !important; +} + +a.text-info:focus, a.text-info:hover { + color: #31b0d5; +} + +.text-warning { + color: #f0ad4e !important; +} + +a.text-warning:focus, a.text-warning:hover { + color: #ec971f; +} + +.text-danger { + color: #d9534f !important; +} + +a.text-danger:focus, a.text-danger:hover { + color: #c9302c; +} + +.bg-inverse { + color: #eceeef; + background-color: #373a3c; +} + +.bg-faded { + background-color: #f7f7f9; +} + +.bg-primary { + color: #fff !important; + background-color: #0275d8 !important; +} + +a.bg-primary:focus, a.bg-primary:hover { + background-color: #025aa5; +} + +.bg-success { + color: #fff !important; + background-color: #5cb85c !important; +} + +a.bg-success:focus, a.bg-success:hover { + background-color: #449d44; +} + +.bg-info { + color: #fff !important; + background-color: #5bc0de !important; +} + +a.bg-info:focus, a.bg-info:hover { + background-color: #31b0d5; +} + +.bg-warning { + color: #fff !important; + background-color: #f0ad4e !important; +} + +a.bg-warning:focus, a.bg-warning:hover { + background-color: #ec971f; +} + +.bg-danger { + color: #fff !important; + background-color: #d9534f !important; +} + +a.bg-danger:focus, a.bg-danger:hover { + background-color: #c9302c; +} + +.m-x-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.m-a-0 { + margin: 0 0 !important; +} + +.m-t-0 { + margin-top: 0 !important; +} + +.m-r-0 { + margin-right: 0 !important; +} + +.m-b-0 { + margin-bottom: 0 !important; +} + +.m-l-0 { + margin-left: 0 !important; +} + +.m-x-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.m-y-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.m-a-1 { + margin: 1rem 1rem !important; +} + +.m-t-1 { + margin-top: 1rem !important; +} + +.m-r-1 { + margin-right: 1rem !important; +} + +.m-b-1 { + margin-bottom: 1rem !important; +} + +.m-l-1 { + margin-left: 1rem !important; +} + +.m-x-1 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.m-y-1 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.m-a-2 { + margin: 1.5rem 1.5rem !important; +} + +.m-t-2 { + margin-top: 1.5rem !important; +} + +.m-r-2 { + margin-right: 1.5rem !important; +} + +.m-b-2 { + margin-bottom: 1.5rem !important; +} + +.m-l-2 { + margin-left: 1.5rem !important; +} + +.m-x-2 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.m-y-2 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.m-a-3 { + margin: 3rem 3rem !important; +} + +.m-t-3 { + margin-top: 3rem !important; +} + +.m-r-3 { + margin-right: 3rem !important; +} + +.m-b-3 { + margin-bottom: 3rem !important; +} + +.m-l-3 { + margin-left: 3rem !important; +} + +.m-x-3 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.m-y-3 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.p-a-0 { + padding: 0 0 !important; +} + +.p-t-0 { + padding-top: 0 !important; +} + +.p-r-0 { + padding-right: 0 !important; +} + +.p-b-0 { + padding-bottom: 0 !important; +} + +.p-l-0 { + padding-left: 0 !important; +} + +.p-x-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.p-y-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.p-a-1 { + padding: 1rem 1rem !important; +} + +.p-t-1 { + padding-top: 1rem !important; +} + +.p-r-1 { + padding-right: 1rem !important; +} + +.p-b-1 { + padding-bottom: 1rem !important; +} + +.p-l-1 { + padding-left: 1rem !important; +} + +.p-x-1 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.p-y-1 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.p-a-2 { + padding: 1.5rem 1.5rem !important; +} + +.p-t-2 { + padding-top: 1.5rem !important; +} + +.p-r-2 { + padding-right: 1.5rem !important; +} + +.p-b-2 { + padding-bottom: 1.5rem !important; +} + +.p-l-2 { + padding-left: 1.5rem !important; +} + +.p-x-2 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.p-y-2 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.p-a-3 { + padding: 3rem 3rem !important; +} + +.p-t-3 { + padding-top: 3rem !important; +} + +.p-r-3 { + padding-right: 3rem !important; +} + +.p-b-3 { + padding-bottom: 3rem !important; +} + +.p-l-3 { + padding-left: 3rem !important; +} + +.p-x-3 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.p-y-3 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pos-f-t { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.hidden-xs-up { + display: none !important; +} + +@media (max-width: 543px) { + .hidden-xs-down { + display: none !important; + } +} + +@media (min-width: 544px) { + .hidden-sm-up { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-sm-down { + display: none !important; + } +} + +@media (min-width: 768px) { + .hidden-md-up { + display: none !important; + } +} + +@media (max-width: 991px) { + .hidden-md-down { + display: none !important; + } +} + +@media (min-width: 992px) { + .hidden-lg-up { + display: none !important; + } +} + +@media (max-width: 1199px) { + .hidden-lg-down { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xl-up { + display: none !important; + } +} + +.hidden-xl-down { + display: none !important; +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/static/css/footer.css b/static/css/footer.css new file mode 100644 index 0000000..5298efe --- /dev/null +++ b/static/css/footer.css @@ -0,0 +1,52 @@ +footer { + font-weight: 300; + width:100%; + overflow:auto; + background: #111; + color: #ccc; + padding: 0 20px; +} +footer .left { + float: left; + padding: 15px 0; +} +footer .left p { + margin: 0; +} +footer a { + font-weight:600; + color: #fff; +} +footer a:hover { + text-decoration: none; +} +footer .right { + text-align: right; + float: right; + padding: 15px 0; +} +footer a .fa { + margin-left: 5px; + font-size: 20px; + color: inherit; +} +footer .fa a:hover, footer .fa a:focus { + color: inherit; +} + +@media (max-width: 800px) { + footer { + padding: 0 10px; + } +} +@media (max-width: 600px) { + footer { + text-align: center; + } + footer .left, footer .right { + float: none; + } + footer .right { + padding-top: 0; + } +} diff --git a/static/css/header.css b/static/css/header.css new file mode 100644 index 0000000..b0e871f --- /dev/null +++ b/static/css/header.css @@ -0,0 +1,162 @@ +header { + background: #222; + padding: 0; + position: fixed; + top: 0; left: 0; + width: 100%; + z-index: 200; +} +header .logo { + float: left; + font-family: 'Open Sans', sans-serif; + padding: 13px 23px; + color: #fbc93d; + font-weight: 800; + font-size: 22px; + line-height: 30px; + margin: 0; +} +header a:hover, header a:focus { + color: #fbc93d; +} +header .logo a { + color:inherit; + font:inherit; + text-decoration:inherit; + cursor: pointer; +} +header .logo img { + margin-right: 10px; + position: relative; + width:28px; + height:28px; +} +header nav { + float: right; +} +header nav ul { + padding: 0; + margin: 0; +} +header nav ul li { + display: inline-block; + float: left; +} +header nav ul li a, header nav ul li span { + text-decoration:inherit; + display: inline-block; + padding: 15px 20px; + color: #fff; + transition: 200ms; +} +header nav ul li a:hover, +header nav ul li a:focus, +header nav ul li a.active, +header .logo:hover { + text-decoration: none; + background: rgba(255,255,255,0.1); +} +.alert.header { + position: relative; + border-radius: 0; + top: 58px; + width: 100%; +} +header .hamburger { + display: none; + padding: 5px; + cursor: pointer; + transition-property: opacity, -webkit-filter; + transition-property: opacity, filter; + transition-property: opacity, filter, -webkit-filter; + transition-duration: 0.15s; + transition-timing-function: linear; } + .hamburger:hover { + opacity: 0.7; } +header .hamburger-box { + width: 40px; + height: 24px; + position: relative; } +header .hamburger-inner { + top: 50%; + margin-top: -2px; } + header .hamburger-inner, header .hamburger-inner::before, header .hamburger-inner::after { + width: 40px; + height: 4px; + background-color: #fff; + border-radius: 4px; + position: absolute; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + transition-duration: 0.15s; + transition-timing-function: ease; } + header .hamburger-inner::before, header .hamburger-inner::after { + content: ""; + display: block; } + header .hamburger-inner::before { + top: -10px; } + header .hamburger-inner::after { + bottom: -10px; } + +header .hamburger--slider .hamburger-inner { + top: 0; } + header .hamburger--slider .hamburger-inner::before { + top: 10px; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + transition-timing-function: ease; + transition-duration: 0.2s; } + header .hamburger--slider .hamburger-inner::after { + top: 20px; } + +header .hamburger--slider.is-active .hamburger-inner { + -webkit-transform: translate3d(0, 10px, 0) rotate(45deg); + transform: translate3d(0, 10px, 0) rotate(45deg); } + header .hamburger--slider.is-active .hamburger-inner::before { + -webkit-transform: rotate(-45deg) translate3d(-5.71429px, -6px, 0); + transform: rotate(-45deg) translate3d(-5.71429px, -6px, 0); + opacity: 0; } + header .hamburger--slider.is-active .hamburger-inner::after { + -webkit-transform: translate3d(0, -20px, 0) rotate(-90deg); + transform: translate3d(0, -20px, 0) rotate(-90deg); } + + +@media (max-width: 800px) { + header { padding:0; } + header nav ul li a { padding:15px; } +} +@media (max-width: 600px) { + header nav { + float: none; + position: fixed; + top: 56px; + right: -300px; + bottom: 0; + width: 100%; + max-width: 300px; + background: #333; + transition: 200ms; + } + header nav.visible { + right: 0px; + } + header nav ul li { + display: block; + float: none; + width: 100%; + } + header nav ul li a { + display: block; + width: 100%; + border-bottom: 1px solid rgba(255,255,255,0.1); + } + header .hamburger { + display: inline-block; + color: #fff; + position: absolute; + right: 10px; + top: 13px; + } +} diff --git a/static/css/index.css b/static/css/index.css new file mode 100644 index 0000000..d2e6510 --- /dev/null +++ b/static/css/index.css @@ -0,0 +1,306 @@ +/* Animations */ +@keyframes pulse { + 0% { transform: scale(1); } + 50% { transform: scale(0.8); } + 100% { transform: scale(1); } +} +@keyframes spin { + 0% { transform: rotate(30deg); } + 100% { transform: rotate(210deg); } +} +@keyframes spin2 { + 0% { transform: rotate(150deg); } + 100% { transform: rotate(330deg); } +} +/* End Animations */ + +.btn { border-radius: 50px; } + +.splash { + background: #090909; + background-image: url("/static/img/style/map.jpg"); + background-size: cover; + color: #FFF; + height: 100vh; + overflow: hidden; + position: relative; +} +.splash:after, .splash:before { + content: ""; + display: block; + position: absolute; + top: -40px; right: -40px; bottom: -40px; left: -40px; +} +.splash:after { + background: rgba(255,255,255,0.05); + transform: rotate(30deg); + animation: spin 60s infinite linear; +} +.splash:before { + background: rgba(0,0,0,0.5); + transform: rotate(150deg); + animation: spin2 50s infinite linear; +} +.splash .container { + position: relative; + top: 48%; + transform: translateY(-50%); + z-index: 5; +} +.splash h1 { + color: #fbc93d; +} +.splash h2 { + margin-bottom: 40px; +} +.splash .btn { + margin: 0 20px 10px 0; +} +.splash .btn:hover { + color:#fff; + background: rgba(0,0,0,0.5); +} + +.overview { + text-align: center; +} +.overview > div > div { + float: left; + width: 33%; + padding: 0 40px 0 40px; +} +.overview .fa { + display: inline-block; + color:#222; + font-size: 50px; + width: 100px; + height: 100px; + border-radius: 50px; + background: #f6f6f6; + margin-bottom: 20px; + padding-top: 25px; +} +.overview p { + margin-bottom: 0; +} + +.feature.app { + background: #111; +} +.feature { + position: relative; + overflow: hidden; +} +.feature img { + position: absolute; + top: 100px; + right: 55%; +} +.feature:nth-of-type(even) img { + right: auto; + left: 55%; +} +.feature > div > div { + width: 50%; + float: right; +} +.feature > div > div > p { + margin-bottom: 40px; +} +.feature:nth-of-type(even) > div > div { + float: left; +} +.feature ul { + margin: 0; + padding: 0; +} +.feature ul li { + display: block; + margin-bottom: 20px; + padding-bottom: 20px; + border-bottom: 1px solid #eee; +} +.feature ul li:last-child { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: 0; +} +.feature ul li h3 { + margin: 0 0 5px 0; +} +.feature ul li p:last-child { + margin: 0; +} +.feature ul li .fa { + float: left; + font-size: 30px; + background: #fbc93d; + color: #000; + width: 50px; + height: 50px; + display: inline-block; + text-align: center; + padding-top: 10px; + border-radius: 25px; + margin-right: 20px; + margin-top: 7px; +} +.feature ul li p { + overflow: hidden; +} + +.light { + color:#222; + position: relative; + overflow: hidden; +} +.light:after { + content: ""; + display: block; + position: absolute; + top: -40px; right: -40px; bottom: -40px; left: -40px; + background: rgba(255,255,255,0.1); + transform: rotate(30deg); +} +.light h2 { + margin-bottom: 40px; +} + +.disclaimer { + color: #fb6e3d; + background: #000; +} +.disclaimer .container { + position: relative; + z-index: 10; +} +.disclaimer a, .disclaimer a:hover { + color:#fb6e3d; +} + +.get { + background: #fbc93d; +} +.get input, .get textarea { + color:#111; +} +.get .input { + width: 47%; + float: left; +} +.get .submit { + width: 47%; + float:right; +} +.get .input:nth-of-type(odd) { + margin-right: 6%; +} +.get .message { + display: block; + clear: both; + float: none; + padding-top: 10px; +} +.get .input input { + display: inline-block; + float: left; + width: 100%; + background: rgba(255,255,255,0.3); + border: 0; + padding: 10px 15px; +} +.get .message textarea { + display: block; + width: 100%; + height: 200px; + background: rgba(255,255,255,0.3); + border: 0; + padding: 10px 15px; + resize: vertical; +} +.get label { + position: relative; + z-index: 10; +} +.get label.input span, .get label.message span { + display: inline-block; + float: left; +} +.get .submit { + text-align: center; + padding-top: 10px; +} +.get .submit .btn, .get .submit .alert { + position:static; + float:right; +} + +@media (max-width: 800px) { + section { + padding: 80px 10px; + } + .splash { + height: auto; + padding: 150px 10px 80px 10px; + text-align: center; + } + .splash .container { + position: relative; + top: 0; + transform: none; + } + .overview > div > div { + padding: 0 20px; + } + .feature img { + right: 65%; + } + .feature:nth-of-type(even) img { + left: 65%; + } + .feature > div > div { + width: 60%; + } +} + +@media (max-width: 600px) { + section { + padding: 40px 10px; + } + .splash { + padding: 100px 10px 40px 10px; + } + .overview > div > div { + float: none; + width: 100%; + margin-bottom: 40px; + padding: 0; + } + .overview > div > div:last-child { + margin-bottom: 0; + } + .overview p { + overflow: hidden; + } + .feature img { + display: none; + } + .feature > div > div { + width: 100%; + float: none; + } + .get .input { + display: block; + width: 100%; + float: none; + } + .get .input:nth-of-type(odd) { + margin-right: 0; + } + .get label { + padding-top: 10px; + } + .get label:first-of-type { + padding-top: 0; + } +} diff --git a/static/css/trac.css b/static/css/trac.css new file mode 100644 index 0000000..0010b61 --- /dev/null +++ b/static/css/trac.css @@ -0,0 +1,73 @@ +body { + color: #fff; + width: 100%; + height: 100%; + background: #000;} +.wrap { + position: absolute; + bottom: 0px; + width: 100%; +} + +.centered.alert { + text-align:center; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +#map, #pano {position:relative;} +#pano {float:right;} +.loading { + font-size:7em; + position: absolute; + top: 50%; + left: 50%; + margin: -56px 0 0 -56px; +} + +.map-logo { + margin-left: -75px; + background: rgba(0,0,0,.7); + padding: 0 10px 0 75px; + font-size: 2em; +} +.map-logo a { color: #fbc93d; } + +.tim { + color: #000; + font-size: 12px; + padding-left: 5px; + padding-right: 5px; + background-color: rgba(255,255,255,.7); +} + +.spd { + font-size: 32px; + height: 40px;} +.spd-sign { + color: #000; + text-align: center; + padding: 5px; + border: 2px solid #000; + border-radius: 3px; + margin: 10px; + background-color: #FFF; +} +.alt-unit, .spd-unit { font-size:12px; } +.alt-label, .spd-label { + font-size:18px; + height:18px;} +.alt { + font-size: 32px; + height: 40px;} +.alt-sign { + color: #FFF; + text-align: center; + padding: 5px; + border: 2px solid #FFF; + border-radius: 3px; + margin: 10px; + background-color: #009800; +} diff --git a/static/img/icon/black/128.png b/static/img/icon/black/128.png new file mode 100644 index 0000000..6d5457b Binary files /dev/null and b/static/img/icon/black/128.png differ diff --git a/static/img/icon/black/152.png b/static/img/icon/black/152.png new file mode 100644 index 0000000..b6a2ca7 Binary files /dev/null and b/static/img/icon/black/152.png differ diff --git a/static/img/icon/black/16.png b/static/img/icon/black/16.png new file mode 100644 index 0000000..b3d77ff Binary files /dev/null and b/static/img/icon/black/16.png differ diff --git a/static/img/icon/black/228.png b/static/img/icon/black/228.png new file mode 100644 index 0000000..f889498 Binary files /dev/null and b/static/img/icon/black/228.png differ diff --git a/static/img/icon/black/32.png b/static/img/icon/black/32.png new file mode 100644 index 0000000..f626274 Binary files /dev/null and b/static/img/icon/black/32.png differ diff --git a/static/img/icon/black/36.png b/static/img/icon/black/36.png new file mode 100644 index 0000000..bfb1072 Binary files /dev/null and b/static/img/icon/black/36.png differ diff --git a/static/img/icon/black/48.png b/static/img/icon/black/48.png new file mode 100644 index 0000000..f08598a Binary files /dev/null and b/static/img/icon/black/48.png differ diff --git a/static/img/icon/black/57.png b/static/img/icon/black/57.png new file mode 100644 index 0000000..e1c7134 Binary files /dev/null and b/static/img/icon/black/57.png differ diff --git a/static/img/icon/black/72.png b/static/img/icon/black/72.png new file mode 100644 index 0000000..83dfef4 Binary files /dev/null and b/static/img/icon/black/72.png differ diff --git a/static/img/icon/bw/128.png b/static/img/icon/bw/128.png new file mode 100644 index 0000000..ada4b73 Binary files /dev/null and b/static/img/icon/bw/128.png differ diff --git a/static/img/icon/bw/152.png b/static/img/icon/bw/152.png new file mode 100644 index 0000000..d6e5b4e Binary files /dev/null and b/static/img/icon/bw/152.png differ diff --git a/static/img/icon/bw/16-32-48.ico b/static/img/icon/bw/16-32-48.ico new file mode 100644 index 0000000..a91d455 Binary files /dev/null and b/static/img/icon/bw/16-32-48.ico differ diff --git a/static/img/icon/bw/16.png b/static/img/icon/bw/16.png new file mode 100644 index 0000000..8883fee Binary files /dev/null and b/static/img/icon/bw/16.png differ diff --git a/static/img/icon/bw/228.png b/static/img/icon/bw/228.png new file mode 100644 index 0000000..3c02dca Binary files /dev/null and b/static/img/icon/bw/228.png differ diff --git a/static/img/icon/bw/32.png b/static/img/icon/bw/32.png new file mode 100644 index 0000000..bbb218e Binary files /dev/null and b/static/img/icon/bw/32.png differ diff --git a/static/img/icon/bw/48.png b/static/img/icon/bw/48.png new file mode 100644 index 0000000..1200903 Binary files /dev/null and b/static/img/icon/bw/48.png differ diff --git a/static/img/icon/bw/57.png b/static/img/icon/bw/57.png new file mode 100644 index 0000000..85155d2 Binary files /dev/null and b/static/img/icon/bw/57.png differ diff --git a/static/img/icon/bw/72.png b/static/img/icon/bw/72.png new file mode 100644 index 0000000..4b63987 Binary files /dev/null and b/static/img/icon/bw/72.png differ diff --git a/static/img/icon/by/128.png b/static/img/icon/by/128.png new file mode 100644 index 0000000..65c0296 Binary files /dev/null and b/static/img/icon/by/128.png differ diff --git a/static/img/icon/by/152.png b/static/img/icon/by/152.png new file mode 100644 index 0000000..f80bf53 Binary files /dev/null and b/static/img/icon/by/152.png differ diff --git a/static/img/icon/by/16-32-48.ico b/static/img/icon/by/16-32-48.ico new file mode 100644 index 0000000..e4b5d80 Binary files /dev/null and b/static/img/icon/by/16-32-48.ico differ diff --git a/static/img/icon/by/16.png b/static/img/icon/by/16.png new file mode 100644 index 0000000..1e606f9 Binary files /dev/null and b/static/img/icon/by/16.png differ diff --git a/static/img/icon/by/228.png b/static/img/icon/by/228.png new file mode 100644 index 0000000..319ddc9 Binary files /dev/null and b/static/img/icon/by/228.png differ diff --git a/static/img/icon/by/32.png b/static/img/icon/by/32.png new file mode 100644 index 0000000..f33afce Binary files /dev/null and b/static/img/icon/by/32.png differ diff --git a/static/img/icon/by/48.png b/static/img/icon/by/48.png new file mode 100644 index 0000000..ca7cfc7 Binary files /dev/null and b/static/img/icon/by/48.png differ diff --git a/static/img/icon/by/57.png b/static/img/icon/by/57.png new file mode 100644 index 0000000..66834c1 Binary files /dev/null and b/static/img/icon/by/57.png differ diff --git a/static/img/icon/by/72.png b/static/img/icon/by/72.png new file mode 100644 index 0000000..4d1ec12 Binary files /dev/null and b/static/img/icon/by/72.png differ diff --git a/static/img/icon/white/128.png b/static/img/icon/white/128.png new file mode 100644 index 0000000..4564667 Binary files /dev/null and b/static/img/icon/white/128.png differ diff --git a/static/img/icon/white/152.png b/static/img/icon/white/152.png new file mode 100644 index 0000000..08d98fd Binary files /dev/null and b/static/img/icon/white/152.png differ diff --git a/static/img/icon/white/16.png b/static/img/icon/white/16.png new file mode 100644 index 0000000..d87bee4 Binary files /dev/null and b/static/img/icon/white/16.png differ diff --git a/static/img/icon/white/228.png b/static/img/icon/white/228.png new file mode 100644 index 0000000..7329c86 Binary files /dev/null and b/static/img/icon/white/228.png differ diff --git a/static/img/icon/white/32.png b/static/img/icon/white/32.png new file mode 100644 index 0000000..735f334 Binary files /dev/null and b/static/img/icon/white/32.png differ diff --git a/static/img/icon/white/36.png b/static/img/icon/white/36.png new file mode 100644 index 0000000..a49aded Binary files /dev/null and b/static/img/icon/white/36.png differ diff --git a/static/img/icon/white/48.png b/static/img/icon/white/48.png new file mode 100644 index 0000000..c2a567e Binary files /dev/null and b/static/img/icon/white/48.png differ diff --git a/static/img/icon/white/57.png b/static/img/icon/white/57.png new file mode 100644 index 0000000..c019e9e Binary files /dev/null and b/static/img/icon/white/57.png differ diff --git a/static/img/icon/white/72.png b/static/img/icon/white/72.png new file mode 100644 index 0000000..7ac5931 Binary files /dev/null and b/static/img/icon/white/72.png differ diff --git a/static/img/style/laptop.png b/static/img/style/laptop.png new file mode 100644 index 0000000..0d6d4f6 Binary files /dev/null and b/static/img/style/laptop.png differ diff --git a/static/img/style/logo-28.png b/static/img/style/logo-28.png new file mode 100644 index 0000000..a5a50b6 Binary files /dev/null and b/static/img/style/logo-28.png differ diff --git a/static/img/style/map.jpg b/static/img/style/map.jpg new file mode 100644 index 0000000..2cf665f Binary files /dev/null and b/static/img/style/map.jpg differ diff --git a/static/img/style/phone.png b/static/img/style/phone.png new file mode 100644 index 0000000..0df2975 Binary files /dev/null and b/static/img/style/phone.png differ diff --git a/static/js/header.js b/static/js/header.js new file mode 100644 index 0000000..198a496 --- /dev/null +++ b/static/js/header.js @@ -0,0 +1,6 @@ +$(document).ready(function(){ + $(".hamburger").click(function(){ + $(".hamburger").toggleClass("is-active"); + $('nav').toggleClass('visible'); + }); +}); diff --git a/static/js/index.js b/static/js/index.js new file mode 100644 index 0000000..5fda183 --- /dev/null +++ b/static/js/index.js @@ -0,0 +1,18 @@ +jQuery.extend(jQuery.easing,{ + easeInOutExpo: function(x, t, b, c, d){ + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + } +}); + +$(document).ready(function(){ + + $('a[href=#]').click(function(e){ + e.preventDefault(); + $('nav').removeClass('visible'); + $('html,body').stop().animate({scrollTop: $('.'+$(this).data('scrollto')).offset().top-65 }, 700, 'easeInOutExpo', function(){}); + }); + +}); diff --git a/static/js/moment.min.js b/static/js/moment.min.js new file mode 100644 index 0000000..ba38995 --- /dev/null +++ b/static/js/moment.min.js @@ -0,0 +1,7 @@ +//! moment.js +//! version : 2.12.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Zc.apply(null,arguments)}function b(a){Zc=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in $c)d=$c[c],e=b[d],m(e)||(a[d]=e);return a}function o(b){n(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),_c===!1&&(_c=!0,a.updateOffset(this),_c=!1)}function p(a){return a instanceof o||null!=a&&null!=a._isAMomentObject}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=q(b)),c}function s(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&r(a[d])!==r(b[d]))&&g++;return g+f}function t(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function u(a,b){var c=!0;return g(function(){return c&&(t(a+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),c=!1),b.apply(this,arguments)},b)}function v(a,b){ad[a]||(t(b),ad[a]=!0)}function w(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function x(a){return"[object Object]"===Object.prototype.toString.call(a)}function y(a){var b,c;for(c in a)b=a[c],w(b)?this[c]=b:this["_"+c]=b;this._config=a,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function z(a,b){var c,d=g({},a);for(c in b)f(b,c)&&(x(a[c])&&x(b[c])?(d[c]={},g(d[c],a[c]),g(d[c],b[c])):null!=b[c]?d[c]=b[c]:delete d[c]);return d}function A(a){null!=a&&this.set(a)}function B(a){return a?a.toLowerCase().replace("_","-"):a}function C(a){for(var b,c,d,e,f=0;f0;){if(d=D(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&s(e,c,!0)>=b-1)break;b--}f++}return null}function D(a){var b=null;if(!cd[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=bd._abbr,require("./locale/"+a),E(b)}catch(c){}return cd[a]}function E(a,b){var c;return a&&(c=m(b)?H(a):F(a,b),c&&(bd=c)),bd._abbr}function F(a,b){return null!==b?(b.abbr=a,null!=cd[a]?(v("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),b=z(cd[a]._config,b)):null!=b.parentLocale&&(null!=cd[b.parentLocale]?b=z(cd[b.parentLocale]._config,b):v("parentLocaleUndefined","specified parentLocale is not defined yet")),cd[a]=new A(b),E(a),cd[a]):(delete cd[a],null)}function G(a,b){if(null!=b){var c;null!=cd[a]&&(b=z(cd[a]._config,b)),c=new A(b),c.parentLocale=cd[a],cd[a]=c,E(a)}else null!=cd[a]&&(null!=cd[a].parentLocale?cd[a]=cd[a].parentLocale:null!=cd[a]&&delete cd[a]);return cd[a]}function H(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return bd;if(!c(a)){if(b=D(a))return b;a=[a]}return C(a)}function I(){return Object.keys(cd)}function J(a,b){var c=a.toLowerCase();dd[c]=dd[c+"s"]=dd[b]=a}function K(a){return"string"==typeof a?dd[a]||dd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)f(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(b,c){return function(d){return null!=d?(O(this,b,d),a.updateOffset(this,c),this):N(this,b)}}function N(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function O(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function P(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=K(a),w(this[a]))return this[a](b);return this}function Q(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function R(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(hd[a]=e),b&&(hd[b[0]]=function(){return Q(e.apply(this,arguments),b[1],b[2])}),c&&(hd[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function S(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function T(a){var b,c,d=a.match(ed);for(b=0,c=d.length;c>b;b++)hd[d[b]]?d[b]=hd[d[b]]:d[b]=S(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function U(a,b){return a.isValid()?(b=V(b,a.localeData()),gd[b]=gd[b]||T(b),gd[b](a)):a.localeData().invalidDate()}function V(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(fd.lastIndex=0;d>=0&&fd.test(a);)a=a.replace(fd,c),fd.lastIndex=0,d-=1;return a}function W(a,b,c){zd[a]=w(b)?b:function(a,d){return a&&c?c:b}}function X(a,b){return f(zd,a)?zd[a](b._strict,b._locale):new RegExp(Y(a))}function Y(a){return Z(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function Z(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=r(a)}),c=0;cd;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function fa(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=r(b);else if(b=a.localeData().monthsParse(b),"number"!=typeof b)return a;return c=Math.min(a.date(),ba(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ga(b){return null!=b?(fa(this,b),a.updateOffset(this,!0),this):N(this,"Month")}function ha(){return ba(this.year(),this.month())}function ia(a){return this._monthsParseExact?(f(this,"_monthsRegex")||ka.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex}function ja(a){return this._monthsParseExact?(f(this,"_monthsRegex")||ka.call(this),a?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex}function ka(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;12>b;b++)c=h([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;12>b;b++)d[b]=Z(d[b]),e[b]=Z(e[b]),f[b]=Z(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")$","i")}function la(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[Cd]<0||c[Cd]>11?Cd:c[Dd]<1||c[Dd]>ba(c[Bd],c[Cd])?Dd:c[Ed]<0||c[Ed]>24||24===c[Ed]&&(0!==c[Fd]||0!==c[Gd]||0!==c[Hd])?Ed:c[Fd]<0||c[Fd]>59?Fd:c[Gd]<0||c[Gd]>59?Gd:c[Hd]<0||c[Hd]>999?Hd:-1,j(a)._overflowDayOfYear&&(Bd>b||b>Dd)&&(b=Dd),j(a)._overflowWeeks&&-1===b&&(b=Id),j(a)._overflowWeekday&&-1===b&&(b=Jd),j(a).overflow=b),a}function ma(a){var b,c,d,e,f,g,h=a._i,i=Pd.exec(h)||Qd.exec(h);if(i){for(j(a).iso=!0,b=0,c=Sd.length;c>b;b++)if(Sd[b][1].exec(i[1])){e=Sd[b][0],d=Sd[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Td.length;c>b;b++)if(Td[b][1].exec(i[3])){f=(i[2]||" ")+Td[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Rd.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),Ba(a)}else a._isValid=!1}function na(b){var c=Ud.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(ma(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function oa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 100>a&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function pa(a){var b=new Date(Date.UTC.apply(null,arguments));return 100>a&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function qa(a){return ra(a)?366:365}function ra(a){return a%4===0&&a%100!==0||a%400===0}function sa(){return ra(this.year())}function ta(a,b,c){var d=7+b-c,e=(7+pa(a,0,d).getUTCDay()-b)%7;return-e+d-1}function ua(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ta(a,d,e),j=1+7*(b-1)+h+i;return 0>=j?(f=a-1,g=qa(f)+j):j>qa(a)?(f=a+1,g=j-qa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function va(a,b,c){var d,e,f=ta(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return 1>g?(e=a.year()-1,d=g+wa(e,b,c)):g>wa(a.year(),b,c)?(d=g-wa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function wa(a,b,c){var d=ta(a,b,c),e=ta(a+1,b,c);return(qa(a)-d+e)/7}function xa(a,b,c){return null!=a?a:null!=b?b:c}function ya(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function za(a){var b,c,d,e,f=[];if(!a._d){for(d=ya(a),a._w&&null==a._a[Dd]&&null==a._a[Cd]&&Aa(a),a._dayOfYear&&(e=xa(a._a[Bd],d[Bd]),a._dayOfYear>qa(e)&&(j(a)._overflowDayOfYear=!0),c=pa(e,0,a._dayOfYear),a._a[Cd]=c.getUTCMonth(),a._a[Dd]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[Ed]&&0===a._a[Fd]&&0===a._a[Gd]&&0===a._a[Hd]&&(a._nextDay=!0,a._a[Ed]=0),a._d=(a._useUTC?pa:oa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Ed]=24)}}function Aa(a){var b,c,d,e,f,g,h,i;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=xa(b.GG,a._a[Bd],va(Ja(),1,4).year),d=xa(b.W,1),e=xa(b.E,1),(1>e||e>7)&&(i=!0)):(f=a._locale._week.dow,g=a._locale._week.doy,c=xa(b.gg,a._a[Bd],va(Ja(),f,g).year),d=xa(b.w,1),null!=b.d?(e=b.d,(0>e||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f),1>d||d>wa(c,f,g)?j(a)._overflowWeeks=!0:null!=i?j(a)._overflowWeekday=!0:(h=ua(c,d,e,f,g),a._a[Bd]=h.year,a._dayOfYear=h.dayOfYear)}function Ba(b){if(b._f===a.ISO_8601)return void ma(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=V(b._f,b._locale).match(ed)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),hd[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),aa(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[Ed]<=12&&b._a[Ed]>0&&(j(b).bigHour=void 0),b._a[Ed]=Ca(b._locale,b._a[Ed],b._meridiem),za(b),la(b)}function Ca(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function Da(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function Ea(a){if(!a._d){var b=L(a._i);a._a=e([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),za(a)}}function Fa(a){var b=new o(la(Ga(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function Ga(a){var b=a._i,e=a._f;return a._locale=a._locale||H(a._l),null===b||void 0===e&&""===b?l({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),p(b)?new o(la(b)):(c(e)?Da(a):e?Ba(a):d(b)?a._d=b:Ha(a),k(a)||(a._d=null),a))}function Ha(b){var f=b._i;void 0===f?b._d=new Date(a.now()):d(f)?b._d=new Date(+f):"string"==typeof f?na(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),za(b)):"object"==typeof f?Ea(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ia(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,Fa(f)}function Ja(a,b,c,d){return Ia(a,b,c,d,!1)}function Ka(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Ja();for(d=b[0],e=1;ea&&(a=-a,c="-"),c+Q(~~(a/60),2)+b+Q(~~a%60,2)})}function Qa(a,b){var c=(b||"").match(a)||[],d=c[c.length-1]||[],e=(d+"").match(Zd)||["-",0,0],f=+(60*e[1])+r(e[2]);return"+"===e[0]?f:-f}function Ra(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(p(b)||d(b)?+b:+Ja(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Ja(b).local()}function Sa(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ta(b,c){var d,e=this._offset||0;return this.isValid()?null!=b?("string"==typeof b?b=Qa(wd,b):Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Sa(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?ib(this,cb(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Sa(this):null!=b?this:NaN}function Ua(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Va(a){return this.utcOffset(0,a)}function Wa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Sa(this),"m")),this}function Xa(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Qa(vd,this._i)),this}function Ya(a){return this.isValid()?(a=a?Ja(a).utcOffset():0,(this.utcOffset()-a)%60===0):!1}function Za(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function $a(){if(!m(this._isDSTShifted))return this._isDSTShifted;var a={};if(n(a,this),a=Ga(a),a._a){var b=a._isUTC?h(a._a):Ja(a._a);this._isDSTShifted=this.isValid()&&s(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function _a(){return this.isValid()?!this._isUTC:!1}function ab(){return this.isValid()?this._isUTC:!1}function bb(){return this.isValid()?this._isUTC&&0===this._offset:!1}function cb(a,b){var c,d,e,g=a,h=null;return Oa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=$d.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:r(h[Dd])*c,h:r(h[Ed])*c,m:r(h[Fd])*c,s:r(h[Gd])*c,ms:r(h[Hd])*c}):(h=_d.exec(a))?(c="-"===h[1]?-1:1,g={y:db(h[2],c),M:db(h[3],c),w:db(h[4],c),d:db(h[5],c),h:db(h[6],c),m:db(h[7],c),s:db(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=fb(Ja(g.from),Ja(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Na(g),Oa(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function db(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function eb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function fb(a,b){var c;return a.isValid()&&b.isValid()?(b=Ra(b,a),a.isBefore(b)?c=eb(a,b):(c=eb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function gb(a){return 0>a?-1*Math.round(-1*a):Math.round(a)}function hb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(v(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=cb(c,d),ib(this,e,a),this}}function ib(b,c,d,e){var f=c._milliseconds,g=gb(c._days),h=gb(c._months);b.isValid()&&(e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&O(b,"Date",N(b,"Date")+g*d),h&&fa(b,N(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function jb(a,b){var c=a||Ja(),d=Ra(c,this).startOf("day"),e=this.diff(d,"days",!0),f=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse",g=b&&(w(b[f])?b[f]():b[f]);return this.format(g||this.localeData().calendar(f,this,Ja(c)))}function kb(){return new o(this)}function lb(a,b){var c=p(a)?a:Ja(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?+this>+c:+c<+this.clone().startOf(b)):!1}function mb(a,b){var c=p(a)?a:Ja(a);return this.isValid()&&c.isValid()?(b=K(m(b)?"millisecond":b),"millisecond"===b?+c>+this:+this.clone().endOf(b)<+c):!1}function nb(a,b,c){return this.isAfter(a,c)&&this.isBefore(b,c)}function ob(a,b){var c,d=p(a)?a:Ja(a);return this.isValid()&&d.isValid()?(b=K(b||"millisecond"),"millisecond"===b?+this===+d:(c=+d,+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))):!1}function pb(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function qb(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function rb(a,b,c){var d,e,f,g;return this.isValid()?(d=Ra(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=sb(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:q(g)):NaN):NaN}function sb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function tb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ub(){var a=this.clone().utc();return 0f&&(b=f),Ub.call(this,a,b,c,d,e))}function Ub(a,b,c,d,e){var f=ua(a,b,c,d,e),g=pa(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Vb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Wb(a){return va(a,this._week.dow,this._week.doy).week}function Xb(){return this._week.dow}function Yb(){return this._week.doy}function Zb(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function $b(a){var b=va(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function _b(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function ac(a,b){return c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]}function bc(a){return this._weekdaysShort[a.day()]}function cc(a){return this._weekdaysMin[a.day()]}function dc(a,b,c){var d,e,f;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;7>d;d++){if(e=Ja([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function ec(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=_b(a,this.localeData()),this.add(a-b,"d")):b}function fc(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function gc(a){return this.isValid()?null==a?this.day()||7:this.day(this.day()%7?a:a-7):null!=a?this:NaN}function hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function ic(){return this.hours()%12||12}function jc(a,b){R(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function kc(a,b){return b._meridiemParse}function lc(a){return"p"===(a+"").toLowerCase().charAt(0)}function mc(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function nc(a,b){b[Hd]=r(1e3*("0."+a))}function oc(){return this._isUTC?"UTC":""}function pc(){return this._isUTC?"Coordinated Universal Time":""}function qc(a){return Ja(1e3*a)}function rc(){return Ja.apply(null,arguments).parseZone()}function sc(a,b,c){var d=this._calendar[a];return w(d)?d.call(b,c):d}function tc(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function uc(){return this._invalidDate}function vc(a){return this._ordinal.replace("%d",a)}function wc(a){return a}function xc(a,b,c,d){var e=this._relativeTime[c];return w(e)?e(a,b,c,d):e.replace(/%d/i,a)}function yc(a,b){var c=this._relativeTime[a>0?"future":"past"];return w(c)?c(b):c.replace(/%s/i,b)}function zc(a,b,c,d){var e=H(),f=h().set(d,b);return e[c](f,a)}function Ac(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return zc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=zc(a,f,c,e);return g}function Bc(a,b){return Ac(a,b,"months",12,"month")}function Cc(a,b){return Ac(a,b,"monthsShort",12,"month")}function Dc(a,b){return Ac(a,b,"weekdays",7,"day")}function Ec(a,b){return Ac(a,b,"weekdaysShort",7,"day")}function Fc(a,b){return Ac(a,b,"weekdaysMin",7,"day")}function Gc(){var a=this._data;return this._milliseconds=xe(this._milliseconds),this._days=xe(this._days),this._months=xe(this._months),a.milliseconds=xe(a.milliseconds),a.seconds=xe(a.seconds),a.minutes=xe(a.minutes),a.hours=xe(a.hours),a.months=xe(a.months),a.years=xe(a.years),this}function Hc(a,b,c,d){var e=cb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function Ic(a,b){return Hc(this,a,b,1)}function Jc(a,b){return Hc(this,a,b,-1)}function Kc(a){return 0>a?Math.floor(a):Math.ceil(a)}function Lc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*Kc(Nc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=q(f/1e3),i.seconds=a%60,b=q(a/60),i.minutes=b%60,c=q(b/60),i.hours=c%24,g+=q(c/24),e=q(Mc(g)),h+=e,g-=Kc(Nc(e)),d=q(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function Mc(a){return 4800*a/146097}function Nc(a){return 146097*a/4800}function Oc(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+Mc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(Nc(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function Pc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*r(this._months/12)}function Qc(a){return function(){return this.as(a)}}function Rc(a){return a=K(a),this[a+"s"]()}function Sc(a){return function(){return this._data[a]}}function Tc(){return q(this.days()/7)}function Uc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function Vc(a,b,c){var d=cb(a).abs(),e=Ne(d.as("s")),f=Ne(d.as("m")),g=Ne(d.as("h")),h=Ne(d.as("d")),i=Ne(d.as("M")),j=Ne(d.as("y")),k=e=f&&["m"]||f=g&&["h"]||g=h&&["d"]||h=i&&["M"]||i=j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,Uc.apply(null,k)}function Wc(a,b){return void 0===Oe[a]?!1:void 0===b?Oe[a]:(Oe[a]=b,!0)}function Xc(a){var b=this.localeData(),c=Vc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Yc(){var a,b,c,d=Pe(this._milliseconds)/1e3,e=Pe(this._days),f=Pe(this._months);a=q(d/60),b=q(a/60),d%=60,a%=60,c=q(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var Zc,$c=a.momentProperties=[],_c=!1,ad={};a.suppressDeprecationWarnings=!1;var bd,cd={},dd={},ed=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,fd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,gd={},hd={},id=/\d/,jd=/\d\d/,kd=/\d{3}/,ld=/\d{4}/,md=/[+-]?\d{6}/,nd=/\d\d?/,od=/\d\d\d\d?/,pd=/\d\d\d\d\d\d?/,qd=/\d{1,3}/,rd=/\d{1,4}/,sd=/[+-]?\d{1,6}/,td=/\d+/,ud=/[+-]?\d+/,vd=/Z|[+-]\d\d:?\d\d/gi,wd=/Z|[+-]\d\d(?::?\d\d)?/gi,xd=/[+-]?\d+(\.\d{1,3})?/,yd=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,zd={},Ad={},Bd=0,Cd=1,Dd=2,Ed=3,Fd=4,Gd=5,Hd=6,Id=7,Jd=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),R("MMMM",0,0,function(a){return this.localeData().months(this,a)}),J("month","M"),W("M",nd),W("MM",nd,jd),W("MMM",function(a,b){return b.monthsShortRegex(a)}),W("MMMM",function(a,b){return b.monthsRegex(a)}),$(["M","MM"],function(a,b){b[Cd]=r(a)-1}),$(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[Cd]=e:j(c).invalidMonth=a});var Kd=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ld="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Md="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nd=yd,Od=yd,Pd=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Qd=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Rd=/Z|[+-]\d\d(?::?\d\d)?/,Sd=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Td=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ud=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=u("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),R("Y",0,0,function(){var a=this.year();return 9999>=a?""+a:"+"+a}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),J("year","y"),W("Y",ud),W("YY",nd,jd),W("YYYY",rd,ld),W("YYYYY",sd,md),W("YYYYYY",sd,md),$(["YYYYY","YYYYYY"],Bd),$("YYYY",function(b,c){c[Bd]=2===b.length?a.parseTwoDigitYear(b):r(b); +}),$("YY",function(b,c){c[Bd]=a.parseTwoDigitYear(b)}),$("Y",function(a,b){b[Bd]=parseInt(a,10)}),a.parseTwoDigitYear=function(a){return r(a)+(r(a)>68?1900:2e3)};var Vd=M("FullYear",!1);a.ISO_8601=function(){};var Wd=u("moment().min is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Ja.apply(null,arguments);return this.isValid()&&a.isValid()?this>a?this:a:l()}),Xd=u("moment().max is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Ja.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:l()}),Yd=function(){return Date.now?Date.now():+new Date};Pa("Z",":"),Pa("ZZ",""),W("Z",wd),W("ZZ",wd),$(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Qa(wd,a)});var Zd=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var $d=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/,_d=/^(-)?P(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)W)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?$/;cb.fn=Na.prototype;var ae=hb(1,"add"),be=hb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var ce=u("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ob("gggg","weekYear"),Ob("ggggg","weekYear"),Ob("GGGG","isoWeekYear"),Ob("GGGGG","isoWeekYear"),J("weekYear","gg"),J("isoWeekYear","GG"),W("G",ud),W("g",ud),W("GG",nd,jd),W("gg",nd,jd),W("GGGG",rd,ld),W("gggg",rd,ld),W("GGGGG",sd,md),W("ggggg",sd,md),_(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=r(a)}),_(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),R("Q",0,"Qo","quarter"),J("quarter","Q"),W("Q",id),$("Q",function(a,b){b[Cd]=3*(r(a)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),J("week","w"),J("isoWeek","W"),W("w",nd),W("ww",nd,jd),W("W",nd),W("WW",nd,jd),_(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=r(a)});var de={dow:0,doy:6};R("D",["DD",2],"Do","date"),J("date","D"),W("D",nd),W("DD",nd,jd),W("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),$(["D","DD"],Dd),$("Do",function(a,b){b[Dd]=r(a.match(nd)[0],10)});var ee=M("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),R("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),R("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),J("day","d"),J("weekday","e"),J("isoWeekday","E"),W("d",nd),W("e",nd),W("E",nd),W("dd",yd),W("ddd",yd),W("dddd",yd),_(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);null!=e?b.d=e:j(c).invalidWeekday=a}),_(["d","e","E"],function(a,b,c,d){b[d]=r(a)});var fe="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ge="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),he="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),J("dayOfYear","DDD"),W("DDD",qd),W("DDDD",kd),$(["DDD","DDDD"],function(a,b,c){c._dayOfYear=r(a)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,ic),R("hmm",0,0,function(){return""+ic.apply(this)+Q(this.minutes(),2)}),R("hmmss",0,0,function(){return""+ic.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),jc("a",!0),jc("A",!1),J("hour","h"),W("a",kc),W("A",kc),W("H",nd),W("h",nd),W("HH",nd,jd),W("hh",nd,jd),W("hmm",od),W("hmmss",pd),W("Hmm",od),W("Hmmss",pd),$(["H","HH"],Ed),$(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),$(["h","hh"],function(a,b,c){b[Ed]=r(a),j(c).bigHour=!0}),$("hmm",function(a,b,c){var d=a.length-2;b[Ed]=r(a.substr(0,d)),b[Fd]=r(a.substr(d)),j(c).bigHour=!0}),$("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[Ed]=r(a.substr(0,d)),b[Fd]=r(a.substr(d,2)),b[Gd]=r(a.substr(e)),j(c).bigHour=!0}),$("Hmm",function(a,b,c){var d=a.length-2;b[Ed]=r(a.substr(0,d)),b[Fd]=r(a.substr(d))}),$("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[Ed]=r(a.substr(0,d)),b[Fd]=r(a.substr(d,2)),b[Gd]=r(a.substr(e))});var ie=/[ap]\.?m?\.?/i,je=M("Hours",!0);R("m",["mm",2],0,"minute"),J("minute","m"),W("m",nd),W("mm",nd,jd),$(["m","mm"],Fd);var ke=M("Minutes",!1);R("s",["ss",2],0,"second"),J("second","s"),W("s",nd),W("ss",nd,jd),$(["s","ss"],Gd);var le=M("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),J("millisecond","ms"),W("S",qd,id),W("SS",qd,jd),W("SSS",qd,kd);var me;for(me="SSSS";me.length<=9;me+="S")W(me,td);for(me="S";me.length<=9;me+="S")$(me,nc);var ne=M("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var oe=o.prototype;oe.add=ae,oe.calendar=jb,oe.clone=kb,oe.diff=rb,oe.endOf=Db,oe.format=vb,oe.from=wb,oe.fromNow=xb,oe.to=yb,oe.toNow=zb,oe.get=P,oe.invalidAt=Mb,oe.isAfter=lb,oe.isBefore=mb,oe.isBetween=nb,oe.isSame=ob,oe.isSameOrAfter=pb,oe.isSameOrBefore=qb,oe.isValid=Kb,oe.lang=ce,oe.locale=Ab,oe.localeData=Bb,oe.max=Xd,oe.min=Wd,oe.parsingFlags=Lb,oe.set=P,oe.startOf=Cb,oe.subtract=be,oe.toArray=Hb,oe.toObject=Ib,oe.toDate=Gb,oe.toISOString=ub,oe.toJSON=Jb,oe.toString=tb,oe.unix=Fb,oe.valueOf=Eb,oe.creationData=Nb,oe.year=Vd,oe.isLeapYear=sa,oe.weekYear=Pb,oe.isoWeekYear=Qb,oe.quarter=oe.quarters=Vb,oe.month=ga,oe.daysInMonth=ha,oe.week=oe.weeks=Zb,oe.isoWeek=oe.isoWeeks=$b,oe.weeksInYear=Sb,oe.isoWeeksInYear=Rb,oe.date=ee,oe.day=oe.days=ec,oe.weekday=fc,oe.isoWeekday=gc,oe.dayOfYear=hc,oe.hour=oe.hours=je,oe.minute=oe.minutes=ke,oe.second=oe.seconds=le,oe.millisecond=oe.milliseconds=ne,oe.utcOffset=Ta,oe.utc=Va,oe.local=Wa,oe.parseZone=Xa,oe.hasAlignedHourOffset=Ya,oe.isDST=Za,oe.isDSTShifted=$a,oe.isLocal=_a,oe.isUtcOffset=ab,oe.isUtc=bb,oe.isUTC=bb,oe.zoneAbbr=oc,oe.zoneName=pc,oe.dates=u("dates accessor is deprecated. Use date instead.",ee),oe.months=u("months accessor is deprecated. Use month instead",ga),oe.years=u("years accessor is deprecated. Use year instead",Vd),oe.zone=u("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ua);var pe=oe,qe={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},re={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},se="Invalid date",te="%d",ue=/\d{1,2}/,ve={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},we=A.prototype;we._calendar=qe,we.calendar=sc,we._longDateFormat=re,we.longDateFormat=tc,we._invalidDate=se,we.invalidDate=uc,we._ordinal=te,we.ordinal=vc,we._ordinalParse=ue,we.preparse=wc,we.postformat=wc,we._relativeTime=ve,we.relativeTime=xc,we.pastFuture=yc,we.set=y,we.months=ca,we._months=Ld,we.monthsShort=da,we._monthsShort=Md,we.monthsParse=ea,we._monthsRegex=Od,we.monthsRegex=ja,we._monthsShortRegex=Nd,we.monthsShortRegex=ia,we.week=Wb,we._week=de,we.firstDayOfYear=Yb,we.firstDayOfWeek=Xb,we.weekdays=ac,we._weekdays=fe,we.weekdaysMin=cc,we._weekdaysMin=he,we.weekdaysShort=bc,we._weekdaysShort=ge,we.weekdaysParse=dc,we.isPM=lc,we._meridiemParse=ie,we.meridiem=mc,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===r(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=u("moment.lang is deprecated. Use moment.locale instead.",E),a.langData=u("moment.langData is deprecated. Use moment.localeData instead.",H);var xe=Math.abs,ye=Qc("ms"),ze=Qc("s"),Ae=Qc("m"),Be=Qc("h"),Ce=Qc("d"),De=Qc("w"),Ee=Qc("M"),Fe=Qc("y"),Ge=Sc("milliseconds"),He=Sc("seconds"),Ie=Sc("minutes"),Je=Sc("hours"),Ke=Sc("days"),Le=Sc("months"),Me=Sc("years"),Ne=Math.round,Oe={s:45,m:45,h:22,d:26,M:11},Pe=Math.abs,Qe=Na.prototype;Qe.abs=Gc,Qe.add=Ic,Qe.subtract=Jc,Qe.as=Oc,Qe.asMilliseconds=ye,Qe.asSeconds=ze,Qe.asMinutes=Ae,Qe.asHours=Be,Qe.asDays=Ce,Qe.asWeeks=De,Qe.asMonths=Ee,Qe.asYears=Fe,Qe.valueOf=Pc,Qe._bubble=Lc,Qe.get=Rc,Qe.milliseconds=Ge,Qe.seconds=He,Qe.minutes=Ie,Qe.hours=Je,Qe.days=Ke,Qe.weeks=Tc,Qe.months=Le,Qe.years=Me,Qe.humanize=Xc,Qe.toISOString=Yc,Qe.toString=Yc,Qe.toJSON=Yc,Qe.locale=Ab,Qe.localeData=Bb,Qe.toIsoString=u("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Yc),Qe.lang=ce,R("X",0,0,"unix"),R("x",0,0,"valueOf"),W("x",ud),W("X",xd),$("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),$("x",function(a,b,c){c._d=new Date(r(a))}),a.version="2.12.0",b(Ja),a.fn=pe,a.min=La,a.max=Ma,a.now=Yd,a.utc=h,a.unix=qc,a.months=Bc,a.isDate=d,a.locale=E,a.invalid=l,a.duration=cb,a.isMoment=p,a.weekdays=Dc,a.parseZone=rc,a.localeData=H,a.isDuration=Oa,a.monthsShort=Cc,a.weekdaysMin=Fc,a.defineLocale=F,a.updateLocale=G,a.locales=I,a.weekdaysShort=Ec,a.normalizeUnits=K,a.relativeTimeThreshold=Wc,a.prototype=pe;var Re=a;return Re}); \ No newline at end of file diff --git a/static/js/validator.min.js b/static/js/validator.min.js new file mode 100644 index 0000000..9a49ff3 --- /dev/null +++ b/static/js/validator.min.js @@ -0,0 +1,9 @@ +/*! + * Validator v0.10.1 for Bootstrap 3, by @1000hz + * Copyright 2016 Cina Saffary + * Licensed under http://opensource.org/licenses/MIT + * + * https://github.com/1000hz/bootstrap-validator + */ + ++function(a){"use strict";function b(b){return b.is('[type="checkbox"]')?b.prop("checked"):b.is('[type="radio"]')?!!a('[name="'+b.attr("name")+'"]:checked').length:a.trim(b.val())}function c(b){return this.each(function(){var c=a(this),e=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b),f=c.data("bs.validator");(f||"destroy"!=b)&&(f||c.data("bs.validator",f=new d(this,e)),"string"==typeof b&&f[b]())})}var d=function(c,e){this.options=e,this.$element=a(c),this.$inputs=this.$element.find(d.INPUT_SELECTOR),this.$btn=a('button[type="submit"], input[type="submit"]').filter('[form="'+this.$element.attr("id")+'"]').add(this.$element.find('input[type="submit"], button[type="submit"]')),e.errors=a.extend({},d.DEFAULTS.errors,e.errors);for(var f in e.custom)if(!e.errors[f])throw new Error("Missing default error message for custom validator: "+f);a.extend(d.VALIDATORS,e.custom),this.$element.attr("novalidate",!0),this.toggleSubmit(),this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator",d.INPUT_SELECTOR,a.proxy(this.onInput,this)),this.$element.on("submit.bs.validator",a.proxy(this.onSubmit,this)),this.$element.find("[data-match]").each(function(){var c=a(this),d=c.data("match");a(d).on("input.bs.validator",function(){b(c)&&c.trigger("input.bs.validator")})})};d.INPUT_SELECTOR=':input:not([type="submit"], button):enabled:visible',d.FOCUS_OFFSET=20,d.DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:"Does not match",minlength:"Not long enough"},feedback:{success:"glyphicon-ok",error:"glyphicon-remove"}},d.VALIDATORS={"native":function(a){var b=a[0];return b.checkValidity?b.checkValidity():!0},match:function(b){var c=b.data("match");return!b.val()||b.val()===a(c).val()},minlength:function(a){var b=a.data("minlength");return!a.val()||a.val().length>=b}},d.prototype.onInput=function(b){var c=this,d=a(b.target),e="focusout"!==b.type;this.validateInput(d,e).done(function(){c.toggleSubmit()})},d.prototype.validateInput=function(c,d){var e=b(c),f=c.data("bs.validator.previous"),g=c.data("bs.validator.errors");if(f===e)return a.Deferred().resolve();c.data("bs.validator.previous",e),c.is('[type="radio"]')&&(c=this.$element.find('input[name="'+c.attr("name")+'"]'));var h=a.Event("validate.bs.validator",{relatedTarget:c[0]});if(this.$element.trigger(h),!h.isDefaultPrevented()){var i=this;return this.runValidators(c).done(function(b){c.data("bs.validator.errors",b),b.length?d?i.defer(c,i.showErrors):i.showErrors(c):i.clearErrors(c),g&&b.toString()===g.toString()||(h=b.length?a.Event("invalid.bs.validator",{relatedTarget:c[0],detail:b}):a.Event("valid.bs.validator",{relatedTarget:c[0],detail:g}),i.$element.trigger(h)),i.toggleSubmit(),i.$element.trigger(a.Event("validated.bs.validator",{relatedTarget:c[0]}))})}},d.prototype.runValidators=function(c){function e(a){return c.data(a+"-error")||c.data("error")||"native"==a&&c[0].validationMessage||h.errors[a]}var f=[],g=a.Deferred(),h=this.options;return c.data("bs.validator.deferred")&&c.data("bs.validator.deferred").reject(),c.data("bs.validator.deferred",g),a.each(d.VALIDATORS,a.proxy(function(a,d){if((b(c)||c.attr("required"))&&(c.data(a)||"native"==a)&&!d.call(this,c)){var g=e(a);!~f.indexOf(g)&&f.push(g)}},this)),!f.length&&b(c)&&c.data("remote")?this.defer(c,function(){var d={};d[c.attr("name")]=b(c),a.get(c.data("remote"),d).fail(function(a,b,c){f.push(e("remote")||c)}).always(function(){g.resolve(f)})}):g.resolve(f),g.promise()},d.prototype.validate=function(){var b=this;return a.when(this.$inputs.map(function(){return b.validateInput(a(this),!1)})).then(function(){b.toggleSubmit(),b.$btn.hasClass("disabled")&&b.focusError()}),this},d.prototype.focusError=function(){if(this.options.focus){var b=a(".has-error:first :input");a(document.body).animate({scrollTop:b.offset().top-d.FOCUS_OFFSET},250),b.focus()}},d.prototype.showErrors=function(b){var c=this.options.html?"html":"text",d=b.data("bs.validator.errors"),e=b.closest(".form-group"),f=e.find(".help-block.with-errors"),g=e.find(".form-control-feedback");d.length&&(d=a("
    ").addClass("list-unstyled").append(a.map(d,function(b){return a("
  • ")[c](b)})),void 0===f.data("bs.validator.originalContent")&&f.data("bs.validator.originalContent",f.html()),f.empty().append(d),e.addClass("has-error has-danger"),e.hasClass("has-feedback")&&g.removeClass(this.options.feedback.success)&&g.addClass(this.options.feedback.error)&&e.removeClass("has-success"))},d.prototype.clearErrors=function(a){var c=a.closest(".form-group"),d=c.find(".help-block.with-errors"),e=c.find(".form-control-feedback");d.html(d.data("bs.validator.originalContent")),c.removeClass("has-error has-danger"),c.hasClass("has-feedback")&&e.removeClass(this.options.feedback.error)&&b(a)&&e.addClass(this.options.feedback.success)&&c.addClass("has-success")},d.prototype.hasErrors=function(){function b(){return!!(a(this).data("bs.validator.errors")||[]).length}return!!this.$inputs.filter(b).length},d.prototype.isIncomplete=function(){function c(){return!b(a(this))}return!!this.$inputs.filter("[required]").filter(c).length},d.prototype.onSubmit=function(a){this.validate(),this.$btn.hasClass("disabled")&&a.preventDefault()},d.prototype.toggleSubmit=function(){this.options.disable&&this.$btn.toggleClass("disabled",this.isIncomplete()||this.hasErrors())},d.prototype.defer=function(b,c){return c=a.proxy(c,this,b),this.options.delay?(window.clearTimeout(b.data("bs.validator.timeout")),void b.data("bs.validator.timeout",window.setTimeout(c,this.options.delay))):c()},d.prototype.destroy=function(){return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator").find(".form-control-feedback").removeClass([this.options.feedback.error,this.options.feedback.success].join(" ")),this.$inputs.off(".bs.validator").removeData(["bs.validator.errors","bs.validator.deferred","bs.validator.previous"]).each(function(){var b=a(this),c=b.data("bs.validator.timeout");window.clearTimeout(c)&&b.removeData("bs.validator.timeout")}),this.$element.find(".help-block.with-errors").each(function(){var b=a(this),c=b.data("bs.validator.originalContent");b.removeData("bs.validator.originalContent").html(c)}),this.$element.find('input[type="submit"], button[type="submit"]').removeClass("disabled"),this.$element.find(".has-error, .has-danger").removeClass("has-error has-danger"),this};var e=a.fn.validator;a.fn.validator=c,a.fn.validator.Constructor=d,a.fn.validator.noConflict=function(){return a.fn.validator=e,this},a(window).on("load",function(){a('form[data-toggle="validator"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery); \ No newline at end of file diff --git a/test.js b/test.js new file mode 100644 index 0000000..d4fb698 --- /dev/null +++ b/test.js @@ -0,0 +1,35 @@ +var chai = require('chai'), + chaiHttp = require('chai-http'), + server = require('./server'), + should = chai.should(); +chai.use(chaiHttp); + +describe('Routes', function() { + + it('Displays homepage', function(done){ + chai.request(server) + .get('/') + .end(function(err,res){ + res.should.have.status(200); + done(); + }); + }); + it('Displays robots.txt', function(done){ + chai.request(server) + .get('/robots.txt') + .end(function(err,res){ + res.should.have.status(200); + res.should.be.text; + done(); + }); + }); + it('Displays a tracpage', function(done){ + chai.request(server) + .get('/trac/keith') + .end(function(err,res){ + res.should.have.status(200); + done(); + }); + }); + +}); diff --git a/views/admin/requests.html b/views/admin/requests.html new file mode 100644 index 0000000..7fbb6d0 --- /dev/null +++ b/views/admin/requests.html @@ -0,0 +1,68 @@ +{% extends 'templates/base.html' %} +{% block title %}Tracman | Invite Requests{% endblock %} + +{% block head %} + {{ super() }} + +{% endblock %} + +{% block main %} +
    +
    +

    Requests

    + + + + + + + + + + + + + {% for request in requests %} + + + + + + + + + {% endfor %} + +
    NameEmailMessageRequestedInvitedUser
    {{ request.name }}{{ request.email }}{{ request.beg | replace("\r\n", "
    ") | safe }}
    + {% if not request.granted %} +
    + +
    + {% endif %} +
    + {% if request.userId %} + User: {{ request.userId }} + {% endif %} +
    + +
    +
    + + + + +{% endblock %} diff --git a/views/admin/users.html b/views/admin/users.html new file mode 100644 index 0000000..0086003 --- /dev/null +++ b/views/admin/users.html @@ -0,0 +1,63 @@ +{% extends 'templates/base.html' %} +{% block title %}Tracman | Users{% endblock %} + +{% block head %} + {{ super() }} + +{% endblock %} + +{% block main %} +
    +
    +

    Users

    + + + + + + + + + + + {% for usr in users %} + + + + + + + + {% endfor %} + +
    NameSlugJoinedLast loginMoved
    {{ usr.name }}/{{ usr.slug }}
    + +
    +
    + + + + +{% endblock %} diff --git a/views/bug.html b/views/bug.html new file mode 100644 index 0000000..b66d7a3 --- /dev/null +++ b/views/bug.html @@ -0,0 +1,64 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | Bug Report{% endblock %} + +{% block main %} +
    +
    +

    Submit a Bug Report

    + +

    You can use this form to submit a bug report. You can also post the issue on github. Or maybe you'd like to suggest a feature instead?

    + + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + + nevermind +
    +
    +
    + +
    +{% endblock %} diff --git a/views/dashboard.html b/views/dashboard.html new file mode 100644 index 0000000..083efae --- /dev/null +++ b/views/dashboard.html @@ -0,0 +1,166 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | Dashboard{% endblock %} + +{% block head %} +{{ super() }} + +{% endblock %} + +{% block main %} +
    +
    +

    Welcome{% if user.name %}, {{ user.name }}{% endif %}!

    +

    To view your location, use this link: http://tracman.org/trac/{{ user.slug }}

    +

    You can also embed a map into your website with this code. Be sure to set the width and height attributes to suit your circumstance.

    +
    <iframe src="https://tracman.org/trac/{{ user.slug }}?noheader=1" width="90%" style="height:90vh;"></iframe>
    +
    +
    +
    +

    App

    +

    Click the button below to download the app from the google play store, if you haven't already.

    +

    Get it on Google Play

    +

    Without the app running, your location won't update. But you can also set your location to this device's geolocation by clicking the button below.

    +

    +
    +
    +
    +

    Settings

    + +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    + tracman.org/trac/ +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    + + {% if not user.isPro %}

    Want to try Tracman Pro? It's free during beta testing.

    {% endif %} +

    Would you like to submit a suggestion or bug report?

    +
    + +
    + + + +{% endblock %} diff --git a/views/error.html b/views/error.html new file mode 100644 index 0000000..afb8b4c --- /dev/null +++ b/views/error.html @@ -0,0 +1,10 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | {{ code }} Error{% endblock %} + +{% block main %} +
    +
    + +
    +
    +{% endblock %} diff --git a/views/index.html b/views/index.html new file mode 100644 index 0000000..4bf17a5 --- /dev/null +++ b/views/index.html @@ -0,0 +1,139 @@ +{% extends 'templates/base.html' %} + +{% block head %} + {{ super() }} + +{% endblock %} + +{% block main %} + + +
    +
    +

    Tracman

    +

    Let friends track your GPS location in realtime

    + More info + {% if not user %} + Request invite + {% endif %} + View example + {% if user %} + Dashboard + {% endif %} +
    +
    + +
    +
    +
    + +

    Easy-to-use

    +

    Download the android app and log in. Then send your friends a link with a map showing your live location.

    +
    +
    + +

    Realtime

    +

    Your location updates every second for all the world to see.

    +
    +
    + +

    Free

    +

    It's free, but you can donate if you want to help with server expenses.

    +
    +
    +
    + +
    +
    + Mobile phone +
    +

    The App

    +

    Tracman uses an android app to recieve GPS location of your device. Sorry, there's no iPhone version yet.

    +
      +
    • + +

      On/off switch

      +

      If you need to go undercover, just turn tracman off with the flip of a switch.

      +
    • +
    • + +

      Settings

      +

      Change your settings to show a less accurate location, if you want an air of mystery.

      +
    • +
    • + +

      Saves energy

      +

      If nobody's tracking you, tracman won't needlessly drain your battery.

      +
    • +
    +
    +
    +
    + +
    +
    + Laptop +
    +

    The Map

    +

    You'll get a simple webpage with a map to send to friends. Click here for a demo.

    +
      +
    • + +

      Easy

      +

      Just send a link to whomever you want. Bam, now they know exactly where you are.

      +
    • +
    • + +

      Precise

      +

      Map updates in realtime using the fancy-pants websockets protocol.

      +
    • +
    • + +

      Customizable

      +

      You can change some things. Not a lot yet, but I am always adding features.

      +
    • +
    +
    +
    +
    + +
    +
    +

    Warning!

    +

    I assume no responsibility for anything whatsoever.

    +

    If you haven't realized it already, there are a lot of reasons why publishing your location online could be a bad idea.

    +
      +
    • You get caught cheating
    • +
    • Your boss knows you aren't at work
    • +
    • The FBI hunts you down
    • +
    +

    I'm not taking any responsibilty for the code either. Tracman is in beta and is very buggy. If it stops working, don't blame me! Heck, I could even accidentally delete all your data. Or it could get hacked by Russians. If using amateur software scares you, DON'T DO IT!

    +

    For more information, you can read the license and copyright information.

    +
    +
    + + {% if not user %} +
    +
    +

    Hook me up!

    +

    Right now, Tracman is invite-only. You can beg me for access here.

    +
    + + + + + +
    +
    +
    + {% endif %} + +{% endblock %} diff --git a/views/license.html b/views/license.html new file mode 100644 index 0000000..da645d3 --- /dev/null +++ b/views/license.html @@ -0,0 +1,31 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | License{% endblock %} + +{% block main %} +
    + +
    +

    The MIT License (MIT)

    +

    Copyright © 2016 Keith Irwin

    + +

    Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions:

    + +

    The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software.

    + +

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE.

    +
    + +
    +{% endblock %} diff --git a/views/pro.html b/views/pro.html new file mode 100644 index 0000000..21e90ba --- /dev/null +++ b/views/pro.html @@ -0,0 +1,43 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | Pro{% endblock %} + +{% block main %} +
    + +
    +

    Tracman Pro

    +

    A word from the developer

    + +

    Hi Folks,

    + +

    Glad you're enjoying my website and app. I made the whole thing, from front to backend, + and I'm really proud of it! However, I'm a long-haul trucker by day and coding is just a hobby. + I don't make any money off this website, and I pay the server fees out of my own pocket. Do you + pity me enough to donate some money by paypal + or bitcoin?

    + +

    To make a little money off this service, I'm going to be offering a pro version with more + features. It'll be cheap, probably $1 or $2 per month. However, while Tracman is in beta, + you can beta test the pro version too. Be sure to inform me about any bugs + you encounter or suggestions you have. And keep in mind that at some + point, when we launch out of beta, Tracman Pro will not be free and you will + lose your pro membership unless start paying for it. + +

    That said, just click the button below to test out the pro features. Keep in mind, they are + as unstable as the rest of this product. + +

    Cheers,
    + Keith Irwin

    + +
    + {% if user.isPro %} +
    You are already pro!
    + {% else %} + + {% endif %} + go home +
    + +
    +
    +{% endblock %} diff --git a/views/suggestion.html b/views/suggestion.html new file mode 100644 index 0000000..20034e7 --- /dev/null +++ b/views/suggestion.html @@ -0,0 +1,48 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | Suggestion{% endblock %} + +{% block main %} +
    +
    +

    Suggest a Feature

    + +

    You can use this form to suggest new features. Or maybe you need to submit a bug report instead?

    + + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + + nevermind +
    +
    + +
    +
    +{% endblock %} diff --git a/views/templates/base.html b/views/templates/base.html new file mode 100644 index 0000000..69b10e1 --- /dev/null +++ b/views/templates/base.html @@ -0,0 +1,62 @@ + + + + {% block head %} + {% block title %}Tracman{% endblock %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% endblock %} + {% if not noHeader %}{% endif %} + {% if not noFooter %}{% endif %} + + + + + + {% if not noHeader %}{% include 'templates/header.html' %}{% endif %} + {% block main %}Loading... {% endblock %} + {% if not noFooter %}{% include 'templates/footer.html' %}{% endif %} + + + + + diff --git a/views/templates/footer.html b/views/templates/footer.html new file mode 100644 index 0000000..d69a51c --- /dev/null +++ b/views/templates/footer.html @@ -0,0 +1,16 @@ + diff --git a/views/templates/header.html b/views/templates/header.html new file mode 100644 index 0000000..c3cd3bd --- /dev/null +++ b/views/templates/header.html @@ -0,0 +1,43 @@ + + +
    + +
    +
    +
    +
    +
    + +
    + +{% if error %} +
    + ERROR: {{ error | safe }} + +
    +{% elif success %} +
    + Success! {{ success | safe }} + +
    +{% endif %} + + + + diff --git a/views/trac.html b/views/trac.html new file mode 100644 index 0000000..a22734a --- /dev/null +++ b/views/trac.html @@ -0,0 +1,219 @@ +{% extends 'templates/base.html' %} +{% block title %}{{ super() }} | {{ tracuser.name }}{% endblock %} + +{% block head %} + {{ super() }} + + +{% endblock %} + +{% block main %} +
    + + {% if not tracuser.last.time %} +
    + No Location Found + {% if user.id == tracuser.id %} +
    You can click here to set use this device's location. +
    Maybe you also want to download the android app. + {% else %} +
    This user hasn't updated their location yet! + {% endif %} +
    + {% else %} +
    + {% if tracuser.settings.showStreetview and not noStreetview.length %} +
    Street view image
    + {% endif %} + {% endif %} + +
    + + + + +{% endblock %}