summaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2018-08-12 12:42:58 +0200
committermsquare <msquare@notrademark.de>2018-08-12 12:42:58 +0200
commitdf30f7d5d89d8de3f61905d8e25eb361a06faa7f (patch)
treec9c07c9133b266224f1e91e7aabc4c40bf27f67d /frontend
parentc55ae7c3190e48180371bab8f4d7ab4c5726ff13 (diff)
parentb409d2986fcca5bcafdad4b3b33094c12d8530a6 (diff)
merge pr #427: Use npm to handle frontend dependencies
Diffstat (limited to 'frontend')
-rw-r--r--frontend/angelFont/angelFont.css28
-rw-r--r--frontend/angelFont/angelFont.eotbin0 -> 1300 bytes
-rw-r--r--frontend/angelFont/angelFont.svg11
-rw-r--r--frontend/angelFont/angelFont.ttfbin0 -> 1136 bytes
-rw-r--r--frontend/angelFont/angelFont.woffbin0 -> 1172 bytes
-rw-r--r--frontend/js/forms.js94
-rw-r--r--frontend/js/moment-countdown.js19
-rw-r--r--frontend/js/sticky-headers.js31
-rw-r--r--frontend/js/vendor.js16
-rw-r--r--frontend/themes/base.less264
-rw-r--r--frontend/themes/theme0.less1
-rw-r--r--frontend/themes/theme1.less1045
-rw-r--r--frontend/themes/theme2.less27
-rw-r--r--frontend/themes/theme3.less55
-rw-r--r--frontend/themes/theme4.less1051
-rw-r--r--frontend/themes/theme5.less31
-rw-r--r--frontend/themes/theme6.less1058
17 files changed, 3731 insertions, 0 deletions
diff --git a/frontend/angelFont/angelFont.css b/frontend/angelFont/angelFont.css
new file mode 100644
index 00000000..01551ecd
--- /dev/null
+++ b/frontend/angelFont/angelFont.css
@@ -0,0 +1,28 @@
+@font-face {
+ font-family: 'angelFont';
+ src:url('./angelFont.eot?-kja6ux');
+ src:url('./angelFont.eot?#iefix-kja6ux') format('embedded-opentype'),
+ url('./angelFont.woff?-kja6ux') format('woff'),
+ url('./angelFont.ttf?-kja6ux') format('truetype'),
+ url('./angelFont.svg?-kja6ux#icomoon') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^="icon-"], [class*=" icon-"] {
+ font-family: 'angelFont';
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-icon_angel:before {
+ content: "\e600";
+}
diff --git a/frontend/angelFont/angelFont.eot b/frontend/angelFont/angelFont.eot
new file mode 100644
index 00000000..9b08a347
--- /dev/null
+++ b/frontend/angelFont/angelFont.eot
Binary files differ
diff --git a/frontend/angelFont/angelFont.svg b/frontend/angelFont/angelFont.svg
new file mode 100644
index 00000000..e5fdf45a
--- /dev/null
+++ b/frontend/angelFont/angelFont.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icomoon" horiz-adv-x="512">
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
+<glyph unicode="&#xe600;" d="M262.158 408.627c-70.507 0-127.664-66.46-127.664-148.443 0-45.996 17.956-87.059 46.202-114.287v-34.156l-179.946-52.779v-94.564l510.657-4.399v94.563l-165.356 59.377h-2.432v31.957c28.247 27.228 46.202 68.291 46.202 114.287 0 81.983-57.157 148.443-127.664 148.443zM262.158 479c-124.226 0-224.932-40.861-224.932-91.265s100.706-91.265 224.932-91.265c124.226 0 224.932 40.861 224.932 91.265s-100.706 91.265-224.932 91.265zM262.158 432.818c102.738 0 186.025-28.553 186.025-63.775s-83.286-63.776-186.025-63.776c-102.738 0-186.025 28.553-186.025 63.776s83.286 63.775 186.025 63.775z" />
+</font></defs></svg> \ No newline at end of file
diff --git a/frontend/angelFont/angelFont.ttf b/frontend/angelFont/angelFont.ttf
new file mode 100644
index 00000000..ac4f0a45
--- /dev/null
+++ b/frontend/angelFont/angelFont.ttf
Binary files differ
diff --git a/frontend/angelFont/angelFont.woff b/frontend/angelFont/angelFont.woff
new file mode 100644
index 00000000..c7107a54
--- /dev/null
+++ b/frontend/angelFont/angelFont.woff
Binary files differ
diff --git a/frontend/js/forms.js b/frontend/js/forms.js
new file mode 100644
index 00000000..3f7aeb84
--- /dev/null
+++ b/frontend/js/forms.js
@@ -0,0 +1,94 @@
+/**
+ * Sets all checkboxes to the wanted state
+ *
+ * @param {string} id Id of the element containing all the checkboxes
+ * @param {boolean} checked True if the checkboxes should be checked
+ */
+global.checkAll = (id, checked) => {
+ $('#' + id + ' input[type="checkbox"]').each(function () {
+ this.checked = checked;
+ });
+}
+
+/**
+ * Sets the checkboxes according to the given type
+ *
+ * @param {string} id The elements ID
+ * @param {list} shifts_list A list of numbers
+ */
+global.checkOwnTypes = (id, shiftsList) => {
+ $('#' + id + ' input[type="checkbox"]').each(function () {
+ this.checked = $.inArray(parseInt(this.value), shiftsList) != -1;
+ });
+}
+
+/**
+ * @param {moment} date
+ */
+global.formatDay = (date) => {
+ return date.format('YYYY-MM-DD');
+}
+
+/**
+ * @param {moment} date
+ */
+global.formatTime = (date) => {
+ return date.format('HH:mm');
+}
+
+/**
+ * @param {moment} from
+ * @param {moment} to
+ */
+global.setInput = (from, to) => {
+ var fromDay = $('#start_day'), fromTime = $('#start_time'), toDay = $('#end_day'), toTime = $('#end_time');
+
+ fromDay.val(formatDay(from));
+ fromTime.val(formatTime(from));
+
+ toDay.val(formatDay(to));
+ toTime.val(formatTime(to));
+}
+
+global.setDay = (days) => {
+ days = days || 0;
+
+ var from = moment();
+ from.hours(0).minutes(0).seconds(0);
+
+ from.add(days, 'd');
+
+ var to = from.clone();
+ to.hours(23).minutes(59);
+
+ setInput(from, to);
+}
+
+global.setHours = (hours) => {
+ hours = hours || 1;
+
+ var from = moment();
+ var to = from.clone();
+
+ to.add(hours, 'h');
+ if (to < from) {
+ setInput(to, from);
+ return;
+ }
+
+ setInput(from, to);
+}
+
+$(function () {
+ /**
+ * Disable every submit button after clicking (to prevent double-clicking)
+ */
+ $('form').submit(function (ev) {
+ $('input[type="submit"]').prop('readonly', true).addClass('disabled');
+ return true;
+ });
+
+ $('.dropdown-menu').css('max-height', function () {
+ return ($(window).height() - 50) + 'px';
+ }).css('overflow-y', 'scroll');
+});
diff --git a/frontend/js/moment-countdown.js b/frontend/js/moment-countdown.js
new file mode 100644
index 00000000..f5effbc0
--- /dev/null
+++ b/frontend/js/moment-countdown.js
@@ -0,0 +1,19 @@
+/*
+ * Initialize all moment countdowns on the page. A moment countdown has the
+ * class 'moment-countdown' and the attribute 'data-timestamp' which defines the
+ * countdown's time goal.
+ */
+$(document).ready(function () {
+ if (typeof moment !== 'undefined') {
+ $.each($('.moment-countdown'), function (i, e) {
+ var span = $(e);
+ var text = span.html();
+ /* global moment */
+ var timestamp = moment(parseInt(span.attr('data-timestamp') * 1000));
+ span.html(text.replace('%c', timestamp.fromNow()));
+ setInterval(function () {
+ span.html(text.replace('%c', timestamp.fromNow()));
+ }, 1000);
+ });
+ }
+});
diff --git a/frontend/js/sticky-headers.js b/frontend/js/sticky-headers.js
new file mode 100644
index 00000000..c664387c
--- /dev/null
+++ b/frontend/js/sticky-headers.js
@@ -0,0 +1,31 @@
+/**
+ * Enables the fixed headers and time lane for the shift-calendar and datatables
+ */
+$(document).ready(function () {
+ if ($('.shift-calendar').length) {
+ var timeLanes = $('.shift-calendar .time');
+ var headers = $('.shift-calendar .header');
+ var topReference = $('.container-fluid .row');
+ timeLanes.css({
+ 'position': 'relative',
+ 'z-index': 999
+ });
+ headers.css({
+ 'position': 'relative',
+ 'z-index': 900
+ });
+ $(window).scroll(
+ function () {
+ var top = headers.parent().offset().top;
+ var left = 15;
+ timeLanes.css({
+ 'left': Math.max(0, $(window).scrollLeft() - left) + 'px'
+ });
+ headers.css({
+ 'top': Math.max(0, $(window).scrollTop() - top
+ + topReference.offset().top)
+ + 'px'
+ });
+ });
+ }
+});
diff --git a/frontend/js/vendor.js b/frontend/js/vendor.js
new file mode 100644
index 00000000..dd6b66b3
--- /dev/null
+++ b/frontend/js/vendor.js
@@ -0,0 +1,16 @@
+window.$ = window.jQuery = require('jquery');
+require('imports-loader?define=>false!jquery-ui');
+require('bootstrap');
+require('imports-loader?define=>false&exports=>false!bootstrap-datepicker');
+require('bootstrap-datepicker/js/locales/bootstrap-datepicker.de');
+require('bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css');
+require('imports-loader?this=>window!chart.js');
+require('imports-loader?this=>window&define=>false&exports=>false!moment');
+require('imports-loader?this=>window&define=>false&exports=>false!moment/locale/de');
+require('./forms');
+require('./sticky-headers');
+require('./moment-countdown');
+
+$(function () {
+ moment.locale($('html').attr('lang'));
+});
diff --git a/frontend/themes/base.less b/frontend/themes/base.less
new file mode 100644
index 00000000..f9fa139e
--- /dev/null
+++ b/frontend/themes/base.less
@@ -0,0 +1,264 @@
+@import "../../node_modules/bootstrap/less/bootstrap";
+@import "../angelFont/angelFont.css";
+
+body {
+ padding-top: 50px;
+}
+
+.footer a {
+ color: @text-muted;
+}
+
+.first {
+ clear: both;
+ margin-top: 30px;
+}
+
+.text-big {
+ display: block;
+ font-size: 30px;
+ line-height: 30px;
+ margin: 0px;
+}
+
+.stats {
+ .make-md-column(3);
+ .make-xs-column(6);
+ font-size: 20px;
+ height: 150px;
+ text-align: center;
+
+ .number {
+ font-size: 80px;
+ font-weight: 200;
+ }
+ @media (max-width: @screen-md) {
+ font-size: inherit;
+ .number {
+ font-size: 40px;
+ }
+ }
+}
+
+.stats-danger {
+ color: @brand-danger;
+}
+
+.stats-warning {
+ color: @brand-warning;
+}
+
+.stats-success {
+ color: @brand-success;
+}
+
+.dashboard-panel {
+ position: relative;
+ font-size: 20px;
+ color: @headings-color;
+
+ .panel-link {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ text-decoration: none; /* No underlines on the link */
+ z-index: 10; /* Places the link above everything else in the div */
+ background-color: @brand-primary; /* Fix to make div clickable in IE */
+ opacity: 0; /* Fix to make div clickable in IE */
+ filter: alpha(opacity=1); /* Fix to make div clickable in IE */
+ }
+
+ .panel-link:hover {
+ opacity: 0.3;
+ }
+}
+
+.panel-primary .panel-heading a {
+ color: @panel-primary-text;
+}
+
+.panel-default .panel-heading a {
+ color: @panel-default-text;
+}
+
+.panel-info .panel-heading a {
+ color: @panel-info-text;
+}
+
+.panel-success .panel-heading a {
+ color: @panel-success-text;
+}
+
+.panel-warning .panel-heading a {
+ color: @panel-warning-text;
+}
+
+.panel-danger .panel-heading a {
+ color: @panel-danger-text;
+}
+
+.selection .checkbox {
+ display: block;
+}
+
+.shift-calendar {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-itmes: stretch;
+ width: 100%;
+
+ .lane {
+ background: @table-bg-accent;
+ flex-grow: 1;
+ min-width: 280px;
+ width: 280px;
+ flex-shrink: 1;
+
+ .header {
+ background: @panel-bg;
+ border-bottom: 1px solid @table-border-color;
+ height: 30px;
+ padding: 5px 5px 5px 16px;
+ }
+
+ .tick {
+ height: 30px;
+ border-top: 1px solid darken(@table-bg-accent, 2%);
+ }
+
+ .tick.hour {
+ border-top: 2px solid @table-border-color;
+ font-size: 0.9em;
+ padding-left: 5px;
+ }
+
+ .tick.day {
+ border-top: 2px solid @brand-primary;
+ font-size: 0.9em;
+ padding-left: 5px;
+ }
+ }
+
+ .lane.time {
+ border-right: 1px solid @table-border-color;
+ flex-grow: 0;
+ min-width: 50px;
+ width: 50px;
+ flex-shrink: 0;
+ }
+
+ .shift {
+ margin: 0 5px 5px 0;
+ overflow: hidden;
+ }
+}
+
+.space-top {
+ margin-top: 15px;
+}
+
+.column_duration {
+ text-align: right;
+}
+
+.messages {
+ &:focus {
+ outline: none;
+ }
+ a:focus {
+ outline: none;
+ }
+}
+
+.messages span.text-danger {
+ animation: pulse 1s infinite;
+ -webkit-animation: pulse 1s infinite;
+ -moz-animation: pulse 1s infinite;
+}
+
+@keyframes pulse {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 10% {
+ transform: rotate(5deg) translateY(-2px);
+ }
+ 20% {
+ transform: rotate(-5deg);
+ }
+ 30% {
+ transform: rotate(5deg) translateY(-2px);;
+ }
+ 40% {
+ transform: rotate(-5deg);
+ }
+ 50% {
+ transform: rotate(0deg) translateY(-2px);
+ }
+ 75% {
+ transform: rotate(0deg) translateY(0px);
+ }
+}
+
+@-webkit-keyframes pulse {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 10% {
+ transform: rotate(5deg) translateY(-2px);
+ }
+ 20% {
+ transform: rotate(-5deg);
+ }
+ 30% {
+ transform: rotate(5deg) translateY(-2px);
+ }
+ 40% {
+ transform: rotate(-5deg);
+ }
+ 50% {
+ transform: rotate(0deg) translateY(-2px);
+ }
+ 75% {
+ transform: rotate(0deg) translateY(0px);
+ }
+}
+
+@-moz-keyframes pulse {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 10% {
+ transform: rotate(5deg) translateY(-2px);
+ }
+ 20% {
+ transform: rotate(-5deg);
+ }
+ 30% {
+ transform: rotate(5deg) translateY(-2px);
+ }
+ 40% {
+ transform: rotate(-5deg);
+ }
+ 50% {
+ transform: rotate(0deg) translateY(-2px);
+ }
+ 75% {
+ transform: rotate(0deg) translateY(0px);
+ }
+}
+
+@media (max-width: 525px) {
+ .col-xxs-12 {
+ float: none;
+ width: 100%;
+
+ position: relative; left: 0; right: 0;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+ }
+}
diff --git a/frontend/themes/theme0.less b/frontend/themes/theme0.less
new file mode 100644
index 00000000..3e94f738
--- /dev/null
+++ b/frontend/themes/theme0.less
@@ -0,0 +1 @@
+@import "base.less"; \ No newline at end of file
diff --git a/frontend/themes/theme1.less b/frontend/themes/theme1.less
new file mode 100644
index 00000000..f1b5bd92
--- /dev/null
+++ b/frontend/themes/theme1.less
@@ -0,0 +1,1045 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 Thomas Park
+
+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.
+*/
+
+// Cyborg 3.2.0
+// Variables
+// --------------------------------------------------
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-darker: #222; // #222
+@gray-dark: #282828; // #333
+@gray: #555; // #555
+@gray-light: #888; // #999
+@gray-lighter: #ADAFAE; // #eee
+
+@brand-primary: #428bca;
+@brand-success: #5cb85c;
+@brand-info: #5bc0de;
+@brand-warning: #f0ad4e;
+@brand-danger: #d9534f;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+@body-bg: #060606;
+//** Global text color on `<body>`.
+@text-color: @gray-light;
+
+//** Global textual link color.
+@link-color: @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color: @link-color;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 14px;
+@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1: 34px;
+@font-size-h2: 24px;
+@font-size-h3: 20px;
+@font-size-h4: 20px;
+@font-size-h5: 20px;
+@font-size-h6: 16px;
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base: 1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the `<body>`.
+@headings-font-family: @font-family-base;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: #fff;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** File name for all font files.
+@icon-font-name: "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id: "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical: 8px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 14px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg: @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base: 4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large: 5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+@table-cell-padding: 8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding: 5px;
+
+//** Default background color used for all tables.
+@table-bg: darken(@gray-darker, 4%);
+//** Background color used for `.table-striped`.
+@table-bg-accent: darken(@table-bg, 6%);
+//** Background color used for `.table-hover`.
+@table-bg-hover: @gray-dark;
+@table-bg-active: @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color: @gray-dark;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight: normal;
+
+@btn-default-color: #fff;
+@btn-default-bg: lighten(@gray-dark, 10%);
+
+@btn-default-border: darken(@btn-default-bg, 10%);
+
+@btn-primary-color: @btn-default-color;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-default-bg, 10%);
+
+@btn-success-color: @btn-default-color;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-default-bg, 10%);
+
+@btn-info-color: @btn-default-color;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-default-bg, 10%);
+
+@btn-warning-color: @btn-default-color;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-default-bg, 10%);
+
+@btn-danger-color: @btn-default-color;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-default-bg, 10%);
+
+@btn-link-disabled-color: @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+@input-bg: @gray-darker;
+//** `<input disabled>` background color
+@input-bg-disabled: @gray-lighter;
+
+//** Text color for `<input>`s
+@input-color: @text-color;
+//** `<input>` border color
+@input-border: @gray-dark;
+//** `<input>` border radius
+@input-border-radius: @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus: #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder: @gray-light;
+
+//** Default `.form-control` height
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @text-color;
+@legend-border-color: @gray-dark;
+
+//** Background color for textual input addons
+@input-group-addon-bg: @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg: @gray-darker;
+//** Dropdown menu `border-color`.
+@dropdown-border: rgba(255,255,255,0.1);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border: #444;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg: rgba(255,255,255,0.1);
+
+//** Dropdown link text color.
+@dropdown-link-color: #fff;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color: #fff;
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg: @dropdown-link-active-bg;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color: #fff;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg: @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color: @text-muted;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color: @text-muted;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color: #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs: 480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min: @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width: 30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint: @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm: @container-tablet;
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md: @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop: ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg: @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+
+@navbar-default-color: @text-color;
+@navbar-default-bg: @body-bg;
+@navbar-default-border: @gray-dark;
+
+// Navbar links
+@navbar-default-link-color: @text-color;
+@navbar-default-link-hover-color: #fff;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #fff;
+@navbar-default-link-active-bg: transparent;
+@navbar-default-link-disabled-color: @gray-light;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: #fff;
+@navbar-default-brand-hover-color: #fff;
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: @gray-dark;
+@navbar-default-toggle-icon-bar-bg: #ccc;
+@navbar-default-toggle-border-color: @gray-dark;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: @gray-darker;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: transparent;
+@navbar-inverse-link-disabled-color: #aaa;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: #fff;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-darker;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: @gray-darker;
+
+//== Tabs
+@nav-tabs-border-color: @gray-dark;
+
+@nav-tabs-link-hover-border-color: transparent;
+
+@nav-tabs-active-link-hover-bg: @brand-primary;
+@nav-tabs-active-link-hover-color: #fff;
+@nav-tabs-active-link-hover-border-color: @gray-dark;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+//== Pills
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color: #fff;
+@pagination-bg: @gray-darker;
+@pagination-border: @gray-dark;
+
+@pagination-hover-color: #fff;
+@pagination-hover-bg: @component-active-bg;
+@pagination-hover-border: transparent;
+
+@pagination-active-color: #fff;
+@pagination-active-bg: @brand-primary;
+@pagination-active-border: transparent;
+
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: @gray-darker;
+@pagination-disabled-border: @gray-dark;
+
+
+//== Pager
+//
+//##
+
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+
+@pager-hover-bg: @pagination-hover-bg;
+
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+
+@pager-disabled-color: @gray-light;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: darken(@gray-darker, 5%);
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text: #fff;
+@state-success-bg: @brand-success;
+@state-success-border: darken(@state-success-bg, 5%);
+
+@state-info-text: #fff;
+@state-info-bg: @brand-info;
+@state-info-border: darken(@state-info-bg, 7%);
+
+@state-warning-text: #fff;
+@state-warning-bg: @brand-warning;
+@state-warning-border: darken(@state-warning-bg, 3%);
+
+@state-danger-text: #fff;
+@state-danger-bg: @brand-danger;
+@state-danger-border: darken(@state-danger-bg, 3%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width: 200px;
+//** Tooltip text color
+@tooltip-color: #fff;
+//** Tooltip background color
+@tooltip-bg: rgba(0,0,0,.9);
+@tooltip-opacity: .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+@tooltip-arrow-color: @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg: lighten(@body-bg, 10%);
+//** Popover maximum width
+@popover-max-width: 276px;
+//** Popover border color
+@popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color: #999;
+
+//** Popover title background color
+@popover-title-bg: darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width: 10px;
+//** Popover arrow color
+@popover-arrow-color: @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg: @btn-default-bg;
+//** Primary label background color
+@label-primary-bg: @brand-primary;
+//** Success label background color
+@label-success-bg: @brand-success;
+//** Info label background color
+@label-info-bg: @brand-info;
+//** Warning label background color
+@label-warning-bg: @brand-warning;
+//** Danger label background color
+@label-danger-bg: @brand-danger;
+
+//** Default label text color
+@label-color: #fff;
+//** Default text color of a linked label
+@label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding: 20px;
+
+//** Padding applied to the modal title
+@modal-title-padding: 15px;
+//** Modal title line-height
+@modal-title-line-height: @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg: lighten(@body-bg, 10%);
+//** Modal content border color
+@modal-content-border-color: rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color: #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity: .5;
+//** Modal header border color
+@modal-header-border-color: @gray-dark;
+//** Modal footer border color
+@modal-footer-border-color: @modal-header-border-color;
+
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg: @gray-darker;
+//** Progress bar text color
+@progress-bar-color: #fff;
+
+//** Default progress bar color
+@progress-bar-bg: @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg: @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg: @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg: @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg: @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg: @gray-darker;
+//** `.list-group-item` border color
+@list-group-border: @gray-dark;
+//** List group border radius
+@list-group-border-radius: @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg: lighten(@list-group-bg, 15%);
+//** Text color of active list items
+@list-group-active-color: @component-active-color;
+//** Background color of active list items
+@list-group-active-bg: @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border: @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color: @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg: @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color: @text-color;
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: #fff;
+
+
+//== Panels
+//
+//##
+
+@panel-bg: @gray-darker;
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border: @gray-dark;
+
+@panel-default-text: @text-color;
+@panel-default-border: @panel-inner-border;
+@panel-default-heading-bg: lighten(@gray-darker, 10%);
+
+@panel-footer-bg: @panel-default-heading-bg;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding: 4px;
+//** Thumbnail background color
+@thumbnail-bg: @gray-dark;
+//** Thumbnail border color
+@thumbnail-border: @gray-dark;
+//** Thumbnail border radius
+@thumbnail-border-radius: @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color: @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding: 9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg: darken(@gray-darker, 5%);
+@well-border: darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color: #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color: #fff;
+@badge-bg: @brand-primary;
+
+//** Badge text color in active nav link
+@badge-active-color: @brand-primary;
+//** Badge background color in active nav link
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg: @gray-darker;
+//** Breadcrumb text color
+@breadcrumb-color: #fff;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color: @text-color;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator: "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight: bold;
+@close-color: #000;
+@close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color: #c7254e;
+@code-bg: #f9f2f4;
+
+@kbd-color: #fff;
+@kbd-bg: #333;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted: @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color: @gray-light;
+//** Headings small color
+@headings-small-color: @gray-light;
+//** Blockquote small color
+@blockquote-small-color: @gray;
+//** Blockquote font size
+@blockquote-font-size: (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color: @gray-dark;
+//** Page header border color
+@page-header-border-color: @gray-dark;
+//** Width of horizontal description list titles
+@dl-horizontal-offset: @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border: @gray-dark;
+
+@import "base";
+
+.messages .text-danger {
+ color: #fff;
+}
+
+.messages .text-info {
+ color: #fff;
+}
+
+.messages .caret {
+ color: #fff;
+}
+
+// Cyborg 3.2.0
+// Bootswatch
+// -----------------------------------------------------
+
+// Navbar =====================================================================
+
+// Buttons ====================================================================
+
+// Typography =================================================================
+
+.text-primary,
+.text-primary:hover {
+ color: @brand-primary;
+}
+
+.text-success,
+.text-success:hover {
+ color: @brand-success;
+}
+
+.text-danger,
+.text-danger:hover {
+ color: @brand-danger;
+}
+
+.text-warning,
+.text-warning:hover {
+ color: @brand-warning;
+}
+
+.text-info,
+.text-info:hover {
+ color: @brand-info;
+}
+
+// Tables =====================================================================
+
+table,
+.table {
+ color: #fff;
+
+ a:not(.btn) {
+ color: #fff;
+ text-decoration: underline;
+ }
+
+ .text-muted {
+ color: @text-muted;
+ }
+}
+
+.table-responsive > .table {
+ background-color: @table-bg;
+}
+
+// Forms ======================================================================
+
+.has-warning {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-warning;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-warning;
+ }
+}
+
+.has-error {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-danger;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-danger;
+ }
+}
+
+.has-success {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-success;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-success;
+ }
+}
+
+legend {
+ color: #fff;
+}
+
+.input-group-addon {
+ background-color: @btn-default-bg;
+}
+
+// Navs =======================================================================
+
+.nav-tabs,
+.nav-pills,
+.breadcrumb,
+.pager {
+
+ a {
+ color: #fff;
+ }
+}
+
+// Indicators =================================================================
+
+.alert {
+
+ .alert-link,
+ a {
+ color: @alert-warning-text;
+ text-decoration: underline;
+ }
+
+ .close {
+ text-decoration: none;
+ }
+}
+
+.close {
+ color: #fff;
+ text-decoration: none;
+ opacity: 0.4;
+
+ &:hover,
+ &:focus {
+ color: #fff;
+ opacity: 1;
+ }
+}
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: @thumbnail-border;
+}
+
+.jumbotron {
+
+ h1, h2, h3, h4, h5, h6 {
+ color: #fff;
+ }
+}
diff --git a/frontend/themes/theme2.less b/frontend/themes/theme2.less
new file mode 100644
index 00000000..231dc4c4
--- /dev/null
+++ b/frontend/themes/theme2.less
@@ -0,0 +1,27 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+@brand-primary: #758499;
+@brand-success: #7b9c41;
+@brand-info: #9c7357;
+@brand-warning: #e3a14d;
+@brand-danger: #7f528b;
+
+@link-color: #58585a;
+
+@state-success-text: #638232;
+@state-success-bg: lighten(@brand-success,50%);
+@state-success-border: @brand-success;
+
+@state-info-text: #826045;
+@state-info-bg: lighten(@brand-info,50%);
+@state-info-border: @brand-info;
+
+@state-warning-text: #bc8640;
+@state-warning-bg: lighten(@brand-warning,50%);
+@state-warning-border: @brand-warning;
+
+@state-danger-text: #694374;
+@state-danger-bg: lighten(@brand-danger,50%);
+@state-danger-border: @brand-danger;
+
+@import "base.less";
diff --git a/frontend/themes/theme3.less b/frontend/themes/theme3.less
new file mode 100644
index 00000000..e4012d7b
--- /dev/null
+++ b/frontend/themes/theme3.less
@@ -0,0 +1,55 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+@brand-primary: #f19224;
+@brand-success: #39AB50;
+@brand-info: #6618F9;
+@brand-warning: #DAD216;
+@brand-danger: #DA1639;
+
+@state-success-text: @brand-success;
+@state-success-bg: lighten(@brand-success,40%);
+@state-success-border: @brand-success;
+
+@state-info-text: @brand-info;
+@state-info-bg: lighten(@brand-info,40%);
+@state-info-border: @brand-info;
+
+@state-warning-text: @brand-warning;
+@state-warning-bg: lighten(@brand-warning,40%);
+@state-warning-border: @brand-warning;
+
+@state-danger-text: @brand-danger;
+@state-danger-bg: lighten(@brand-danger,40%);
+@state-danger-border: @brand-danger;
+
+@navbar-default-color: #fff;
+@navbar-default-bg: #000;
+@navbar-default-border: #000;
+
+@navbar-default-link-color: #fff;
+@navbar-default-link-hover-color: #ddd;
+@navbar-default-link-hover-bg: #222;
+
+@navbar-default-link-active-color: @brand-primary;
+@navbar-default-link-active-bg: #000;
+@navbar-default-link-disabled-color:#777;
+@navbar-default-link-disabled-bg: #000;
+
+@navbar-default-brand-color: #fff;
+@navbar-default-brand-hover-color: @brand-primary;
+@navbar-default-brand-hover-bg: #000;
+
+.navbar {
+ .bg-info {
+ background-color: darken(@brand-info, 30%);
+ }
+ .bg-danger {
+ background-color: darken(@brand-danger, 30%);
+ }
+}
+
+#shifts td a {
+ color: #000;
+}
+
+@import "base.less";
diff --git a/frontend/themes/theme4.less b/frontend/themes/theme4.less
new file mode 100644
index 00000000..40c53f6c
--- /dev/null
+++ b/frontend/themes/theme4.less
@@ -0,0 +1,1051 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 Thomas Park
+
+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.
+*/
+
+// Cyborg 3.2.0
+// Variables
+// --------------------------------------------------
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-darker: #222; // #222
+@gray-dark: #282828; // #333
+@gray: #555; // #555
+@gray-light: #888; // #999
+@gray-lighter: #ADAFAE; // #eee
+
+@brand-primary: rgb(0, 156, 139);
+@brand-success: rgb(141, 193, 35);
+@brand-info: rgb(70, 71, 73);
+@brand-warning: rgb(255, 244, 95);
+@brand-danger: rgb(277, 38, 60);
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+@body-bg: #1d1d1b;
+//** Global text color on `<body>`.
+@text-color: @gray-light;
+
+//** Global textual link color.
+@link-color: @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color: @link-color;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 14px;
+@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1: 34px;
+@font-size-h2: 24px;
+@font-size-h3: 20px;
+@font-size-h4: 20px;
+@font-size-h5: 20px;
+@font-size-h6: 16px;
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base: 1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the `<body>`.
+@headings-font-family: @font-family-base;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: #fff;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** File name for all font files.
+@icon-font-name: "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id: "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical: 8px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 14px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg: @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base: 4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large: 5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+@table-cell-padding: 8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding: 5px;
+
+//** Default background color used for all tables.
+@table-bg: darken(@gray-darker, 4%);
+//** Background color used for `.table-striped`.
+@table-bg-accent: darken(@table-bg, 6%);
+//** Background color used for `.table-hover`.
+@table-bg-hover: @gray-dark;
+@table-bg-active: @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color: @gray-dark;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight: normal;
+
+@btn-default-color: #fff;
+@btn-default-bg: lighten(@gray-dark, 10%);
+
+@btn-default-border: darken(@btn-default-bg, 10%);
+
+@btn-primary-color: @btn-default-color;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-default-bg, 10%);
+
+@btn-success-color: @btn-default-color;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-default-bg, 10%);
+
+@btn-info-color: @btn-default-color;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-default-bg, 10%);
+
+@btn-warning-color: @btn-default-color;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-default-bg, 10%);
+
+@btn-danger-color: @btn-default-color;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-default-bg, 10%);
+
+@btn-link-disabled-color: @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+@input-bg: @gray-darker;
+//** `<input disabled>` background color
+@input-bg-disabled: @gray-lighter;
+
+//** Text color for `<input>`s
+@input-color: @text-color;
+//** `<input>` border color
+@input-border: @gray-dark;
+//** `<input>` border radius
+@input-border-radius: @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus: #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder: @gray-light;
+
+//** Default `.form-control` height
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @text-color;
+@legend-border-color: @gray-dark;
+
+//** Background color for textual input addons
+@input-group-addon-bg: @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg: @gray-darker;
+//** Dropdown menu `border-color`.
+@dropdown-border: rgba(255,255,255,0.1);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border: #444;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg: rgba(255,255,255,0.1);
+
+//** Dropdown link text color.
+@dropdown-link-color: #fff;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color: #fff;
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg: @dropdown-link-active-bg;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color: #fff;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg: @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color: @text-muted;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color: @text-muted;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color: #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs: 480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min: @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width: 30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint: @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm: @container-tablet;
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md: @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop: ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg: @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+
+@navbar-default-color: @text-color;
+@navbar-default-bg: @body-bg;
+@navbar-default-border: @gray-dark;
+
+// Navbar links
+@navbar-default-link-color: @text-color;
+@navbar-default-link-hover-color: #fff;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #fff;
+@navbar-default-link-active-bg: transparent;
+@navbar-default-link-disabled-color: @gray-light;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: #fff;
+@navbar-default-brand-hover-color: #fff;
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: @gray-dark;
+@navbar-default-toggle-icon-bar-bg: #ccc;
+@navbar-default-toggle-border-color: @gray-dark;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: @gray-darker;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: transparent;
+@navbar-inverse-link-disabled-color: #aaa;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: #fff;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-darker;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: @gray-darker;
+
+//== Tabs
+@nav-tabs-border-color: @gray-dark;
+
+@nav-tabs-link-hover-border-color: transparent;
+
+@nav-tabs-active-link-hover-bg: @brand-primary;
+@nav-tabs-active-link-hover-color: #fff;
+@nav-tabs-active-link-hover-border-color: @gray-dark;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+//== Pills
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color: #fff;
+@pagination-bg: @gray-darker;
+@pagination-border: @gray-dark;
+
+@pagination-hover-color: #fff;
+@pagination-hover-bg: @component-active-bg;
+@pagination-hover-border: transparent;
+
+@pagination-active-color: #fff;
+@pagination-active-bg: @brand-primary;
+@pagination-active-border: transparent;
+
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: @gray-darker;
+@pagination-disabled-border: @gray-dark;
+
+
+//== Pager
+//
+//##
+
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+
+@pager-hover-bg: @pagination-hover-bg;
+
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+
+@pager-disabled-color: @gray-light;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: darken(@gray-darker, 5%);
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text: #fff;
+@state-success-bg: @brand-success;
+@state-success-border: darken(@state-success-bg, 5%);
+
+@state-info-text: #fff;
+@state-info-bg: @brand-info;
+@state-info-border: darken(@state-info-bg, 7%);
+
+@state-warning-text: #fff;
+@state-warning-bg: @brand-warning;
+@state-warning-border: darken(@state-warning-bg, 3%);
+
+@state-danger-text: #fff;
+@state-danger-bg: @brand-danger;
+@state-danger-border: darken(@state-danger-bg, 3%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width: 200px;
+//** Tooltip text color
+@tooltip-color: #fff;
+//** Tooltip background color
+@tooltip-bg: rgba(0,0,0,.9);
+@tooltip-opacity: .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+@tooltip-arrow-color: @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg: lighten(@body-bg, 10%);
+//** Popover maximum width
+@popover-max-width: 276px;
+//** Popover border color
+@popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color: #999;
+
+//** Popover title background color
+@popover-title-bg: darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width: 10px;
+//** Popover arrow color
+@popover-arrow-color: @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg: @btn-default-bg;
+//** Primary label background color
+@label-primary-bg: @brand-primary;
+//** Success label background color
+@label-success-bg: @brand-success;
+//** Info label background color
+@label-info-bg: @brand-info;
+//** Warning label background color
+@label-warning-bg: @brand-warning;
+//** Danger label background color
+@label-danger-bg: @brand-danger;
+
+//** Default label text color
+@label-color: #fff;
+//** Default text color of a linked label
+@label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding: 20px;
+
+//** Padding applied to the modal title
+@modal-title-padding: 15px;
+//** Modal title line-height
+@modal-title-line-height: @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg: lighten(@body-bg, 10%);
+//** Modal content border color
+@modal-content-border-color: rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color: #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity: .5;
+//** Modal header border color
+@modal-header-border-color: @gray-dark;
+//** Modal footer border color
+@modal-footer-border-color: @modal-header-border-color;
+
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg: @gray-darker;
+//** Progress bar text color
+@progress-bar-color: #fff;
+
+//** Default progress bar color
+@progress-bar-bg: @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg: @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg: @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg: @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg: @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg: @gray-darker;
+//** `.list-group-item` border color
+@list-group-border: @gray-dark;
+//** List group border radius
+@list-group-border-radius: @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg: lighten(@list-group-bg, 15%);
+//** Text color of active list items
+@list-group-active-color: @component-active-color;
+//** Background color of active list items
+@list-group-active-bg: @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border: @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color: @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg: @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color: @text-color;
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: #fff;
+
+
+//== Panels
+//
+//##
+
+@panel-bg: @gray-darker;
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border: @gray-dark;
+
+@panel-default-text: @text-color;
+@panel-default-border: @panel-inner-border;
+@panel-default-heading-bg: lighten(@gray-darker, 10%);
+
+@panel-footer-bg: @panel-default-heading-bg;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding: 4px;
+//** Thumbnail background color
+@thumbnail-bg: @gray-dark;
+//** Thumbnail border color
+@thumbnail-border: @gray-dark;
+//** Thumbnail border radius
+@thumbnail-border-radius: @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color: @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding: 9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg: darken(@gray-darker, 5%);
+@well-border: darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color: #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color: #fff;
+@badge-bg: @brand-primary;
+
+//** Badge text color in active nav link
+@badge-active-color: @brand-primary;
+//** Badge background color in active nav link
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg: @gray-darker;
+//** Breadcrumb text color
+@breadcrumb-color: #fff;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color: @text-color;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator: "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight: bold;
+@close-color: #000;
+@close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color: #c7254e;
+@code-bg: #f9f2f4;
+
+@kbd-color: #fff;
+@kbd-bg: #333;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted: @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color: @gray-light;
+//** Headings small color
+@headings-small-color: @gray-light;
+//** Blockquote small color
+@blockquote-small-color: @gray;
+//** Blockquote font size
+@blockquote-font-size: (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color: @gray-dark;
+//** Page header border color
+@page-header-border-color: @gray-dark;
+//** Width of horizontal description list titles
+@dl-horizontal-offset: @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border: @gray-dark;
+
+@import "base";
+
+.messages .text-danger {
+ color: #fff;
+}
+
+.messages .text-info {
+ color: #fff;
+}
+
+.messages .caret {
+ color: #fff;
+}
+
+// Cyborg 3.2.0
+// Bootswatch
+// -----------------------------------------------------
+
+// Navbar =====================================================================
+
+// Buttons ====================================================================
+
+// Typography =================================================================
+
+.text-primary,
+.text-primary:hover {
+ color: @brand-primary;
+}
+
+.text-success,
+.text-success:hover {
+ color: @brand-success;
+}
+
+.text-danger,
+.text-danger:hover {
+ color: @brand-danger;
+}
+
+.text-warning,
+.text-warning:hover {
+ color: @brand-warning;
+}
+
+.text-info,
+.text-info:hover {
+ color: @brand-info;
+}
+
+// Tables =====================================================================
+
+table,
+.table {
+ color: #fff;
+
+ a:not(.btn) {
+ color: #fff;
+ text-decoration: underline;
+ }
+
+ .text-muted {
+ color: @text-muted;
+ }
+}
+
+.table-responsive > .table {
+ background-color: @table-bg;
+}
+
+// Forms ======================================================================
+
+.has-warning {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-warning;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-warning;
+ }
+}
+
+.has-error {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-danger;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-danger;
+ }
+}
+
+.has-success {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-success;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-success;
+ }
+}
+
+legend {
+ color: #fff;
+}
+
+.input-group-addon {
+ background-color: @btn-default-bg;
+}
+
+// Navs =======================================================================
+
+.nav-tabs,
+.nav-pills,
+.breadcrumb,
+.pager {
+
+ a {
+ color: #fff;
+ }
+}
+
+// Indicators =================================================================
+
+.alert {
+
+ .alert-link,
+ a {
+ color: @alert-warning-text;
+ text-decoration: underline;
+ }
+
+ .close {
+ text-decoration: none;
+ }
+}
+
+.close {
+ color: #fff;
+ text-decoration: none;
+ opacity: 0.4;
+
+ &:hover,
+ &:focus {
+ color: #fff;
+ opacity: 1;
+ }
+}
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: @thumbnail-border;
+}
+
+.jumbotron {
+
+ h1, h2, h3, h4, h5, h6 {
+ color: #fff;
+ }
+}
+
+.label-warning, .label-success, .progress-bar-warning, .progress-bar-success,
+.panel-warning .panel-heading, .panel-warning .panel-heading a,
+.panel-success .panel-heading, .panel-success .panel-heading a {
+ color: @gray-darker;
+}
diff --git a/frontend/themes/theme5.less b/frontend/themes/theme5.less
new file mode 100644
index 00000000..bd2b9330
--- /dev/null
+++ b/frontend/themes/theme5.less
@@ -0,0 +1,31 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+@brand-primary: rgb(164, 28, 49);
+@brand-success: rgb(153, 204, 0);
+@brand-info: rgb(0, 204, 255);
+@brand-warning: rgb(255, 255, 51);
+@brand-danger: rgb(255, 102, 0);
+
+@link-color: @brand-primary;
+
+@state-success-text: darken(@brand-success,40%);
+@state-success-bg: lighten(@brand-success,40%);
+@state-success-border: @brand-success;
+
+@state-info-text: darken(@brand-info,40%);
+@state-info-bg: lighten(@brand-info,40%);
+@state-info-border: @brand-info;
+
+@state-warning-text: darken(@brand-warning,40%);
+@state-warning-bg: @brand-warning;
+@state-warning-border: darken(@brand-warning,40%);
+
+@state-danger-text: darken(@brand-danger,40%);
+@state-danger-bg: lighten(@brand-danger,40%);
+@state-danger-border: @brand-danger;
+
+.label.label-warning {
+ color: #000;
+}
+
+@import "base.less";
diff --git a/frontend/themes/theme6.less b/frontend/themes/theme6.less
new file mode 100644
index 00000000..86c2f463
--- /dev/null
+++ b/frontend/themes/theme6.less
@@ -0,0 +1,1058 @@
+@import "../../node_modules/bootstrap/less/variables";
+
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 Thomas Park
+
+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.
+*/
+
+// Cyborg 3.2.0
+// Variables
+// --------------------------------------------------
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-darker: #222; // #222
+@gray-dark: #282828; // #333
+@gray: #555; // #555
+@gray-light: #888; // #999
+@gray-lighter: #ADAFAE; // #eee
+
+@brand-primary: rgb(164, 28, 49);
+@brand-success: rgb(153, 204, 0);
+@brand-info: rgb(0, 204, 255);
+@brand-warning: rgb(255, 255, 51);
+@brand-danger: rgb(255, 102, 0);
+
+.label.label-warning, .progress-bar.progress-bar-warning {
+ color: #000;
+}
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+@body-bg: #060606;
+//** Global text color on `<body>`.
+@text-color: @gray-light;
+
+//** Global textual link color.
+@link-color: @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color: @link-color;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 14px;
+@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1: 34px;
+@font-size-h2: 24px;
+@font-size-h3: 20px;
+@font-size-h4: 20px;
+@font-size-h5: 20px;
+@font-size-h6: 16px;
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base: 1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the `<body>`.
+@headings-font-family: @font-family-base;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: #fff;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** File name for all font files.
+@icon-font-name: "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id: "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical: 8px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 14px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color: #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg: @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base: 4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large: 5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+@table-cell-padding: 8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding: 5px;
+
+//** Default background color used for all tables.
+@table-bg: darken(@gray-darker, 4%);
+//** Background color used for `.table-striped`.
+@table-bg-accent: darken(@table-bg, 6%);
+//** Background color used for `.table-hover`.
+@table-bg-hover: @gray-dark;
+@table-bg-active: @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color: @gray-dark;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight: normal;
+
+@btn-default-color: #fff;
+@btn-default-bg: lighten(@gray-dark, 10%);
+
+@btn-default-border: darken(@btn-default-bg, 10%);
+
+@btn-primary-color: @btn-default-color;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-default-bg, 10%);
+
+@btn-success-color: @btn-default-color;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-default-bg, 10%);
+
+@btn-info-color: @btn-default-color;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-default-bg, 10%);
+
+@btn-warning-color: @btn-default-color;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-default-bg, 10%);
+
+@btn-danger-color: @btn-default-color;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-default-bg, 10%);
+
+@btn-link-disabled-color: @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+@input-bg: @gray-darker;
+//** `<input disabled>` background color
+@input-bg-disabled: @gray-lighter;
+
+//** Text color for `<input>`s
+@input-color: @text-color;
+//** `<input>` border color
+@input-border: @gray-dark;
+//** `<input>` border radius
+@input-border-radius: @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus: #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder: @gray-light;
+
+//** Default `.form-control` height
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @text-color;
+@legend-border-color: @gray-dark;
+
+//** Background color for textual input addons
+@input-group-addon-bg: @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg: @gray-darker;
+//** Dropdown menu `border-color`.
+@dropdown-border: rgba(255,255,255,0.1);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border: #444;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg: rgba(255,255,255,0.1);
+
+//** Dropdown link text color.
+@dropdown-link-color: #fff;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color: #fff;
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg: @dropdown-link-active-bg;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color: #fff;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg: @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color: @text-muted;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color: @text-muted;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color: #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs: 480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min: @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns: 12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width: 30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint: @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm: @container-tablet;
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md: @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop: ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg: @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+
+@navbar-default-color: @text-color;
+@navbar-default-bg: @body-bg;
+@navbar-default-border: @gray-dark;
+
+// Navbar links
+@navbar-default-link-color: @text-color;
+@navbar-default-link-hover-color: #fff;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #fff;
+@navbar-default-link-active-bg: transparent;
+@navbar-default-link-disabled-color: @gray-light;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: #fff;
+@navbar-default-brand-hover-color: #fff;
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: @gray-dark;
+@navbar-default-toggle-icon-bar-bg: #ccc;
+@navbar-default-toggle-border-color: @gray-dark;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: @gray-darker;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: transparent;
+@navbar-inverse-link-disabled-color: #aaa;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: #fff;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-darker;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: @gray-darker;
+
+//== Tabs
+@nav-tabs-border-color: @gray-dark;
+
+@nav-tabs-link-hover-border-color: transparent;
+
+@nav-tabs-active-link-hover-bg: @brand-primary;
+@nav-tabs-active-link-hover-color: #fff;
+@nav-tabs-active-link-hover-border-color: @gray-dark;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+//== Pills
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color: #fff;
+@pagination-bg: @gray-darker;
+@pagination-border: @gray-dark;
+
+@pagination-hover-color: #fff;
+@pagination-hover-bg: @component-active-bg;
+@pagination-hover-border: transparent;
+
+@pagination-active-color: #fff;
+@pagination-active-bg: @brand-primary;
+@pagination-active-border: transparent;
+
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: @gray-darker;
+@pagination-disabled-border: @gray-dark;
+
+
+//== Pager
+//
+//##
+
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+
+@pager-hover-bg: @pagination-hover-bg;
+
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+
+@pager-disabled-color: @gray-light;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: darken(@gray-darker, 5%);
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text: #fff;
+@state-success-bg: @brand-success;
+@state-success-border: darken(@state-success-bg, 5%);
+
+@state-info-text: #fff;
+@state-info-bg: @brand-info;
+@state-info-border: darken(@state-info-bg, 7%);
+
+@state-warning-text: #000;
+@state-warning-bg: @brand-warning;
+@state-warning-border: darken(@state-warning-bg, 3%);
+
+@state-danger-text: #fff;
+@state-danger-bg: @brand-danger;
+@state-danger-border: darken(@state-danger-bg, 3%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width: 200px;
+//** Tooltip text color
+@tooltip-color: #fff;
+//** Tooltip background color
+@tooltip-bg: rgba(0,0,0,.9);
+@tooltip-opacity: .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width: 5px;
+//** Tooltip arrow color
+@tooltip-arrow-color: @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg: lighten(@body-bg, 10%);
+//** Popover maximum width
+@popover-max-width: 276px;
+//** Popover border color
+@popover-border-color: rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color: #999;
+
+//** Popover title background color
+@popover-title-bg: darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width: 10px;
+//** Popover arrow color
+@popover-arrow-color: @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg: @btn-default-bg;
+//** Primary label background color
+@label-primary-bg: @brand-primary;
+//** Success label background color
+@label-success-bg: @brand-success;
+//** Info label background color
+@label-info-bg: @brand-info;
+//** Warning label background color
+@label-warning-bg: @brand-warning;
+//** Danger label background color
+@label-danger-bg: @brand-danger;
+
+//** Default label text color
+@label-color: #fff;
+//** Default text color of a linked label
+@label-link-hover-color: #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding: 20px;
+
+//** Padding applied to the modal title
+@modal-title-padding: 15px;
+//** Modal title line-height
+@modal-title-line-height: @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg: lighten(@body-bg, 10%);
+//** Modal content border color
+@modal-content-border-color: rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color: #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg: #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity: .5;
+//** Modal header border color
+@modal-header-border-color: @gray-dark;
+//** Modal footer border color
+@modal-footer-border-color: @modal-header-border-color;
+
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg: @gray-darker;
+//** Progress bar text color
+@progress-bar-color: #fff;
+
+//** Default progress bar color
+@progress-bar-bg: @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg: @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg: @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg: @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg: @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg: darken(@gray-darker, 10%);
+//** `.list-group-item` border color
+@list-group-border: @gray-dark;
+//** List group border radius
+@list-group-border-radius: @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg: lighten(@list-group-bg, 15%);
+//** Text color of active list items
+@list-group-active-color: @component-active-color;
+//** Background color of active list items
+@list-group-active-bg: @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border: @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color: @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg: @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color: @text-color;
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: #fff;
+
+
+//== Panels
+//
+//##
+
+@panel-bg: darken(@gray-darker, 10%);
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border: @gray-dark;
+
+@panel-default-text: @text-color;
+@panel-default-border: @panel-inner-border;
+@panel-default-heading-bg: darken(@gray-darker, 5%);
+
+@panel-footer-bg: @panel-default-heading-bg;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding: 4px;
+//** Thumbnail background color
+@thumbnail-bg: @gray-dark;
+//** Thumbnail border color
+@thumbnail-border: @gray-dark;
+//** Thumbnail border radius
+@thumbnail-border-radius: @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color: @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding: 9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg: darken(@gray-darker, 5%);
+@well-border: darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color: #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color: #fff;
+@badge-bg: @brand-primary;
+
+//** Badge text color in active nav link
+@badge-active-color: @brand-primary;
+//** Badge background color in active nav link
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg: @gray-darker;
+//** Breadcrumb text color
+@breadcrumb-color: #fff;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color: @text-color;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator: "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight: bold;
+@close-color: #000;
+@close-text-shadow: 0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color: #c7254e;
+@code-bg: #f9f2f4;
+
+@kbd-color: #fff;
+@kbd-bg: #333;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted: @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color: @gray-light;
+//** Headings small color
+@headings-small-color: @gray-light;
+//** Blockquote small color
+@blockquote-small-color: @gray;
+//** Blockquote font size
+@blockquote-font-size: (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color: @gray-dark;
+//** Page header border color
+@page-header-border-color: @gray-dark;
+//** Width of horizontal description list titles
+@dl-horizontal-offset: @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border: @gray-dark;
+
+@import "base";
+
+.messages .text-danger {
+ color: #fff;
+}
+
+.messages .text-info {
+ color: #fff;
+}
+
+.messages .caret {
+ color: #fff;
+}
+
+// Cyborg 3.2.0
+// Bootswatch
+// -----------------------------------------------------
+
+// Navbar =====================================================================
+
+// Buttons ====================================================================
+
+// Typography =================================================================
+
+.text-primary,
+.text-primary:hover,
+a.text-primary,
+a.text-primary:hover {
+ color: @brand-primary;
+}
+
+.text-success,
+.text-success:hover,
+a.text-success,
+a.text-success:hover {
+ color: @brand-success;
+}
+
+.text-danger,
+.text-danger:hover,
+a.text-danger,
+a.text-danger:hover {
+ color: @brand-danger;
+}
+
+.text-warning,
+.text-warning:hover,
+a.text-warning,
+a.text-warning:hover {
+ color: @brand-warning;
+}
+
+.text-info,
+.text-info:hover,
+a.text-info,
+a.text-info:hover {
+ color: @brand-info;
+}
+
+// Tables =====================================================================
+
+table,
+.table {
+ color: #fff;
+
+ a:not(.btn) {
+ color: #fff;
+ text-decoration: underline;
+ }
+
+ .text-muted {
+ color: @text-muted;
+ }
+}
+
+.table-responsive > .table {
+ background-color: @table-bg;
+}
+
+// Forms ======================================================================
+
+.has-warning {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-warning;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-warning;
+ }
+}
+
+.has-error {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-danger;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-danger;
+ }
+}
+
+.has-success {
+ .help-block,
+ .control-label,
+ .form-control-feedback {
+ color: @brand-success;
+ }
+
+ .form-control,
+ .form-control:focus,
+ .input-group-addon {
+ border-color: @brand-success;
+ }
+}
+
+legend {
+ color: #fff;
+}
+
+.input-group-addon {
+ background-color: @btn-default-bg;
+}
+
+// Navs =======================================================================
+
+.nav-tabs,
+.nav-pills,
+.breadcrumb,
+.pager {
+
+ a {
+ color: #fff;
+ }
+}
+
+// Indicators =================================================================
+
+.alert {
+
+ .alert-link,
+ a {
+ color: @alert-warning-text;
+ text-decoration: underline;
+ }
+
+ .close {
+ text-decoration: none;
+ }
+}
+
+.close {
+ color: #fff;
+ text-decoration: none;
+ opacity: 0.4;
+
+ &:hover,
+ &:focus {
+ color: #fff;
+ opacity: 1;
+ }
+}
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: @thumbnail-border;
+}
+
+.jumbotron {
+
+ h1, h2, h3, h4, h5, h6 {
+ color: #fff;
+ }
+}