summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Console/CssCommand.php126
-rw-r--r--app/ServiceProvider/CommandProvider.php2
-rw-r--r--assets/css/app.min.css2
-rw-r--r--assets/css/print.min.css2
-rw-r--r--assets/css/src/accordion.css10
-rw-r--r--assets/css/src/activity_stream.css48
-rw-r--r--assets/css/src/alert.css67
-rw-r--r--assets/css/src/avatar.css40
-rw-r--r--assets/css/src/base.css65
-rw-r--r--assets/css/src/board.css143
-rw-r--r--assets/css/src/bulk_change.css13
-rw-r--r--assets/css/src/button.css63
-rw-r--r--assets/css/src/color_picker.css21
-rw-r--r--assets/css/src/comment.css65
-rw-r--r--assets/css/src/dashboard.css15
-rw-r--r--assets/css/src/dropdown.css99
-rw-r--r--assets/css/src/file_upload.css39
-rw-r--r--assets/css/src/filter_box.css13
-rw-r--r--assets/css/src/form.css269
-rw-r--r--assets/css/src/header.css68
-rw-r--r--assets/css/src/icon.css21
-rw-r--r--assets/css/src/input_addon.css52
-rw-r--r--assets/css/src/links.css21
-rw-r--r--assets/css/src/list_items.css14
-rw-r--r--assets/css/src/logo.css19
-rw-r--r--assets/css/src/markdown.css48
-rw-r--r--assets/css/src/modal.css38
-rw-r--r--assets/css/src/page_header.css70
-rw-r--r--assets/css/src/pagination.css18
-rw-r--r--assets/css/src/panel.css16
-rw-r--r--assets/css/src/print.css22
-rw-r--r--assets/css/src/project.css90
-rw-r--r--assets/css/src/select_dropdown.css68
-rw-r--r--assets/css/src/sidebar.css99
-rw-r--r--assets/css/src/slideshow.css57
-rw-r--r--assets/css/src/subtasks.css29
-rw-r--r--assets/css/src/suggest_menu.css34
-rw-r--r--assets/css/src/table.css466
-rw-r--r--assets/css/src/table_drag_and_drop.css32
-rw-r--r--assets/css/src/table_list.css174
-rw-r--r--assets/css/src/task_board.css68
-rw-r--r--assets/css/src/task_category.css18
-rw-r--r--assets/css/src/task_date.css14
-rw-r--r--assets/css/src/task_form.css69
-rw-r--r--assets/css/src/task_icons.css127
-rw-r--r--assets/css/src/task_links.css12
-rw-r--r--assets/css/src/task_list.css28
-rw-r--r--assets/css/src/task_summary.css51
-rw-r--r--assets/css/src/task_tags.css8
-rw-r--r--assets/css/src/text_editor.css29
-rw-r--r--assets/css/src/thumbnails.css59
-rw-r--r--assets/css/src/titles.css20
-rw-r--r--assets/css/src/tooltip.css25
-rw-r--r--assets/css/src/user_mention.css9
-rw-r--r--assets/css/src/variables.css69
-rw-r--r--assets/css/src/views.css69
-rw-r--r--assets/css/vendor.min.css14
-rw-r--r--assets/sass/_accordion.sass10
-rw-r--r--assets/sass/_activity_stream.sass34
-rw-r--r--assets/sass/_alert.sass58
-rw-r--r--assets/sass/_avatar.sass32
-rw-r--r--assets/sass/_base.sass20
-rw-r--r--assets/sass/_board.sass113
-rw-r--r--assets/sass/_bulk_change.sass10
-rw-r--r--assets/sass/_button.sass50
-rw-r--r--assets/sass/_color_picker.sass17
-rw-r--r--assets/sass/_comment.sass49
-rw-r--r--assets/sass/_dashboard.sass13
-rw-r--r--assets/sass/_documentation.sass21
-rw-r--r--assets/sass/_dropdown.sass77
-rw-r--r--assets/sass/_file_upload.sass31
-rw-r--r--assets/sass/_filter_box.sass2
-rw-r--r--assets/sass/_form.sass167
-rw-r--r--assets/sass/_global_print.sass18
-rw-r--r--assets/sass/_header.sass47
-rw-r--r--assets/sass/_icon.sass17
-rw-r--r--assets/sass/_image_slideshow.sass45
-rw-r--r--assets/sass/_input_addon.sass41
-rw-r--r--assets/sass/_links.sass16
-rw-r--r--assets/sass/_list_items.sass11
-rw-r--r--assets/sass/_logo.sass15
-rw-r--r--assets/sass/_markdown_editor.sass22
-rw-r--r--assets/sass/_markdown_rendering.sass34
-rw-r--r--assets/sass/_mixins.sass66
-rw-r--r--assets/sass/_modal.sass34
-rw-r--r--assets/sass/_page_header.sass45
-rw-r--r--assets/sass/_pagination.sass16
-rw-r--r--assets/sass/_panel.sass15
-rw-r--r--assets/sass/_project.sass15
-rw-r--r--assets/sass/_project_header.sass25
-rw-r--r--assets/sass/_project_overview.sass32
-rw-r--r--assets/sass/_project_views_switcher.sass45
-rw-r--r--assets/sass/_reset.sass36
-rw-r--r--assets/sass/_select_dropdown.sass55
-rw-r--r--assets/sass/_sidebar.sass69
-rw-r--r--assets/sass/_subtasks.sass35
-rw-r--r--assets/sass/_suggest_menu.sass28
-rw-r--r--assets/sass/_table.sass54
-rw-r--r--assets/sass/_table_drag_and_drop.sass23
-rw-r--r--assets/sass/_table_list.sass117
-rw-r--r--assets/sass/_task_avatars.sass24
-rw-r--r--assets/sass/_task_board.sass33
-rw-r--r--assets/sass/_task_board_saving_state.sass11
-rw-r--r--assets/sass/_task_category.sass17
-rw-r--r--assets/sass/_task_date.sass13
-rw-r--r--assets/sass/_task_form.sass37
-rw-r--r--assets/sass/_task_icon_age.sass22
-rw-r--r--assets/sass/_task_icons.sass43
-rw-r--r--assets/sass/_task_links.sass12
-rw-r--r--assets/sass/_task_summary.sass36
-rw-r--r--assets/sass/_task_tags.sass13
-rw-r--r--assets/sass/_thumbnails.sass46
-rw-r--r--assets/sass/_title.sass16
-rw-r--r--assets/sass/_tooltip.sass23
-rw-r--r--assets/sass/_user_mentions.sass8
-rw-r--r--assets/sass/_variables.sass69
-rw-r--r--assets/sass/app.sass56
-rw-r--r--assets/sass/app_print.sass1
-rw-r--r--gulpfile.js30
-rwxr-xr-xlibs/minify/LICENSE18
-rwxr-xr-xlibs/minify/data/js/keywords_after.txt7
-rwxr-xr-xlibs/minify/data/js/keywords_before.txt26
-rwxr-xr-xlibs/minify/data/js/keywords_reserved.txt63
-rwxr-xr-xlibs/minify/data/js/operators.txt46
-rwxr-xr-xlibs/minify/data/js/operators_after.txt43
-rwxr-xr-xlibs/minify/data/js/operators_before.txt43
-rwxr-xr-xlibs/minify/src/CSS.php751
-rwxr-xr-xlibs/minify/src/Exception.php20
-rwxr-xr-xlibs/minify/src/Exceptions/BasicException.php23
-rwxr-xr-xlibs/minify/src/Exceptions/FileImportException.php21
-rwxr-xr-xlibs/minify/src/Exceptions/IOException.php21
-rwxr-xr-xlibs/minify/src/JS.php612
-rwxr-xr-xlibs/minify/src/Minify.php459
-rwxr-xr-xlibs/path-converter/LICENSE18
-rwxr-xr-xlibs/path-converter/src/Converter.php196
-rwxr-xr-xlibs/path-converter/src/ConverterInterface.php24
-rwxr-xr-xlibs/path-converter/src/NoConverter.php23
-rw-r--r--package.json1
138 files changed, 5649 insertions, 2203 deletions
diff --git a/app/Console/CssCommand.php b/app/Console/CssCommand.php
new file mode 100644
index 00000000..f141519e
--- /dev/null
+++ b/app/Console/CssCommand.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace Kanboard\Console;
+
+use MatthiasMullie\Minify;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+$path = __DIR__ . '/../../libs';
+require_once $path . '/minify/src/Minify.php';
+require_once $path . '/minify/src/CSS.php';
+require_once $path . '/minify/src/JS.php';
+require_once $path . '/minify/src/Exception.php';
+require_once $path . '/minify/src/Exceptions/BasicException.php';
+require_once $path . '/minify/src/Exceptions/FileImportException.php';
+require_once $path . '/minify/src/Exceptions/IOException.php';
+require_once $path . '/path-converter/src/ConverterInterface.php';
+require_once $path . '/path-converter/src/Converter.php';
+
+/**
+ * Class CssCommand
+ *
+ * @package Kanboard\Console
+ * @author Frederic Guillot
+ */
+class CssCommand extends BaseCommand
+{
+ const CSS_SRC_PATH = 'assets/css/src/';
+ const CSS_VENDOR_PATH = 'assets/vendor/';
+ const CSS_DIST_PATH = 'assets/css/';
+
+ private $appFiles = [
+ 'variables.css',
+ 'base.css',
+ 'links.css',
+ 'titles.css',
+ 'table.css',
+ 'table_drag_and_drop.css',
+ 'table_list.css',
+ 'form.css',
+ 'input_addon.css',
+ 'icon.css',
+ 'alert.css',
+ 'button.css',
+ 'tooltip.css',
+ 'dropdown.css',
+ 'accordion.css',
+ 'select_dropdown.css',
+ 'suggest_menu.css',
+ 'modal.css',
+ 'pagination.css',
+ 'header.css',
+ 'logo.css',
+ 'page_header.css',
+ 'sidebar.css',
+ 'avatar.css',
+ 'file_upload.css',
+ 'thumbnails.css',
+ 'color_picker.css',
+ 'filter_box.css',
+ 'project.css',
+ 'views.css',
+ 'dashboard.css',
+ 'board.css',
+ 'task_board.css',
+ 'task_icons.css',
+ 'task_category.css',
+ 'task_date.css',
+ 'task_tags.css',
+ 'task_summary.css',
+ 'task_form.css',
+ 'comment.css',
+ 'subtasks.css',
+ 'task_links.css',
+ 'text_editor.css',
+ 'markdown.css',
+ 'panel.css',
+ 'activity_stream.css',
+ 'user_mention.css',
+ 'slideshow.css',
+ 'list_items.css',
+ 'bulk_change.css',
+ ];
+
+ private $printFiles = [
+ 'print.css',
+ ];
+
+ private $vendorFiles = [
+ 'jquery-ui/jquery-ui.min.css',
+ 'jqueryui-timepicker-addon/jquery-ui-timepicker-addon.min.css',
+ 'select2/css/select2.min.css',
+ 'font-awesome/css/font-awesome.min.css',
+ 'c3/c3.min.css',
+ ];
+
+ protected function configure()
+ {
+ $this
+ ->setName('css')
+ ->setDescription('Minify CSS')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $this->minifyFiles(self::CSS_SRC_PATH, $this->appFiles, 'app.min.css');
+ $this->minifyFiles(self::CSS_SRC_PATH, $this->printFiles, 'print.min.css');
+ $this->minifyFiles(self::CSS_VENDOR_PATH, $this->vendorFiles, 'vendor.min.css');
+ }
+
+ private function minifyFiles($folder, array $files, $destination)
+ {
+ $minifier = new Minify\CSS();
+
+ foreach ($files as $file) {
+ $filename = $folder. $file;
+ if (! file_exists($filename)) {
+ die("$filename not found\n");
+ }
+ $minifier->add($filename);
+ }
+
+ $minifier->minify(self::CSS_DIST_PATH . $destination);
+ }
+}
diff --git a/app/ServiceProvider/CommandProvider.php b/app/ServiceProvider/CommandProvider.php
index 70968306..77c8b395 100644
--- a/app/ServiceProvider/CommandProvider.php
+++ b/app/ServiceProvider/CommandProvider.php
@@ -24,6 +24,7 @@ use Kanboard\Console\TaskTriggerCommand;
use Kanboard\Console\TransitionExportCommand;
use Kanboard\Console\VersionCommand;
use Kanboard\Console\WorkerCommand;
+use Kanboard\Console\CssCommand;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
use Symfony\Component\Console\Application;
@@ -67,6 +68,7 @@ class CommandProvider implements ServiceProviderInterface
$application->add(new DatabaseMigrationCommand($container));
$application->add(new DatabaseVersionCommand($container));
$application->add(new VersionCommand($container));
+ $application->add(new CssCommand($container));
$container['cli'] = $application;
return $container;
diff --git a/assets/css/app.min.css b/assets/css/app.min.css
index 4e15e048..ed99b4aa 100644
--- a/assets/css/app.min.css
+++ b/assets/css/app.min.css
@@ -1 +1 @@
-h1,li,ul,ol,table,tr,td,th,p,blockquote,body{margin:0;padding:0;font-size:100%}body{padding-bottom:10px;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility}small{font-size:0.8em}hr{border:0;height:0;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.3)}.page{margin-left:10px;margin-right:10px}.margin-top{margin-top:20px}.margin-bottom{margin-bottom:20px}.pull-right{text-align:right}ul.no-bullet li{list-style-type:none;margin-left:0}#app-loading-icon{position:fixed;right:3px;bottom:3px}.assign-me{vertical-align:bottom}a{color:#36c;border:none}a:focus{outline:0;color:#DF5353;text-decoration:none}a:hover{color:#333;text-decoration:none}a .fa{padding-right:3px;text-decoration:none;color:#333}h1,h2,h3{font-weight:normal;color:#333}h1{font-size:1.5em}h2{font-size:1.4em;margin-bottom:10px}h3{margin-top:10px;font-size:1.2em}table{width:100%;border-collapse:collapse;border-spacing:0;margin-bottom:20px}table.table-fixed{table-layout:fixed;white-space:nowrap}table.table-fixed th{overflow:hidden}table.table-fixed td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.table-small{font-size:0.8em}table.table-striped tr:nth-child(odd){background:#fefefe}@media (max-width: 768px){table.table-scrolling{overflow-x:auto;display:inline-block;vertical-align:top;max-width:100%;white-space:nowrap}}table th{text-align:left;padding:0.5em 3px;border:1px solid #eee;background:#fbfbfb}table th a{text-decoration:none;color:#333}table th a:focus,table th a:hover{text-decoration:underline}table td{border:1px solid #eee;padding:0.5em 3px;vertical-align:top}table td li{margin-left:20px}.column-1{width:1%}.column-2{width:2%}.column-3{width:3%}.column-4{width:4%}.column-5{width:5%}.column-6{width:6%}.column-7{width:7%}.column-8{width:8%}.column-9{width:9%}.column-10{width:10%}.column-11{width:11%}.column-12{width:12%}.column-13{width:13%}.column-14{width:14%}.column-15{width:15%}.column-16{width:16%}.column-17{width:17%}.column-18{width:18%}.column-19{width:19%}.column-20{width:20%}.column-21{width:21%}.column-22{width:22%}.column-23{width:23%}.column-24{width:24%}.column-25{width:25%}.column-26{width:26%}.column-27{width:27%}.column-28{width:28%}.column-29{width:29%}.column-30{width:30%}.column-31{width:31%}.column-32{width:32%}.column-33{width:33%}.column-34{width:34%}.column-35{width:35%}.column-36{width:36%}.column-37{width:37%}.column-38{width:38%}.column-39{width:39%}.column-40{width:40%}.column-41{width:41%}.column-42{width:42%}.column-43{width:43%}.column-44{width:44%}.column-45{width:45%}.column-46{width:46%}.column-47{width:47%}.column-48{width:48%}.column-49{width:49%}.column-50{width:50%}.column-51{width:51%}.column-52{width:52%}.column-53{width:53%}.column-54{width:54%}.column-55{width:55%}.column-56{width:56%}.column-57{width:57%}.column-58{width:58%}.column-59{width:59%}.column-60{width:60%}.column-61{width:61%}.column-62{width:62%}.column-63{width:63%}.column-64{width:64%}.column-65{width:65%}.column-66{width:66%}.column-67{width:67%}.column-68{width:68%}.column-69{width:69%}.column-70{width:70%}.column-71{width:71%}.column-72{width:72%}.column-73{width:73%}.column-74{width:74%}.column-75{width:75%}.column-76{width:76%}.column-77{width:77%}.column-78{width:78%}.column-79{width:79%}.column-80{width:80%}.column-81{width:81%}.column-82{width:82%}.column-83{width:83%}.column-84{width:84%}.column-85{width:85%}.column-86{width:86%}.column-87{width:87%}.column-88{width:88%}.column-89{width:89%}.column-90{width:90%}.column-91{width:91%}.column-92{width:92%}.column-93{width:93%}.column-94{width:94%}.column-95{width:95%}.column-96{width:96%}.column-97{width:97%}.column-98{width:98%}.column-99{width:99%}.column-100{width:100%}.draggable-row-handle{cursor:move;color:#dedede}.draggable-row-handle:hover{color:#333}tr.draggable-item-selected{background:#fff;border:2px solid #666;box-shadow:4px 2px 10px -4px rgba(0,0,0,0.55)}tr.draggable-item-selected td{border-top:none;border-bottom:none}tr.draggable-item-selected td:first-child{border-left:none}tr.draggable-item-selected td:last-child{border-right:none}.table-stripped tr.draggable-item-hover,.table-stripped tr.draggable-item-hover{background:#FEFFF2}.table-list{font-size:0.85em;margin-bottom:20px}.table-list-header{background:#fbfbfb;border:1px solid #e5e5e5;border-radius:5px 5px 0 0;line-height:28px;padding-left:3px;padding-right:3px}.table-list-header a{color:#333;font-weight:500;text-decoration:none;margin-right:10px}.table-list-header a:hover,.table-list-header a:focus{color:#767676}.table-list-header .table-list-header-count{color:#767676;display:inline-block;float:left}.table-list-header .table-list-header-menu{text-align:right}.table-list-row{padding-left:3px;padding-right:3px;border-bottom:1px solid #e5e5e5;border-right:1px solid #e5e5e5}.table-list-row.table-border-left{border-left:1px solid #e5e5e5}.table-list-row:nth-child(odd){background:#fefefe}.table-list-row:last-child{border-radius:0 0 5px 5px}.table-list-row:hover{background:#fff8dc;border-bottom:1px solid #ffeb8e;border-right:1px solid #ffeb8e}.table-list-row .table-list-title{font-weight:500;line-height:23px}.table-list-row .table-list-title.status-closed{text-decoration:line-through;margin-right:10px}.table-list-row .table-list-title.status-closed a{font-style:italic}.table-list-row .table-list-title a{color:#333;text-decoration:none}.table-list-row .table-list-title a:hover,.table-list-row .table-list-title a:focus{text-decoration:underline}.table-list-row .table-list-details{color:#999;font-weight:300;line-height:20px}.table-list-row .table-list-details span{margin-left:5px}.table-list-row .table-list-details span:first-child{margin-left:0}.table-list-row .table-list-details li{display:inline;list-style-type:none}.table-list-row .table-list-details li:after{content:', '}.table-list-row .table-list-details li:last-child:after{content:''}.table-list-row .table-list-details strong{font-weight:400;color:#555}.table-list-row .table-list-details-with-icons{float:left}@media (max-width: 768px){.table-list-row .table-list-details-with-icons{float:none}}.table-list-row .table-list-icons{font-size:0.8em;text-align:right;line-height:30px}@media (max-width: 768px){.table-list-row .table-list-icons{text-align:left;line-height:20px}}.table-list-row .table-list-icons span{margin-left:5px}.table-list-row .table-list-icons a{text-decoration:none}.table-list-row .table-list-icons a:hover{color:#333}.table-list-row .table-list-icons a:hover i{color:#333}.table-list-category{font-size:0.9em;font-weight:500;color:#000;padding:1px 2px 1px 2px;border-radius:3px;background:#fcfcfc;border:1px solid #ccc}.table-list-category a{text-decoration:none;color:#000}.table-list-category a:hover{color:#36c}fieldset{border:1px solid #ddd;margin-top:10px}legend{font-weight:500;font-size:1.2em}label{cursor:pointer;display:block;margin-top:10px;font-weight:400}input[type="number"],input[type="date"],input[type="email"],input[type="password"],input[type="text"]:not(.input-addon-field){color:#999;border:1px solid #ccc;width:300px;max-width:95%;font-size:1em;height:25px;padding-bottom:0;padding-left:4px;font-family:sans-serif;-webkit-appearance:none;-moz-appearance:none}input[type="number"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="text"]:not(.input-addon-field)::-webkit-input-placeholder{color:#dedede}input[type="number"]::-moz-placeholder,input[type="date"]::-moz-placeholder,input[type="email"]::-moz-placeholder,input[type="password"]::-moz-placeholder,input[type="text"]:not(.input-addon-field)::-moz-placeholder{color:#dedede}input[type="number"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="text"]:not(.input-addon-field):-ms-input-placeholder{color:#dedede}input[type="number"]:focus,input[type="date"]:focus,input[type="email"]:focus,input[type="password"]:focus,input[type="text"]:focus{color:#000;border-color:rgba(82,168,236,0.8);outline:0;box-shadow:0 0 8px rgba(82,168,236,0.6)}input[type="number"]{width:70px}input[type="text"]:not(.input-addon-field).form-numeric{width:70px}input[type="text"]:not(.input-addon-field).form-datetime,input[type="text"]:not(.input-addon-field).form-date{width:150px}input[type="text"]:not(.input-addon-field).form-input-large{width:400px}input[type="text"]:not(.input-addon-field).form-input-small{width:150px}textarea:focus{color:#000;border-color:rgba(82,168,236,0.8);outline:0;box-shadow:0 0 8px rgba(82,168,236,0.6)}textarea{padding:4px;border:1px solid #ccc;width:400px;max-width:99%;height:200px;font-family:sans-serif;font-size:1em}textarea::-webkit-input-placeholder{color:#dedede}textarea::-moz-placeholder{color:#dedede}textarea:-ms-input-placeholder{color:#dedede}select{font-size:1.0em;max-width:95%}select:focus{outline:0}select[multiple]{width:300px}.tag-autocomplete{width:400px}span.select2-container{margin-top:2px}.form-actions{padding-top:20px;clear:both}.form-required{color:red;padding-left:5px;font-weight:bold}@media (max-width: 480px){.form-required{display:none}}input[type="text"].form-max-width{width:100%}input.form-error,textarea.form-error{border:2px solid #b94a48}input.form-error:focus,textarea.form-error:focus{box-shadow:none;border:2px solid #b94a48}.form-errors{color:#b94a48;list-style-type:none}ul.form-errors li{margin-left:0}.form-help{font-size:0.8em;color:brown;margin-bottom:15px}.form-inline{padding:0;margin:0;border:none}.form-inline label{display:inline;padding-right:3px}.form-inline input,.form-inline select{margin:0 15px 0 0}.form-inline .form-required{display:none}.form-inline .form-actions{display:inline-block}.form-inline .js-submit-buttons-rendered{display:inline-block}.form-inline-group{display:inline}.form-columns{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:flex-start;justify-content:flex-start}.form-columns .form-column{margin-right:25px;flex-grow:1}.form-columns fieldset{margin-top:0}.form-login{max-width:350px;margin:5% auto 0}@media (max-width: 480px){.form-login{margin-left:5px}}.form-login li{margin-left:25px;line-height:25px}.form-login h2{margin-bottom:30px;font-weight:bold}.reset-password{margin-top:20px;margin-bottom:20px}.reset-password a{color:#999}.input-addon{display:flex}.input-addon-field{flex:1;font-size:1em;color:#999;margin:0;-webkit-appearance:none;-moz-appearance:none}.input-addon-field:first-child{border-radius:5px 0 0 5px}.input-addon-field:last-child{border-radius:0 5px 5px 0}.input-addon-item{background-color:rgba(147,128,108,0.1);color:#666;font:inherit;font-weight:normal}.input-addon-item:first-child{border-radius:5px 0 0 5px}.input-addon-item:last-child{border-radius:0 5px 5px 0}@media (max-width: 480px){.input-addon-item .dropdown .fa-caret-down{display:none}}.input-addon-field,.input-addon-item{border:1px solid rgba(147,128,108,0.25);padding:4px 0.75em}.input-addon-field:not(:first-child),.input-addon-item:not(:first-child){border-left:0}.icon-success{color:#468847}.icon-error{color:#b94a48}.icon-fade-out{opacity:1;animation:icon-fadeout 5s linear forwards}@keyframes icon-fadeout{0%{opacity:1}100%{opacity:0}}.alert{padding:8px 35px 8px 14px;margin-top:5px;margin-bottom:5px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-normal{color:#333;background-color:#f0f0f0;border-color:#ddd}.alert ul{margin-top:10px;margin-bottom:10px}.alert li{margin-left:25px}.alert-fade-out{text-align:center;position:fixed;bottom:0;left:20%;width:60%;padding-top:5px;padding-bottom:5px;margin-bottom:0;border-width:1px 0 0;border-radius:4px 4px 0 0;z-index:9999;opacity:1;animation:fadeout 5s linear forwards}@keyframes fadeout{0%{opacity:1}100%{opacity:0}}a.btn{text-decoration:none}.btn{-webkit-appearance:none;-moz-appearance:none;font-size:1.2em;font-weight:normal;cursor:pointer;display:inline-block;border-radius:2px;padding:3px 10px;margin:0;border:1px solid #ddd;background:#f5f5f5;color:#333}.btn:hover,.btn:focus{border-color:#bbb;background:#fafafa;color:#000}.btn-red{border-color:#b0281a;background:#d14836;color:#fff}.btn-red:hover,.btn-red:focus{border-color:#b0281a;background:#c53727;color:#fff}.btn-blue{border-color:#3079ed;background:#4d90fe;color:#fff}.btn-blue:hover,.btn-blue:focus{border-color:#3079ed;background:#357ae8;color:#fff}.btn:disabled{color:#ccc;border-color:#ccc;background:#f7f7f7}.buttons-header{font-size:0.8em;margin-top:5px;margin-bottom:15px}.tooltip i.fa{cursor:pointer}.tooltip .fa-info-circle{color:#999}#tooltip-container{padding:5px;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 6px 12px #aaa;position:absolute;min-width:350px}#tooltip-container .markdown p{margin-bottom:0}#tooltip-container .tooltip-large{width:600px}h2 .dropdown ul{display:none}.dropdown{display:inline;position:relative}.dropdown ul{display:none}.dropdown-smaller{font-size:0.85em}ul.dropdown-submenu-open{display:block;position:absolute;z-index:1000;min-width:285px;list-style:none;margin:3px 0 0 1px;padding:6px 0;background-color:#fff;border:1px solid #b2b2b2;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.15)}.dropdown-submenu-open li{display:block;margin:0;padding:8px 10px;font-size:0.9em;border-bottom:1px solid #f8f8f8;cursor:pointer}.dropdown-submenu-open li.no-hover{cursor:default}.dropdown-submenu-open li:last-child{border:none}.dropdown-submenu-open li:not(.no-hover):hover{background:#4078C0;color:#fff}.dropdown-submenu-open li:hover a{color:#fff}.dropdown-submenu-open a{text-decoration:none;color:#333}.dropdown-submenu-open a:focus{text-decoration:underline}.dropdown-menu-link-text,.dropdown-menu-link-icon{color:#333;text-decoration:none}.dropdown-menu-link-text:hover{text-decoration:underline}td a.dropdown-menu strong{color:#333}td a.dropdown-menu strong i{color:#333}td a.dropdown-menu i{color:#dedede}td a.dropdown-menu:hover strong{color:#555}td a.dropdown-menu:hover strong i{color:#555}td a.dropdown-menu:hover i{color:#333}.accordion-title{font-size:1.2em;cursor:pointer;margin-top:10px}.accordion-content{margin-top:15px;margin-bottom:25px}#select-dropdown-menu{position:absolute;display:block;z-index:1000;min-width:160px;padding:5px 0;background:#fff;list-style:none;border:1px solid #ccc;border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,0.175);overflow:scroll}.select-dropdown-menu-item{white-space:nowrap;overflow:hidden;padding:3px 10px;color:#555;cursor:pointer;border-bottom:1px solid #f8f8f8;line-height:1.5em;font-weight:400}.select-dropdown-menu-item.active{color:#fff;background:#428bca}.select-dropdown-menu-item:last-child{border:none}.select-dropdown-input-container{position:relative;border:1px solid #ccc;border-radius:5px;background-color:#fff;width:300px}.select-dropdown-input-container input.select-dropdown-input{margin:0 0 0 5px;border:none;height:23px;width:270px}.select-dropdown-input-container input.select-dropdown-input:focus{border:none;box-shadow:none}.select-dropdown-input-container .select-dropdown-chevron{color:#555;position:absolute;top:4px;right:5px;cursor:pointer}.select-dropdown-input-container .select-loading-icon{color:#555;position:absolute;top:4px;right:5px}#suggest-menu{position:absolute;display:block;z-index:1000;min-width:160px;padding:5px 0;background:#fff;list-style:none;border:1px solid #ccc;border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,0.175)}.suggest-menu-item{white-space:nowrap;padding:3px 10px;color:#333;font-weight:bold;cursor:pointer}.suggest-menu-item.active{color:#fff;background:#428bca}.suggest-menu-item.active small{color:#fff}.suggest-menu-item small{color:#999;font-weight:normal}#modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);overflow:auto;z-index:100}#modal-box{position:fixed;max-height:calc(100% - 30px);top:2%;left:50%;transform:translateX(-50%);background:#fff;overflow:auto;border-radius:5px}#modal-content{padding:0 5px 5px}#modal-header{text-align:right;padding-right:5px}#modal-close-button{color:#333}#modal-close-button:hover{color:#b94a48}.pagination{text-align:center;font-size:0.9em}.pagination-showing{margin-right:5px;padding-right:5px;border-right:1px solid #999}.pagination-next{margin-left:5px}.pagination-previous{margin-right:5px}header{display:flex;flex-wrap:wrap;padding:5px 10px;margin-bottom:5px;border-bottom:1px solid #dedede;background-color:#fbfbfb}header .title-container{flex:1;min-width:300px}@media (max-width: 480px){header .title-container{order:3}}header .board-selector-container{min-width:320px;display:flex;align-items:center}@media (max-width: 480px){header .board-selector-container{order:2;min-width:300px}header .board-selector-container input[type=text]{max-width:280px}}header .menus-container{min-width:120px;display:flex;align-items:center;justify-content:flex-end}@media (max-width: 480px){header .menus-container{order:1;margin-bottom:5px;margin-left:auto}}header h1{font-size:1.5em}header h1 .tooltip{opacity:0.3;font-size:0.7em}a i.web-notification-icon{color:#36c}a i.web-notification-icon:focus,a i.web-notification-icon:hover{color:#000}.logo a{opacity:0.5;color:#d40000;text-decoration:none}.logo span{color:#333}.logo a:hover{opacity:0.8;color:#333}.logo a:focus span,.logo a:hover span{color:#d40000}.page-header{margin-bottom:20px}.page-header .dropdown{padding-right:10px}.page-header h2{margin:0;padding:0;font-weight:bold;border-bottom:1px dotted #ccc}.page-header h2 a{color:#333;text-decoration:none}.page-header h2 a:focus,.page-header h2 a:hover{color:#999}.page-header ul{text-align:left;margin-top:5px;display:inline-block}.page-header li{display:inline;padding-right:15px}@media (max-width: 480px){.page-header li{display:block;line-height:1.5em}}.page-header li.active a{color:#333;text-decoration:none;font-weight:bold}.page-header li.active a:hover,.page-header li.active a:focus{text-decoration:underline}.menu-inline{margin-bottom:5px}.menu-inline li{display:inline;padding-right:15px}.menu-inline li .active a{font-weight:bold;color:#000;text-decoration:none}.sidebar-container{height:100%;display:flex;flex-flow:row}@media (max-width: 768px){.sidebar-container{flex-flow:wrap}}.sidebar-content{padding-left:10px;flex:1 100%;max-width:85%;overflow-wrap:break-word}@media (max-width: 768px){.sidebar-content{padding-left:0;order:1;max-width:100%}}@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1){.sidebar-content{max-width:75%}}.sidebar{max-width:25%;min-width:230px}@media (max-width: 768px){.sidebar{flex:1 auto;order:2}}.sidebar h2{margin-top:0}.sidebar>ul a{text-decoration:none;color:#999;font-weight:300}.sidebar>ul a:hover{color:#333}.sidebar>ul li{list-style-type:none;line-height:35px;border-bottom:1px dotted #efefef;padding-left:13px}.sidebar>ul li:hover{border-left:5px solid #555;padding-left:8px}.sidebar>ul li.active{border-left:5px solid #333;padding-left:8px}.sidebar>ul li.active a{color:#333;font-weight:bold}.sidebar-icons>ul li{padding-left:0}.sidebar-icons>ul li:hover,.sidebar-icons>ul li.active{padding-left:0;border-left:none}.sidebar>ul li.active a:focus,.sidebar>ul li.active a:hover{color:#555}.sidebar>ul li:last-child{margin-bottom:15px}.avatar img{vertical-align:bottom}.avatar-left{float:left;margin-right:10px}.avatar-inline{display:inline-block;margin-right:3px}.avatar-48 img,.avatar-48 div{border-radius:30px}.avatar-48 .avatar-letter{line-height:48px;width:48px;font-size:25px}.avatar-20 img,.avatar-20 div{border-radius:10px}.avatar-20 .avatar-letter{line-height:20px;width:20px;font-size:11px}.avatar-letter{color:#fff;text-align:center}#file-dropzone,#screenshot-zone{position:relative;border:2px dashed #ccc;width:99%;height:250px;overflow:auto}#file-dropzone-inner,#screenshot-inner{position:absolute;left:0;bottom:48%;width:100%;text-align:center;color:#aaa}#screenshot-zone.screenshot-pasted{border:2px solid #333}#file-list{margin:20px}#file-list li{list-style-type:none;padding-top:8px;padding-bottom:8px;border-bottom:1px dotted #ddd;width:95%}#file-list li .file-error{font-weight:bold;color:#b94a48}.file-thumbnails{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:flex-start;justify-content:flex-start}.file-thumbnail{width:250px;border:1px solid #efefef;border-radius:5px;margin-bottom:20px;box-shadow:4px 2px 10px -6px rgba(0,0,0,0.55);margin-right:15px}.file-thumbnail img{cursor:pointer;border-top-left-radius:5px;border-top-right-radius:5px}.file-thumbnail img:hover{opacity:0.5}.file-thumbnail-content{padding-left:8px;padding-right:8px}.file-thumbnail-title{font-weight:700;font-size:0.9em;color:#555;overflow:hidden;text-overflow:ellipsis}.file-thumbnail-description{font-size:0.8em;color:#999;margin-top:8px;margin-bottom:5px}.file-viewer{position:relative}.file-viewer img{max-width:95%;max-height:85%;margin-top:10px}.color-picker{width:180px}.color-picker-option{height:25px}.color-picker-square{display:inline-block;width:18px;height:18px;margin-right:5px;border:1px solid #000}.color-picker-label{display:inline-block;vertical-align:bottom;padding-bottom:3px}.filter-box{max-width:1024px}.action-menu{color:#333;text-decoration:none}.action-menu:hover,.action-menu:focus{text-decoration:underline}.js-project-creation-options{max-width:500px;border-left:3px dotted #efefef;margin-top:20px;padding-left:15px;padding-bottom:5px;padding-top:5px}.project-overview-columns{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin-bottom:20px;font-size:1.4em}@media (max-width: 480px){.project-overview-columns{display:block}}.project-overview-column{text-align:center;margin-right:3%;margin-top:5px;padding:3px 15px 3px 15px;border:1px dashed #ddd}@media (max-width: 480px){.project-overview-column{text-align:left}}.project-overview-column small{color:#999}.project-overview-column strong{color:#555;display:block}@media (max-width: 480px){.project-overview-column strong{display:inline}}.project-header{margin-bottom:8px}.project-header .dropdown-component{margin-top:4px;margin-right:5px;float:left}@media (max-width: 768px){.project-header .dropdown-component{float:none}}.project-header .views-switcher-component{margin-top:4px;float:left}@media (max-width: 768px){.project-header .views-switcher-component{float:none;margin-bottom:10px}}.project-header .filter-box-component form{margin:0}.views{margin-right:10px;margin-top:1px;font-size:0.9em}@media (max-width: 560px){.views{width:100%}}@media (max-width: 768px){.views{margin-top:10px;font-size:1em}}@media (max-width: 480px){.views{margin-top:5px}}.views li{white-space:nowrap;background:#fafafa;border:1px solid #ddd;border-right:none;padding:4px 8px;display:inline}@media (max-width: 560px){.views li{display:block;margin-top:5px;border-radius:5px;border:1px solid #ddd}}.views li.active a{font-weight:bold;color:#000;text-decoration:none}.views li:first-child{border-top-left-radius:5px;border-bottom-left-radius:5px}.views li:last-child{border-right:1px solid #ddd;border-top-right-radius:5px;border-bottom-right-radius:5px}.views a{color:#555;text-decoration:none}.views a:hover{color:#333;text-decoration:underline}.dashboard-project-stats small{margin-right:10px;color:#999}.dashboard-table-link{font-weight:bold;color:#000;text-decoration:none}.dashboard-table-link:focus,.dashboard-table-link:hover{color:#999}.public-board{margin-top:5px}.public-task{max-width:800px;margin:5px auto 0}#board-container{overflow-x:auto}#board{table-layout:fixed;margin-bottom:0}#board th.board-column-header{width:240px}#board td{vertical-align:top}.board-container-compact{overflow-x:initial}@media all and (-ms-high-contrast: active), (-ms-high-contrast: none){.board-container-compact #board{table-layout:auto}}#board th.board-column-header.board-column-compact{width:initial}.board-column-collapsed{display:none}td.board-column-task-collapsed{font-weight:bold;background-color:#fbfbfb}#board th.board-column-header-collapsed{width:28px;min-width:28px;text-align:center;overflow:hidden}.board-rotation-wrapper{position:relative;padding:8px 4px;min-height:150px;overflow:hidden}.board-rotation{white-space:nowrap;-webkit-backface-visibility:hidden;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.board-column-title .dropdown-menu{text-decoration:none}.board-add-icon{float:left;padding:0 5px}.board-add-icon i{text-decoration:none;color:#36c;font-size:1.4em}.board-add-icon i:focus,.board-add-icon i:hover{text-decoration:none;color:red}.board-column-header-task-count{color:#999;font-weight:normal}a.board-swimlane-toggle{text-decoration:none}a.board-swimlane-toggle:hover,a.board-swimlane-toggle:focus{color:#000;text-decoration:none;border:none}.board-task-list{min-height:60px}.board-task-list .task-board:last-child{margin-bottom:0}.board-task-list-limit{background-color:#DF5353}.draggable-item{cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none}.draggable-placeholder{border:2px dashed #000;background:#fafafa;height:70px;margin-bottom:10px}div.draggable-item-selected{border:1px solid #000}.task-board-sort-handle{float:left;padding-right:5px}.task-board{position:relative;margin-bottom:4px;border:1px solid #000;padding:2px;word-wrap:break-word;font-size:0.9em;border-radius:6px}div.task-board-recent{border-width:2px}div.task-board-status-closed{user-select:none;border:1px dotted #555}.task-board a{color:#000;text-decoration:none}.task-board-collapsed{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.task-board-title{margin-top:5px;margin-bottom:8px}.task-board-title a:hover{text-decoration:underline}.task-board-saving-state{opacity:0.3}.task-board-saving-icon{position:absolute;margin:auto;width:100%;text-align:center;color:#000}.task-board-avatars{text-align:right;float:right}.task-board-change-assignee{cursor:pointer}.task-board-change-assignee:hover{opacity:0.6}.task-list-avatars{display:inline-block;float:left}@media (max-width: 768px){.task-list-avatars{float:none;display:block}}.task-list-avatars .task-avatar-assignee{font-weight:300;color:#999}.task-list-avatars:hover .task-avatar-assignee{font-weight:400;color:#000}.task-board-icons,.task-list-icons{font-size:0.8em;text-align:right}.task-board-icons a,.task-board-icons span.tooltip,.task-list-icons a,.task-list-icons span.tooltip{text-decoration:none}.task-board-icons a:hover,.task-board-icons span.tooltip:hover,.task-list-icons a:hover,.task-list-icons span.tooltip:hover{color:#333}.task-board-icons a:hover i,.task-board-icons span.tooltip:hover i,.task-list-icons a:hover i,.task-list-icons span.tooltip:hover i{color:#333}.task-board-icons .task-score,.task-list-icons .task-score{font-weight:bold}.task-board-icons .flag-milestone,.task-list-icons .flag-milestone{color:green}.task-board-icons{margin-top:7px}.task-board-icons a{opacity:0.5}.task-board-icons span{opacity:0.5;margin-left:4px}.task-board-icons a:hover,.task-board-icons span.tooltip:hover{opacity:1.0;font-weight:bold}.task-board-icons .task-board-icons-row{line-height:22px}.task-list-icons{line-height:22px}.task-list-icons a,.task-list-icons span,.task-list-icons i{color:#999;opacity:1.0}.task-list-icons span{margin-left:5px}@media (max-width: 768px){.task-list-icons{text-align:left}}.task-icon-age{display:inline-block}span.task-icon-age-total{border:1px solid #e5e5e5;padding:1px 3px 1px 3px;border-top-left-radius:3px;border-bottom-left-radius:3px}span.task-icon-age-column{border:1px solid #e5e5e5;border-left:none;margin-left:-5px;padding:1px 3px 1px 3px;border-top-right-radius:3px;border-bottom-right-radius:3px}.task-board span.task-icon-age-total,.task-board span.task-icon-age-column{border-color:#666}.task-board-category-container{text-align:right;margin-top:8px;margin-bottom:8px}.task-board-category{border:1px solid #555;font-size:0.9em;font-weight:500;color:#000;padding:1px 3px 1px 2px;border-radius:3px}.task-board-category a:hover{text-decoration:underline}.task-date{font-weight:500;color:#000}span.task-date-today{opacity:1.0;color:#36c}span.task-date-overdue{opacity:1.0;color:#b94a48}.task-tags li{display:inline-block;margin:3px 3px 0 0;padding:1px 3px 1px 3px;color:#333;border:1px solid #333;border-radius:4px}.task-summary-container .task-tags{margin-top:10px}#task-summary{margin-bottom:15px}#task-summary h2{color:#555;font-size:1.6em;margin-top:0;padding-top:0}.task-summary-container{border:2px solid #000;border-radius:8px;padding:10px}.task-summary-columns{display:flex;flex-flow:row;justify-content:space-between}@media (max-width: 768px){.task-summary-columns{flex-flow:column}}.task-summary-column{color:#333}.task-summary-column span{color:#555}.task-summary-column li{line-height:23px}#external-task-view{padding:10px;margin-top:10px;margin-bottom:10px;border:1px dotted #ccc}.task-form-container{box-sizing:border-box;display:flex;flex-wrap:wrap}.task-form-container>*{box-sizing:border-box}.task-form-container>*{width:1%}.task-form-main-column{width:60%}@media (max-width: 1000px){.task-form-main-column{width:100%}}.task-form-main-column input[type="text"]{width:700px;max-width:99%}.task-form-secondary-column{max-width:250px;min-width:200px;max-height:600px;padding-left:10px;overflow:auto;width:20%}@media (max-width: 1000px){.task-form-secondary-column{width:100%;max-width:99%;max-height:none}}@media (max-width: 768px){.task-form-secondary-column{padding-left:0}}.task-form-secondary-column label:first-child{margin-top:0}@media (max-width: 1000px){.task-form-secondary-column label:first-child{margin-top:10px}}.task-form-bottom{width:100%}.task-form-bottom label{display:inline-block}.comment-sorting{text-align:right}.comment-sorting a{color:#555;font-weight:normal;text-decoration:none}.comment-sorting a:hover{color:#999}.comment{padding:5px;margin-bottom:15px}.comment-title{border-bottom:1px dotted #eee;margin-left:55px}.comment-date{color:#999;font-weight:200}.comment-actions{text-align:right}.comment-content{margin-left:55px}.comments .text-editor textarea{height:90px}.comments .text-editor .text-editor-preview-area{height:90px}.comments .comment-highlighted{background-color:#fff8dc;border:2px solid #ffeb8e}.comments .comment-highlighted:hover{background-color:#fff8dc}.comments .comment:hover{background:#fff8dc}.comments .comment:nth-child(even):not(.comment-highlighted){background:#fbfbfb}.comments .comment:nth-child(even):not(.comment-highlighted):hover{background:#fff8dc}.subtask-cell{padding:4px 10px;border-top:1px dotted #dedede;border-left:1px dotted #dedede;display:table-cell;vertical-align:middle}.subtask-cell a{color:#333;text-decoration:none}.subtask-cell a:hover,.subtask-cell a:focus{color:#36c}.subtask-cell:first-child{border-left:none}@media (max-width: 768px){.subtask-cell{width:90%;display:block;border-left:none}}.task-list-subtasks{display:table;width:100%}@media (max-width: 768px){.task-list-subtasks{display:block}}.task-list-subtask{display:table-row}@media (max-width: 768px){.task-list-subtask{display:block}}@media (max-width: 768px){.subtask-assignee,.subtask-time-tracking-cell{display:none}}.task-links-table td{vertical-align:middle}.task-links-task-count{color:#999;font-weight:normal}.task-link-closed{text-decoration:line-through}.text-editor{margin-top:10px}.text-editor a{font-size:1em;color:#999;text-decoration:none;margin-right:10px}.text-editor a:hover{color:#36c}.text-editor .text-editor-preview-area{border:1px solid #dedede;width:700px;max-width:99%;height:250px;overflow:auto;padding:2px}.text-editor textarea{width:700px;max-width:98%;height:250px}.markdown{line-height:1.4em}.markdown h1{margin-top:5px;margin-bottom:10px;font-weight:bold}.markdown h2{font-weight:bold}.markdown p{margin-bottom:10px}.markdown ol,.markdown ul{margin-left:25px;margin-top:10px;margin-bottom:10px}.markdown pre{background:#fbfbfb;padding:10px;border-radius:5px;border:1px solid #ddd;overflow:auto;overflow-wrap:initial;color:#555}.markdown blockquote{font-style:italic;border-left:3px solid #ddd;padding-left:10px;margin-bottom:10px;margin-left:20px}.markdown img{display:block;max-width:80%;margin-top:10px}.documentation{margin:0 auto;padding:20px;max-width:850px;background:#fefefe;border:1px solid #ccc;border-radius:5px;color:#555}.documentation img{border:1px solid #333}.documentation h1{text-decoration:none;margin-bottom:30px}.documentation h2{text-decoration:none;border-bottom:1px solid #ccc;margin-bottom:25px}.documentation li{line-height:30px}.panel{border-radius:4px;padding:8px 35px 8px 10px;margin-top:10px;margin-bottom:15px;border:1px solid #ddd;color:#333;background-color:#fcfcfc;overflow:auto}.panel li{list-style-type:square;margin-left:20px;line-height:1.35em}.activity-event{margin-bottom:15px;padding:10px}.activity-event:nth-child(even){background:#fafafa}.activity-event:hover{background:#fff8dc}.activity-date{margin-left:10px;font-weight:normal;color:#999}.activity-content{margin-left:55px}.activity-title{font-weight:bold;color:#000;border-bottom:1px dotted #efefef}.activity-description{color:#555;margin-top:10px}@media (max-width: 480px){.activity-description{overflow:auto}}.activity-description li{list-style-type:circle}.activity-description ul{margin-top:10px;margin-left:20px}.user-mention-link{font-weight:bold;color:#000;text-decoration:none}.user-mention-link:hover{color:#555}.image-slideshow-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.95);overflow:auto;z-index:100}.image-slideshow-overlay img{display:block;margin:auto}.image-slideshow-overlay figcaption{color:#fff;opacity:0.7;position:absolute;bottom:5px;right:15px}.slideshow-icon{color:#fff;position:absolute;font-size:2.5em;opacity:0.6}.slideshow-icon:hover{opacity:0.9;cursor:pointer}.slideshow-previous-icon{left:10px;top:45%}.slideshow-next-icon{right:10px;top:45%}.slideshow-close-icon{right:10px;top:10px;font-size:1.4em}.slideshow-download-icon{left:10px;bottom:10px;font-size:1.3em}.list-item-links,.list-item-actions{display:inline-block;float:left;margin-left:10px}.list-item-links a{margin:0}.list-item-action-hidden{display:none}.bulk-change-checkbox{float:left}.bulk-change-inputs{float:left;padding-left:10px}.bulk-change-inputs label{margin-top:0;margin-bottom:3px}
+:root{--color-primary:#333;--color-light:#999;--color-lighter:#dedede;--color-dark:#000;--color-medium:#555;--color-error:#b94a48;--link-color-primary:#36C;--link-color-focus:#DF5353;--link-color-hover:#333;--alert-color-default:#c09853;--alert-color-success:#468847;--alert-color-error:#b94a48;--alert-color-info:#3a87ad;--alert-color-normal:#333;--alert-background-color-default:#fcf8e3;--alert-background-color-success:#dff0d8;--alert-background-color-error:#f2dede;--alert-background-color-info:#d9edf7;--alert-background-color-normal:#f0f0f0;--alert-border-color-default:#fbeed5;--alert-border-color-success:#d6e9c6;--alert-border-color-error:#eed3d7;--alert-border-color-info:#bce8f1;--alert-border-color-normal:#ddd;--button-default-color:#333;--button-default-background-color:#f5f5f5;--button-default-border-color:#ddd;--button-default-color-focus:#000;--button-default-background-color-focus:#fafafa;--button-default-border-color-focus:#bbb;--button-primary-color:#fff;--button-primary-background-color:#4d90fe;--button-primary-border-color:#3079ed;--button-primary-color-focus:#fff;--button-primary-background-color-focus:#357ae8;--button-primary-border-color-focus:#3079ed;--button-danger-color:#fff;--button-danger-background-color:#d14836;--button-danger-border-color:#b0281a;--button-danger-color-focus:#fff;--button-danger-background-color-focus:#c53727;--button-danger-border-color-focus:#b0281a;--button-disabled-color:#ccc;--button-disabled-background-color:#f7f7f7;--button-disabled-border-color:#ccc;--avatar-color-letter:#fff;--activity-title-color:#000;--activity-title-border-color:#efefef;--activity-event-background-color:#fafafa;--activity-event-hover-color:#fff8dc;--user-mention-color:#000;--board-task-limit-color:#DF5353}h1,li,ul,ol,table,tr,td,th,p,blockquote,body{margin:0;padding:0}body{font-size:100%;padding-bottom:10px;color:var(--color-primary);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility}small{font-size:.8em}hr{border:0;height:0;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.3)}.page{margin-left:10px;margin-right:10px}.margin-top{margin-top:20px}.margin-bottom{margin-bottom:20px}.pull-right{text-align:right}ul.no-bullet li{list-style-type:none;margin-left:0}#app-loading-icon{position:fixed;right:3px;bottom:3px}.assign-me{vertical-align:bottom}a{color:var(--link-color-primary);border:none}a:focus{color:var(--link-color-focus);outline:0;text-decoration:none}a:hover{color:var(--link-color-hover);text-decoration:none}a .fa{color:var(--color-primary);padding-right:3px;text-decoration:none}h1,h2,h3{font-weight:400;color:var(--color-primary)}h1{font-size:1.5em}h2{font-size:1.4em;margin-bottom:10px}h3{margin-top:10px;font-size:1.2em}table{width:100%;border-collapse:collapse;border-spacing:0;margin-bottom:20px}table.table-fixed{table-layout:fixed;white-space:nowrap}table.table-fixed th{overflow:hidden}table.table-fixed td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.table-small{font-size:.8em}table.table-striped tr:nth-child(odd){background:#fefefe}@media (max-width:768px){table.table-scrolling{overflow-x:auto;display:inline-block;vertical-align:top;max-width:100%;white-space:nowrap}}table th{text-align:left;padding:.5em 3px;border:1px solid #eee;background:#fbfbfb}table th a{text-decoration:none;color:var(--color-primary)}table th a:focus,table th a:hover{text-decoration:underline}table td{border:1px solid #eee;padding:.5em 3px;vertical-align:top}table td li{margin-left:20px}.column-1{width:1%}.column-2{width:2%}.column-3{width:3%}.column-4{width:4%}.column-5{width:5%}.column-6{width:6%}.column-7{width:7%}.column-8{width:8%}.column-9{width:9%}.column-10{width:10%}.column-11{width:11%}.column-12{width:12%}.column-13{width:13%}.column-14{width:14%}.column-15{width:15%}.column-16{width:16%}.column-17{width:17%}.column-18{width:18%}.column-19{width:19%}.column-20{width:20%}.column-21{width:21%}.column-22{width:22%}.column-23{width:23%}.column-24{width:24%}.column-25{width:25%}.column-26{width:26%}.column-27{width:27%}.column-28{width:28%}.column-29{width:29%}.column-30{width:30%}.column-31{width:31%}.column-32{width:32%}.column-33{width:33%}.column-34{width:34%}.column-35{width:35%}.column-36{width:36%}.column-37{width:37%}.column-38{width:38%}.column-39{width:39%}.column-40{width:40%}.column-41{width:41%}.column-42{width:42%}.column-43{width:43%}.column-44{width:44%}.column-45{width:45%}.column-46{width:46%}.column-47{width:47%}.column-48{width:48%}.column-49{width:49%}.column-50{width:50%}.column-51{width:51%}.column-52{width:52%}.column-53{width:53%}.column-54{width:54%}.column-55{width:55%}.column-56{width:56%}.column-57{width:57%}.column-58{width:58%}.column-59{width:59%}.column-60{width:60%}.column-61{width:61%}.column-62{width:62%}.column-63{width:63%}.column-64{width:64%}.column-65{width:65%}.column-66{width:66%}.column-67{width:67%}.column-68{width:68%}.column-69{width:69%}.column-70{width:70%}.column-71{width:71%}.column-72{width:72%}.column-73{width:73%}.column-74{width:74%}.column-75{width:75%}.column-76{width:76%}.column-77{width:77%}.column-78{width:78%}.column-79{width:79%}.column-80{width:80%}.column-81{width:81%}.column-82{width:82%}.column-83{width:83%}.column-84{width:84%}.column-85{width:85%}.column-86{width:86%}.column-87{width:87%}.column-88{width:88%}.column-89{width:89%}.column-90{width:90%}.column-91{width:91%}.column-92{width:92%}.column-93{width:93%}.column-94{width:94%}.column-95{width:95%}.column-96{width:96%}.column-97{width:97%}.column-98{width:98%}.column-99{width:99%}.column-100{width:100%}.draggable-row-handle{cursor:move;color:#dedede}.draggable-row-handle:hover{color:var(--color-primary)}tr.draggable-item-selected{background:#fff;border:2px solid #666;box-shadow:4px 2px 10px -4px rgba(0,0,0,.55)}tr.draggable-item-selected td{border-top:none;border-bottom:none}tr.draggable-item-selected td:first-child{border-left:none}tr.draggable-item-selected td:last-child{border-right:none}.table-stripped tr.draggable-item-hover,.table-stripped tr.draggable-item-hover{background:#FEFFF2}.table-list{font-size:.85em;margin-bottom:20px}.table-list-header{background:#fbfbfb;border:1px solid #e5e5e5;border-radius:5px 5px 0 0;line-height:28px;padding-left:3px;padding-right:3px}.table-list-header a{color:#333;font-weight:500;text-decoration:none;margin-right:10px}.table-list-header a:hover,.table-list-header a:focus{color:#767676}.table-list-header .table-list-header-count{color:#767676;display:inline-block;float:left}.table-list-header .table-list-header-menu{text-align:right}.table-list-row{padding-left:3px;padding-right:3px;border-bottom:1px solid #e5e5e5;border-right:1px solid #e5e5e5}.table-list-row.table-border-left{border-left:1px solid #e5e5e5}.table-list-row:nth-child(odd){background:#fefefe}.table-list-row:last-child{border-radius:0 0 5px 5px}.table-list-row:hover{background:#fff8dc;border-bottom:1px solid #ffeb8e;border-right:1px solid #ffeb8e}.table-list-row .table-list-title{font-weight:500;line-height:23px}.table-list-row .table-list-title.status-closed{text-decoration:line-through;margin-right:10px}.table-list-row .table-list-title.status-closed a{font-style:italic}.table-list-row .table-list-title a{color:#333;text-decoration:none}.table-list-row .table-list-title a:hover,.table-list-row .table-list-title a:focus{text-decoration:underline}.table-list-row .table-list-details{color:#999;font-weight:300;line-height:20px}.table-list-row .table-list-details span{margin-left:5px}.table-list-row .table-list-details span:first-child{margin-left:0}.table-list-row .table-list-details li{display:inline;list-style-type:none}.table-list-row .table-list-details li:after{content:', '}.table-list-row .table-list-details li:last-child:after{content:''}.table-list-row .table-list-details strong{font-weight:400;color:#555}.table-list-row .table-list-details-with-icons{float:left}@media (max-width:768px){.table-list-row .table-list-details-with-icons{float:none}}.table-list-row .table-list-icons{font-size:.8em;text-align:right;line-height:30px}@media (max-width:768px){.table-list-row .table-list-icons{text-align:left;line-height:20px}}.table-list-row .table-list-icons span{margin-left:5px}.table-list-row .table-list-icons a{text-decoration:none}.table-list-row .table-list-icons a:hover{color:#333}.table-list-row .table-list-icons a:hover i{color:#333}.table-list-category{font-size:.9em;font-weight:500;color:#000;padding:1px 2px 1px 2px;border-radius:3px;background:#fcfcfc;border:1px solid #ccc}.table-list-category a{text-decoration:none;color:#000}.table-list-category a:hover{color:#36c}fieldset{border:1px solid #ddd;margin-top:10px}legend{font-weight:500;font-size:1.2em}label{cursor:pointer;display:block;margin-top:10px;font-weight:400}input[type="number"],input[type="date"],input[type="email"],input[type="password"],input[type="text"]:not(.input-addon-field){color:var(--color-light);border:1px solid #ccc;width:300px;max-width:95%;font-size:1em;height:25px;padding-bottom:0;padding-left:4px;font-family:sans-serif;-webkit-appearance:none;-moz-appearance:none}input[type="number"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="text"]:not(.input-addon-field)::-webkit-input-placeholder{color:#dedede}input[type="number"]::-moz-placeholder,input[type="date"]::-moz-placeholder,input[type="email"]::-moz-placeholder,input[type="password"]::-moz-placeholder,input[type="text"]:not(.input-addon-field)::-moz-placeholder{color:#dedede}input[type="number"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="text"]:not(.input-addon-field):-ms-input-placeholder{color:#dedede}input[type="number"]:focus,input[type="date"]:focus,input[type="email"]:focus,input[type="password"]:focus,input[type="text"]:focus{color:#000;border-color:rgba(82,168,236,.8);outline:0;box-shadow:0 0 8px rgba(82,168,236,.6)}input[type="number"]{width:70px}input[type="text"]:not(.input-addon-field).form-numeric{width:70px}input[type="text"]:not(.input-addon-field).form-datetime,input[type="text"]:not(.input-addon-field).form-date{width:150px}input[type="text"]:not(.input-addon-field).form-input-large{width:400px}input[type="text"]:not(.input-addon-field).form-input-small{width:150px}textarea:focus{color:#000;border-color:rgba(82,168,236,.8);outline:0;box-shadow:0 0 8px rgba(82,168,236,.6)}textarea{padding:4px;border:1px solid #ccc;width:400px;max-width:99%;height:200px;font-family:sans-serif;font-size:1em}textarea::-webkit-input-placeholder{color:#dedede}textarea::-moz-placeholder{color:#dedede}textarea:-ms-input-placeholder{color:#dedede}select{font-size:1em;max-width:95%}select:focus{outline:0}select[multiple]{width:300px}.tag-autocomplete{width:400px}span.select2-container{margin-top:2px}.form-actions{padding-top:20px;clear:both}.form-required{color:red;padding-left:5px;font-weight:700}@media (max-width:480px){.form-required{display:none}}input[type="text"].form-max-width{width:100%}input.form-error,textarea.form-error{border:2px solid #b94a48}input.form-error:focus,textarea.form-error:focus{box-shadow:none;border:2px solid #b94a48}.form-errors{color:#b94a48;list-style-type:none}ul.form-errors li{margin-left:0}.form-help{font-size:.8em;color:brown;margin-bottom:15px}.form-inline{padding:0;margin:0;border:none}.form-inline label{display:inline;padding-right:3px}.form-inline input,.form-inline select{margin:0 15px 0 0}.form-inline .form-required{display:none}.form-inline .form-actions{display:inline-block}.form-inline .js-submit-buttons-rendered{display:inline-block}.form-inline-group{display:inline}.form-columns{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:flex-start;justify-content:flex-start}.form-columns .form-column{margin-right:25px;flex-grow:1}.form-columns fieldset{margin-top:0}.form-login{max-width:350px;margin:5% auto 0}@media (max-width:480px){.form-login{margin-left:5px}}.form-login li{margin-left:25px;line-height:25px}.form-login h2{margin-bottom:30px;font-weight:700}.reset-password{margin-top:20px;margin-bottom:20px}.reset-password a{color:var(--color-light)}.input-addon{display:flex}.input-addon-field{flex:1;font-size:1em;color:var(--color-light);margin:0;-webkit-appearance:none;-moz-appearance:none}.input-addon-field:first-child{border-radius:5px 0 0 5px}.input-addon-field:last-child{border-radius:0 5px 5px 0}.input-addon-item{background-color:rgba(147,128,108,.1);color:#666;font:inherit;font-weight:400}.input-addon-item:first-child{border-radius:5px 0 0 5px}.input-addon-item:last-child{border-radius:0 5px 5px 0}@media (max-width:480px){.input-addon-item .dropdown .fa-caret-down{display:none}}.input-addon-field,.input-addon-item{border:1px solid rgba(147,128,108,.25);padding:4px .75em}.input-addon-field:not(:first-child),.input-addon-item:not(:first-child){border-left:0}.icon-success{color:#468847}.icon-error{color:#b94a48}.icon-fade-out{opacity:1;animation:icon-fadeout 5s linear forwards}@keyframes icon-fadeout{0%{opacity:1}100%{opacity:0}}.alert{padding:8px 35px 8px 14px;margin-top:5px;margin-bottom:5px;color:var(--alert-color-default);background-color:var(--alert-background-color-default);border:1px solid var(--alert-border-color-default);border-radius:4px}.alert-success{color:var(--alert-color-success);background-color:var(--alert-background-color-success);border-color:var(--alert-border-color-success)}.alert-error{color:var(--alert-color-error);background-color:var(--alert-background-color-error);border-color:var(--alert-border-color-error)}.alert-info{color:var(--alert-color-info);background-color:var(--alert-background-color-info);border-color:var(--alert-border-color-info)}.alert-normal{color:var(--alert-color-normal);background-color:var(--alert-background-color-normal);border-color:var(--alert-border-color-normal)}.alert ul{margin-top:10px;margin-bottom:10px}.alert li{margin-left:25px}.alert-fade-out{text-align:center;position:fixed;bottom:0;left:20%;width:60%;padding-top:5px;padding-bottom:5px;margin-bottom:0;border-width:1px 0 0;border-radius:4px 4px 0 0;z-index:9999;opacity:1;animation:fadeout 5s linear forwards}@keyframes fadeout{0%{opacity:1}100%{opacity:0}}a.btn{text-decoration:none}.btn{-webkit-appearance:none;-moz-appearance:none;font-size:1.2em;font-weight:400;cursor:pointer;display:inline-block;border-radius:2px;padding:3px 10px;margin:0;border:1px solid var(--button-default-border-color);background:var(--button-default-background-color);color:var(--button-default-color)}.btn:hover,.btn:focus{border-color:var(--button-default-border-color-focus);background:var(--button-default-background-color-focus);color:var(--button-default-color-focus)}.btn-red{border-color:var(--button-danger-border-color);background:var(--button-danger-background-color);color:var(--button-danger-color)}.btn-red:hover,.btn-red:focus{border-color:var(--button-danger-border-color-focus);background:var(--button-danger-background-color-focus);color:var(--button-danger-color-focus)}.btn-blue{border-color:var(--button-primary-border-color);background:var(--button-primary-background-color);color:var(--button-primary-color)}.btn-blue:hover,.btn-blue:focus{border-color:var(--button-primary-border-color-focus);background:var(--button-primary-background-color-focus);color:var(--button-primary-color-focus)}.btn:disabled{color:var(--button-disabled-color);border-color:var(--button-disabled-border-color);background:var(--button-disabled-background-color)}.buttons-header{font-size:.8em;margin-top:5px;margin-bottom:15px}.tooltip i.fa{cursor:pointer}.tooltip .fa-info-circle{color:var(--color-light)}#tooltip-container{padding:5px;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 6px 12px #aaa;position:absolute;min-width:350px}#tooltip-container .markdown p{margin-bottom:0}#tooltip-container .tooltip-large{width:600px}h2 .dropdown ul{display:none}.dropdown{display:inline;position:relative}.dropdown ul{display:none}.dropdown-smaller{font-size:.85em}ul.dropdown-submenu-open{display:block;position:absolute;z-index:1000;min-width:285px;list-style:none;margin:3px 0 0 1px;padding:6px 0;background-color:#fff;border:1px solid #b2b2b2;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.dropdown-submenu-open li{display:block;margin:0;padding:8px 10px;font-size:.9em;border-bottom:1px solid #f8f8f8;cursor:pointer}.dropdown-submenu-open li.no-hover{cursor:default}.dropdown-submenu-open li:last-child{border:none}.dropdown-submenu-open li:not(.no-hover):hover{background:#4078C0;color:#fff}.dropdown-submenu-open li:hover a{color:#fff}.dropdown-submenu-open a{text-decoration:none;color:#333}.dropdown-submenu-open a:focus{text-decoration:underline}.dropdown-menu-link-text,.dropdown-menu-link-icon{color:#333;text-decoration:none}.dropdown-menu-link-text:hover{text-decoration:underline}td a.dropdown-menu strong{color:#333}td a.dropdown-menu strong i{color:#333}td a.dropdown-menu i{color:#dedede}td a.dropdown-menu:hover strong{color:#555}td a.dropdown-menu:hover strong i{color:#555}td a.dropdown-menu:hover i{color:#333}.accordion-title{font-size:1.2em;cursor:pointer;margin-top:10px}.accordion-content{margin-top:15px;margin-bottom:25px}#select-dropdown-menu{position:absolute;display:block;z-index:1000;min-width:160px;padding:5px 0;background:#fff;list-style:none;border:1px solid #ccc;border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,.175);overflow:scroll}.select-dropdown-menu-item{white-space:nowrap;overflow:hidden;padding:3px 10px;color:var(--color-medium);cursor:pointer;border-bottom:1px solid #f8f8f8;line-height:1.5em;font-weight:400}.select-dropdown-menu-item.active{color:#fff;background:#428bca}.select-dropdown-menu-item:last-child{border:none}.select-dropdown-input-container{position:relative;border:1px solid #ccc;border-radius:5px;background-color:#fff;width:300px}.select-dropdown-input-container input.select-dropdown-input{margin:0 0 0 5px;border:none;height:23px;width:270px}.select-dropdown-input-container input.select-dropdown-input:focus{border:none;box-shadow:none}.select-dropdown-input-container .select-dropdown-chevron{color:var(--color-medium);position:absolute;top:4px;right:5px;cursor:pointer}.select-dropdown-input-container .select-loading-icon{color:var(--color-medium);position:absolute;top:4px;right:5px}#suggest-menu{position:absolute;display:block;z-index:1000;min-width:160px;padding:5px 0;background:#fff;list-style:none;border:1px solid #ccc;border-radius:3px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.suggest-menu-item{white-space:nowrap;padding:3px 10px;color:var(--color-primary);font-weight:700;cursor:pointer}.suggest-menu-item.active{color:#fff;background:#428bca}.suggest-menu-item.active small{color:#fff}.suggest-menu-item small{color:var(--color-light);font-weight:400}#modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.9);overflow:auto;z-index:100}#modal-box{position:fixed;max-height:calc(100% - 30px);top:2%;left:50%;transform:translateX(-50%);background:#fff;overflow:auto;border-radius:5px}#modal-content{padding:0 5px 5px}#modal-header{text-align:right;padding-right:5px}#modal-close-button{color:var(--color-primary)}#modal-close-button:hover{color:var(--color-error)}.pagination{text-align:center;font-size:.9em}.pagination-showing{margin-right:5px;padding-right:5px;border-right:1px solid #999}.pagination-next{margin-left:5px}.pagination-previous{margin-right:5px}header{display:flex;flex-wrap:wrap;padding:5px 10px;margin-bottom:5px;border-bottom:1px solid #dedede;background-color:#fbfbfb}header .title-container{flex:1;min-width:300px}@media (max-width:480px){header .title-container{order:3}}header .board-selector-container{min-width:320px;display:flex;align-items:center}@media (max-width:480px){header .board-selector-container{order:2;min-width:300px}header .board-selector-container input[type=text]{max-width:280px}}header .menus-container{min-width:120px;display:flex;align-items:center;justify-content:flex-end}@media (max-width:480px){header .menus-container{order:1;margin-bottom:5px;margin-left:auto}}header h1{font-size:1.5em}header h1 .tooltip{opacity:.3;font-size:.7em}a i.web-notification-icon{color:var(--link-color-primary)}a i.web-notification-icon:focus,a i.web-notification-icon:hover{color:#000}.logo a{opacity:.5;color:#d40000;text-decoration:none}.logo span{color:var(--color-primary)}.logo a:hover{opacity:.8;color:var(--color-primary)}.logo a:focus span,.logo a:hover span{color:#d40000}.page-header{margin-bottom:20px}.page-header .dropdown{padding-right:10px}.page-header h2{margin:0;padding:0;font-weight:700;border-bottom:1px dotted #ccc}.page-header h2 a{color:var(--color-primary);text-decoration:none}.page-header h2 a:focus,.page-header h2 a:hover{color:var(--color-light)}.page-header ul{text-align:left;margin-top:5px;display:inline-block}.page-header li{display:inline;padding-right:15px}@media (max-width:480px){.page-header li{display:block;line-height:1.5em}}.page-header li.active a{color:var(--color-primary);text-decoration:none;font-weight:700}.page-header li.active a:hover,.page-header li.active a:focus{text-decoration:underline}.menu-inline{margin-bottom:5px}.menu-inline li{display:inline;padding-right:15px}.menu-inline li .active a{font-weight:700;color:#000;text-decoration:none}.sidebar-container{height:100%;display:flex;flex-flow:row}@media (max-width:768px){.sidebar-container{flex-flow:wrap}}.sidebar-content{padding-left:10px;flex:1 100%;max-width:85%;overflow-wrap:break-word}@media (max-width:768px){.sidebar-content{padding-left:0;order:1;max-width:100%}}@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:1){.sidebar-content{max-width:75%}}.sidebar{max-width:25%;min-width:230px}@media (max-width:768px){.sidebar{flex:1 auto;order:2}}.sidebar h2{margin-top:0}.sidebar>ul a{text-decoration:none;color:var(--color-light);font-weight:300}.sidebar>ul a:hover{color:var(--color-primary)}.sidebar>ul li{list-style-type:none;line-height:35px;border-bottom:1px dotted #efefef;padding-left:13px}.sidebar>ul li:hover{border-left:5px solid #555;padding-left:8px}.sidebar>ul li.active{border-left:5px solid #333;padding-left:8px}.sidebar>ul li.active a{color:var(--color-primary);font-weight:700}.sidebar-icons>ul li{padding-left:0}.sidebar-icons>ul li:hover,.sidebar-icons>ul li.active{padding-left:0;border-left:none}.sidebar>ul li.active a:focus,.sidebar>ul li.active a:hover{color:var(--color-medium)}.sidebar>ul li:last-child{margin-bottom:15px}.avatar img{vertical-align:bottom}.avatar-left{float:left;margin-right:10px}.avatar-inline{display:inline-block;margin-right:3px}.avatar-48 img,.avatar-48 div{border-radius:30px}.avatar-48 .avatar-letter{line-height:48px;width:48px;font-size:25px}.avatar-20 img,.avatar-20 div{border-radius:10px}.avatar-20 .avatar-letter{line-height:20px;width:20px;font-size:11px}.avatar-letter{color:var(--avatar-color-letter);text-align:center}#file-dropzone,#screenshot-zone{position:relative;border:2px dashed #ccc;width:99%;height:250px;overflow:auto}#file-dropzone-inner,#screenshot-inner{position:absolute;left:0;bottom:48%;width:100%;text-align:center;color:#aaa}#screenshot-zone.screenshot-pasted{border:2px solid #333}#file-list{margin:20px}#file-list li{list-style-type:none;padding-top:8px;padding-bottom:8px;border-bottom:1px dotted #ddd;width:95%}#file-list li .file-error{font-weight:700;color:#b94a48}.file-thumbnails{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-justify-content:flex-start;justify-content:flex-start}.file-thumbnail{width:250px;border:1px solid #efefef;border-radius:5px;margin-bottom:20px;box-shadow:4px 2px 10px -6px rgba(0,0,0,.55);margin-right:15px}.file-thumbnail img{cursor:pointer;border-top-left-radius:5px;border-top-right-radius:5px}.file-thumbnail img:hover{opacity:.5}.file-thumbnail-content{padding-left:8px;padding-right:8px}.file-thumbnail-title{font-weight:700;font-size:.9em;color:var(--color-medium);overflow:hidden;text-overflow:ellipsis}.file-thumbnail-description{font-size:.8em;color:var(--color-light);margin-top:8px;margin-bottom:5px}.file-viewer{position:relative}.file-viewer img{max-width:95%;max-height:85%;margin-top:10px}.color-picker{width:180px}.color-picker-option{height:25px}.color-picker-square{display:inline-block;width:18px;height:18px;margin-right:5px;border:1px solid #000}.color-picker-label{display:inline-block;vertical-align:bottom;padding-bottom:3px}.filter-box{max-width:1024px}.action-menu{color:var(--color-primary);text-decoration:none}.action-menu:hover,.action-menu:focus{text-decoration:underline}.js-project-creation-options{max-width:500px;border-left:3px dotted #efefef;margin-top:20px;padding-left:15px;padding-bottom:5px;padding-top:5px}.project-overview-columns{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;margin-bottom:20px;font-size:1.4em}@media (max-width:480px){.project-overview-columns{display:block}}.project-overview-column{text-align:center;margin-right:3%;margin-top:5px;padding:3px 15px 3px 15px;border:1px dashed #ddd}@media (max-width:480px){.project-overview-column{text-align:left}}.project-overview-column small{color:var(--color-light)}.project-overview-column strong{color:var(--color-medium);display:block}@media (max-width:480px){.project-overview-column strong{display:inline}}.project-header{margin-bottom:8px}.project-header .dropdown-component{margin-top:4px;margin-right:5px;float:left}@media (max-width:768px){.project-header .dropdown-component{float:none}}.project-header .views-switcher-component{margin-top:4px;float:left}@media (max-width:768px){.project-header .views-switcher-component{float:none;margin-bottom:10px}}.project-header .filter-box-component form{margin:0}.views{margin-right:10px;margin-top:1px;font-size:.9em}@media (max-width:560px){.views{width:100%}}@media (max-width:768px){.views{margin-top:10px;font-size:1em}}@media (max-width:480px){.views{margin-top:5px}}.views li{white-space:nowrap;background:#fafafa;border:1px solid #ddd;border-right:none;padding:4px 8px;display:inline}@media (max-width:560px){.views li{display:block;margin-top:5px;border-radius:5px;border:1px solid #ddd}}.views li.active a{font-weight:700;color:#000;text-decoration:none}.views li:first-child{border-top-left-radius:5px;border-bottom-left-radius:5px}.views li:last-child{border-right:1px solid #ddd;border-top-right-radius:5px;border-bottom-right-radius:5px}.views a{color:var(--color-medium);text-decoration:none}.views a:hover{color:var(--color-primary);text-decoration:underline}.dashboard-project-stats small{margin-right:10px;color:var(--color-light)}.dashboard-table-link{font-weight:700;color:#000;text-decoration:none}.dashboard-table-link:focus,.dashboard-table-link:hover{color:var(--color-light)}.public-board{margin-top:5px}.public-task{max-width:800px;margin:5px auto 0}#board-container{overflow-x:auto}#board{table-layout:fixed;margin-bottom:0}#board th.board-column-header{width:240px}#board td{vertical-align:top}.board-container-compact{overflow-x:initial}@media all and (-ms-high-contrast:active),(-ms-high-contrast:none){.board-container-compact #board{table-layout:auto}}#board th.board-column-header.board-column-compact{width:initial}.board-column-collapsed{display:none}td.board-column-task-collapsed{font-weight:700;background-color:#fbfbfb}#board th.board-column-header-collapsed{width:28px;min-width:28px;text-align:center;overflow:hidden}.board-rotation-wrapper{position:relative;padding:8px 4px;min-height:150px;overflow:hidden}.board-rotation{white-space:nowrap;-webkit-backface-visibility:hidden;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.board-column-title .dropdown-menu{text-decoration:none}.board-add-icon{float:left;padding:0 5px}.board-add-icon i{text-decoration:none;color:var(--link-color-primary);font-size:1.4em}.board-add-icon i:focus,.board-add-icon i:hover{text-decoration:none;color:red}.board-column-header-task-count{color:var(--color-light);font-weight:400}a.board-swimlane-toggle{text-decoration:none}a.board-swimlane-toggle:hover,a.board-swimlane-toggle:focus{color:#000;text-decoration:none;border:none}.board-task-list{min-height:60px}.board-task-list .task-board:last-child{margin-bottom:0}.board-task-list-limit{background-color:var(--board-task-limit-color)}.draggable-item{cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none}.draggable-placeholder{border:2px dashed #000;background:#fafafa;height:70px;margin-bottom:10px}div.draggable-item-selected{border:1px solid #000}.task-board-sort-handle{float:left;padding-right:5px}.task-board{position:relative;margin-bottom:4px;border:1px solid #000;padding:2px;word-wrap:break-word;font-size:.9em;border-radius:6px}div.task-board-recent{border-width:2px}div.task-board-status-closed{user-select:none;border:1px dotted #555}.task-board a{color:#000;text-decoration:none}.task-board-collapsed{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.task-board-title{margin-top:5px;margin-bottom:8px}.task-board-title a:hover{text-decoration:underline}.task-board-saving-state{opacity:.3}.task-board-saving-icon{position:absolute;margin:auto;width:100%;text-align:center;color:#000}.task-board-avatars{text-align:right;float:right}.task-board-change-assignee{cursor:pointer}.task-board-change-assignee:hover{opacity:.6}.task-list-avatars{display:inline-block;float:left}@media (max-width:768px){.task-list-avatars{float:none;display:block}}.task-list-avatars .task-avatar-assignee{font-weight:300;color:#999}.task-list-avatars:hover .task-avatar-assignee{font-weight:400;color:#000}.task-board-icons,.task-list-icons{font-size:.8em;text-align:right}.task-board-icons a,.task-board-icons span.tooltip,.task-list-icons a,.task-list-icons span.tooltip{text-decoration:none}.task-board-icons a:hover,.task-board-icons span.tooltip:hover,.task-list-icons a:hover,.task-list-icons span.tooltip:hover{color:var(--color-primary)}.task-board-icons a:hover i,.task-board-icons span.tooltip:hover i,.task-list-icons a:hover i,.task-list-icons span.tooltip:hover i{color:var(--color-primary)}.task-board-icons .task-score,.task-list-icons .task-score{font-weight:700}.task-board-icons .flag-milestone,.task-list-icons .flag-milestone{color:green}.task-board-icons{margin-top:7px}.task-board-icons a{opacity:.5}.task-board-icons span{opacity:.5;margin-left:4px}.task-board-icons a:hover,.task-board-icons span.tooltip:hover{opacity:1;font-weight:700}.task-board-icons .task-board-icons-row{line-height:22px}.task-list-icons{line-height:22px}.task-list-icons a,.task-list-icons span,.task-list-icons i{color:#999;opacity:1}.task-list-icons span{margin-left:5px}@media (max-width:768px){.task-list-icons{text-align:left}}.task-icon-age{display:inline-block}span.task-icon-age-total{border:1px solid #e5e5e5;padding:1px 3px 1px 3px;border-top-left-radius:3px;border-bottom-left-radius:3px}span.task-icon-age-column{border:1px solid #e5e5e5;border-left:none;margin-left:-5px;padding:1px 3px 1px 3px;border-top-right-radius:3px;border-bottom-right-radius:3px}.task-board span.task-icon-age-total,.task-board span.task-icon-age-column{border-color:#666}.task-board-category-container{text-align:right;margin-top:8px;margin-bottom:8px}.task-board-category{border:1px solid #555;font-size:.9em;font-weight:500;color:#000;padding:1px 3px 1px 2px;border-radius:3px}.task-board-category a:hover{text-decoration:underline}.task-date{font-weight:500;color:#000}span.task-date-today{opacity:1;color:var(--link-color-primary)}span.task-date-overdue{opacity:1;color:#b94a48}.task-tags li{display:inline-block;margin:3px 3px 0 0;padding:1px 3px 1px 3px;color:var(--color-primary);border:1px solid #333;border-radius:4px}.task-summary-container .task-tags{margin-top:10px}#task-summary{margin-bottom:15px}#task-summary h2{color:var(--color-medium);font-size:1.6em;margin-top:0;padding-top:0}.task-summary-container{border:2px solid #000;border-radius:8px;padding:10px}.task-summary-columns{display:flex;flex-flow:row;justify-content:space-between}@media (max-width:768px){.task-summary-columns{flex-flow:column}}.task-summary-column{color:var(--color-primary)}.task-summary-column span{color:var(--color-medium)}.task-summary-column li{line-height:23px}#external-task-view{padding:10px;margin-top:10px;margin-bottom:10px;border:1px dotted #ccc}.task-form-container{box-sizing:border-box;display:flex;flex-wrap:wrap}.task-form-container>*{box-sizing:border-box}.task-form-container>*{width:1%}.task-form-main-column{width:60%}@media (max-width:1000px){.task-form-main-column{width:100%}}.task-form-main-column input[type="text"]{width:700px;max-width:99%}.task-form-secondary-column{max-width:250px;min-width:200px;max-height:600px;padding-left:10px;overflow:auto;width:20%}@media (max-width:1000px){.task-form-secondary-column{width:100%;max-width:99%;max-height:none}}@media (max-width:768px){.task-form-secondary-column{padding-left:0}}.task-form-secondary-column label:first-child{margin-top:0}@media (max-width:1000px){.task-form-secondary-column label:first-child{margin-top:10px}}.task-form-bottom{width:100%}.task-form-bottom label{display:inline-block}.comment-sorting{text-align:right}.comment-sorting a{color:var(--color-medium);font-weight:400;text-decoration:none}.comment-sorting a:hover{color:var(--color-light)}.comment{padding:5px;margin-bottom:15px}.comment-title{border-bottom:1px dotted #eee;margin-left:55px}.comment-date{color:var(--color-light);font-weight:200}.comment-actions{text-align:right}.comment-content{margin-left:55px}.comments .text-editor textarea{height:90px}.comments .text-editor .text-editor-preview-area{height:90px}.comments .comment-highlighted{background-color:#fff8dc;border:2px solid #ffeb8e}.comments .comment-highlighted:hover{background-color:#fff8dc}.comments .comment:hover{background:#fff8dc}.comments .comment:nth-child(even):not(.comment-highlighted){background:#fbfbfb}.comments .comment:nth-child(even):not(.comment-highlighted):hover{background:#fff8dc}.subtask-cell{padding:4px 10px;border-top:1px dotted #dedede;border-left:1px dotted #dedede;display:table-cell;vertical-align:middle}.subtask-cell a{color:var(--color-primary);text-decoration:none}.subtask-cell a:hover,.subtask-cell a:focus{color:var(--link-color-primary)}.subtask-cell:first-child{border-left:none}@media (max-width:768px){.subtask-cell{width:90%;display:block;border-left:none}}.task-links-table td{vertical-align:middle}.task-links-task-count{color:var(--color-light);font-weight:400}.task-link-closed{text-decoration:line-through}.text-editor{margin-top:10px}.text-editor a{font-size:1em;color:var(--color-light);text-decoration:none;margin-right:10px}.text-editor a:hover{color:var(--link-color-primary)}.text-editor .text-editor-preview-area{border:1px solid #dedede;width:700px;max-width:99%;height:250px;overflow:auto;padding:2px}.text-editor textarea{width:700px;max-width:98%;height:250px}.markdown{line-height:1.4em}.markdown h1{margin-top:5px;margin-bottom:10px;font-weight:700}.markdown h2{font-weight:700}.markdown p{margin-bottom:10px}.markdown ol,.markdown ul{margin-left:25px;margin-top:10px;margin-bottom:10px}.markdown pre{background:#fbfbfb;padding:10px;border-radius:5px;border:1px solid #ddd;overflow:auto;overflow-wrap:initial;color:var(--color-medium)}.markdown blockquote{font-style:italic;border-left:3px solid #ddd;padding-left:10px;margin-bottom:10px;margin-left:20px}.markdown img{display:block;max-width:80%;margin-top:10px}.panel{border-radius:4px;padding:8px 35px 8px 10px;margin-top:10px;margin-bottom:15px;border:1px solid #ddd;color:var(--color-primary);background-color:#fcfcfc;overflow:auto}.panel li{list-style-type:square;margin-left:20px;line-height:1.35em}.activity-event{margin-bottom:15px;padding:10px}.activity-event:nth-child(even){background:var(--activity-event-background-color)}.activity-event:hover{background:var(--activity-event-hover-color)}.activity-date{margin-left:10px;font-weight:400;color:var(--color-light)}.activity-content{margin-left:55px}.activity-title{font-weight:700;color:var(--activity-title-color);border-bottom:1px dotted var(--activity-title-border-color)}.activity-description{color:var(--color-medium);margin-top:10px}@media (max-width:480px){.activity-description{overflow:auto}}.activity-description li{list-style-type:circle}.activity-description ul{margin-top:10px;margin-left:20px}.user-mention-link{font-weight:700;color:var(--user-mention-color);text-decoration:none}.user-mention-link:hover{color:var(--color-medium)}.image-slideshow-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.95);overflow:auto;z-index:100}.image-slideshow-overlay img{display:block;margin:auto}.image-slideshow-overlay figcaption{color:#fff;opacity:.7;position:absolute;bottom:5px;right:15px}.slideshow-icon{color:#fff;position:absolute;font-size:2.5em;opacity:.6}.slideshow-icon:hover{opacity:.9;cursor:pointer}.slideshow-previous-icon{left:10px;top:45%}.slideshow-next-icon{right:10px;top:45%}.slideshow-close-icon{right:10px;top:10px;font-size:1.4em}.slideshow-download-icon{left:10px;bottom:10px;font-size:1.3em}.list-item-links,.list-item-actions{display:inline-block;float:left;margin-left:10px}.list-item-links a{margin:0}.list-item-action-hidden{display:none}.bulk-change-checkbox{float:left}.bulk-change-inputs{float:left;padding-left:10px}.bulk-change-inputs label{margin-top:0;margin-bottom:3px} \ No newline at end of file
diff --git a/assets/css/print.min.css b/assets/css/print.min.css
index c8b9dcc1..c5e3ca29 100644
--- a/assets/css/print.min.css
+++ b/assets/css/print.min.css
@@ -1 +1 @@
-@page{orientation:landscape;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}#board-container{overflow-x:initial !important}.board-task-list{min-height:0 !important}.task-board{page-break-inside:avoid}.menu-inline,.project-header,.page-header,.menus-container,.sidebar,.alert,.alert-info,.dropdown>ul{display:none}
+@page{orientation:landscape;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}#board-container{overflow-x:initial!important}.board-task-list{min-height:0!important}.task-board{page-break-inside:avoid}.menu-inline,.project-header,.page-header,.menus-container,.sidebar,.alert,.alert-info,.dropdown>ul{display:none} \ No newline at end of file
diff --git a/assets/css/src/accordion.css b/assets/css/src/accordion.css
new file mode 100644
index 00000000..3736159b
--- /dev/null
+++ b/assets/css/src/accordion.css
@@ -0,0 +1,10 @@
+.accordion-title {
+ font-size: 1.2em;
+ cursor: pointer;
+ margin-top: 10px
+}
+
+.accordion-content {
+ margin-top: 15px;
+ margin-bottom: 25px
+}
diff --git a/assets/css/src/activity_stream.css b/assets/css/src/activity_stream.css
new file mode 100644
index 00000000..54175cdf
--- /dev/null
+++ b/assets/css/src/activity_stream.css
@@ -0,0 +1,48 @@
+.activity-event {
+ margin-bottom: 15px;
+ padding: 10px
+}
+
+.activity-event:nth-child(even) {
+ background: var(--activity-event-background-color);
+}
+
+.activity-event:hover {
+ background: var(--activity-event-hover-color);
+}
+
+.activity-date {
+ margin-left: 10px;
+ font-weight: normal;
+ color: var(--color-light);
+}
+
+.activity-content {
+ margin-left: 55px
+}
+
+.activity-title {
+ font-weight: bold;
+ color: var(--activity-title-color);
+ border-bottom: 1px dotted var(--activity-title-border-color);
+}
+
+.activity-description {
+ color: var(--color-medium);
+ margin-top: 10px
+}
+
+@media (max-width: 480px) {
+ .activity-description {
+ overflow: auto
+ }
+}
+
+.activity-description li {
+ list-style-type: circle
+}
+
+.activity-description ul {
+ margin-top: 10px;
+ margin-left: 20px
+}
diff --git a/assets/css/src/alert.css b/assets/css/src/alert.css
new file mode 100644
index 00000000..16b60880
--- /dev/null
+++ b/assets/css/src/alert.css
@@ -0,0 +1,67 @@
+.alert {
+ padding: 8px 35px 8px 14px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ color: var(--alert-color-default);
+ background-color: var(--alert-background-color-default);
+ border: 1px solid var(--alert-border-color-default);
+ border-radius: 4px
+}
+
+.alert-success {
+ color: var(--alert-color-success);
+ background-color: var(--alert-background-color-success);
+ border-color: var(--alert-border-color-success);
+}
+
+.alert-error {
+ color: var(--alert-color-error);
+ background-color: var(--alert-background-color-error);
+ border-color: var(--alert-border-color-error);
+}
+
+.alert-info {
+ color: var(--alert-color-info);
+ background-color: var(--alert-background-color-info);
+ border-color: var(--alert-border-color-info);
+}
+
+.alert-normal {
+ color: var(--alert-color-normal);
+ background-color: var(--alert-background-color-normal);
+ border-color: var(--alert-border-color-normal);
+}
+
+.alert ul {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+.alert li {
+ margin-left: 25px
+}
+
+.alert-fade-out {
+ text-align: center;
+ position: fixed;
+ bottom: 0;
+ left: 20%;
+ width: 60%;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+ border-radius: 4px 4px 0 0;
+ z-index: 9999;
+ opacity: 1;
+ animation: fadeout 5s linear forwards
+}
+
+@keyframes fadeout {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0
+ }
+} \ No newline at end of file
diff --git a/assets/css/src/avatar.css b/assets/css/src/avatar.css
new file mode 100644
index 00000000..1d8bc6a1
--- /dev/null
+++ b/assets/css/src/avatar.css
@@ -0,0 +1,40 @@
+.avatar img {
+ vertical-align: bottom
+}
+
+.avatar-left {
+ float: left;
+ margin-right: 10px
+}
+
+.avatar-inline {
+ display: inline-block;
+ margin-right: 3px
+}
+
+.avatar-48 img,
+.avatar-48 div {
+ border-radius: 30px
+}
+
+.avatar-48 .avatar-letter {
+ line-height: 48px;
+ width: 48px;
+ font-size: 25px
+}
+
+.avatar-20 img,
+.avatar-20 div {
+ border-radius: 10px
+}
+
+.avatar-20 .avatar-letter {
+ line-height: 20px;
+ width: 20px;
+ font-size: 11px
+}
+
+.avatar-letter {
+ color: var(--avatar-color-letter);
+ text-align: center
+}
diff --git a/assets/css/src/base.css b/assets/css/src/base.css
new file mode 100644
index 00000000..c139a06e
--- /dev/null
+++ b/assets/css/src/base.css
@@ -0,0 +1,65 @@
+h1,
+li,
+ul,
+ol,
+table,
+tr,
+td,
+th,
+p,
+blockquote,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-size: 100%;
+ padding-bottom: 10px;
+ color: var(--color-primary);
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ text-rendering: optimizeLegibility
+}
+
+small {
+ font-size: 0.8em
+}
+
+hr {
+ border: 0;
+ height: 0;
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3)
+}
+
+.page {
+ margin-left: 10px;
+ margin-right: 10px
+}
+
+.margin-top {
+ margin-top: 20px
+}
+
+.margin-bottom {
+ margin-bottom: 20px
+}
+
+.pull-right {
+ text-align: right
+}
+
+ul.no-bullet li {
+ list-style-type: none;
+ margin-left: 0
+}
+
+#app-loading-icon {
+ position: fixed;
+ right: 3px;
+ bottom: 3px
+}
+
+.assign-me {
+ vertical-align: bottom
+}
diff --git a/assets/css/src/board.css b/assets/css/src/board.css
new file mode 100644
index 00000000..0cf91cab
--- /dev/null
+++ b/assets/css/src/board.css
@@ -0,0 +1,143 @@
+.public-board {
+ margin-top: 5px
+}
+
+.public-task {
+ max-width: 800px;
+ margin: 5px auto 0
+}
+
+#board-container {
+ overflow-x: auto
+}
+
+#board {
+ table-layout: fixed;
+ margin-bottom: 0
+}
+
+#board th.board-column-header {
+ width: 240px
+}
+
+#board td {
+ vertical-align: top
+}
+
+.board-container-compact {
+ overflow-x: initial
+}
+
+@media all and (-ms-high-contrast: active),
+(-ms-high-contrast: none) {
+ .board-container-compact #board {
+ table-layout: auto
+ }
+}
+
+#board th.board-column-header.board-column-compact {
+ width: initial
+}
+
+.board-column-collapsed {
+ display: none
+}
+
+td.board-column-task-collapsed {
+ font-weight: bold;
+ background-color: #fbfbfb
+}
+
+#board th.board-column-header-collapsed {
+ width: 28px;
+ min-width: 28px;
+ text-align: center;
+ overflow: hidden
+}
+
+.board-rotation-wrapper {
+ position: relative;
+ padding: 8px 4px;
+ min-height: 150px;
+ overflow: hidden
+}
+
+.board-rotation {
+ white-space: nowrap;
+ -webkit-backface-visibility: hidden;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ -webkit-transform-origin: 0 100%;
+ -moz-transform-origin: 0 100%;
+ -ms-transform-origin: 0 100%;
+ transform-origin: 0 100%
+}
+
+.board-column-title .dropdown-menu {
+ text-decoration: none
+}
+
+.board-add-icon {
+ float: left;
+ padding: 0 5px
+}
+
+.board-add-icon i {
+ text-decoration: none;
+ color: var(--link-color-primary);
+ font-size: 1.4em
+}
+
+.board-add-icon i:focus,
+.board-add-icon i:hover {
+ text-decoration: none;
+ color: red
+}
+
+.board-column-header-task-count {
+ color: var(--color-light);
+ font-weight: normal
+}
+
+a.board-swimlane-toggle {
+ text-decoration: none
+}
+
+a.board-swimlane-toggle:hover,
+a.board-swimlane-toggle:focus {
+ color: #000;
+ text-decoration: none;
+ border: none
+}
+
+.board-task-list {
+ min-height: 60px
+}
+
+.board-task-list .task-board:last-child {
+ margin-bottom: 0
+}
+
+.board-task-list-limit {
+ background-color: var(--board-task-limit-color);
+}
+
+.draggable-item {
+ cursor: pointer;
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none
+}
+
+.draggable-placeholder {
+ border: 2px dashed #000;
+ background: #fafafa;
+ height: 70px;
+ margin-bottom: 10px
+}
+
+div.draggable-item-selected {
+ border: 1px solid #000
+}
diff --git a/assets/css/src/bulk_change.css b/assets/css/src/bulk_change.css
new file mode 100644
index 00000000..8786c235
--- /dev/null
+++ b/assets/css/src/bulk_change.css
@@ -0,0 +1,13 @@
+.bulk-change-checkbox {
+ float: left
+}
+
+.bulk-change-inputs {
+ float: left;
+ padding-left: 10px
+}
+
+.bulk-change-inputs label {
+ margin-top: 0;
+ margin-bottom: 3px
+}
diff --git a/assets/css/src/button.css b/assets/css/src/button.css
new file mode 100644
index 00000000..1f31c797
--- /dev/null
+++ b/assets/css/src/button.css
@@ -0,0 +1,63 @@
+a.btn {
+ text-decoration: none;
+}
+
+.btn {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ font-size: 1.2em;
+ font-weight: normal;
+ cursor: pointer;
+ display: inline-block;
+ border-radius: 2px;
+ padding: 3px 10px;
+ margin: 0;
+ border: 1px solid var(--button-default-border-color);
+ background: var(--button-default-background-color);
+ color: var(--button-default-color);
+}
+
+.btn:hover,
+.btn:focus {
+ border-color: var(--button-default-border-color-focus);
+ background: var(--button-default-background-color-focus);
+ color: var(--button-default-color-focus);
+}
+
+.btn-red {
+ border-color: var(--button-danger-border-color);
+ background: var(--button-danger-background-color);
+ color: var(--button-danger-color);
+}
+
+.btn-red:hover,
+.btn-red:focus {
+ border-color: var(--button-danger-border-color-focus);
+ background: var(--button-danger-background-color-focus);
+ color: var(--button-danger-color-focus);
+}
+
+.btn-blue {
+ border-color: var(--button-primary-border-color);
+ background: var(--button-primary-background-color);
+ color: var(--button-primary-color);
+}
+
+.btn-blue:hover,
+.btn-blue:focus {
+ border-color: var(--button-primary-border-color-focus);
+ background: var(--button-primary-background-color-focus);
+ color: var(--button-primary-color-focus);
+}
+
+.btn:disabled {
+ color: var(--button-disabled-color);
+ border-color: var(--button-disabled-border-color);
+ background: var(--button-disabled-background-color);
+}
+
+.buttons-header {
+ font-size: 0.8em;
+ margin-top: 5px;
+ margin-bottom: 15px
+}
diff --git a/assets/css/src/color_picker.css b/assets/css/src/color_picker.css
new file mode 100644
index 00000000..10bb827a
--- /dev/null
+++ b/assets/css/src/color_picker.css
@@ -0,0 +1,21 @@
+.color-picker {
+ width: 180px
+}
+
+.color-picker-option {
+ height: 25px
+}
+
+.color-picker-square {
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+ margin-right: 5px;
+ border: 1px solid #000
+}
+
+.color-picker-label {
+ display: inline-block;
+ vertical-align: bottom;
+ padding-bottom: 3px
+}
diff --git a/assets/css/src/comment.css b/assets/css/src/comment.css
new file mode 100644
index 00000000..252ede21
--- /dev/null
+++ b/assets/css/src/comment.css
@@ -0,0 +1,65 @@
+.comment-sorting {
+ text-align: right
+}
+
+.comment-sorting a {
+ color: var(--color-medium);
+ font-weight: normal;
+ text-decoration: none
+}
+
+.comment-sorting a:hover {
+ color: var(--color-light);
+}
+
+.comment {
+ padding: 5px;
+ margin-bottom: 15px
+}
+
+.comment-title {
+ border-bottom: 1px dotted #eee;
+ margin-left: 55px
+}
+
+.comment-date {
+ color: var(--color-light);
+ font-weight: 200
+}
+
+.comment-actions {
+ text-align: right
+}
+
+.comment-content {
+ margin-left: 55px
+}
+
+.comments .text-editor textarea {
+ height: 90px
+}
+
+.comments .text-editor .text-editor-preview-area {
+ height: 90px
+}
+
+.comments .comment-highlighted {
+ background-color: #fff8dc;
+ border: 2px solid #ffeb8e
+}
+
+.comments .comment-highlighted:hover {
+ background-color: #fff8dc
+}
+
+.comments .comment:hover {
+ background: #fff8dc
+}
+
+.comments .comment:nth-child(even):not(.comment-highlighted) {
+ background: #fbfbfb
+}
+
+.comments .comment:nth-child(even):not(.comment-highlighted):hover {
+ background: #fff8dc
+}
diff --git a/assets/css/src/dashboard.css b/assets/css/src/dashboard.css
new file mode 100644
index 00000000..179aa40d
--- /dev/null
+++ b/assets/css/src/dashboard.css
@@ -0,0 +1,15 @@
+.dashboard-project-stats small {
+ margin-right: 10px;
+ color: var(--color-light);
+}
+
+.dashboard-table-link {
+ font-weight: bold;
+ color: #000;
+ text-decoration: none
+}
+
+.dashboard-table-link:focus,
+.dashboard-table-link:hover {
+ color: var(--color-light);
+}
diff --git a/assets/css/src/dropdown.css b/assets/css/src/dropdown.css
new file mode 100644
index 00000000..b869abf0
--- /dev/null
+++ b/assets/css/src/dropdown.css
@@ -0,0 +1,99 @@
+h2 .dropdown ul {
+ display: none
+}
+
+.dropdown {
+ display: inline;
+ position: relative
+}
+
+.dropdown ul {
+ display: none
+}
+
+.dropdown-smaller {
+ font-size: 0.85em
+}
+
+ul.dropdown-submenu-open {
+ display: block;
+ position: absolute;
+ z-index: 1000;
+ min-width: 285px;
+ list-style: none;
+ margin: 3px 0 0 1px;
+ padding: 6px 0;
+ background-color: #fff;
+ border: 1px solid #b2b2b2;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15)
+}
+
+.dropdown-submenu-open li {
+ display: block;
+ margin: 0;
+ padding: 8px 10px;
+ font-size: 0.9em;
+ border-bottom: 1px solid #f8f8f8;
+ cursor: pointer
+}
+
+.dropdown-submenu-open li.no-hover {
+ cursor: default
+}
+
+.dropdown-submenu-open li:last-child {
+ border: none
+}
+
+.dropdown-submenu-open li:not(.no-hover):hover {
+ background: #4078C0;
+ color: #fff
+}
+
+.dropdown-submenu-open li:hover a {
+ color: #fff
+}
+
+.dropdown-submenu-open a {
+ text-decoration: none;
+ color: #333
+}
+
+.dropdown-submenu-open a:focus {
+ text-decoration: underline
+}
+
+.dropdown-menu-link-text,
+.dropdown-menu-link-icon {
+ color: #333;
+ text-decoration: none
+}
+
+.dropdown-menu-link-text:hover {
+ text-decoration: underline
+}
+
+td a.dropdown-menu strong {
+ color: #333
+}
+
+td a.dropdown-menu strong i {
+ color: #333
+}
+
+td a.dropdown-menu i {
+ color: #dedede
+}
+
+td a.dropdown-menu:hover strong {
+ color: #555
+}
+
+td a.dropdown-menu:hover strong i {
+ color: #555
+}
+
+td a.dropdown-menu:hover i {
+ color: #333
+}
diff --git a/assets/css/src/file_upload.css b/assets/css/src/file_upload.css
new file mode 100644
index 00000000..44582355
--- /dev/null
+++ b/assets/css/src/file_upload.css
@@ -0,0 +1,39 @@
+#file-dropzone,
+#screenshot-zone {
+ position: relative;
+ border: 2px dashed #ccc;
+ width: 99%;
+ height: 250px;
+ overflow: auto
+}
+
+#file-dropzone-inner,
+#screenshot-inner {
+ position: absolute;
+ left: 0;
+ bottom: 48%;
+ width: 100%;
+ text-align: center;
+ color: #aaa
+}
+
+#screenshot-zone.screenshot-pasted {
+ border: 2px solid #333
+}
+
+#file-list {
+ margin: 20px
+}
+
+#file-list li {
+ list-style-type: none;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ border-bottom: 1px dotted #ddd;
+ width: 95%
+}
+
+#file-list li .file-error {
+ font-weight: bold;
+ color: #b94a48
+}
diff --git a/assets/css/src/filter_box.css b/assets/css/src/filter_box.css
new file mode 100644
index 00000000..4a822972
--- /dev/null
+++ b/assets/css/src/filter_box.css
@@ -0,0 +1,13 @@
+.filter-box {
+ max-width: 1024px
+}
+
+.action-menu {
+ color: var(--color-primary);
+ text-decoration: none
+}
+
+.action-menu:hover,
+.action-menu:focus {
+ text-decoration: underline
+}
diff --git a/assets/css/src/form.css b/assets/css/src/form.css
new file mode 100644
index 00000000..1942e499
--- /dev/null
+++ b/assets/css/src/form.css
@@ -0,0 +1,269 @@
+fieldset {
+ border: 1px solid #ddd;
+ margin-top: 10px
+}
+
+legend {
+ font-weight: 500;
+ font-size: 1.2em
+}
+
+label {
+ cursor: pointer;
+ display: block;
+ margin-top: 10px;
+ font-weight: 400
+}
+
+input[type="number"],
+input[type="date"],
+input[type="email"],
+input[type="password"],
+input[type="text"]:not(.input-addon-field) {
+ color: var(--color-light);
+ border: 1px solid #ccc;
+ width: 300px;
+ max-width: 95%;
+ font-size: 1em;
+ height: 25px;
+ padding-bottom: 0;
+ padding-left: 4px;
+ font-family: sans-serif;
+ -webkit-appearance: none;
+ -moz-appearance: none
+}
+
+input[type="number"]::-webkit-input-placeholder,
+input[type="date"]::-webkit-input-placeholder,
+input[type="email"]::-webkit-input-placeholder,
+input[type="password"]::-webkit-input-placeholder,
+input[type="text"]:not(.input-addon-field)::-webkit-input-placeholder {
+ color: #dedede
+}
+
+input[type="number"]::-moz-placeholder,
+input[type="date"]::-moz-placeholder,
+input[type="email"]::-moz-placeholder,
+input[type="password"]::-moz-placeholder,
+input[type="text"]:not(.input-addon-field)::-moz-placeholder {
+ color: #dedede
+}
+
+input[type="number"]:-ms-input-placeholder,
+input[type="date"]:-ms-input-placeholder,
+input[type="email"]:-ms-input-placeholder,
+input[type="password"]:-ms-input-placeholder,
+input[type="text"]:not(.input-addon-field):-ms-input-placeholder {
+ color: #dedede
+}
+
+input[type="number"]:focus,
+input[type="date"]:focus,
+input[type="email"]:focus,
+input[type="password"]:focus,
+input[type="text"]:focus {
+ color: #000;
+ border-color: rgba(82, 168, 236, 0.8);
+ outline: 0;
+ box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
+}
+
+input[type="number"] {
+ width: 70px
+}
+
+input[type="text"]:not(.input-addon-field).form-numeric {
+ width: 70px
+}
+
+input[type="text"]:not(.input-addon-field).form-datetime,
+input[type="text"]:not(.input-addon-field).form-date {
+ width: 150px
+}
+
+input[type="text"]:not(.input-addon-field).form-input-large {
+ width: 400px
+}
+
+input[type="text"]:not(.input-addon-field).form-input-small {
+ width: 150px
+}
+
+textarea:focus {
+ color: #000;
+ border-color: rgba(82, 168, 236, 0.8);
+ outline: 0;
+ box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
+}
+
+textarea {
+ padding: 4px;
+ border: 1px solid #ccc;
+ width: 400px;
+ max-width: 99%;
+ height: 200px;
+ font-family: sans-serif;
+ font-size: 1em
+}
+
+textarea::-webkit-input-placeholder {
+ color: #dedede
+}
+
+textarea::-moz-placeholder {
+ color: #dedede
+}
+
+textarea:-ms-input-placeholder {
+ color: #dedede
+}
+
+select {
+ font-size: 1.0em;
+ max-width: 95%
+}
+
+select:focus {
+ outline: 0
+}
+
+select[multiple] {
+ width: 300px
+}
+
+.tag-autocomplete {
+ width: 400px
+}
+
+span.select2-container {
+ margin-top: 2px
+}
+
+.form-actions {
+ padding-top: 20px;
+ clear: both
+}
+
+.form-required {
+ color: red;
+ padding-left: 5px;
+ font-weight: bold
+}
+
+@media (max-width: 480px) {
+ .form-required {
+ display: none
+ }
+}
+
+input[type="text"].form-max-width {
+ width: 100%
+}
+
+input.form-error,
+textarea.form-error {
+ border: 2px solid #b94a48
+}
+
+input.form-error:focus,
+textarea.form-error:focus {
+ box-shadow: none;
+ border: 2px solid #b94a48
+}
+
+.form-errors {
+ color: #b94a48;
+ list-style-type: none
+}
+
+ul.form-errors li {
+ margin-left: 0
+}
+
+.form-help {
+ font-size: 0.8em;
+ color: brown;
+ margin-bottom: 15px
+}
+
+.form-inline {
+ padding: 0;
+ margin: 0;
+ border: none
+}
+
+.form-inline label {
+ display: inline;
+ padding-right: 3px
+}
+
+.form-inline input,
+.form-inline select {
+ margin: 0 15px 0 0
+}
+
+.form-inline .form-required {
+ display: none
+}
+
+.form-inline .form-actions {
+ display: inline-block
+}
+
+.form-inline .js-submit-buttons-rendered {
+ display: inline-block
+}
+
+.form-inline-group {
+ display: inline
+}
+
+.form-columns {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-justify-content: flex-start;
+ justify-content: flex-start
+}
+
+.form-columns .form-column {
+ margin-right: 25px;
+ flex-grow: 1
+}
+
+.form-columns fieldset {
+ margin-top: 0
+}
+
+.form-login {
+ max-width: 350px;
+ margin: 5% auto 0
+}
+
+@media (max-width: 480px) {
+ .form-login {
+ margin-left: 5px
+ }
+}
+
+.form-login li {
+ margin-left: 25px;
+ line-height: 25px
+}
+
+.form-login h2 {
+ margin-bottom: 30px;
+ font-weight: bold
+}
+
+.reset-password {
+ margin-top: 20px;
+ margin-bottom: 20px
+}
+
+.reset-password a {
+ color: var(--color-light);
+}
diff --git a/assets/css/src/header.css b/assets/css/src/header.css
new file mode 100644
index 00000000..98b696b2
--- /dev/null
+++ b/assets/css/src/header.css
@@ -0,0 +1,68 @@
+header {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 5px 10px;
+ margin-bottom: 5px;
+ border-bottom: 1px solid #dedede;
+ background-color: #fbfbfb
+}
+
+header .title-container {
+ flex: 1;
+ min-width: 300px
+}
+
+@media (max-width: 480px) {
+ header .title-container {
+ order: 3
+ }
+}
+
+header .board-selector-container {
+ min-width: 320px;
+ display: flex;
+ align-items: center
+}
+
+@media (max-width: 480px) {
+ header .board-selector-container {
+ order: 2;
+ min-width: 300px
+ }
+ header .board-selector-container input[type=text] {
+ max-width: 280px
+ }
+}
+
+header .menus-container {
+ min-width: 120px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end
+}
+
+@media (max-width: 480px) {
+ header .menus-container {
+ order: 1;
+ margin-bottom: 5px;
+ margin-left: auto
+ }
+}
+
+header h1 {
+ font-size: 1.5em
+}
+
+header h1 .tooltip {
+ opacity: 0.3;
+ font-size: 0.7em
+}
+
+a i.web-notification-icon {
+ color: var(--link-color-primary);
+}
+
+a i.web-notification-icon:focus,
+a i.web-notification-icon:hover {
+ color: #000
+}
diff --git a/assets/css/src/icon.css b/assets/css/src/icon.css
new file mode 100644
index 00000000..7aa51469
--- /dev/null
+++ b/assets/css/src/icon.css
@@ -0,0 +1,21 @@
+.icon-success {
+ color: #468847
+}
+
+.icon-error {
+ color: #b94a48
+}
+
+.icon-fade-out {
+ opacity: 1;
+ animation: icon-fadeout 5s linear forwards
+}
+
+@keyframes icon-fadeout {
+ 0% {
+ opacity: 1
+ }
+ 100% {
+ opacity: 0
+ }
+}
diff --git a/assets/css/src/input_addon.css b/assets/css/src/input_addon.css
new file mode 100644
index 00000000..bf06d6ab
--- /dev/null
+++ b/assets/css/src/input_addon.css
@@ -0,0 +1,52 @@
+.input-addon {
+ display: flex
+}
+
+.input-addon-field {
+ flex: 1;
+ font-size: 1em;
+ color: var(--color-light);
+ margin: 0;
+ -webkit-appearance: none;
+ -moz-appearance: none
+}
+
+.input-addon-field:first-child {
+ border-radius: 5px 0 0 5px
+}
+
+.input-addon-field:last-child {
+ border-radius: 0 5px 5px 0
+}
+
+.input-addon-item {
+ background-color: rgba(147, 128, 108, 0.1);
+ color: #666;
+ font: inherit;
+ font-weight: normal
+}
+
+.input-addon-item:first-child {
+ border-radius: 5px 0 0 5px
+}
+
+.input-addon-item:last-child {
+ border-radius: 0 5px 5px 0
+}
+
+@media (max-width: 480px) {
+ .input-addon-item .dropdown .fa-caret-down {
+ display: none
+ }
+}
+
+.input-addon-field,
+.input-addon-item {
+ border: 1px solid rgba(147, 128, 108, 0.25);
+ padding: 4px 0.75em
+}
+
+.input-addon-field:not(:first-child),
+.input-addon-item:not(:first-child) {
+ border-left: 0
+}
diff --git a/assets/css/src/links.css b/assets/css/src/links.css
new file mode 100644
index 00000000..4c3bf784
--- /dev/null
+++ b/assets/css/src/links.css
@@ -0,0 +1,21 @@
+a {
+ color: var(--link-color-primary);
+ border: none;
+}
+
+a:focus {
+ color: var(--link-color-focus);
+ outline: 0;
+ text-decoration: none;
+}
+
+a:hover {
+ color: var(--link-color-hover);
+ text-decoration: none;
+}
+
+a .fa {
+ color: var(--color-primary);
+ padding-right: 3px;
+ text-decoration: none;
+}
diff --git a/assets/css/src/list_items.css b/assets/css/src/list_items.css
new file mode 100644
index 00000000..b8297a81
--- /dev/null
+++ b/assets/css/src/list_items.css
@@ -0,0 +1,14 @@
+.list-item-links,
+.list-item-actions {
+ display: inline-block;
+ float: left;
+ margin-left: 10px
+}
+
+.list-item-links a {
+ margin: 0
+}
+
+.list-item-action-hidden {
+ display: none
+}
diff --git a/assets/css/src/logo.css b/assets/css/src/logo.css
new file mode 100644
index 00000000..5e882fc4
--- /dev/null
+++ b/assets/css/src/logo.css
@@ -0,0 +1,19 @@
+.logo a {
+ opacity: 0.5;
+ color: #d40000;
+ text-decoration: none
+}
+
+.logo span {
+ color: var(--color-primary);
+}
+
+.logo a:hover {
+ opacity: 0.8;
+ color: var(--color-primary);
+}
+
+.logo a:focus span,
+.logo a:hover span {
+ color: #d40000
+}
diff --git a/assets/css/src/markdown.css b/assets/css/src/markdown.css
new file mode 100644
index 00000000..b6965b58
--- /dev/null
+++ b/assets/css/src/markdown.css
@@ -0,0 +1,48 @@
+.markdown {
+ line-height: 1.4em
+}
+
+.markdown h1 {
+ margin-top: 5px;
+ margin-bottom: 10px;
+ font-weight: bold
+}
+
+.markdown h2 {
+ font-weight: bold
+}
+
+.markdown p {
+ margin-bottom: 10px
+}
+
+.markdown ol,
+.markdown ul {
+ margin-left: 25px;
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+.markdown pre {
+ background: #fbfbfb;
+ padding: 10px;
+ border-radius: 5px;
+ border: 1px solid #ddd;
+ overflow: auto;
+ overflow-wrap: initial;
+ color: var(--color-medium);
+}
+
+.markdown blockquote {
+ font-style: italic;
+ border-left: 3px solid #ddd;
+ padding-left: 10px;
+ margin-bottom: 10px;
+ margin-left: 20px
+}
+
+.markdown img {
+ display: block;
+ max-width: 80%;
+ margin-top: 10px
+}
diff --git a/assets/css/src/modal.css b/assets/css/src/modal.css
new file mode 100644
index 00000000..6f455f8d
--- /dev/null
+++ b/assets/css/src/modal.css
@@ -0,0 +1,38 @@
+#modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.9);
+ overflow: auto;
+ z-index: 100
+}
+
+#modal-box {
+ position: fixed;
+ max-height: calc(100% - 30px);
+ top: 2%;
+ left: 50%;
+ transform: translateX(-50%);
+ background: #fff;
+ overflow: auto;
+ border-radius: 5px
+}
+
+#modal-content {
+ padding: 0 5px 5px
+}
+
+#modal-header {
+ text-align: right;
+ padding-right: 5px
+}
+
+#modal-close-button {
+ color: var(--color-primary);
+}
+
+#modal-close-button:hover {
+ color: var(--color-error);
+}
diff --git a/assets/css/src/page_header.css b/assets/css/src/page_header.css
new file mode 100644
index 00000000..b42dada9
--- /dev/null
+++ b/assets/css/src/page_header.css
@@ -0,0 +1,70 @@
+
+
+.page-header {
+ margin-bottom: 20px
+}
+
+.page-header .dropdown {
+ padding-right: 10px
+}
+
+.page-header h2 {
+ margin: 0;
+ padding: 0;
+ font-weight: bold;
+ border-bottom: 1px dotted #ccc
+}
+
+.page-header h2 a {
+ color: var(--color-primary);
+ text-decoration: none
+}
+
+.page-header h2 a:focus,
+.page-header h2 a:hover {
+ color: var(--color-light);
+}
+
+.page-header ul {
+ text-align: left;
+ margin-top: 5px;
+ display: inline-block
+}
+
+.page-header li {
+ display: inline;
+ padding-right: 15px
+}
+
+@media (max-width: 480px) {
+ .page-header li {
+ display: block;
+ line-height: 1.5em
+ }
+}
+
+.page-header li.active a {
+ color: var(--color-primary);
+ text-decoration: none;
+ font-weight: bold
+}
+
+.page-header li.active a:hover,
+.page-header li.active a:focus {
+ text-decoration: underline
+}
+
+.menu-inline {
+ margin-bottom: 5px
+}
+
+.menu-inline li {
+ display: inline;
+ padding-right: 15px
+}
+
+.menu-inline li .active a {
+ font-weight: bold;
+ color: #000;
+ text-decoration: none
+}
diff --git a/assets/css/src/pagination.css b/assets/css/src/pagination.css
new file mode 100644
index 00000000..5c4e7795
--- /dev/null
+++ b/assets/css/src/pagination.css
@@ -0,0 +1,18 @@
+.pagination {
+ text-align: center;
+ font-size: 0.9em
+}
+
+.pagination-showing {
+ margin-right: 5px;
+ padding-right: 5px;
+ border-right: 1px solid #999
+}
+
+.pagination-next {
+ margin-left: 5px
+}
+
+.pagination-previous {
+ margin-right: 5px
+}
diff --git a/assets/css/src/panel.css b/assets/css/src/panel.css
new file mode 100644
index 00000000..87d72ac3
--- /dev/null
+++ b/assets/css/src/panel.css
@@ -0,0 +1,16 @@
+.panel {
+ border-radius: 4px;
+ padding: 8px 35px 8px 10px;
+ margin-top: 10px;
+ margin-bottom: 15px;
+ border: 1px solid #ddd;
+ color: var(--color-primary);
+ background-color: #fcfcfc;
+ overflow: auto
+}
+
+.panel li {
+ list-style-type: square;
+ margin-left: 20px;
+ line-height: 1.35em
+}
diff --git a/assets/css/src/print.css b/assets/css/src/print.css
new file mode 100644
index 00000000..9a137842
--- /dev/null
+++ b/assets/css/src/print.css
@@ -0,0 +1,22 @@
+@page {
+ orientation: landscape;
+ -webkit-transform: rotate(-90deg);
+ -moz-transform: rotate(-90deg);
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+}
+
+#board-container {
+ overflow-x: initial !important
+}
+
+.board-task-list {
+ min-height: 0 !important
+}
+
+.task-board {
+ page-break-inside: avoid
+}
+
+.menu-inline, .project-header, .page-header, .menus-container, .sidebar, .alert, .alert-info, .dropdown > ul {
+ display: none
+}
diff --git a/assets/css/src/project.css b/assets/css/src/project.css
new file mode 100644
index 00000000..3ffdc629
--- /dev/null
+++ b/assets/css/src/project.css
@@ -0,0 +1,90 @@
+.js-project-creation-options {
+ max-width: 500px;
+ border-left: 3px dotted #efefef;
+ margin-top: 20px;
+ padding-left: 15px;
+ padding-bottom: 5px;
+ padding-top: 5px
+}
+
+.project-overview-columns {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-align-items: center;
+ align-items: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ margin-bottom: 20px;
+ font-size: 1.4em
+}
+
+@media (max-width: 480px) {
+ .project-overview-columns {
+ display: block
+ }
+}
+
+.project-overview-column {
+ text-align: center;
+ margin-right: 3%;
+ margin-top: 5px;
+ padding: 3px 15px 3px 15px;
+ border: 1px dashed #ddd
+}
+
+@media (max-width: 480px) {
+ .project-overview-column {
+ text-align: left
+ }
+}
+
+.project-overview-column small {
+ color: var(--color-light);
+}
+
+.project-overview-column strong {
+ color: var(--color-medium);
+ display: block
+}
+
+@media (max-width: 480px) {
+ .project-overview-column strong {
+ display: inline
+ }
+}
+
+.project-header {
+ margin-bottom: 8px
+}
+
+.project-header .dropdown-component {
+ margin-top: 4px;
+ margin-right: 5px;
+ float: left
+}
+
+@media (max-width: 768px) {
+ .project-header .dropdown-component {
+ float: none
+ }
+}
+
+.project-header .views-switcher-component {
+ margin-top: 4px;
+ float: left
+}
+
+@media (max-width: 768px) {
+ .project-header .views-switcher-component {
+ float: none;
+ margin-bottom: 10px
+ }
+}
+
+.project-header .filter-box-component form {
+ margin: 0
+}
diff --git a/assets/css/src/select_dropdown.css b/assets/css/src/select_dropdown.css
new file mode 100644
index 00000000..51c7d081
--- /dev/null
+++ b/assets/css/src/select_dropdown.css
@@ -0,0 +1,68 @@
+#select-dropdown-menu {
+ position: absolute;
+ display: block;
+ z-index: 1000;
+ min-width: 160px;
+ padding: 5px 0;
+ background: #fff;
+ list-style: none;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ overflow: scroll
+}
+
+.select-dropdown-menu-item {
+ white-space: nowrap;
+ overflow: hidden;
+ padding: 3px 10px;
+ color: var(--color-medium);
+ cursor: pointer;
+ border-bottom: 1px solid #f8f8f8;
+ line-height: 1.5em;
+ font-weight: 400
+}
+
+.select-dropdown-menu-item.active {
+ color: #fff;
+ background: #428bca
+}
+
+.select-dropdown-menu-item:last-child {
+ border: none
+}
+
+.select-dropdown-input-container {
+ position: relative;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ background-color: #fff;
+ width: 300px
+}
+
+.select-dropdown-input-container input.select-dropdown-input {
+ margin: 0 0 0 5px;
+ border: none;
+ height: 23px;
+ width: 270px
+}
+
+.select-dropdown-input-container input.select-dropdown-input:focus {
+ border: none;
+ box-shadow: none
+}
+
+.select-dropdown-input-container .select-dropdown-chevron {
+ color: var(--color-medium);
+ position: absolute;
+ top: 4px;
+ right: 5px;
+ cursor: pointer
+}
+
+.select-dropdown-input-container .select-loading-icon {
+ color: var(--color-medium);
+ position: absolute;
+ top: 4px;
+ right: 5px
+}
diff --git a/assets/css/src/sidebar.css b/assets/css/src/sidebar.css
new file mode 100644
index 00000000..467e48b1
--- /dev/null
+++ b/assets/css/src/sidebar.css
@@ -0,0 +1,99 @@
+.sidebar-container {
+ height: 100%;
+ display: flex;
+ flex-flow: row
+}
+
+@media (max-width: 768px) {
+ .sidebar-container {
+ flex-flow: wrap
+ }
+}
+
+.sidebar-content {
+ padding-left: 10px;
+ flex: 1 100%;
+ max-width: 85%;
+ overflow-wrap: break-word
+}
+
+@media (max-width: 768px) {
+ .sidebar-content {
+ padding-left: 0;
+ order: 1;
+ max-width: 100%
+ }
+}
+
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1) {
+ .sidebar-content {
+ max-width: 75%
+ }
+}
+
+.sidebar {
+ max-width: 25%;
+ min-width: 230px
+}
+
+@media (max-width: 768px) {
+ .sidebar {
+ flex: 1 auto;
+ order: 2
+ }
+}
+
+.sidebar h2 {
+ margin-top: 0
+}
+
+.sidebar>ul a {
+ text-decoration: none;
+ color: var(--color-light);
+ font-weight: 300
+}
+
+.sidebar>ul a:hover {
+ color: var(--color-primary);
+}
+
+.sidebar>ul li {
+ list-style-type: none;
+ line-height: 35px;
+ border-bottom: 1px dotted #efefef;
+ padding-left: 13px
+}
+
+.sidebar>ul li:hover {
+ border-left: 5px solid #555;
+ padding-left: 8px
+}
+
+.sidebar>ul li.active {
+ border-left: 5px solid #333;
+ padding-left: 8px
+}
+
+.sidebar>ul li.active a {
+ color: var(--color-primary);
+ font-weight: bold
+}
+
+.sidebar-icons>ul li {
+ padding-left: 0
+}
+
+.sidebar-icons>ul li:hover,
+.sidebar-icons>ul li.active {
+ padding-left: 0;
+ border-left: none
+}
+
+.sidebar>ul li.active a:focus,
+.sidebar>ul li.active a:hover {
+ color: var(--color-medium);
+}
+
+.sidebar>ul li:last-child {
+ margin-bottom: 15px
+}
diff --git a/assets/css/src/slideshow.css b/assets/css/src/slideshow.css
new file mode 100644
index 00000000..1fd06a23
--- /dev/null
+++ b/assets/css/src/slideshow.css
@@ -0,0 +1,57 @@
+.image-slideshow-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.95);
+ overflow: auto;
+ z-index: 100
+}
+
+.image-slideshow-overlay img {
+ display: block;
+ margin: auto
+}
+
+.image-slideshow-overlay figcaption {
+ color: #fff;
+ opacity: 0.7;
+ position: absolute;
+ bottom: 5px;
+ right: 15px
+}
+
+.slideshow-icon {
+ color: #fff;
+ position: absolute;
+ font-size: 2.5em;
+ opacity: 0.6
+}
+
+.slideshow-icon:hover {
+ opacity: 0.9;
+ cursor: pointer
+}
+
+.slideshow-previous-icon {
+ left: 10px;
+ top: 45%
+}
+
+.slideshow-next-icon {
+ right: 10px;
+ top: 45%
+}
+
+.slideshow-close-icon {
+ right: 10px;
+ top: 10px;
+ font-size: 1.4em
+}
+
+.slideshow-download-icon {
+ left: 10px;
+ bottom: 10px;
+ font-size: 1.3em
+}
diff --git a/assets/css/src/subtasks.css b/assets/css/src/subtasks.css
new file mode 100644
index 00000000..ab36bf6f
--- /dev/null
+++ b/assets/css/src/subtasks.css
@@ -0,0 +1,29 @@
+.subtask-cell {
+ padding: 4px 10px;
+ border-top: 1px dotted #dedede;
+ border-left: 1px dotted #dedede;
+ display: table-cell;
+ vertical-align: middle
+}
+
+.subtask-cell a {
+ color: var(--color-primary);
+ text-decoration: none
+}
+
+.subtask-cell a:hover,
+.subtask-cell a:focus {
+ color: var(--link-color-primary);
+}
+
+.subtask-cell:first-child {
+ border-left: none
+}
+
+@media (max-width: 768px) {
+ .subtask-cell {
+ width: 90%;
+ display: block;
+ border-left: none
+ }
+}
diff --git a/assets/css/src/suggest_menu.css b/assets/css/src/suggest_menu.css
new file mode 100644
index 00000000..083890c8
--- /dev/null
+++ b/assets/css/src/suggest_menu.css
@@ -0,0 +1,34 @@
+#suggest-menu {
+ position: absolute;
+ display: block;
+ z-index: 1000;
+ min-width: 160px;
+ padding: 5px 0;
+ background: #fff;
+ list-style: none;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175)
+}
+
+.suggest-menu-item {
+ white-space: nowrap;
+ padding: 3px 10px;
+ color: var(--color-primary);
+ font-weight: bold;
+ cursor: pointer
+}
+
+.suggest-menu-item.active {
+ color: #fff;
+ background: #428bca
+}
+
+.suggest-menu-item.active small {
+ color: #fff
+}
+
+.suggest-menu-item small {
+ color: var(--color-light);
+ font-weight: normal
+} \ No newline at end of file
diff --git a/assets/css/src/table.css b/assets/css/src/table.css
new file mode 100644
index 00000000..0f446fb6
--- /dev/null
+++ b/assets/css/src/table.css
@@ -0,0 +1,466 @@
+table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-bottom: 20px
+}
+
+table.table-fixed {
+ table-layout: fixed;
+ white-space: nowrap
+}
+
+table.table-fixed th {
+ overflow: hidden
+}
+
+table.table-fixed td {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+table.table-small {
+ font-size: 0.8em
+}
+
+table.table-striped tr:nth-child(odd) {
+ background: #fefefe
+}
+
+@media (max-width: 768px) {
+ table.table-scrolling {
+ overflow-x: auto;
+ display: inline-block;
+ vertical-align: top;
+ max-width: 100%;
+ white-space: nowrap
+ }
+}
+
+table th {
+ text-align: left;
+ padding: 0.5em 3px;
+ border: 1px solid #eee;
+ background: #fbfbfb
+}
+
+table th a {
+ text-decoration: none;
+ color: var(--color-primary);
+}
+
+table th a:focus,
+table th a:hover {
+ text-decoration: underline
+}
+
+table td {
+ border: 1px solid #eee;
+ padding: 0.5em 3px;
+ vertical-align: top
+}
+
+table td li {
+ margin-left: 20px
+}
+
+.column-1 {
+ width: 1%
+}
+
+.column-2 {
+ width: 2%
+}
+
+.column-3 {
+ width: 3%
+}
+
+.column-4 {
+ width: 4%
+}
+
+.column-5 {
+ width: 5%
+}
+
+.column-6 {
+ width: 6%
+}
+
+.column-7 {
+ width: 7%
+}
+
+.column-8 {
+ width: 8%
+}
+
+.column-9 {
+ width: 9%
+}
+
+.column-10 {
+ width: 10%
+}
+
+.column-11 {
+ width: 11%
+}
+
+.column-12 {
+ width: 12%
+}
+
+.column-13 {
+ width: 13%
+}
+
+.column-14 {
+ width: 14%
+}
+
+.column-15 {
+ width: 15%
+}
+
+.column-16 {
+ width: 16%
+}
+
+.column-17 {
+ width: 17%
+}
+
+.column-18 {
+ width: 18%
+}
+
+.column-19 {
+ width: 19%
+}
+
+.column-20 {
+ width: 20%
+}
+
+.column-21 {
+ width: 21%
+}
+
+.column-22 {
+ width: 22%
+}
+
+.column-23 {
+ width: 23%
+}
+
+.column-24 {
+ width: 24%
+}
+
+.column-25 {
+ width: 25%
+}
+
+.column-26 {
+ width: 26%
+}
+
+.column-27 {
+ width: 27%
+}
+
+.column-28 {
+ width: 28%
+}
+
+.column-29 {
+ width: 29%
+}
+
+.column-30 {
+ width: 30%
+}
+
+.column-31 {
+ width: 31%
+}
+
+.column-32 {
+ width: 32%
+}
+
+.column-33 {
+ width: 33%
+}
+
+.column-34 {
+ width: 34%
+}
+
+.column-35 {
+ width: 35%
+}
+
+.column-36 {
+ width: 36%
+}
+
+.column-37 {
+ width: 37%
+}
+
+.column-38 {
+ width: 38%
+}
+
+.column-39 {
+ width: 39%
+}
+
+.column-40 {
+ width: 40%
+}
+
+.column-41 {
+ width: 41%
+}
+
+.column-42 {
+ width: 42%
+}
+
+.column-43 {
+ width: 43%
+}
+
+.column-44 {
+ width: 44%
+}
+
+.column-45 {
+ width: 45%
+}
+
+.column-46 {
+ width: 46%
+}
+
+.column-47 {
+ width: 47%
+}
+
+.column-48 {
+ width: 48%
+}
+
+.column-49 {
+ width: 49%
+}
+
+.column-50 {
+ width: 50%
+}
+
+.column-51 {
+ width: 51%
+}
+
+.column-52 {
+ width: 52%
+}
+
+.column-53 {
+ width: 53%
+}
+
+.column-54 {
+ width: 54%
+}
+
+.column-55 {
+ width: 55%
+}
+
+.column-56 {
+ width: 56%
+}
+
+.column-57 {
+ width: 57%
+}
+
+.column-58 {
+ width: 58%
+}
+
+.column-59 {
+ width: 59%
+}
+
+.column-60 {
+ width: 60%
+}
+
+.column-61 {
+ width: 61%
+}
+
+.column-62 {
+ width: 62%
+}
+
+.column-63 {
+ width: 63%
+}
+
+.column-64 {
+ width: 64%
+}
+
+.column-65 {
+ width: 65%
+}
+
+.column-66 {
+ width: 66%
+}
+
+.column-67 {
+ width: 67%
+}
+
+.column-68 {
+ width: 68%
+}
+
+.column-69 {
+ width: 69%
+}
+
+.column-70 {
+ width: 70%
+}
+
+.column-71 {
+ width: 71%
+}
+
+.column-72 {
+ width: 72%
+}
+
+.column-73 {
+ width: 73%
+}
+
+.column-74 {
+ width: 74%
+}
+
+.column-75 {
+ width: 75%
+}
+
+.column-76 {
+ width: 76%
+}
+
+.column-77 {
+ width: 77%
+}
+
+.column-78 {
+ width: 78%
+}
+
+.column-79 {
+ width: 79%
+}
+
+.column-80 {
+ width: 80%
+}
+
+.column-81 {
+ width: 81%
+}
+
+.column-82 {
+ width: 82%
+}
+
+.column-83 {
+ width: 83%
+}
+
+.column-84 {
+ width: 84%
+}
+
+.column-85 {
+ width: 85%
+}
+
+.column-86 {
+ width: 86%
+}
+
+.column-87 {
+ width: 87%
+}
+
+.column-88 {
+ width: 88%
+}
+
+.column-89 {
+ width: 89%
+}
+
+.column-90 {
+ width: 90%
+}
+
+.column-91 {
+ width: 91%
+}
+
+.column-92 {
+ width: 92%
+}
+
+.column-93 {
+ width: 93%
+}
+
+.column-94 {
+ width: 94%
+}
+
+.column-95 {
+ width: 95%
+}
+
+.column-96 {
+ width: 96%
+}
+
+.column-97 {
+ width: 97%
+}
+
+.column-98 {
+ width: 98%
+}
+
+.column-99 {
+ width: 99%
+}
+
+.column-100 {
+ width: 100%
+}
diff --git a/assets/css/src/table_drag_and_drop.css b/assets/css/src/table_drag_and_drop.css
new file mode 100644
index 00000000..aaee9fc7
--- /dev/null
+++ b/assets/css/src/table_drag_and_drop.css
@@ -0,0 +1,32 @@
+.draggable-row-handle {
+ cursor: move;
+ color: #dedede
+}
+
+.draggable-row-handle:hover {
+ color: var(--color-primary);
+}
+
+tr.draggable-item-selected {
+ background: #fff;
+ border: 2px solid #666;
+ box-shadow: 4px 2px 10px -4px rgba(0, 0, 0, 0.55)
+}
+
+tr.draggable-item-selected td {
+ border-top: none;
+ border-bottom: none
+}
+
+tr.draggable-item-selected td:first-child {
+ border-left: none
+}
+
+tr.draggable-item-selected td:last-child {
+ border-right: none
+}
+
+.table-stripped tr.draggable-item-hover,
+.table-stripped tr.draggable-item-hover {
+ background: #FEFFF2
+}
diff --git a/assets/css/src/table_list.css b/assets/css/src/table_list.css
new file mode 100644
index 00000000..ce6b0e64
--- /dev/null
+++ b/assets/css/src/table_list.css
@@ -0,0 +1,174 @@
+.table-list {
+ font-size: 0.85em;
+ margin-bottom: 20px
+}
+
+.table-list-header {
+ background: #fbfbfb;
+ border: 1px solid #e5e5e5;
+ border-radius: 5px 5px 0 0;
+ line-height: 28px;
+ padding-left: 3px;
+ padding-right: 3px
+}
+
+.table-list-header a {
+ color: #333;
+ font-weight: 500;
+ text-decoration: none;
+ margin-right: 10px
+}
+
+.table-list-header a:hover,
+.table-list-header a:focus {
+ color: #767676
+}
+
+.table-list-header .table-list-header-count {
+ color: #767676;
+ display: inline-block;
+ float: left;
+}
+
+.table-list-header .table-list-header-menu {
+ text-align: right
+}
+
+.table-list-row {
+ padding-left: 3px;
+ padding-right: 3px;
+ border-bottom: 1px solid #e5e5e5;
+ border-right: 1px solid #e5e5e5
+}
+
+.table-list-row.table-border-left {
+ border-left: 1px solid #e5e5e5
+}
+
+.table-list-row:nth-child(odd) {
+ background: #fefefe
+}
+
+.table-list-row:last-child {
+ border-radius: 0 0 5px 5px
+}
+
+.table-list-row:hover {
+ background: #fff8dc;
+ border-bottom: 1px solid #ffeb8e;
+ border-right: 1px solid #ffeb8e
+}
+
+.table-list-row .table-list-title {
+ font-weight: 500;
+ line-height: 23px
+}
+
+.table-list-row .table-list-title.status-closed {
+ text-decoration: line-through;
+ margin-right: 10px
+}
+
+.table-list-row .table-list-title.status-closed a {
+ font-style: italic
+}
+
+.table-list-row .table-list-title a {
+ color: #333;
+ text-decoration: none
+}
+
+.table-list-row .table-list-title a:hover,
+.table-list-row .table-list-title a:focus {
+ text-decoration: underline
+}
+
+.table-list-row .table-list-details {
+ color: #999;
+ font-weight: 300;
+ line-height: 20px
+}
+
+.table-list-row .table-list-details span {
+ margin-left: 5px
+}
+
+.table-list-row .table-list-details span:first-child {
+ margin-left: 0
+}
+
+.table-list-row .table-list-details li {
+ display: inline;
+ list-style-type: none
+}
+
+.table-list-row .table-list-details li:after {
+ content: ', '
+}
+
+.table-list-row .table-list-details li:last-child:after {
+ content: ''
+}
+
+.table-list-row .table-list-details strong {
+ font-weight: 400;
+ color: #555
+}
+
+.table-list-row .table-list-details-with-icons {
+ float: left
+}
+
+@media (max-width: 768px) {
+ .table-list-row .table-list-details-with-icons {
+ float: none
+ }
+}
+
+.table-list-row .table-list-icons {
+ font-size: 0.8em;
+ text-align: right;
+ line-height: 30px
+}
+
+@media (max-width: 768px) {
+ .table-list-row .table-list-icons {
+ text-align: left;
+ line-height: 20px
+ }
+}
+
+.table-list-row .table-list-icons span {
+ margin-left: 5px
+}
+
+.table-list-row .table-list-icons a {
+ text-decoration: none
+}
+
+.table-list-row .table-list-icons a:hover {
+ color: #333
+}
+
+.table-list-row .table-list-icons a:hover i {
+ color: #333
+}
+
+.table-list-category {
+ font-size: 0.9em;
+ font-weight: 500;
+ color: #000;
+ padding: 1px 2px 1px 2px;
+ border-radius: 3px;
+ background: #fcfcfc;
+ border: 1px solid #ccc
+}
+
+.table-list-category a {
+ text-decoration: none;
+ color: #000
+}
+
+.table-list-category a:hover {
+ color: #36c
+}
diff --git a/assets/css/src/task_board.css b/assets/css/src/task_board.css
new file mode 100644
index 00000000..85bf38e2
--- /dev/null
+++ b/assets/css/src/task_board.css
@@ -0,0 +1,68 @@
+.task-board-sort-handle {
+ float: left;
+ padding-right: 5px
+}
+
+.task-board {
+ position: relative;
+ margin-bottom: 4px;
+ border: 1px solid #000;
+ padding: 2px;
+ word-wrap: break-word;
+ font-size: 0.9em;
+ border-radius: 6px
+}
+
+div.task-board-recent {
+ border-width: 2px
+}
+
+div.task-board-status-closed {
+ user-select: none;
+ border: 1px dotted #555
+}
+
+.task-board a {
+ color: #000;
+ text-decoration: none
+}
+
+.task-board-collapsed {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis
+}
+
+.task-board-title {
+ margin-top: 5px;
+ margin-bottom: 8px
+}
+
+.task-board-title a:hover {
+ text-decoration: underline
+}
+
+.task-board-saving-state {
+ opacity: 0.3
+}
+
+.task-board-saving-icon {
+ position: absolute;
+ margin: auto;
+ width: 100%;
+ text-align: center;
+ color: #000
+}
+
+.task-board-avatars {
+ text-align: right;
+ float: right
+}
+
+.task-board-change-assignee {
+ cursor: pointer
+}
+
+.task-board-change-assignee:hover {
+ opacity: 0.6
+}
diff --git a/assets/css/src/task_category.css b/assets/css/src/task_category.css
new file mode 100644
index 00000000..caf0e85d
--- /dev/null
+++ b/assets/css/src/task_category.css
@@ -0,0 +1,18 @@
+.task-board-category-container {
+ text-align: right;
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+.task-board-category {
+ border: 1px solid #555;
+ font-size: 0.9em;
+ font-weight: 500;
+ color: #000;
+ padding: 1px 3px 1px 2px;
+ border-radius: 3px
+}
+
+.task-board-category a:hover {
+ text-decoration: underline
+}
diff --git a/assets/css/src/task_date.css b/assets/css/src/task_date.css
new file mode 100644
index 00000000..a97cab28
--- /dev/null
+++ b/assets/css/src/task_date.css
@@ -0,0 +1,14 @@
+.task-date {
+ font-weight: 500;
+ color: #000
+}
+
+span.task-date-today {
+ opacity: 1.0;
+ color: var(--link-color-primary);
+}
+
+span.task-date-overdue {
+ opacity: 1.0;
+ color: #b94a48
+}
diff --git a/assets/css/src/task_form.css b/assets/css/src/task_form.css
new file mode 100644
index 00000000..d7d84d0b
--- /dev/null
+++ b/assets/css/src/task_form.css
@@ -0,0 +1,69 @@
+.task-form-container {
+ box-sizing: border-box;
+ display: flex;
+ flex-wrap: wrap
+}
+
+.task-form-container>* {
+ box-sizing: border-box
+}
+
+.task-form-container>* {
+ width: 1%
+}
+
+.task-form-main-column {
+ width: 60%
+}
+
+@media (max-width: 1000px) {
+ .task-form-main-column {
+ width: 100%
+ }
+}
+
+.task-form-main-column input[type="text"] {
+ width: 700px;
+ max-width: 99%
+}
+
+.task-form-secondary-column {
+ max-width: 250px;
+ min-width: 200px;
+ max-height: 600px;
+ padding-left: 10px;
+ overflow: auto;
+ width: 20%
+}
+
+@media (max-width: 1000px) {
+ .task-form-secondary-column {
+ width: 100%;
+ max-width: 99%;
+ max-height: none
+ }
+}
+
+@media (max-width: 768px) {
+ .task-form-secondary-column {
+ padding-left: 0
+ }
+}
+
+.task-form-secondary-column label:first-child {
+ margin-top: 0
+}
+
+@media (max-width: 1000px) {
+ .task-form-secondary-column label:first-child {
+ margin-top: 10px
+ }
+}
+
+.task-form-bottom {
+ width: 100%
+}
+
+.task-form-bottom label {
+ display: inline-block
+}
diff --git a/assets/css/src/task_icons.css b/assets/css/src/task_icons.css
new file mode 100644
index 00000000..a22417c2
--- /dev/null
+++ b/assets/css/src/task_icons.css
@@ -0,0 +1,127 @@
+.task-list-avatars {
+ display: inline-block;
+ float: left
+}
+
+@media (max-width: 768px) {
+ .task-list-avatars {
+ float: none;
+ display: block
+ }
+}
+
+.task-list-avatars .task-avatar-assignee {
+ font-weight: 300;
+ color: #999
+}
+
+.task-list-avatars:hover .task-avatar-assignee {
+ font-weight: 400;
+ color: #000
+}
+
+.task-board-icons,
+.task-list-icons {
+ font-size: 0.8em;
+ text-align: right
+}
+
+.task-board-icons a,
+.task-board-icons span.tooltip,
+.task-list-icons a,
+.task-list-icons span.tooltip {
+ text-decoration: none
+}
+
+.task-board-icons a:hover,
+.task-board-icons span.tooltip:hover,
+.task-list-icons a:hover,
+.task-list-icons span.tooltip:hover {
+ color: var(--color-primary);
+}
+
+.task-board-icons a:hover i,
+.task-board-icons span.tooltip:hover i,
+.task-list-icons a:hover i,
+.task-list-icons span.tooltip:hover i {
+ color: var(--color-primary);
+}
+
+.task-board-icons .task-score,
+.task-list-icons .task-score {
+ font-weight: bold
+}
+
+.task-board-icons .flag-milestone,
+.task-list-icons .flag-milestone {
+ color: green
+}
+
+.task-board-icons {
+ margin-top: 7px
+}
+
+.task-board-icons a {
+ opacity: 0.5
+}
+
+.task-board-icons span {
+ opacity: 0.5;
+ margin-left: 4px
+}
+
+.task-board-icons a:hover,
+.task-board-icons span.tooltip:hover {
+ opacity: 1.0;
+ font-weight: bold
+}
+
+.task-board-icons .task-board-icons-row {
+ line-height: 22px
+}
+
+.task-list-icons {
+ line-height: 22px
+}
+
+.task-list-icons a,
+.task-list-icons span,
+.task-list-icons i {
+ color: #999;
+ opacity: 1.0
+}
+
+.task-list-icons span {
+ margin-left: 5px
+}
+
+@media (max-width: 768px) {
+ .task-list-icons {
+ text-align: left
+ }
+}
+
+.task-icon-age {
+ display: inline-block
+}
+
+span.task-icon-age-total {
+ border: 1px solid #e5e5e5;
+ padding: 1px 3px 1px 3px;
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+span.task-icon-age-column {
+ border: 1px solid #e5e5e5;
+ border-left: none;
+ margin-left: -5px;
+ padding: 1px 3px 1px 3px;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px
+}
+
+.task-board span.task-icon-age-total,
+.task-board span.task-icon-age-column {
+ border-color: #666
+}
diff --git a/assets/css/src/task_links.css b/assets/css/src/task_links.css
new file mode 100644
index 00000000..eb7dba52
--- /dev/null
+++ b/assets/css/src/task_links.css
@@ -0,0 +1,12 @@
+.task-links-table td {
+ vertical-align: middle
+}
+
+.task-links-task-count {
+ color: var(--color-light);
+ font-weight: normal
+}
+
+.task-link-closed {
+ text-decoration: line-through
+} \ No newline at end of file
diff --git a/assets/css/src/task_list.css b/assets/css/src/task_list.css
new file mode 100644
index 00000000..7da439a6
--- /dev/null
+++ b/assets/css/src/task_list.css
@@ -0,0 +1,28 @@
+
+.task-list-subtasks {
+ display: table;
+ width: 100%
+}
+
+@media (max-width: 768px) {
+ .task-list-subtasks {
+ display: block
+ }
+}
+
+.task-list-subtask {
+ display: table-row
+}
+
+@media (max-width: 768px) {
+ .task-list-subtask {
+ display: block
+ }
+}
+
+@media (max-width: 768px) {
+ .subtask-assignee,
+ .subtask-time-tracking-cell {
+ display: none
+ }
+}
diff --git a/assets/css/src/task_summary.css b/assets/css/src/task_summary.css
new file mode 100644
index 00000000..f6cbea26
--- /dev/null
+++ b/assets/css/src/task_summary.css
@@ -0,0 +1,51 @@
+.task-summary-container .task-tags {
+ margin-top: 10px
+}
+
+#task-summary {
+ margin-bottom: 15px
+}
+
+#task-summary h2 {
+ color: var(--color-medium);
+ font-size: 1.6em;
+ margin-top: 0;
+ padding-top: 0
+}
+
+.task-summary-container {
+ border: 2px solid #000;
+ border-radius: 8px;
+ padding: 10px
+}
+
+.task-summary-columns {
+ display: flex;
+ flex-flow: row;
+ justify-content: space-between
+}
+
+@media (max-width: 768px) {
+ .task-summary-columns {
+ flex-flow: column
+ }
+}
+
+.task-summary-column {
+ color: var(--color-primary);
+}
+
+.task-summary-column span {
+ color: var(--color-medium);
+}
+
+.task-summary-column li {
+ line-height: 23px
+}
+
+#external-task-view {
+ padding: 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border: 1px dotted #ccc
+}
diff --git a/assets/css/src/task_tags.css b/assets/css/src/task_tags.css
new file mode 100644
index 00000000..5af22109
--- /dev/null
+++ b/assets/css/src/task_tags.css
@@ -0,0 +1,8 @@
+.task-tags li {
+ display: inline-block;
+ margin: 3px 3px 0 0;
+ padding: 1px 3px 1px 3px;
+ color: var(--color-primary);
+ border: 1px solid #333;
+ border-radius: 4px
+}
diff --git a/assets/css/src/text_editor.css b/assets/css/src/text_editor.css
new file mode 100644
index 00000000..fd2c816b
--- /dev/null
+++ b/assets/css/src/text_editor.css
@@ -0,0 +1,29 @@
+.text-editor {
+ margin-top: 10px
+}
+
+.text-editor a {
+ font-size: 1em;
+ color: var(--color-light);
+ text-decoration: none;
+ margin-right: 10px
+}
+
+.text-editor a:hover {
+ color: var(--link-color-primary);
+}
+
+.text-editor .text-editor-preview-area {
+ border: 1px solid #dedede;
+ width: 700px;
+ max-width: 99%;
+ height: 250px;
+ overflow: auto;
+ padding: 2px
+}
+
+.text-editor textarea {
+ width: 700px;
+ max-width: 98%;
+ height: 250px
+}
diff --git a/assets/css/src/thumbnails.css b/assets/css/src/thumbnails.css
new file mode 100644
index 00000000..38b75dec
--- /dev/null
+++ b/assets/css/src/thumbnails.css
@@ -0,0 +1,59 @@
+.file-thumbnails {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-justify-content: flex-start;
+ justify-content: flex-start
+}
+
+.file-thumbnail {
+ width: 250px;
+ border: 1px solid #efefef;
+ border-radius: 5px;
+ margin-bottom: 20px;
+ box-shadow: 4px 2px 10px -6px rgba(0, 0, 0, 0.55);
+ margin-right: 15px
+}
+
+.file-thumbnail img {
+ cursor: pointer;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px
+}
+
+.file-thumbnail img:hover {
+ opacity: 0.5
+}
+
+.file-thumbnail-content {
+ padding-left: 8px;
+ padding-right: 8px
+}
+
+.file-thumbnail-title {
+ font-weight: 700;
+ font-size: 0.9em;
+ color: var(--color-medium);
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+.file-thumbnail-description {
+ font-size: 0.8em;
+ color: var(--color-light);
+ margin-top: 8px;
+ margin-bottom: 5px
+}
+
+.file-viewer {
+ position: relative
+}
+
+.file-viewer img {
+ max-width: 95%;
+ max-height: 85%;
+ margin-top: 10px
+}
diff --git a/assets/css/src/titles.css b/assets/css/src/titles.css
new file mode 100644
index 00000000..55b91875
--- /dev/null
+++ b/assets/css/src/titles.css
@@ -0,0 +1,20 @@
+h1,
+h2,
+h3 {
+ font-weight: normal;
+ color: var(--color-primary);
+}
+
+h1 {
+ font-size: 1.5em
+}
+
+h2 {
+ font-size: 1.4em;
+ margin-bottom: 10px
+}
+
+h3 {
+ margin-top: 10px;
+ font-size: 1.2em
+}
diff --git a/assets/css/src/tooltip.css b/assets/css/src/tooltip.css
new file mode 100644
index 00000000..769f1120
--- /dev/null
+++ b/assets/css/src/tooltip.css
@@ -0,0 +1,25 @@
+.tooltip i.fa {
+ cursor: pointer
+}
+
+.tooltip .fa-info-circle {
+ color: var(--color-light);
+}
+
+#tooltip-container {
+ padding: 5px;
+ background: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ box-shadow: 0 6px 12px #aaa;
+ position: absolute;
+ min-width: 350px
+}
+
+#tooltip-container .markdown p {
+ margin-bottom: 0
+}
+
+#tooltip-container .tooltip-large {
+ width: 600px
+}
diff --git a/assets/css/src/user_mention.css b/assets/css/src/user_mention.css
new file mode 100644
index 00000000..557ce5a0
--- /dev/null
+++ b/assets/css/src/user_mention.css
@@ -0,0 +1,9 @@
+.user-mention-link {
+ font-weight: bold;
+ color: var(--user-mention-color);
+ text-decoration: none
+}
+
+.user-mention-link:hover {
+ color: var(--color-medium);
+}
diff --git a/assets/css/src/variables.css b/assets/css/src/variables.css
new file mode 100644
index 00000000..80964589
--- /dev/null
+++ b/assets/css/src/variables.css
@@ -0,0 +1,69 @@
+:root {
+ --color-primary: #333;
+ --color-light: #999;
+ --color-lighter: #dedede;
+ --color-dark: #000;
+ --color-medium: #555;
+ --color-error: #b94a48;
+
+ --link-color-primary: #3366CC;
+ --link-color-focus: #DF5353;
+ --link-color-hover: #333;
+
+ --alert-color-default: #c09853;
+ --alert-color-success: #468847;
+ --alert-color-error: #b94a48;
+ --alert-color-info: #3a87ad;
+ --alert-color-normal: #333;
+
+ --alert-background-color-default: #fcf8e3;
+ --alert-background-color-success: #dff0d8;
+ --alert-background-color-error: #f2dede;
+ --alert-background-color-info: #d9edf7;
+ --alert-background-color-normal: #f0f0f0;
+
+ --alert-border-color-default: #fbeed5;
+ --alert-border-color-success: #d6e9c6;
+ --alert-border-color-error: #eed3d7;
+ --alert-border-color-info: #bce8f1;
+ --alert-border-color-normal: #ddd;
+
+ --button-default-color: #333;
+ --button-default-background-color: #f5f5f5;
+ --button-default-border-color: #ddd;
+
+ --button-default-color-focus: #000;
+ --button-default-background-color-focus: #fafafa;
+ --button-default-border-color-focus: #bbb;
+
+ --button-primary-color: #fff;
+ --button-primary-background-color: #4d90fe;
+ --button-primary-border-color: #3079ed;
+
+ --button-primary-color-focus: #fff;
+ --button-primary-background-color-focus: #357ae8;
+ --button-primary-border-color-focus: #3079ed;
+
+ --button-danger-color: #fff;
+ --button-danger-background-color: #d14836;
+ --button-danger-border-color: #b0281a;
+
+ --button-danger-color-focus: #fff;
+ --button-danger-background-color-focus: #c53727;
+ --button-danger-border-color-focus: #b0281a;
+
+ --button-disabled-color: #ccc;
+ --button-disabled-background-color: #f7f7f7;
+ --button-disabled-border-color: #ccc;
+
+ --avatar-color-letter: #fff;
+
+ --activity-title-color: #000;
+ --activity-title-border-color: #efefef;
+ --activity-event-background-color: #fafafa;
+ --activity-event-hover-color: #fff8dc;
+
+ --user-mention-color: #000;
+
+ --board-task-limit-color: #DF5353;
+}
diff --git a/assets/css/src/views.css b/assets/css/src/views.css
new file mode 100644
index 00000000..b8bb1e69
--- /dev/null
+++ b/assets/css/src/views.css
@@ -0,0 +1,69 @@
+.views {
+ margin-right: 10px;
+ margin-top: 1px;
+ font-size: 0.9em
+}
+
+@media (max-width: 560px) {
+ .views {
+ width: 100%
+ }
+}
+
+@media (max-width: 768px) {
+ .views {
+ margin-top: 10px;
+ font-size: 1em
+ }
+}
+
+@media (max-width: 480px) {
+ .views {
+ margin-top: 5px
+ }
+}
+
+.views li {
+ white-space: nowrap;
+ background: #fafafa;
+ border: 1px solid #ddd;
+ border-right: none;
+ padding: 4px 8px;
+ display: inline
+}
+
+@media (max-width: 560px) {
+ .views li {
+ display: block;
+ margin-top: 5px;
+ border-radius: 5px;
+ border: 1px solid #ddd
+ }
+}
+
+.views li.active a {
+ font-weight: bold;
+ color: #000;
+ text-decoration: none
+}
+
+.views li:first-child {
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px
+}
+
+.views li:last-child {
+ border-right: 1px solid #ddd;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px
+}
+
+.views a {
+ color: var(--color-medium);
+ text-decoration: none
+}
+
+.views a:hover {
+ color: var(--color-primary);
+ text-decoration: underline
+}
diff --git a/assets/css/vendor.min.css b/assets/css/vendor.min.css
index 25d22443..6d56c4c9 100644
--- a/assets/css/vendor.min.css
+++ b/assets/css/vendor.min.css
@@ -3,18 +3,10 @@
* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, autocomplete.css, menu.css, datepicker.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
-/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20
+ .ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:700}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:400;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:400;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:400;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(../vendor/jquery-ui/images/ui-icons_444444_256x240.png)}.ui-widget-header .ui-icon{background-image:url(../vendor/jquery-ui/images/ui-icons_444444_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url(../vendor/jquery-ui/images/ui-icons_555555_256x240.png)}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url(../vendor/jquery-ui/images/ui-icons_ffffff_256x240.png)}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAABDlBMVEV3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diB3diBVLkeJAAAAWXRSTlMAGRAzBAhQv4KZLyJVcUBmYBoTMswNITwWQkhLIB5aIycxUyyFNIeAw2rIz8Y4RRy8uL58q7WljKqorR+yKf0BnlEk7woGAgOPomKUSqCvbd+cR2M/b3+RaPlAXvEAAAABYktHRACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAPZElEQVR42u1dC2PbthEGyUiq6ZiSXblLE6ex1mTO5iXZq+u6ro3abG26pOkSd13v//+RAXzhcIeHWMoUbeOTLesIEMB9PIB3ACgLERERMQIkkOy6CTvWH0bOQO/mJeDXP8EMqMzDEkIsEBRMAmh7jHSVmuAjAKwC8FRAzi8/DmoS1AI5AQltj5FOryAjgJ7OK2CZkwEZYO23q+BJ5wwKkttfui1z4s20VTAL5k2kF5hbiPcKcwvwNGB4C7CTwproI4CdDcxEPKUTExx+DNiAj0u9C9AuNPxdYOe46Y5QRERERERExIhx6Z7gjv2ghEVrQJ33hJ5BsxsBfsIq8M0HsAkhWfqglFgawAhgGWh2M1xMWAWUAE90qUofMhhi7be32JNsmVFJPKeLwBQglAQMNh3ALVjYbNaI1jaYD0jM0nw9atcWYEXiaXH/+QDeQ3Y6BoRx3e8CERERERERERG7Qz/HP+iaBsvvHXj0LAD4cip0yN27fXw7AGtQoDTwH+HqkWTgWczTwZVmr8DbAEuqv35bCT6CWDorjGnAqwOSCI7EhlFWHjkBXIkb1M/DZQgRwCeAwK9B+HRPFlPBOjeZszKz0wK9/FlzeE3I24GEzUII45bT/SYarqGLesE+btlDBP70QInkckDwggQqAGGt052667vAJZ8fvk1GRERERERE3FT035ba081ILLvR3UXa/NDgUlWg+m4N2KgCfzzP1lYtDUDpAi9ObeDVqczu4ASsy/u8kaxId/2W+JYq4CsbrBcV8SPw8iRvrWWze+IlILA3XFjNzMeAl7/EMt0TmH4wwtkmHG4OsLVzYkEsHLZE4+yRDbFBA+ypVoZJ6fR8iw24T2cEsBbw5pnptIuFCbA3wHkJN0pmAbObAOvaOl+hd14A1gVIFwl2AXsvT5w5GMPezQE8j8XAhFmAYCv0AQLIIEhS2bAUmsGh9VuukT/Z3goHgZsE7wEL4JnHPR+w6+djIiIiIiIiRo3LvYtzR4U8Kms5Y7uORbg46Ja9o/7Aj+Doz3oGZm2j9XKiMc0MTpGt7PgXvroD2G5x03es1iY9T4cHXH1LBmAKCyP69BIC9jL7EuB+vrtM8nw/gG0+w1yvZu31BQfNueA6fesENOGmi4DEEg7zpnviKZ5uW50Gkgr+zLBFChJLC1m4C9hEwduHLaXRCRHvnhUrAbRLbD2804Oamkxg0Zn5fL8lnQi2bo8JYfwECAkR3h/mjA6LTskTI4HoNbQJKDT/4J8/uoa47vpFRERERFxvpFf8RmZxO8C3XEW94V+i/5iWAqzLLKb3lQZXAyElhXpFIUa1GMK2LgsUryhVU0hRMGTGdylUFqDzC+sSOCNwLN0GePRCt9dL/Y3ozCAAKhKMeJaKWN8ExkWAZfmdE5QSmRKA/wpL7IaOJW0XG0sX2MACWH5zx0ZFkMMC6H6Fhu7R6M90ZGMAyWGdoUm1ldAxwLJBZjTmr9tkSPiPY8hH+VO7QmD5pDDgd2V2YIDT0e0i0XugD8kICeiLLvpHRERERNwsZMpPyDbPf2sicWuo1k1l42ZTX473Ap4b7FWukkvFjCZnfj5uiRwgF7dIAeiMfSnuC4dME8XtGuSERiU4KIopcvbKzwYhpVs057ufG3FRa7gw9G1bTGW2srVfpzetnuQwmUA+MRogWDBB99paherA3FZjG6QVRZFWIITMDAIQA6BMdKJr3DMIkEUfSrSuNDQW4FrvrorTBU5gcnT0PmAClsul/wkMgQkQAQL2DQJBqY4OSEISTEjVQJPwYwWXBcAU0B9VcT0GAGqg0eLj8vRjTcDRB/u/Mgi4c+cO2x7vlskBSoDS/0NMgGlSIPUHTlGKpv3gjoLTAg6V6jA91PMAWWn/LQGqfDTFVhWnC5Rd4O5d3AWWQl4C+d6ekJWvX0iA0v/2vQ/dBCTkgDySJIcJCmHg5OTEPQbAoWRA6o8JKH9aAspBEBFwX519/35z4KgaBI+IOugETgB7REMQAj7C8xPzxW35XrgIoBXCgxKowtPTU9AmyiwgO5xO5ZvuAqXsJuC0Qn0gyeGDPF9Bjp8RQl1IHvh1+cL6TigBE0IAGBYw1/p7CGiL+7gEMblJSwC1gOywRHOJmAxqjJ2C0SfzvL0L5E39udMCOAGhLoDTqzGwaDO3BGRmfW1xlR8A7wkHiAWEboNVe+bmHEymb93AFQ4MegtcPT9ACSgZKMT2kGWLEh18Pcah6bqEs0OvaaX9reofERERETFyPHzoT0/BO68NYNv6SJDpcPdReZt61Ih1sN3G2PNanrfnVq7J/sayEL8h7Sm89zUZbR2TQ/K2jfXPMs3ATHmRZ/kUBTuyyfO91pGzUpHp449qV7xhQJ6sQFaaTM8mV67gxnJ1PVoNCuXMpe29PVXczvE1fQzwmOivHKUTrb/yzdvoN7E7Yiich9/K1wFuUCavc4byG2uDNLYQvxPn4vc4vs2lkBuyMOXjyTGSVfsXC1cDoXb2a7kxOGRxsrGLVLuO1YxFG11xAkg4DOLJ/afP7t1H00aZtO8Mt8dLwB/gj/L1J6ygcv2JjIMPGRtPcur7tnLtzKf2+h42IhoHZnCwkBxUwl4zY7PnIqAeBZAFHMCf4aFukNQfTdmFLeAv4hPxVz2ldEos4JRYwCmxgIURe8geUA1SbXxL6vu0kj5tG1gG8zh2ADUGaP3CBDy5/9ED+bLrX3vqmIAUylmnRv4bfCZff0c7Jow+XsrvExmll/1X4oGDgCa6S40GEfsRGOYoD5OpODHiRUJARhgm+rc7IkwCkPz5J3dmd/7xRS0fNsXtbyYvzKsnWBeoZSw+fqxlZfvtfKeVAEGg9gilwj0pCWSS+1HdYH0XUFuMhKtLqO5OivPLgujPA/gU6y+efimHv/mXT1sCZP9PPeczRedsEDUnWdkkP/ED6LQ3kW3fAOOTF1R/ehsU1aYunVyuCNwu2vOBlWAgF1cQRYcA3/CBIiIiIiJ2gCmemFauHJyyPM/1x0veWlguRXjvftCnBSms5fsa35rPALmaH8JXX339NXyBmnOg9C8hP6zuwZMncG/VpJP9Fs10QzPf0Mr0QBu8Ub8ph9l0+sJgwP/lYiEsZFk5ijZBMrCm3viJ9rz+qfAv7Yqup7KABQtu2nSyVEs+1MGrziNdx0wGO3pxsErQwZVyjNfwwrJb9hcSoFwtdIbSvfw1DUAT8M23z59/+41uz1RAscArO5QAY8sIlJNRaMNDKqqpilT72pmaj0EEPFNrdbjCtWLdRQANL7m6JL1a3dMWtS5lrX9q5ofS1vfb01/KpBlyV2FCNmSY55froCgDqMBTxnMCW8B8jver56uVCi81AVJ/gabAKOM0WLCLxMTb9jc2gPSvrmAzBnwG+xLwss1QFMb5cOwn4Eh+PFI/TbIysCmcIAsg0euzZ4fPVnDWFvhCtW62PQKoBXxXys2sXK2/VjBflzgxT9eEyUt6fHxsEFBf2erPicTn8odseFg7x4DVSnUAPAi+mE5nWxwEyRjwXT0G1Awo/QsjHF2p9p7o09cHcIYYUAUdoWGvmbxp9Pv44/qHGIhzDJhmq9UKVpgBehvc9l3gsZqY1e2hodt6PtcTVnIElD+pZgCMP83H/eYAvQ2WFlHCMQbAVAETYLuGfQggSMtr/7jxAyx7BM0RVlrLi1SNlM+b1H8/ScyvdRHlqFFLk0xN6WXNho3ufsDucfTq1RESFweKq/R5yxhtMNs5GREREdELU7w7+vX3aoj5/vWuGzUg3gC8aYUfmlH3h103azDcVererYXX1R1HvWsbWMISn/AfizMjtrfzbFnyv+xf0KZ4owKoxgTeagLetjmI22DzIwpNCVt6oAeoDEt1T196y79E3K0Uvosqp64Ha09KDxTaKAIbN5X8bvLOXJ1l1Q1JgBwBVAj9xqjcbMMcL4xV+uvlxcLU37Z1d5EusH7v5Ns7I8NyhwQUzfUu3AQUpMsDnKc4DetvIyA1TKbcaD4xwmmDgAyWy+Vwnq5W2E0APwfpL3U3BsXeFjDsIFgaQPXQTKnDK03AK5Sp8BeA03uPAcNGa3TQe6rFpzgTOYkwYPDT+y4gxIBD4FIrXLXgohEvsI50DMBSsf3d5zsN1n9U07Lw8sddtmFMsxURERERERGXjAJ84mUDZsSR2egJiT7Y26P6g0e8fAKAUGAQUKalOEMxS9WbkUGFzI08rzK5w9uC+M4FS4ZyhWxAAkwKTAKqtLbN5eWR6tEMBgE4nRNAg0U+GWBuxh2EALwZmBJQTn/UjSz/zHCb6wyYgJlFp7DGhrjN/x+wEQEDWsBGBAxsAcOOARQ7HwMGvgvw+Y4d3wVGgN36ARERERERNxv+58iuO9L/Cvjpc7R3U3opZzfoe3LVc6TwU4GeZ8iLl5YHKBrfhH7/QVd5dFjD/yQBAu1OVqzMGAP0yVK9X7+bPDakcC7ET4U4x09br09kRGs+X6sVmRxP5E+7fRuOzf3sSgZTnqjXZKTubVbvmz/TVyhfgNptf+AgoPxqtOSw+X49SCBJ1IFGPlQv/f17Kl0eSQ5HSkBpARLn+IqrcWFt7E5GBHxRoTXxjvLoMCvvgQu050UGo1M4mToIuHaDYA5wfnaOh/1qOkKHpLDl/3A5NuRv5PV5cyWfmo+IiIiI6A36fEBIppuouspd6+srh0CfDwjJdBtdV7lrfX3l4PWHFq83kelGyq5y1/r6ykHQ5wPe6gIa+UL5hhe1XG2lLdNftTJQWTjT3+r0t876BXjT1Y5Oki5o+wV+3sEH0BVAKzeFiHo1+OICrw6H8vN0ll8vkdvS8eqZ/S8Y7RE///yzMNtTPpG8KQHGB4useu8FaTBuEMsvmEL+/ISAYHtE8+uQV5X+2yNggb6DzkKA7W8XhYL1WyzEZwHq20ZW0IGAcBdQ377VxcRDXQRCBHq7lCD5qSwZWLX5g6DPB1gGtWYQ1IMYHaSAyu5B1TpI0vrpIGumN/y4ZNUHWjmIoW9jfW+jXeUwhnZk+jpSXeUwhnZl+7rSXeWIiIiIiIgID2rH4dLk0YP8/8CwfA0JAD8B5QsrKPwECPpPD8eN6isJwSMTgqB5c8nk39+NHdECbvwYcNPvAhERERERERHbRnJ1PIHgLkjIum90Tcj/BxozEhFo6wYE0Ot9lfTfhgVQfa+U/qYFlNvby5eDgHbtzdTX4FCdfW3HgKyBqT++4pX+V8cG+lpAlf/q6t/XAq68/n3vAg79r+0YEIDW/+rYQNACukDp3fxGRIwc/we0wIqagmy7GAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0xM1QxMDoyMTo1OSswMDowMBsBiYsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMTNUMDk6MjY6NTQrMDA6MDDzzaAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAABDlBMVEXMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADP1XLPAAAAWXRSTlMAGRAzBAhQv4KZLyJVcUBmYBoTMswNITwWQkhLIB5aIycxUyyFNIeAw2rIz8Y4RRy8uL58q7WljKqorR+yKf0BnlEk7woGAgOPomKUSqCvbd+cR2M/b3+RaPlAXvEAAAABYktHRACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAPZElEQVR42u1dC2PbthEGyUiq6ZiSXblLE6ex1mTO5iXZq+u6ro3abG26pOkSd13v//+RAXzhcIeHWMoUbeOTLesIEMB9PIB3ACgLERERMQIkkOy6CTvWH0bOQO/mJeDXP8EMqMzDEkIsEBRMAmh7jHSVmuAjAKwC8FRAzi8/DmoS1AI5AQltj5FOryAjgJ7OK2CZkwEZYO23q+BJ5wwKkttfui1z4s20VTAL5k2kF5hbiPcKcwvwNGB4C7CTwproI4CdDcxEPKUTExx+DNiAj0u9C9AuNPxdYOe46Y5QRERERERExIhx6Z7gjv2ghEVrQJ33hJ5BsxsBfsIq8M0HsAkhWfqglFgawAhgGWh2M1xMWAWUAE90qUofMhhi7be32JNsmVFJPKeLwBQglAQMNh3ALVjYbNaI1jaYD0jM0nw9atcWYEXiaXH/+QDeQ3Y6BoRx3e8CERERERERERG7Qz/HP+iaBsvvHXj0LAD4cip0yN27fXw7AGtQoDTwH+HqkWTgWczTwZVmr8DbAEuqv35bCT6CWDorjGnAqwOSCI7EhlFWHjkBXIkb1M/DZQgRwCeAwK9B+HRPFlPBOjeZszKz0wK9/FlzeE3I24GEzUII45bT/SYarqGLesE+btlDBP70QInkckDwggQqAGGt052667vAJZ8fvk1GRERERERE3FT035ba081ILLvR3UXa/NDgUlWg+m4N2KgCfzzP1lYtDUDpAi9ObeDVqczu4ASsy/u8kaxId/2W+JYq4CsbrBcV8SPw8iRvrWWze+IlILA3XFjNzMeAl7/EMt0TmH4wwtkmHG4OsLVzYkEsHLZE4+yRDbFBA+ypVoZJ6fR8iw24T2cEsBbw5pnptIuFCbA3wHkJN0pmAbObAOvaOl+hd14A1gVIFwl2AXsvT5w5GMPezQE8j8XAhFmAYCv0AQLIIEhS2bAUmsGh9VuukT/Z3goHgZsE7wEL4JnHPR+w6+djIiIiIiIiRo3LvYtzR4U8Kms5Y7uORbg46Ja9o/7Aj+Doz3oGZm2j9XKiMc0MTpGt7PgXvroD2G5x03es1iY9T4cHXH1LBmAKCyP69BIC9jL7EuB+vrtM8nw/gG0+w1yvZu31BQfNueA6fesENOGmi4DEEg7zpnviKZ5uW50Gkgr+zLBFChJLC1m4C9hEwduHLaXRCRHvnhUrAbRLbD2804Oamkxg0Zn5fL8lnQi2bo8JYfwECAkR3h/mjA6LTskTI4HoNbQJKDT/4J8/uoa47vpFRERERFxvpFf8RmZxO8C3XEW94V+i/5iWAqzLLKb3lQZXAyElhXpFIUa1GMK2LgsUryhVU0hRMGTGdylUFqDzC+sSOCNwLN0GePRCt9dL/Y3ozCAAKhKMeJaKWN8ExkWAZfmdE5QSmRKA/wpL7IaOJW0XG0sX2MACWH5zx0ZFkMMC6H6Fhu7R6M90ZGMAyWGdoUm1ldAxwLJBZjTmr9tkSPiPY8hH+VO7QmD5pDDgd2V2YIDT0e0i0XugD8kICeiLLvpHRERERNwsZMpPyDbPf2sicWuo1k1l42ZTX473Ap4b7FWukkvFjCZnfj5uiRwgF7dIAeiMfSnuC4dME8XtGuSERiU4KIopcvbKzwYhpVs057ufG3FRa7gw9G1bTGW2srVfpzetnuQwmUA+MRogWDBB99paherA3FZjG6QVRZFWIITMDAIQA6BMdKJr3DMIkEUfSrSuNDQW4FrvrorTBU5gcnT0PmAClsul/wkMgQkQAQL2DQJBqY4OSEISTEjVQJPwYwWXBcAU0B9VcT0GAGqg0eLj8vRjTcDRB/u/Mgi4c+cO2x7vlskBSoDS/0NMgGlSIPUHTlGKpv3gjoLTAg6V6jA91PMAWWn/LQGqfDTFVhWnC5Rd4O5d3AWWQl4C+d6ekJWvX0iA0v/2vQ/dBCTkgDySJIcJCmHg5OTEPQbAoWRA6o8JKH9aAspBEBFwX519/35z4KgaBI+IOugETgB7REMQAj7C8xPzxW35XrgIoBXCgxKowtPTU9AmyiwgO5xO5ZvuAqXsJuC0Qn0gyeGDPF9Bjp8RQl1IHvh1+cL6TigBE0IAGBYw1/p7CGiL+7gEMblJSwC1gOywRHOJmAxqjJ2C0SfzvL0L5E39udMCOAGhLoDTqzGwaDO3BGRmfW1xlR8A7wkHiAWEboNVe+bmHEymb93AFQ4MegtcPT9ACSgZKMT2kGWLEh18Pcah6bqEs0OvaaX9reofERERETFyPHzoT0/BO68NYNv6SJDpcPdReZt61Ih1sN3G2PNanrfnVq7J/sayEL8h7Sm89zUZbR2TQ/K2jfXPMs3ATHmRZ/kUBTuyyfO91pGzUpHp449qV7xhQJ6sQFaaTM8mV67gxnJ1PVoNCuXMpe29PVXczvE1fQzwmOivHKUTrb/yzdvoN7E7Yiich9/K1wFuUCavc4byG2uDNLYQvxPn4vc4vs2lkBuyMOXjyTGSVfsXC1cDoXb2a7kxOGRxsrGLVLuO1YxFG11xAkg4DOLJ/afP7t1H00aZtO8Mt8dLwB/gj/L1J6ygcv2JjIMPGRtPcur7tnLtzKf2+h42IhoHZnCwkBxUwl4zY7PnIqAeBZAFHMCf4aFukNQfTdmFLeAv4hPxVz2ldEos4JRYwCmxgIURe8geUA1SbXxL6vu0kj5tG1gG8zh2ADUGaP3CBDy5/9ED+bLrX3vqmIAUylmnRv4bfCZff0c7Jow+XsrvExmll/1X4oGDgCa6S40GEfsRGOYoD5OpODHiRUJARhgm+rc7IkwCkPz5J3dmd/7xRS0fNsXtbyYvzKsnWBeoZSw+fqxlZfvtfKeVAEGg9gilwj0pCWSS+1HdYH0XUFuMhKtLqO5OivPLgujPA/gU6y+efimHv/mXT1sCZP9PPeczRedsEDUnWdkkP/ED6LQ3kW3fAOOTF1R/ehsU1aYunVyuCNwu2vOBlWAgF1cQRYcA3/CBIiIiIiJ2gCmemFauHJyyPM/1x0veWlguRXjvftCnBSms5fsa35rPALmaH8JXX339NXyBmnOg9C8hP6zuwZMncG/VpJP9Fs10QzPf0Mr0QBu8Ub8ph9l0+sJgwP/lYiEsZFk5ijZBMrCm3viJ9rz+qfAv7Yqup7KABQtu2nSyVEs+1MGrziNdx0wGO3pxsErQwZVyjNfwwrJb9hcSoFwtdIbSvfw1DUAT8M23z59/+41uz1RAscArO5QAY8sIlJNRaMNDKqqpilT72pmaj0EEPFNrdbjCtWLdRQANL7m6JL1a3dMWtS5lrX9q5ofS1vfb01/KpBlyV2FCNmSY55froCgDqMBTxnMCW8B8jver56uVCi81AVJ/gabAKOM0WLCLxMTb9jc2gPSvrmAzBnwG+xLwss1QFMb5cOwn4Eh+PFI/TbIysCmcIAsg0euzZ4fPVnDWFvhCtW62PQKoBXxXys2sXK2/VjBflzgxT9eEyUt6fHxsEFBf2erPicTn8odseFg7x4DVSnUAPAi+mE5nWxwEyRjwXT0G1Awo/QsjHF2p9p7o09cHcIYYUAUdoWGvmbxp9Pv44/qHGIhzDJhmq9UKVpgBehvc9l3gsZqY1e2hodt6PtcTVnIElD+pZgCMP83H/eYAvQ2WFlHCMQbAVAETYLuGfQggSMtr/7jxAyx7BM0RVlrLi1SNlM+b1H8/ScyvdRHlqFFLk0xN6WXNho3ufsDucfTq1RESFweKq/R5yxhtMNs5GREREdELU7w7+vX3aoj5/vWuGzUg3gC8aYUfmlH3h103azDcVererYXX1R1HvWsbWMISn/AfizMjtrfzbFnyv+xf0KZ4owKoxgTeagLetjmI22DzIwpNCVt6oAeoDEt1T196y79E3K0Uvosqp64Ha09KDxTaKAIbN5X8bvLOXJ1l1Q1JgBwBVAj9xqjcbMMcL4xV+uvlxcLU37Z1d5EusH7v5Ns7I8NyhwQUzfUu3AQUpMsDnKc4DetvIyA1TKbcaD4xwmmDgAyWy+Vwnq5W2E0APwfpL3U3BsXeFjDsIFgaQPXQTKnDK03AK5Sp8BeA03uPAcNGa3TQe6rFpzgTOYkwYPDT+y4gxIBD4FIrXLXgohEvsI50DMBSsf3d5zsN1n9U07Lw8sddtmFMsxURERERERGXjAJ84mUDZsSR2egJiT7Y26P6g0e8fAKAUGAQUKalOEMxS9WbkUGFzI08rzK5w9uC+M4FS4ZyhWxAAkwKTAKqtLbN5eWR6tEMBgE4nRNAg0U+GWBuxh2EALwZmBJQTn/UjSz/zHCb6wyYgJlFp7DGhrjN/x+wEQEDWsBGBAxsAcOOARQ7HwMGvgvw+Y4d3wVGgN36ARERERERNxv+58iuO9L/Cvjpc7R3U3opZzfoe3LVc6TwU4GeZ8iLl5YHKBrfhH7/QVd5dFjD/yQBAu1OVqzMGAP0yVK9X7+bPDakcC7ET4U4x09br09kRGs+X6sVmRxP5E+7fRuOzf3sSgZTnqjXZKTubVbvmz/TVyhfgNptf+AgoPxqtOSw+X49SCBJ1IFGPlQv/f17Kl0eSQ5HSkBpARLn+IqrcWFt7E5GBHxRoTXxjvLoMCvvgQu050UGo1M4mToIuHaDYA5wfnaOh/1qOkKHpLDl/3A5NuRv5PV5cyWfmo+IiIiI6A36fEBIppuouspd6+srh0CfDwjJdBtdV7lrfX3l4PWHFq83kelGyq5y1/r6ykHQ5wPe6gIa+UL5hhe1XG2lLdNftTJQWTjT3+r0t876BXjT1Y5Oki5o+wV+3sEH0BVAKzeFiHo1+OICrw6H8vN0ll8vkdvS8eqZ/S8Y7RE///yzMNtTPpG8KQHGB4useu8FaTBuEMsvmEL+/ISAYHtE8+uQV5X+2yNggb6DzkKA7W8XhYL1WyzEZwHq20ZW0IGAcBdQ377VxcRDXQRCBHq7lCD5qSwZWLX5g6DPB1gGtWYQ1IMYHaSAyu5B1TpI0vrpIGumN/y4ZNUHWjmIoW9jfW+jXeUwhnZk+jpSXeUwhnZl+7rSXeWIiIiIiIgID2rH4dLk0YP8/8CwfA0JAD8B5QsrKPwECPpPD8eN6isJwSMTgqB5c8nk39+NHdECbvwYcNPvAhERERERERHbRnJ1PIHgLkjIum90Tcj/BxozEhFo6wYE0Ot9lfTfhgVQfa+U/qYFlNvby5eDgHbtzdTX4FCdfW3HgKyBqT++4pX+V8cG+lpAlf/q6t/XAq68/n3vAg79r+0YEIDW/+rYQNACukDp3fxGRIwc/we0wIqagmy7GAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wNy0xM1QxMDoyMTo1OSswMDowMBsBiYsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDctMTNUMDk6MjY6NTQrMDA6MDDzzaAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==)}.ui-button .ui-icon{background-image:url(../vendor/jquery-ui/images/ui-icons_777777_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20
* http://trentrichardson.com/examples/timepicker
* Copyright (c) 2016 Trent Richardson; Licensed MIT */
-
-.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input{background:0 0;color:inherit;border:0;outline:0;border-bottom:solid 1px #555;width:95%}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus{border-bottom-color:#aaa}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none}
-.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
-
-/*!
+ .ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input{background:0 0;color:inherit;border:0;outline:0;border-bottom:solid 1px #555;width:95%}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus{border-bottom-color:#aaa}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFEEEEEE',GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE',endColorstr='#FFCCCCCC',GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0%,#eee 50%);background-image:-o-linear-gradient(top,#fff 0%,#eee 50%);background-image:linear-gradient(to bottom,#fff 0%,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF',endColorstr='#FFEEEEEE',GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE',endColorstr='#FFFFFFFF',GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
-
-.c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc rect{stroke:#fff;stroke-width:1}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:grey;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:1;fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #ccc}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#fff}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:#fff}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max{fill:#777}.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}.c3-chart-arc.c3-target g path{opacity:1}.c3-chart-arc.c3-target.c3-focused g path{opacity:1} \ No newline at end of file
+ */@font-face{font-family:'FontAwesome';src:url(../vendor/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0);src:url('../vendor/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url(../vendor/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(../vendor/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0) format('woff'),url(../vendor/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url('../vendor/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc rect{stroke:#fff;stroke-width:1}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:grey;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:1;fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #ccc}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#fff}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:#fff}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max{fill:#777}.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}.c3-chart-arc.c3-target g path{opacity:1}.c3-chart-arc.c3-target.c3-focused g path{opacity:1} \ No newline at end of file
diff --git a/assets/sass/_accordion.sass b/assets/sass/_accordion.sass
deleted file mode 100644
index 1cc3829f..00000000
--- a/assets/sass/_accordion.sass
+++ /dev/null
@@ -1,10 +0,0 @@
-@import variables
-
-.accordion-title
- font-size: size('medium')
- cursor: pointer
- margin-top: 10px
-
-.accordion-content
- margin-top: 15px
- margin-bottom: 25px
diff --git a/assets/sass/_activity_stream.sass b/assets/sass/_activity_stream.sass
deleted file mode 100644
index 7bd2de8e..00000000
--- a/assets/sass/_activity_stream.sass
+++ /dev/null
@@ -1,34 +0,0 @@
-@import variables
-@import mixins
-
-.activity-event
- margin-bottom: 15px
- padding: 10px
- &:nth-child(even)
- background: #fafafa
- &:hover
- background: map-get($highlight-colors, 'background')
-
-.activity-date
- margin-left: 10px
- font-weight: normal
- color: color('light')
-
-.activity-content
- margin-left: 55px
-
-.activity-title
- font-weight: bold
- color: color('dark')
- border-bottom: 1px dotted #efefef
-
-.activity-description
- color: color('medium')
- margin-top: 10px
- @include xs-device
- overflow: auto
- li
- list-style-type: circle
- ul
- margin-top: 10px
- margin-left: 20px
diff --git a/assets/sass/_alert.sass b/assets/sass/_alert.sass
deleted file mode 100644
index 6de1c2f6..00000000
--- a/assets/sass/_alert.sass
+++ /dev/null
@@ -1,58 +0,0 @@
-@import variables
-
-.alert
- padding: 8px 35px 8px 14px
- margin-top: 5px
- margin-bottom: 5px
- color: alert-color('default')
- background-color: alert-bg-color('default')
- border: 1px solid alert-border-color('default')
- border-radius: 4px
-
-.alert-success
- color: alert-color('success')
- background-color: alert-bg-color('success')
- border-color: alert-border-color('success')
-
-.alert-error
- color: alert-color('error')
- background-color: alert-bg-color('error')
- border-color: alert-border-color('error')
-
-.alert-info
- color: alert-color('info')
- background-color: alert-bg-color('info')
- border-color: alert-border-color('info')
-
-.alert-normal
- color: alert-color('normal')
- background-color: alert-bg-color('normal')
- border-color: alert-border-color('normal')
-
-.alert
- ul
- margin-top: 10px
- margin-bottom: 10px
- li
- margin-left: 25px
-
-.alert-fade-out
- text-align: center
- position: fixed
- bottom: 0
- left: 20%
- width: 60%
- padding-top: 5px
- padding-bottom: 5px
- margin-bottom: 0
- border-width: 1px 0 0
- border-radius: 4px 4px 0 0
- z-index: 9999
- opacity: 1
- animation: fadeout 5s linear forwards
-
-@keyframes fadeout
- 0%
- opacity: 1
- 100%
- opacity: 0
diff --git a/assets/sass/_avatar.sass b/assets/sass/_avatar.sass
deleted file mode 100644
index 2041c326..00000000
--- a/assets/sass/_avatar.sass
+++ /dev/null
@@ -1,32 +0,0 @@
-@import variables
-
-.avatar img
- vertical-align: bottom
-
-.avatar-left
- float: left
- margin-right: 10px
-
-.avatar-inline
- display: inline-block
- margin-right: 3px
-
-.avatar-48
- img, div
- border-radius: 30px
- .avatar-letter
- line-height: 48px
- width: 48px
- font-size: 25px
-
-.avatar-20
- img, div
- border-radius: 10px
- .avatar-letter
- line-height: 20px
- width: 20px
- font-size: 11px
-
-.avatar-letter
- color: #fff
- text-align: center
diff --git a/assets/sass/_base.sass b/assets/sass/_base.sass
deleted file mode 100644
index 566e8a94..00000000
--- a/assets/sass/_base.sass
+++ /dev/null
@@ -1,20 +0,0 @@
-.margin-top
- margin-top: 20px
-
-.margin-bottom
- margin-bottom: 20px
-
-.pull-right
- text-align: right
-
-ul.no-bullet li
- list-style-type: none
- margin-left: 0
-
-#app-loading-icon
- position: fixed
- right: 3px
- bottom: 3px
-
-.assign-me
- vertical-align: bottom
diff --git a/assets/sass/_board.sass b/assets/sass/_board.sass
deleted file mode 100644
index 267a60b5..00000000
--- a/assets/sass/_board.sass
+++ /dev/null
@@ -1,113 +0,0 @@
-@import variables
-
-.public-board
- margin-top: 5px
-
-.public-task
- max-width: 800px
- margin: 5px auto 0
-
-#board-container
- overflow-x: auto
-
-#board
- table-layout: fixed
- margin-bottom: 0
- th.board-column-header
- width: 240px
- td
- vertical-align: top
-
-.board-container-compact
- overflow-x: initial
-
-@media all and (-ms-high-contrast: active), (-ms-high-contrast: none)
- .board-container-compact #board
- table-layout: auto
-
-#board th.board-column-header.board-column-compact
- width: initial
-
-.board-column-collapsed
- display: none
-
-td.board-column-task-collapsed
- font-weight: bold
- background-color: bg-color('primary')
-
-#board th.board-column-header-collapsed
- width: 28px
- min-width: 28px
- text-align: center
- overflow: hidden
-
-.board-rotation-wrapper
- position: relative
- padding: 8px 4px
- min-height: 150px
- overflow: hidden
-
-.board-rotation
- white-space: nowrap
- -webkit-backface-visibility: hidden
- -webkit-transform: rotate(90deg)
- -moz-transform: rotate(90deg)
- -ms-transform: rotate(90deg)
- transform: rotate(90deg)
- -webkit-transform-origin: 0 100%
- -moz-transform-origin: 0 100%
- -ms-transform-origin: 0 100%
- transform-origin: 0 100%
-
-.board-column-title .dropdown-menu
- text-decoration: none
-
-.board-add-icon
- float: left
- padding: 0 5px
- i
- text-decoration: none
- color: link-color('primary')
- font-size: size('large')
- &:focus, &:hover
- text-decoration: none
- color: red
-
-.board-column-header-task-count
- color: color('light')
- font-weight: normal
-
-a.board-swimlane-toggle
- text-decoration: none
- &:hover, &:focus
- color: color('dark')
- text-decoration: none
- border: none
-
-.board-task-list
- min-height: 60px
-
-.board-task-list .task-board:last-child
- margin-bottom: 0
-
-.board-task-list-limit
- background-color: $board-task-limit-color
-
-.draggable-item
- cursor: pointer
- user-select: none
- -webkit-user-select: none
- -moz-user-select: none
-
-.draggable-placeholder
- border: 2px dashed #000
- background: #fafafa
- height: 70px
- margin-bottom: 10px
-
-div.draggable-item-selected
- border: 1px solid #000
-
-.task-board-sort-handle
- float: left
- padding-right: 5px
diff --git a/assets/sass/_bulk_change.sass b/assets/sass/_bulk_change.sass
deleted file mode 100644
index 6ba0be90..00000000
--- a/assets/sass/_bulk_change.sass
+++ /dev/null
@@ -1,10 +0,0 @@
-.bulk-change-checkbox
- float: left
-
-.bulk-change-inputs
- float: left
- padding-left: 10px
-
- label
- margin-top: 0
- margin-bottom: 3px
diff --git a/assets/sass/_button.sass b/assets/sass/_button.sass
deleted file mode 100644
index d9a6db3d..00000000
--- a/assets/sass/_button.sass
+++ /dev/null
@@ -1,50 +0,0 @@
-@import variables
-@import mixins
-
-a.btn
- text-decoration: none
-
-.btn
- +appearance
- font-size: size('medium')
- font-weight: normal
- cursor: pointer
- display: inline-block
- border-radius: 2px
- padding: 3px 10px
- margin: 0
- border: 1px solid button-border-color('default')
- background: button-bg-color('default')
- color: button-color('default')
- &:hover, &:focus
- border-color: button-hover-border-color('default')
- background: button-hover-bg-color('default')
- color: button-hover-color('default')
-
-.btn-red
- border-color: button-border-color('red')
- background: button-bg-color('red')
- color: button-color('red')
- &:hover, &:focus
- border-color: button-hover-border-color('red')
- background: button-hover-bg-color('red')
- color: button-hover-color('red')
-
-.btn-blue
- border-color: button-border-color('blue')
- background: button-bg-color('blue')
- color: button-color('blue')
- &:hover, &:focus
- border-color: button-hover-border-color('blue')
- background: button-hover-bg-color('blue')
- color: button-hover-color('blue')
-
-.btn:disabled
- color: button-color('disabled')
- border-color: button-border-color('disabled')
- background: button-bg-color('disabled')
-
-.buttons-header
- font-size: size('small')
- margin-top: 5px
- margin-bottom: 15px
diff --git a/assets/sass/_color_picker.sass b/assets/sass/_color_picker.sass
deleted file mode 100644
index d3134d2d..00000000
--- a/assets/sass/_color_picker.sass
+++ /dev/null
@@ -1,17 +0,0 @@
-.color-picker
- width: 180px
-
-.color-picker-option
- height: 25px
-
-.color-picker-square
- display: inline-block
- width: 18px
- height: 18px
- margin-right: 5px
- border: 1px solid #000
-
-.color-picker-label
- display: inline-block
- vertical-align: bottom
- padding-bottom: 3px
diff --git a/assets/sass/_comment.sass b/assets/sass/_comment.sass
deleted file mode 100644
index e9f27872..00000000
--- a/assets/sass/_comment.sass
+++ /dev/null
@@ -1,49 +0,0 @@
-@import variables
-
-.comment-sorting
- text-align: right
- a
- color: color('medium')
- font-weight: normal
- text-decoration: none
- &:hover
- color: color('light')
-
-.comment
- padding: 5px
- margin-bottom: 15px
-
-.comment-title
- border-bottom: 1px dotted #eee
- margin-left: 55px
-
-.comment-date
- color: color('light')
- font-weight: 200
-
-.comment-actions
- text-align: right
-
-.comment-content
- margin-left: 55px
-
-.comments
- .text-editor
- textarea
- height: 90px
- .text-editor-preview-area
- height: 90px
-
- .comment-highlighted
- background-color: map-get($highlight-colors, 'background')
- border: 2px solid map-get($highlight-colors, 'border')
- &:hover
- background-color: map-get($highlight-colors, 'background')
-
- .comment
- &:hover
- background: map-get($highlight-colors, 'background')
- &:nth-child(even):not(.comment-highlighted)
- background: bg-color('primary')
- &:hover
- background: map-get($highlight-colors, 'background')
diff --git a/assets/sass/_dashboard.sass b/assets/sass/_dashboard.sass
deleted file mode 100644
index 4c19d084..00000000
--- a/assets/sass/_dashboard.sass
+++ /dev/null
@@ -1,13 +0,0 @@
-@import variables
-
-.dashboard-project-stats
- small
- margin-right: 10px
- color: color('light')
-
-.dashboard-table-link
- font-weight: bold
- color: color('dark')
- text-decoration: none
- &:focus, &:hover
- color: color('light')
diff --git a/assets/sass/_documentation.sass b/assets/sass/_documentation.sass
deleted file mode 100644
index 72cc2abc..00000000
--- a/assets/sass/_documentation.sass
+++ /dev/null
@@ -1,21 +0,0 @@
-@import variables
-
-.documentation
- margin: 0 auto
- padding: 20px
- max-width: 850px
- background: #fefefe
- border: 1px solid #ccc
- border-radius: 5px
- color: color('medium')
- img
- border: 1px solid #333
- h1
- text-decoration: none
- margin-bottom: 30px
- h2
- text-decoration: none
- border-bottom: 1px solid #ccc
- margin-bottom: 25px
- li
- line-height: 30px
diff --git a/assets/sass/_dropdown.sass b/assets/sass/_dropdown.sass
deleted file mode 100644
index 364c5824..00000000
--- a/assets/sass/_dropdown.sass
+++ /dev/null
@@ -1,77 +0,0 @@
-@import variables
-
-h2
- .dropdown
- ul
- display: none
-
-.dropdown
- display: inline
- position: relative
- ul
- display: none
-
-.dropdown-smaller
- font-size: 0.85em
-
-ul.dropdown-submenu-open
- display: block
- position: absolute
- z-index: 1000
- min-width: 285px
- list-style: none
- margin: 3px 0 0 1px
- padding: 6px 0
- background-color: #fff
- border: 1px solid #b2b2b2
- border-radius: 3px
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15)
-
-.dropdown-submenu-open li
- display: block
- margin: 0
- padding: 8px 10px
- font-size: size('compact')
- border-bottom: 1px solid #f8f8f8
- cursor: pointer
- &.no-hover
- cursor: default
-
-.dropdown-submenu-open li:last-child
- border: none
-
-.dropdown-submenu-open li:not(.no-hover):hover
- background: #4078C0
- color: #fff
-
-.dropdown-submenu-open li:hover a
- color: #fff
-
-.dropdown-submenu-open a
- text-decoration: none
- color: color('primary')
- &:focus
- text-decoration: underline
-
-.dropdown-menu-link-text, .dropdown-menu-link-icon
- color: color('primary')
- text-decoration: none
-
-.dropdown-menu-link-text:hover
- text-decoration: underline
-
-td
- a.dropdown-menu
- strong
- color: color('primary')
- i
- color: color('primary')
- i
- color: color('lighter')
- &:hover
- strong
- color: color('medium')
- i
- color: color('medium')
- i
- color: color('primary')
diff --git a/assets/sass/_file_upload.sass b/assets/sass/_file_upload.sass
deleted file mode 100644
index bdd31a62..00000000
--- a/assets/sass/_file_upload.sass
+++ /dev/null
@@ -1,31 +0,0 @@
-@import variables
-
-#file-dropzone, #screenshot-zone
- position: relative
- border: 2px dashed #ccc
- width: 99%
- height: 250px
- overflow: auto
-
-#file-dropzone-inner, #screenshot-inner
- position: absolute
- left: 0
- bottom: 48%
- width: 100%
- text-align: center
- color: #aaa
-
-#screenshot-zone.screenshot-pasted
- border: 2px solid #333
-
-#file-list
- margin: 20px
- li
- list-style-type: none
- padding-top: 8px
- padding-bottom: 8px
- border-bottom: 1px dotted #ddd
- width: 95%
- .file-error
- font-weight: bold
- color: color('error')
diff --git a/assets/sass/_filter_box.sass b/assets/sass/_filter_box.sass
deleted file mode 100644
index 83bfd559..00000000
--- a/assets/sass/_filter_box.sass
+++ /dev/null
@@ -1,2 +0,0 @@
-.filter-box
- max-width: 1024px
diff --git a/assets/sass/_form.sass b/assets/sass/_form.sass
deleted file mode 100644
index e8fb6e2d..00000000
--- a/assets/sass/_form.sass
+++ /dev/null
@@ -1,167 +0,0 @@
-@import variables
-@import mixins
-
-fieldset
- border: 1px solid #ddd
- margin-top: 10px
-
-legend
- font-weight: 500
- font-size: size('medium')
-
-label
- cursor: pointer
- display: block
- margin-top: 10px
- font-weight: 400
-
-input
- &[type="number"], &[type="date"], &[type="email"], &[type="password"], &[type="text"]:not(.input-addon-field)
- color: color('light')
- border: 1px solid #ccc
- width: 300px
- max-width: 95%
- font-size: size('normal')
- height: 25px
- padding-bottom: 0
- padding-left: 4px
- font-family: sans-serif
- +appearance
- @include placeholder
- color: color('lighter')
- &[type="number"]:focus, &[type="date"]:focus, &[type="email"]:focus, &[type="password"]:focus, &[type="text"]:focus
- color: color('dark')
- border-color: rgba(82, 168, 236, 0.8)
- outline: 0
- box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
-
-input[type="number"]
- width: 70px
-
-input[type="text"]:not(.input-addon-field)
- &.form-numeric
- width: 70px
- &.form-datetime, &.form-date
- width: 150px
- &.form-input-large
- width: 400px
- &.form-input-small
- width: 150px
-
-textarea:focus
- color: color('dark')
- border-color: rgba(82, 168, 236, 0.8)
- outline: 0
- box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
-
-textarea
- padding: 4px
- border: 1px solid #ccc
- width: 400px
- max-width: 99%
- height: 200px
- font-family: sans-serif
- font-size: size('normal')
- @include placeholder
- color: color('lighter')
-
-select
- font-size: 1.0em
- max-width: 95%
- &:focus
- outline: 0
-
-select[multiple]
- width: 300px
-
-.tag-autocomplete
- width: 400px
-
-span.select2-container
- margin-top: 2px
-
-.form-actions
- padding-top: 20px
- clear: both
-
-.form-required
- color: red
- padding-left: 5px
- font-weight: bold
-
- @include xs-device
- display: none
-
-input[type="text"].form-max-width
- width: 100%
-
-input.form-error, textarea.form-error
- border: 2px solid #b94a48
-
-input.form-error:focus, textarea.form-error:focus
- box-shadow: none
- border: 2px solid #b94a48
-
-.form-errors
- color: color('error')
- list-style-type: none
-
-ul.form-errors li
- margin-left: 0
-
-.form-help
- font-size: size('small')
- color: brown
- margin-bottom: 15px
-
-.form-inline
- padding: 0
- margin: 0
- border: none
- label
- display: inline
- padding-right: 3px
- input, select
- margin: 0 15px 0 0
- .form-required
- display: none
- .form-actions
- display: inline-block
- .js-submit-buttons-rendered
- display: inline-block
-
-.form-inline-group
- display: inline
-
-.form-columns
- +display-flex
- +flex-direction(row)
- +flex-wrap
- +justify-content(flex-start)
-
- .form-column
- margin-right: 25px
- flex-grow: 1
-
- fieldset
- margin-top: 0
-
-.form-login
- max-width: 350px
- margin: 5% auto 0
-
- @include xs-device
- margin-left: 5px
-
- li
- margin-left: 25px
- line-height: 25px
- h2
- margin-bottom: 30px
- font-weight: bold
-
-.reset-password
- margin-top: 20px
- margin-bottom: 20px
- a
- color: color('light')
diff --git a/assets/sass/_global_print.sass b/assets/sass/_global_print.sass
deleted file mode 100644
index ba5afc35..00000000
--- a/assets/sass/_global_print.sass
+++ /dev/null
@@ -1,18 +0,0 @@
-@import variables
-@import mixins
-
-@page
- orientation: landscape
- -webkit-transform: rotate(-90deg)
- -moz-transform: rotate(-90deg)
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3)
-
-#board-container
- overflow-x: initial !important
-.board-task-list
- min-height: 0 !important
-.task-board
- page-break-inside: avoid
-/*Hide menu*/
-.menu-inline, .project-header, .page-header, .menus-container, .sidebar, .alert, .alert-info, .dropdown > ul
- display: none \ No newline at end of file
diff --git a/assets/sass/_header.sass b/assets/sass/_header.sass
deleted file mode 100644
index 7e778fbf..00000000
--- a/assets/sass/_header.sass
+++ /dev/null
@@ -1,47 +0,0 @@
-@import variables
-@import mixins
-
-header
- display: flex
- flex-wrap: wrap
- padding: 5px 10px
- margin-bottom: 5px
- border-bottom: 1px solid #dedede
- background-color: #fbfbfb
-
- .title-container
- flex: 1
- min-width: 300px
- @include xs-device
- order: 3
-
- .board-selector-container
- min-width: 320px
- display: flex
- align-items: center
- @include xs-device
- order: 2
- min-width: 300px
- input[type=text]
- max-width: 280px
-
- .menus-container
- min-width: 120px
- display: flex
- align-items: center
- justify-content: flex-end
- @include xs-device
- order: 1
- margin-bottom: 5px
- margin-left: auto
-
- h1
- font-size: size('title')
- .tooltip
- opacity: 0.3
- font-size: size('tiny')
-
-a i.web-notification-icon
- color: link-color('primary')
- &:focus, &:hover
- color: color('dark')
diff --git a/assets/sass/_icon.sass b/assets/sass/_icon.sass
deleted file mode 100644
index e9ccbe43..00000000
--- a/assets/sass/_icon.sass
+++ /dev/null
@@ -1,17 +0,0 @@
-@import variables
-
-.icon-success
- color: icon-color('success')
-
-.icon-error
- color: icon-color('error')
-
-.icon-fade-out
- opacity: 1
- animation: icon-fadeout 5s linear forwards
-
-@keyframes icon-fadeout
- 0%
- opacity: 1
- 100%
- opacity: 0
diff --git a/assets/sass/_image_slideshow.sass b/assets/sass/_image_slideshow.sass
deleted file mode 100644
index 22cb5937..00000000
--- a/assets/sass/_image_slideshow.sass
+++ /dev/null
@@ -1,45 +0,0 @@
-.image-slideshow-overlay
- position: fixed
- top: 0
- left: 0
- width: 100%
- height: 100%
- background: rgba(0, 0, 0, 0.95)
- overflow: auto
- z-index: 100
- img
- display: block
- margin: auto
- figcaption
- color: #fff
- opacity: 0.7
- position: absolute
- bottom: 5px
- right: 15px
-
-.slideshow-icon
- color: #fff
- position: absolute
- font-size: 2.5em
- opacity: 0.6
- &:hover
- opacity: 0.9
- cursor: pointer
-
-.slideshow-previous-icon
- left: 10px
- top: 45%
-
-.slideshow-next-icon
- right: 10px
- top: 45%
-
-.slideshow-close-icon
- right: 10px
- top: 10px
- font-size: 1.4em
-
-.slideshow-download-icon
- left: 10px
- bottom: 10px
- font-size: 1.3em
diff --git a/assets/sass/_input_addon.sass b/assets/sass/_input_addon.sass
deleted file mode 100644
index f721deae..00000000
--- a/assets/sass/_input_addon.sass
+++ /dev/null
@@ -1,41 +0,0 @@
-@import mixins
-
-.input-addon
- display: flex
-
-.input-addon-field
- flex: 1
- font-size: size('normal')
- color: color('light')
- margin: 0
- +appearance
-
- &:first-child
- border-radius: 5px 0 0 5px
-
- &:last-child
- border-radius: 0 5px 5px 0
-
-.input-addon-item
- background-color: rgba(147, 128, 108, 0.1)
- color: #666
- font: inherit
- font-weight: normal
-
- &:first-child
- border-radius: 5px 0 0 5px
-
- &:last-child
- border-radius: 0 5px 5px 0
-
- @include xs-device
- .dropdown
- .fa-caret-down
- display: none
-
-.input-addon-field, .input-addon-item
- border: 1px solid rgba(147, 128, 108, 0.25)
- padding: 4px 0.75em
-
- &:not(:first-child)
- border-left: 0
diff --git a/assets/sass/_links.sass b/assets/sass/_links.sass
deleted file mode 100644
index e5aa5f31..00000000
--- a/assets/sass/_links.sass
+++ /dev/null
@@ -1,16 +0,0 @@
-@import variables
-
-a
- color: link-color('primary')
- border: none
- &:focus
- outline: 0
- color: link-color('focus')
- text-decoration: none
- &:hover
- color: link-color('hover')
- text-decoration: none
- .fa
- padding-right: 3px
- text-decoration: none
- color: color('primary') \ No newline at end of file
diff --git a/assets/sass/_list_items.sass b/assets/sass/_list_items.sass
deleted file mode 100644
index 69b641c8..00000000
--- a/assets/sass/_list_items.sass
+++ /dev/null
@@ -1,11 +0,0 @@
-.list-item-links, .list-item-actions
- display: inline-block
- float: left
- margin-left: 10px
-
-.list-item-links
- a
- margin: 0
-
-.list-item-action-hidden
- display: none
diff --git a/assets/sass/_logo.sass b/assets/sass/_logo.sass
deleted file mode 100644
index 200b4447..00000000
--- a/assets/sass/_logo.sass
+++ /dev/null
@@ -1,15 +0,0 @@
-@import variables
-
-.logo
- a
- opacity: 0.5
- color: #d40000
- text-decoration: none
- span
- color: color('primary')
- a
- &:hover
- opacity: 0.8
- color: color('primary')
- &:focus span, &:hover span
- color: #d40000
diff --git a/assets/sass/_markdown_editor.sass b/assets/sass/_markdown_editor.sass
deleted file mode 100644
index ac25101e..00000000
--- a/assets/sass/_markdown_editor.sass
+++ /dev/null
@@ -1,22 +0,0 @@
-@import variables
-
-.text-editor
- margin-top: 10px
- a
- font-size: size('normal')
- color: color('light')
- text-decoration: none
- margin-right: 10px
- &:hover
- color: link-color('primary')
- .text-editor-preview-area
- border: 1px solid color('lighter')
- width: 700px
- max-width: 99%
- height: 250px
- overflow: auto
- padding: 2px
- textarea
- width: 700px
- max-width: 98%
- height: 250px \ No newline at end of file
diff --git a/assets/sass/_markdown_rendering.sass b/assets/sass/_markdown_rendering.sass
deleted file mode 100644
index 99e718b3..00000000
--- a/assets/sass/_markdown_rendering.sass
+++ /dev/null
@@ -1,34 +0,0 @@
-@import variables
-
-.markdown
- line-height: 1.4em
- h1
- margin-top: 5px
- margin-bottom: 10px
- font-weight: bold
- h2
- font-weight: bold
- p
- margin-bottom: 10px
- ol, ul
- margin-left: 25px
- margin-top: 10px
- margin-bottom: 10px
- pre
- background: #fbfbfb
- padding: 10px
- border-radius: 5px
- border: 1px solid #ddd
- overflow: auto
- overflow-wrap: initial
- color: color('medium')
- blockquote
- font-style: italic
- border-left: 3px solid #ddd
- padding-left: 10px
- margin-bottom: 10px
- margin-left: 20px
- img
- display: block
- max-width: 80%
- margin-top: 10px
diff --git a/assets/sass/_mixins.sass b/assets/sass/_mixins.sass
deleted file mode 100644
index 62642d39..00000000
--- a/assets/sass/_mixins.sass
+++ /dev/null
@@ -1,66 +0,0 @@
-@import variables
-
-@mixin custom-device($width)
- @media (max-width: #{$width})
- @content
-
-@mixin xs-device
- @media (max-width: #{$xs-device-width})
- @content
-
-@mixin sm-device
- @media (max-width: #{$sm-device-width})
- @content
-
-@mixin md-device
- @media (min-width: #{$sm-device-width}) and (max-width: #{$md-device-width})
- @content
-
-@mixin grid($columns: 0)
- box-sizing: border-box
- display: flex
- flex-wrap: wrap
- > *
- box-sizing: border-box
- > *
- width: (1/$columns) * 100%
-
-@mixin grid_width($width)
- width: $width * 100%
-
-@mixin placeholder
- &::-webkit-input-placeholder
- @content
- &::-moz-placeholder
- @content
- &:-ms-input-placeholder
- @content
-
-@mixin col-x($n)
- @for $i from 1 through $n
- .column-#{$i}
- width: $i * 1%
-
-=appearance
- -webkit-appearance: none
- -moz-appearance: none
-
-=display-flex
- display: -webkit-flex
- display: flex
-
-=flex-direction($direction)
- -webkit-flex-direction: $direction
- flex-direction: $direction
-
-=flex-wrap
- -webkit-flex-wrap: wrap
- flex-wrap: wrap
-
-=align-content($position)
- -webkit-align-items: $position
- align-items: $position
-
-=justify-content($position)
- -webkit-justify-content: $position
- justify-content: $position
diff --git a/assets/sass/_modal.sass b/assets/sass/_modal.sass
deleted file mode 100644
index 68b0329b..00000000
--- a/assets/sass/_modal.sass
+++ /dev/null
@@ -1,34 +0,0 @@
-@import variables
-@import mixins
-
-#modal-overlay
- position: fixed
- top: 0
- left: 0
- width: 100%
- height: 100%
- background: rgba(0, 0, 0, 0.9)
- overflow: auto
- z-index: 100
-
-#modal-box
- position: fixed
- max-height: calc(100% - 30px)
- top: 2%
- left: 50%
- transform: translateX(-50%)
- background: #fff
- overflow: auto
- border-radius: 5px
-
-#modal-content
- padding: 0 5px 5px
-
-#modal-header
- text-align: right
- padding-right: 5px
-
-#modal-close-button
- color: color('primary')
- &:hover
- color: color('error')
diff --git a/assets/sass/_page_header.sass b/assets/sass/_page_header.sass
deleted file mode 100644
index 7a3681f2..00000000
--- a/assets/sass/_page_header.sass
+++ /dev/null
@@ -1,45 +0,0 @@
-@import variables
-@import mixins
-
-.page-header
- margin-bottom: 20px
- .dropdown
- padding-right: 10px
- h2
- margin: 0
- padding: 0
- font-weight: bold
- border-bottom: 1px dotted #ccc
- a
- color: color('primary')
- text-decoration: none
- &:focus, &:hover
- color: color('light')
- ul
- text-align: left
- margin-top: 5px
- display: inline-block
- li
- display: inline
- padding-right: 15px
-
- @include xs-device
- display: block
- line-height: 1.5em
-
- &.active a
- color: color('primary')
- text-decoration: none
- font-weight: bold
- &:hover, &:focus
- text-decoration: underline
-
-.menu-inline
- margin-bottom: 5px
- li
- display: inline
- padding-right: 15px
- .active a
- font-weight: bold
- color: color('dark')
- text-decoration: none
diff --git a/assets/sass/_pagination.sass b/assets/sass/_pagination.sass
deleted file mode 100644
index 095a893a..00000000
--- a/assets/sass/_pagination.sass
+++ /dev/null
@@ -1,16 +0,0 @@
-@import variables
-
-.pagination
- text-align: center
- font-size: size('compact')
-
-.pagination-showing
- margin-right: 5px
- padding-right: 5px
- border-right: 1px solid #999
-
-.pagination-next
- margin-left: 5px
-
-.pagination-previous
- margin-right: 5px
diff --git a/assets/sass/_panel.sass b/assets/sass/_panel.sass
deleted file mode 100644
index 74552292..00000000
--- a/assets/sass/_panel.sass
+++ /dev/null
@@ -1,15 +0,0 @@
-@import variables
-
-.panel
- border-radius: 4px
- padding: 8px 35px 8px 10px
- margin-top: 10px
- margin-bottom: 15px
- border: 1px solid #ddd
- color: color('primary')
- background-color: bg-color('light')
- overflow: auto
- li
- list-style-type: square
- margin-left: 20px
- line-height: 1.35em
diff --git a/assets/sass/_project.sass b/assets/sass/_project.sass
deleted file mode 100644
index 528e75aa..00000000
--- a/assets/sass/_project.sass
+++ /dev/null
@@ -1,15 +0,0 @@
-@import variables
-
-.action-menu
- color: color('primary')
- text-decoration: none
- &:hover, &:focus
- text-decoration: underline
-
-.js-project-creation-options
- max-width: 500px
- border-left: 3px dotted #efefef
- margin-top: 20px
- padding-left: 15px
- padding-bottom: 5px
- padding-top: 5px
diff --git a/assets/sass/_project_header.sass b/assets/sass/_project_header.sass
deleted file mode 100644
index 1dc5f3b2..00000000
--- a/assets/sass/_project_header.sass
+++ /dev/null
@@ -1,25 +0,0 @@
-@import variables
-@import mixins
-
-.project-header
- margin-bottom: 8px
-
- .dropdown-component
- margin-top: 4px
- margin-right: 5px
- float: left
-
- @include sm-device
- float: none
-
- .views-switcher-component
- margin-top: 4px
- float: left
-
- @include sm-device
- float: none
- margin-bottom: 10px
-
- .filter-box-component
- form
- margin: 0
diff --git a/assets/sass/_project_overview.sass b/assets/sass/_project_overview.sass
deleted file mode 100644
index 675bde92..00000000
--- a/assets/sass/_project_overview.sass
+++ /dev/null
@@ -1,32 +0,0 @@
-@import variables
-@import mixins
-
-.project-overview-columns
- +display-flex
- +flex-direction(row)
- +flex-wrap
- +align-content(center)
- +justify-content(center)
- margin-bottom: 20px
- font-size: size('large')
- @include xs-device
- display: block
-
-.project-overview-column
- text-align: center
- margin-right: 3%
- margin-top: 5px
- padding: 3px 15px 3px 15px
- border: 1px dashed #ddd
-
- @include xs-device
- text-align: left
-
- small
- color: color('light')
- strong
- color: color('medium')
- display: block
-
- @include xs-device
- display: inline
diff --git a/assets/sass/_project_views_switcher.sass b/assets/sass/_project_views_switcher.sass
deleted file mode 100644
index 99d0aecc..00000000
--- a/assets/sass/_project_views_switcher.sass
+++ /dev/null
@@ -1,45 +0,0 @@
-@import variables
-@import mixins
-
-$breakdown-switcher: 560px
-
-.views
- margin-right: 10px
- margin-top: 1px
- font-size: size('compact')
- @include custom-device($breakdown-switcher)
- width: 100%
- @include sm-device
- margin-top: 10px
- font-size: size('normal')
- @include xs-device
- margin-top: 5px
- li
- white-space: nowrap
- background: #fafafa
- border: 1px solid #ddd
- border-right: none
- padding: 4px 8px
- display: inline
- @include custom-device($breakdown-switcher)
- display: block
- margin-top: 5px
- border-radius: 5px
- border: 1px solid #ddd
- &.active a
- font-weight: bold
- color: color('dark')
- text-decoration: none
- &:first-child
- border-top-left-radius: 5px
- border-bottom-left-radius: 5px
- &:last-child
- border-right: 1px solid #ddd
- border-top-right-radius: 5px
- border-bottom-right-radius: 5px
- a
- color: color('medium')
- text-decoration: none
- &:hover
- color: color('primary')
- text-decoration: underline
diff --git a/assets/sass/_reset.sass b/assets/sass/_reset.sass
deleted file mode 100644
index 6906bee2..00000000
--- a/assets/sass/_reset.sass
+++ /dev/null
@@ -1,36 +0,0 @@
-@import variables
-
-h1,
-li,
-ul,
-ol,
-table,
-tr,
-td,
-th,
-p,
-blockquote,
-body
- margin: 0
- padding: 0
- font-size: 100%
-
-body
- padding-bottom: 10px
- color: color('primary')
- font-family: $text-font
- text-rendering: optimizeLegibility
- background-color: color('default')
-
-small
- font-size: size('small')
-
-hr
- border: 0
- height: 0
- border-top: 1px solid rgba(0, 0, 0, 0.1)
- border-bottom: 1px solid rgba(255, 255, 255, 0.3)
-
-.page
- margin-left: 10px
- margin-right: 10px
diff --git a/assets/sass/_select_dropdown.sass b/assets/sass/_select_dropdown.sass
deleted file mode 100644
index c5ebfca6..00000000
--- a/assets/sass/_select_dropdown.sass
+++ /dev/null
@@ -1,55 +0,0 @@
-@import variables
-
-#select-dropdown-menu
- position: absolute
- display: block
- z-index: 1000
- min-width: 160px
- padding: 5px 0
- background: #fff
- list-style: none
- border: 1px solid #ccc
- border-radius: 3px
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175)
- overflow: scroll
-
-.select-dropdown-menu-item
- white-space: nowrap
- overflow: hidden
- padding: 3px 10px
- color: color('medium')
- cursor: pointer
- border-bottom: 1px solid #f8f8f8
- line-height: 1.5em
- font-weight: 400
- &.active
- color: #fff
- background: #428bca
- &:last-child
- border: none
-
-.select-dropdown-input-container
- position: relative
- border: 1px solid #ccc
- border-radius: 5px
- background-color: #fff
- width: 300px
- input.select-dropdown-input
- margin: 0 0 0 5px
- border: none
- height: 23px
- width: 270px
- &:focus
- border: none
- box-shadow: none
- .select-dropdown-chevron
- color: color('medium')
- position: absolute
- top: 4px
- right: 5px
- cursor: pointer
- .select-loading-icon
- color: color('medium')
- position: absolute
- top: 4px
- right: 5px \ No newline at end of file
diff --git a/assets/sass/_sidebar.sass b/assets/sass/_sidebar.sass
deleted file mode 100644
index 35e9c006..00000000
--- a/assets/sass/_sidebar.sass
+++ /dev/null
@@ -1,69 +0,0 @@
-@import variables
-@import mixins
-
-.sidebar-container
- height: 100%
- display: flex
- flex-flow: row
-
- @include sm-device
- flex-flow: wrap
-
-.sidebar-content
- padding-left: 10px
- flex: 1 100%
- max-width: 85%
- overflow-wrap: break-word
-
- @include sm-device
- padding-left: 0
- order: 1
- max-width: 100%
-
- @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 1)
- max-width: 75%
-
-.sidebar
- max-width: 25%
- min-width: 230px
-
- @include sm-device
- flex: 1 auto
- order: 2
-
- h2
- margin-top: 0
- > ul
- a
- text-decoration: none
- color: color('light')
- font-weight: 300
- &:hover
- color: color('primary')
- li
- list-style-type: none
- line-height: 35px
- border-bottom: 1px dotted #efefef
- padding-left: 13px
- &:hover
- border-left: 5px solid #555
- padding-left: 8px
- &.active
- border-left: 5px solid #333
- padding-left: 8px
- a
- color: color('primary')
- font-weight: bold
-
-.sidebar-icons > ul li
- padding-left: 0
- &:hover, &.active
- padding-left: 0
- border-left: none
-
-.sidebar > ul li
- &.active a
- &:focus, &:hover
- color: color('medium')
- &:last-child
- margin-bottom: 15px
diff --git a/assets/sass/_subtasks.sass b/assets/sass/_subtasks.sass
deleted file mode 100644
index 0315860f..00000000
--- a/assets/sass/_subtasks.sass
+++ /dev/null
@@ -1,35 +0,0 @@
-@import variables
-@import mixins
-
-.subtask-cell
- padding: 4px 10px
- border-top: 1px dotted #dedede
- border-left: 1px dotted #dedede
- display: table-cell
- vertical-align: middle
- a
- color: color('primary')
- text-decoration: none
- &:hover, &:focus
- color: link-color('primary')
- &:first-child
- border-left: none
- @include sm-device
- width: 90%
- display: block
- border-left: none
-
-.task-list-subtasks
- display: table
- width: 100%
- @include sm-device
- display: block
-
-.task-list-subtask
- display: table-row
- @include sm-device
- display: block
-
-.subtask-assignee, .subtask-time-tracking-cell
- @include sm-device
- display: none
diff --git a/assets/sass/_suggest_menu.sass b/assets/sass/_suggest_menu.sass
deleted file mode 100644
index 76580d56..00000000
--- a/assets/sass/_suggest_menu.sass
+++ /dev/null
@@ -1,28 +0,0 @@
-@import variables
-
-#suggest-menu
- position: absolute
- display: block
- z-index: 1000
- min-width: 160px
- padding: 5px 0
- background: #fff
- list-style: none
- border: 1px solid #ccc
- border-radius: 3px
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175)
-
-.suggest-menu-item
- white-space: nowrap
- padding: 3px 10px
- color: color('primary')
- font-weight: bold
- cursor: pointer
- &.active
- color: #fff
- background: #428bca
- small
- color: #fff
- small
- color: color('light')
- font-weight: normal
diff --git a/assets/sass/_table.sass b/assets/sass/_table.sass
deleted file mode 100644
index c570ef16..00000000
--- a/assets/sass/_table.sass
+++ /dev/null
@@ -1,54 +0,0 @@
-@import variables
-@import mixins
-
-table
- width: 100%
- border-collapse: collapse
- border-spacing: 0
- margin-bottom: 20px
-
- &.table-fixed
- table-layout: fixed
- white-space: nowrap
- th
- overflow: hidden
- td
- white-space: nowrap
- overflow: hidden
- text-overflow: ellipsis
-
- &.table-small
- font-size: size('small')
-
- &.table-striped tr:nth-child(odd)
- background: bg-color('lighter')
-
- &.table-scrolling
- @include sm-device
- overflow-x: auto
- display: inline-block
- vertical-align: top
- max-width: 100%
- white-space: nowrap
-
- th
- text-align: left
- padding: 0.5em 3px
- border: 1px solid #eee
- background: bg-color('primary')
-
- a
- text-decoration: none
- color: color('primary')
- &:focus, &:hover
- text-decoration: underline
-
- td
- border: 1px solid #eee
- padding: 0.5em 3px
- vertical-align: top
-
- li
- margin-left: 20px
-
-@include col-x(100)
diff --git a/assets/sass/_table_drag_and_drop.sass b/assets/sass/_table_drag_and_drop.sass
deleted file mode 100644
index 80f7e7fe..00000000
--- a/assets/sass/_table_drag_and_drop.sass
+++ /dev/null
@@ -1,23 +0,0 @@
-@import variables
-
-.draggable-row-handle
- cursor: move
- color: color('lighter')
- &:hover
- color: color('primary')
-
-tr.draggable-item-selected
- background: #fff
- border: 2px solid #666
- box-shadow: 4px 2px 10px -4px rgba(0, 0, 0, 0.55)
- td
- border-top: none
- border-bottom: none
- &:first-child
- border-left: none
- &:last-child
- border-right: none
-
-.table-stripped
- tr.draggable-item-hover, tr.draggable-item-hover
- background: #FEFFF2
diff --git a/assets/sass/_table_list.sass b/assets/sass/_table_list.sass
deleted file mode 100644
index 0ac2961b..00000000
--- a/assets/sass/_table_list.sass
+++ /dev/null
@@ -1,117 +0,0 @@
-@import variables
-
-.table-list
- font-size: 0.85em
- margin-bottom: 20px
-
-.table-list-header
- background: bg-color('primary')
- border: 1px solid #e5e5e5
- border-radius: 5px 5px 0 0
- line-height: 28px
- padding-left: 3px
- padding-right: 3px
- a
- color: color('primary')
- font-weight: 500
- text-decoration: none
- margin-right: 10px
- &:hover, &:focus
- color: #767676
- .table-list-header-count
- color: #767676
- display: inline-block
- float: left
- .table-list-header-menu
- text-align: right
-
-.table-list-row
- padding-left: 3px
- padding-right: 3px
- border-bottom: 1px solid #e5e5e5
- border-right: 1px solid #e5e5e5
-
- &.table-border-left
- border-left: 1px solid #e5e5e5
-
- &:nth-child(odd)
- background: bg-color('lighter')
-
- &:last-child
- border-radius: 0 0 5px 5px
-
- &:hover
- background: map-get($highlight-colors, 'background')
- border-bottom: 1px solid map-get($highlight-colors, 'border')
- border-right: 1px solid map-get($highlight-colors, 'border')
-
- .table-list-title
- font-weight: 500
- line-height: 23px
- &.status-closed
- text-decoration: line-through
- margin-right: 10px
- a
- font-style: italic
- a
- color: color('primary')
- text-decoration: none
- &:hover, &:focus
- text-decoration: underline
-
- .table-list-details
- color: color('light')
- font-weight: 300
- line-height: 20px
- span
- margin-left: 5px
- &:first-child
- margin-left: 0
- li
- display: inline
- list-style-type: none
- &:after
- content: ', '
- &:last-child:after
- content: ''
- strong
- font-weight: 400
- color: color('medium')
-
- .table-list-details-with-icons
- float: left
- @include sm-device
- float: none
-
- .table-list-icons
- font-size: size('small')
- text-align: right
- line-height: 30px
-
- @include sm-device
- text-align: left
- line-height: 20px
-
- span
- margin-left: 5px
-
- a
- text-decoration: none
- &:hover
- color: link-color('hover')
- i
- color: link-color('hover')
-
-.table-list-category
- font-size: size('compact')
- font-weight: 500
- color: color('dark')
- padding: 1px 2px 1px 2px
- border-radius: 3px
- background: bg-color('light')
- border: 1px solid #ccc
- a
- text-decoration: none
- color: color('dark')
- &:hover
- color: link-color('primary')
diff --git a/assets/sass/_task_avatars.sass b/assets/sass/_task_avatars.sass
deleted file mode 100644
index 63315373..00000000
--- a/assets/sass/_task_avatars.sass
+++ /dev/null
@@ -1,24 +0,0 @@
-@import variables
-
-.task-board-avatars
- text-align: right
- float: right
-
-.task-board-change-assignee
- &:hover
- opacity: 0.6
- cursor: pointer
-
-.task-list-avatars
- display: inline-block
- float: left
- @include sm-device
- float: none
- display: block
- .task-avatar-assignee
- font-weight: 300
- color: color('light')
- &:hover
- .task-avatar-assignee
- font-weight: 400
- color: color('dark')
diff --git a/assets/sass/_task_board.sass b/assets/sass/_task_board.sass
deleted file mode 100644
index 9bed978f..00000000
--- a/assets/sass/_task_board.sass
+++ /dev/null
@@ -1,33 +0,0 @@
-@import variables
-
-.task-board
- position: relative
- margin-bottom: 4px
- border: 1px solid #000
- padding: 2px
- word-wrap: break-word
- font-size: size('compact')
- border-radius: 6px
-
-div
- &.task-board-recent
- border-width: 2px
- &.task-board-status-closed
- user-select: none
- border: 1px dotted #555
-
-.task-board
- a
- color: color('dark')
- text-decoration: none
-
-.task-board-collapsed
- overflow: hidden
- white-space: nowrap
- text-overflow: ellipsis
-
-.task-board-title
- margin-top: 5px
- margin-bottom: 8px
- a:hover
- text-decoration: underline
diff --git a/assets/sass/_task_board_saving_state.sass b/assets/sass/_task_board_saving_state.sass
deleted file mode 100644
index 31465e9c..00000000
--- a/assets/sass/_task_board_saving_state.sass
+++ /dev/null
@@ -1,11 +0,0 @@
-@import variables
-
-.task-board-saving-state
- opacity: 0.3
-
-.task-board-saving-icon
- position: absolute
- margin: auto
- width: 100%
- text-align: center
- color: color('dark')
diff --git a/assets/sass/_task_category.sass b/assets/sass/_task_category.sass
deleted file mode 100644
index 0696f55e..00000000
--- a/assets/sass/_task_category.sass
+++ /dev/null
@@ -1,17 +0,0 @@
-@import variables
-
-.task-board-category-container
- text-align: right
- margin-top: 8px
- margin-bottom: 8px
-
-.task-board-category
- border: 1px solid #555
- font-size: size('compact')
- font-weight: 500
- color: color('dark')
- padding: 1px 3px 1px 2px
- border-radius: 3px
- a
- &:hover
- text-decoration: underline
diff --git a/assets/sass/_task_date.sass b/assets/sass/_task_date.sass
deleted file mode 100644
index f4b74004..00000000
--- a/assets/sass/_task_date.sass
+++ /dev/null
@@ -1,13 +0,0 @@
-@import variables
-
-.task-date
- font-weight: 500
- color: color('dark')
-
-span
- &.task-date-today
- opacity: 1.0
- color: link-color('primary')
- &.task-date-overdue
- opacity: 1.0
- color: color('error')
diff --git a/assets/sass/_task_form.sass b/assets/sass/_task_form.sass
deleted file mode 100644
index fb993804..00000000
--- a/assets/sass/_task_form.sass
+++ /dev/null
@@ -1,37 +0,0 @@
-@import variables
-
-.task-form-container
- @include grid(100)
-
-.task-form-main-column
- @include grid_width(60/100)
- @include custom-device(1000px)
- @include grid_width(1)
-
- input[type="text"]
- width: 700px
- max-width: 99%
-
-.task-form-secondary-column
- max-width: 250px
- min-width: 200px
- max-height: 600px
- padding-left: 10px
- overflow: auto
- @include grid_width(20/100)
- @include custom-device(1000px)
- @include grid_width(1)
- max-width: 99%
- max-height: none
- @include sm-device
- padding-left: 0
-
- label:first-child
- margin-top: 0
- @include custom-device(1000px)
- margin-top: 10px
-
-.task-form-bottom
- @include grid_width(1)
- label
- display: inline-block
diff --git a/assets/sass/_task_icon_age.sass b/assets/sass/_task_icon_age.sass
deleted file mode 100644
index 8bc8ef91..00000000
--- a/assets/sass/_task_icon_age.sass
+++ /dev/null
@@ -1,22 +0,0 @@
-@import variables
-
-.task-icon-age
- display: inline-block
-
-span
- &.task-icon-age-total
- border: 1px solid #e5e5e5
- padding: 1px 3px 1px 3px
- border-top-left-radius: 3px
- border-bottom-left-radius: 3px
- &.task-icon-age-column
- border: 1px solid #e5e5e5
- border-left: none
- margin-left: -5px
- padding: 1px 3px 1px 3px
- border-top-right-radius: 3px
- border-bottom-right-radius: 3px
-
-.task-board
- span.task-icon-age-total, span.task-icon-age-column
- border-color: #666
diff --git a/assets/sass/_task_icons.sass b/assets/sass/_task_icons.sass
deleted file mode 100644
index adb1f2e6..00000000
--- a/assets/sass/_task_icons.sass
+++ /dev/null
@@ -1,43 +0,0 @@
-@import variables
-
-.task-board-icons, .task-list-icons
- font-size: size('small')
- text-align: right
-
- a, span.tooltip
- text-decoration: none
- &:hover
- color: link-color('hover')
- i
- color: link-color('hover')
-
- .task-score
- font-weight: bold
-
- .flag-milestone
- color: green
-
-.task-board-icons
- margin-top: 7px
- a
- opacity: 0.5
- span
- opacity: 0.5
- margin-left: 4px
- a, span.tooltip
- &:hover
- opacity: 1.0
- font-weight: bold
-
- .task-board-icons-row
- line-height: 22px
-
-.task-list-icons
- line-height: 22px
- a, span, i
- color: color('light')
- opacity: 1.0
- span
- margin-left: 5px
- @include sm-device
- text-align: left \ No newline at end of file
diff --git a/assets/sass/_task_links.sass b/assets/sass/_task_links.sass
deleted file mode 100644
index ed861b00..00000000
--- a/assets/sass/_task_links.sass
+++ /dev/null
@@ -1,12 +0,0 @@
-@import variables
-
-.task-links-table
- td
- vertical-align: middle
-
-.task-links-task-count
- color: color('light')
- font-weight: normal
-
-.task-link-closed
- text-decoration: line-through
diff --git a/assets/sass/_task_summary.sass b/assets/sass/_task_summary.sass
deleted file mode 100644
index 7f736bd9..00000000
--- a/assets/sass/_task_summary.sass
+++ /dev/null
@@ -1,36 +0,0 @@
-@import variables
-@import mixins
-
-#task-summary
- margin-bottom: 15px
- h2
- color: color('medium')
- font-size: size('xlarge')
- margin-top: 0
- padding-top: 0
-
-.task-summary-container
- border: 2px solid #000
- border-radius: 8px
- padding: 10px
-
-.task-summary-columns
- display: flex
- flex-flow: row
- justify-content: space-between
-
- @include sm-device
- flex-flow: column
-
-.task-summary-column
- color: color('primary')
- span
- color: color('medium')
- li
- line-height: 23px
-
-#external-task-view
- padding: 10px
- margin-top: 10px
- margin-bottom: 10px
- border: 1px dotted #ccc
diff --git a/assets/sass/_task_tags.sass b/assets/sass/_task_tags.sass
deleted file mode 100644
index 5858039b..00000000
--- a/assets/sass/_task_tags.sass
+++ /dev/null
@@ -1,13 +0,0 @@
-@import variables
-@import mixins
-
-.task-tags li
- display: inline-block
- margin: 3px 3px 0 0
- padding: 1px 3px 1px 3px
- color: color('primary')
- border: 1px solid color('primary')
- border-radius: 4px
-
-.task-summary-container .task-tags
- margin-top: 10px
diff --git a/assets/sass/_thumbnails.sass b/assets/sass/_thumbnails.sass
deleted file mode 100644
index b860a607..00000000
--- a/assets/sass/_thumbnails.sass
+++ /dev/null
@@ -1,46 +0,0 @@
-@import variables
-@import mixins
-
-.file-thumbnails
- +display-flex
- +flex-direction(row)
- +flex-wrap
- +justify-content(flex-start)
-
-.file-thumbnail
- width: 250px
- border: 1px solid #efefef
- border-radius: 5px
- margin-bottom: 20px
- box-shadow: 4px 2px 10px -6px rgba(0, 0, 0, 0.55)
- margin-right: 15px
- img
- cursor: pointer
- border-top-left-radius: 5px
- border-top-right-radius: 5px
- &:hover
- opacity: 0.5
-
-.file-thumbnail-content
- padding-left: 8px
- padding-right: 8px
-
-.file-thumbnail-title
- font-weight: 700
- font-size: size('compact')
- color: color('medium')
- overflow: hidden
- text-overflow: ellipsis
-
-.file-thumbnail-description
- font-size: size('small')
- color: color('light')
- margin-top: 8px
- margin-bottom: 5px
-
-.file-viewer
- position: relative
- img
- max-width: 95%
- max-height: 85%
- margin-top: 10px
diff --git a/assets/sass/_title.sass b/assets/sass/_title.sass
deleted file mode 100644
index 16e81df3..00000000
--- a/assets/sass/_title.sass
+++ /dev/null
@@ -1,16 +0,0 @@
-@import variables
-
-h1, h2, h3
- font-weight: normal
- color: color('primary')
-
-h1
- font-size: size('title')
-
-h2
- font-size: size('large')
- margin-bottom: 10px
-
-h3
- margin-top: 10px
- font-size: size('medium')
diff --git a/assets/sass/_tooltip.sass b/assets/sass/_tooltip.sass
deleted file mode 100644
index 95ea1032..00000000
--- a/assets/sass/_tooltip.sass
+++ /dev/null
@@ -1,23 +0,0 @@
-@import variables
-
-.tooltip
- i.fa
- cursor: pointer
-
- .fa-info-circle
- color: color('light')
-
-#tooltip-container
- padding: 5px
- background: #fff
- border: 1px solid #ddd
- border-radius: 4px
- box-shadow: 0 6px 12px #aaa
- position: absolute
- min-width: 350px
-
- .markdown p
- margin-bottom: 0
-
- .tooltip-large
- width: 600px
diff --git a/assets/sass/_user_mentions.sass b/assets/sass/_user_mentions.sass
deleted file mode 100644
index 4c0f038e..00000000
--- a/assets/sass/_user_mentions.sass
+++ /dev/null
@@ -1,8 +0,0 @@
-@import variables
-
-.user-mention-link
- font-weight: bold
- color: color('dark')
- text-decoration: none
- &:hover
- color: color('medium')
diff --git a/assets/sass/_variables.sass b/assets/sass/_variables.sass
deleted file mode 100644
index a42d2cd6..00000000
--- a/assets/sass/_variables.sass
+++ /dev/null
@@ -1,69 +0,0 @@
-$xs-device-width: 480px
-$sm-device-width: 768px
-$md-device-width: 1150px
-
-$colors: ('primary': #333, 'light': #999, 'lighter': #dedede, 'dark': #000, 'medium': #555, 'error': #b94a48)
-$link-colors: ('primary': #3366CC, 'focus': #DF5353, 'hover': #333)
-$background-colors: ('primary': #fbfbfb, 'light': #fcfcfc, 'lighter': #fefefe, 'default': #ffffff)
-
-$alert-colors: ('default': #c09853, 'success': #468847, 'error': #b94a48, 'info': #3a87ad, 'normal': #333)
-$alert-background-colors: ('default': #fcf8e3, 'success': #dff0d8, 'error': #f2dede, 'info': #d9edf7, 'normal': #f0f0f0)
-$alert-border-colors: ('default': #fbeed5, 'success': #d6e9c6, 'error': #eed3d7, 'info': #bce8f1, 'normal': #ddd)
-
-$button-colors: ('default': #333, 'red': #fff, 'blue': #fff, 'disabled': #ccc)
-$button-background-colors: ('default': #f5f5f5, 'red': #d14836, 'blue': #4d90fe, 'disabled': #f7f7f7)
-$button-border-colors: ('default': #ddd, 'red': #b0281a, 'blue': #3079ed, 'disabled': #ccc)
-$button-hover-colors: ('default': #000, 'red': #fff, 'blue': #fff)
-$button-hover-background-colors: ('default': #fafafa, 'red': #c53727, 'blue': #357ae8)
-$button-hover-border-colors: ('default': #bbb, 'red': #b0281a, 'blue': #3079ed)
-
-$font-sizes: ('normal': 1.0em, 'tiny': 0.7em, 'small': 0.8em, 'compact': 0.9em, 'medium': 1.2em, 'large': 1.4em, 'xlarge': 1.6em, 'title': 1.5em)
-
-$icon-colors: ('success': #468847, 'error': #b94a48)
-
-$highlight-colors: ('background': #FFF8DC, 'border': #ffeb8e)
-
-$text-font: 'Helvetica Neue', Helvetica, Arial, sans-serif
-$board-task-limit-color: #DF5353
-
-@function size($key)
- @return map-get($font-sizes, $key)
-
-@function color($key: 'primary')
- @return map-get($colors, $key)
-
-@function link-color($key: 'primary')
- @return map-get($link-colors, $key)
-
-@function bg-color($key: 'primary')
- @return map-get($background-colors, $key)
-
-@function icon-color($key)
- @return map-get($icon-colors, $key)
-
-@function alert-color($key)
- @return map-get($alert-colors, $key)
-
-@function alert-bg-color($key)
- @return map-get($alert-background-colors, $key)
-
-@function alert-border-color($key)
- @return map-get($alert-border-colors, $key)
-
-@function button-color($key)
- @return map-get($button-colors, $key)
-
-@function button-bg-color($key)
- @return map-get($button-background-colors, $key)
-
-@function button-border-color($key)
- @return map-get($button-border-colors, $key)
-
-@function button-hover-color($key)
- @return map-get($button-hover-colors, $key)
-
-@function button-hover-bg-color($key)
- @return map-get($button-hover-background-colors, $key)
-
-@function button-hover-border-color($key)
- @return map-get($button-hover-border-colors, $key)
diff --git a/assets/sass/app.sass b/assets/sass/app.sass
deleted file mode 100644
index 5dfaed5a..00000000
--- a/assets/sass/app.sass
+++ /dev/null
@@ -1,56 +0,0 @@
-@import reset
-@import base
-@import links
-@import title
-@import table
-@import table_drag_and_drop
-@import table_list
-@import form
-@import input_addon
-@import icon
-@import alert
-@import button
-@import tooltip
-@import dropdown
-@import accordion
-@import select_dropdown
-@import suggest_menu
-@import modal
-@import pagination
-@import header
-@import logo
-@import page_header
-@import sidebar
-@import avatar
-@import file_upload
-@import thumbnails
-@import color_picker
-@import filter_box
-@import project
-@import project_overview
-@import project_header
-@import project_views_switcher
-@import dashboard
-@import board
-@import task_board
-@import task_board_saving_state
-@import task_avatars
-@import task_icons
-@import task_icon_age
-@import task_category
-@import task_date
-@import task_tags
-@import task_summary
-@import task_form
-@import comment
-@import subtasks
-@import task_links
-@import markdown_editor
-@import markdown_rendering
-@import documentation
-@import panel
-@import activity_stream
-@import user_mentions
-@import image_slideshow
-@import list_items
-@import bulk_change
diff --git a/assets/sass/app_print.sass b/assets/sass/app_print.sass
deleted file mode 100644
index 396a21cd..00000000
--- a/assets/sass/app_print.sass
+++ /dev/null
@@ -1 +0,0 @@
-@import global_print
diff --git a/gulpfile.js b/gulpfile.js
index 174fa971..e81c776a 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,7 +1,6 @@
var gulp = require('gulp');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
-var sass = require('gulp-sass');
var src = {
js: [
@@ -19,13 +18,6 @@ var src = {
};
var vendor = {
- css: [
- 'assets/vendor/jquery-ui/jquery-ui.min.css',
- 'assets/vendor/jqueryui-timepicker-addon/jquery-ui-timepicker-addon.min.css',
- 'assets/vendor/select2/css/select2.min.css',
- 'assets/vendor/font-awesome/css/font-awesome.min.css',
- 'assets/vendor/c3/c3.min.css'
- ],
js: [
'assets/vendor/jquery/jquery-3.3.1.min.js',
'assets/vendor/jquery-ui/jquery-ui.min.js',
@@ -44,7 +36,6 @@ var vendor = {
var dist = {
fonts: 'assets/fonts/',
- css: 'assets/css/',
js: 'assets/js/',
img: 'assets/img/'
};
@@ -55,11 +46,6 @@ gulp.task('vendor', function() {
.pipe(gulp.dest(dist.js))
;
- gulp.src(vendor.css)
- .pipe(concat('vendor.min.css'))
- .pipe(gulp.dest(dist.css))
- ;
-
gulp.src('assets/vendor/font-awesome/fonts/*')
.pipe(gulp.dest(dist.fonts));
@@ -75,18 +61,4 @@ gulp.task('js', function() {
;
});
-gulp.task('css', function() {
- gulp.src(['assets/sass/*.sass','!assets/sass/*_print.sass'])
- .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
- .pipe(concat('app.min.css'))
- .pipe(gulp.dest(dist.css));
-});
-
-gulp.task('css:print', function() {
- gulp.src('assets/sass/*_print.sass')
- .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
- .pipe(concat('print.min.css'))
- .pipe(gulp.dest(dist.css));
-});
-
-gulp.task('default', ['vendor', 'js', 'css', 'css:print']);
+gulp.task('default', ['vendor', 'js']);
diff --git a/libs/minify/LICENSE b/libs/minify/LICENSE
new file mode 100755
index 00000000..0c0d08a7
--- /dev/null
+++ b/libs/minify/LICENSE
@@ -0,0 +1,18 @@
+Copyright (c) 2012 Matthias Mullie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/libs/minify/data/js/keywords_after.txt b/libs/minify/data/js/keywords_after.txt
new file mode 100755
index 00000000..5c8cba7f
--- /dev/null
+++ b/libs/minify/data/js/keywords_after.txt
@@ -0,0 +1,7 @@
+in
+public
+extends
+private
+protected
+implements
+instanceof \ No newline at end of file
diff --git a/libs/minify/data/js/keywords_before.txt b/libs/minify/data/js/keywords_before.txt
new file mode 100755
index 00000000..5abf3579
--- /dev/null
+++ b/libs/minify/data/js/keywords_before.txt
@@ -0,0 +1,26 @@
+do
+in
+let
+new
+var
+case
+else
+enum
+void
+with
+class
+const
+yield
+delete
+export
+import
+public
+static
+typeof
+extends
+package
+private
+function
+protected
+implements
+instanceof \ No newline at end of file
diff --git a/libs/minify/data/js/keywords_reserved.txt b/libs/minify/data/js/keywords_reserved.txt
new file mode 100755
index 00000000..2a3ad3c0
--- /dev/null
+++ b/libs/minify/data/js/keywords_reserved.txt
@@ -0,0 +1,63 @@
+do
+if
+in
+for
+let
+new
+try
+var
+case
+else
+enum
+eval
+null
+this
+true
+void
+with
+break
+catch
+class
+const
+false
+super
+throw
+while
+yield
+delete
+export
+import
+public
+return
+static
+switch
+typeof
+default
+extends
+finally
+package
+private
+continue
+debugger
+function
+arguments
+interface
+protected
+implements
+instanceof
+abstract
+boolean
+byte
+char
+double
+final
+float
+goto
+int
+long
+native
+short
+synchronized
+throws
+transient
+volatile \ No newline at end of file
diff --git a/libs/minify/data/js/operators.txt b/libs/minify/data/js/operators.txt
new file mode 100755
index 00000000..e66229ae
--- /dev/null
+++ b/libs/minify/data/js/operators.txt
@@ -0,0 +1,46 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+~
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+!
+.
+[
+]
+?
+:
+,
+;
+(
+)
+{
+} \ No newline at end of file
diff --git a/libs/minify/data/js/operators_after.txt b/libs/minify/data/js/operators_after.txt
new file mode 100755
index 00000000..71a9b709
--- /dev/null
+++ b/libs/minify/data/js/operators_after.txt
@@ -0,0 +1,43 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+.
+[
+]
+?
+:
+,
+;
+(
+)
+} \ No newline at end of file
diff --git a/libs/minify/data/js/operators_before.txt b/libs/minify/data/js/operators_before.txt
new file mode 100755
index 00000000..ff50d870
--- /dev/null
+++ b/libs/minify/data/js/operators_before.txt
@@ -0,0 +1,43 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+~
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+!
+.
+[
+?
+:
+,
+;
+(
+{
diff --git a/libs/minify/src/CSS.php b/libs/minify/src/CSS.php
new file mode 100755
index 00000000..e5a46690
--- /dev/null
+++ b/libs/minify/src/CSS.php
@@ -0,0 +1,751 @@
+<?php
+/**
+ * CSS Minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+
+namespace MatthiasMullie\Minify;
+
+use MatthiasMullie\Minify\Exceptions\FileImportException;
+use MatthiasMullie\PathConverter\ConverterInterface;
+use MatthiasMullie\PathConverter\Converter;
+
+/**
+ * CSS minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @author Tijs Verkoyen <minify@verkoyen.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class CSS extends Minify
+{
+ /**
+ * @var int maximum inport size in kB
+ */
+ protected $maxImportSize = 5;
+
+ /**
+ * @var string[] valid import extensions
+ */
+ protected $importExtensions = array(
+ 'gif' => 'data:image/gif',
+ 'png' => 'data:image/png',
+ 'jpe' => 'data:image/jpeg',
+ 'jpg' => 'data:image/jpeg',
+ 'jpeg' => 'data:image/jpeg',
+ 'svg' => 'data:image/svg+xml',
+ 'woff' => 'data:application/x-font-woff',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'xbm' => 'image/x-xbitmap',
+ );
+
+ /**
+ * Set the maximum size if files to be imported.
+ *
+ * Files larger than this size (in kB) will not be imported into the CSS.
+ * Importing files into the CSS as data-uri will save you some connections,
+ * but we should only import relatively small decorative images so that our
+ * CSS file doesn't get too bulky.
+ *
+ * @param int $size Size in kB
+ */
+ public function setMaxImportSize($size)
+ {
+ $this->maxImportSize = $size;
+ }
+
+ /**
+ * Set the type of extensions to be imported into the CSS (to save network
+ * connections).
+ * Keys of the array should be the file extensions & respective values
+ * should be the data type.
+ *
+ * @param string[] $extensions Array of file extensions
+ */
+ public function setImportExtensions(array $extensions)
+ {
+ $this->importExtensions = $extensions;
+ }
+
+ /**
+ * Move any import statements to the top.
+ *
+ * @param string $content Nearly finished CSS content
+ *
+ * @return string
+ */
+ protected function moveImportsToTop($content)
+ {
+ if (preg_match_all('/(;?)(@import (?<url>url\()?(?P<quotes>["\']?).+?(?P=quotes)(?(url)\)));?/', $content, $matches)) {
+ // remove from content
+ foreach ($matches[0] as $import) {
+ $content = str_replace($import, '', $content);
+ }
+
+ // add to top
+ $content = implode(';', $matches[2]).';'.trim($content, ';');
+ }
+
+ return $content;
+ }
+
+ /**
+ * Combine CSS from import statements.
+ *
+ * @import's will be loaded and their content merged into the original file,
+ * to save HTTP requests.
+ *
+ * @param string $source The file to combine imports for
+ * @param string $content The CSS content to combine imports for
+ * @param string[] $parents Parent paths, for circular reference checks
+ *
+ * @return string
+ *
+ * @throws FileImportException
+ */
+ protected function combineImports($source, $content, $parents)
+ {
+ $importRegexes = array(
+ // @import url(xxx)
+ '/
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # open url()
+ url\(
+
+ # (optional) open path enclosure
+ (?P<quotes>["\']?)
+
+ # fetch path
+ (?P<path>.+?)
+
+ # (optional) close path enclosure
+ (?P=quotes)
+
+ # close url()
+ \)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) media statement(s)
+ (?P<media>[^;]*)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) closing semi-colon
+ ;?
+
+ /ix',
+
+ // @import 'xxx'
+ '/
+
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # open path enclosure
+ (?P<quotes>["\'])
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?P=quotes)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) media statement(s)
+ (?P<media>[^;]*)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) closing semi-colon
+ ;?
+
+ /ix',
+ );
+
+ // find all relative imports in css
+ $matches = array();
+ foreach ($importRegexes as $importRegex) {
+ if (preg_match_all($importRegex, $content, $regexMatches, PREG_SET_ORDER)) {
+ $matches = array_merge($matches, $regexMatches);
+ }
+ }
+
+ $search = array();
+ $replace = array();
+
+ // loop the matches
+ foreach ($matches as $match) {
+ // get the path for the file that will be imported
+ $importPath = dirname($source).'/'.$match['path'];
+
+ // only replace the import with the content if we can grab the
+ // content of the file
+ if (!$this->canImportByPath($match['path']) || !$this->canImportFile($importPath)) {
+ continue;
+ }
+
+ // check if current file was not imported previously in the same
+ // import chain.
+ if (in_array($importPath, $parents)) {
+ throw new FileImportException('Failed to import file "'.$importPath.'": circular reference detected.');
+ }
+
+ // grab referenced file & minify it (which may include importing
+ // yet other @import statements recursively)
+ $minifier = new static($importPath);
+ $minifier->setMaxImportSize($this->maxImportSize);
+ $minifier->setImportExtensions($this->importExtensions);
+ $importContent = $minifier->execute($source, $parents);
+
+ // check if this is only valid for certain media
+ if (!empty($match['media'])) {
+ $importContent = '@media '.$match['media'].'{'.$importContent.'}';
+ }
+
+ // add to replacement array
+ $search[] = $match[0];
+ $replace[] = $importContent;
+ }
+
+ // replace the import statements
+ return str_replace($search, $replace, $content);
+ }
+
+ /**
+ * Import files into the CSS, base64-ized.
+ *
+ * @url(image.jpg) images will be loaded and their content merged into the
+ * original file, to save HTTP requests.
+ *
+ * @param string $source The file to import files for
+ * @param string $content The CSS content to import files for
+ *
+ * @return string
+ */
+ protected function importFiles($source, $content)
+ {
+ $regex = '/url\((["\']?)(.+?)\\1\)/i';
+ if ($this->importExtensions && preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) {
+ $search = array();
+ $replace = array();
+
+ // loop the matches
+ foreach ($matches as $match) {
+ $extension = substr(strrchr($match[2], '.'), 1);
+ if ($extension && !array_key_exists($extension, $this->importExtensions)) {
+ continue;
+ }
+
+ // get the path for the file that will be imported
+ $path = $match[2];
+ $path = dirname($source).'/'.$path;
+
+ // only replace the import with the content if we're able to get
+ // the content of the file, and it's relatively small
+ if ($this->canImportFile($path) && $this->canImportBySize($path)) {
+ // grab content && base64-ize
+ $importContent = $this->load($path);
+ $importContent = base64_encode($importContent);
+
+ // build replacement
+ $search[] = $match[0];
+ $replace[] = 'url('.$this->importExtensions[$extension].';base64,'.$importContent.')';
+ }
+ }
+
+ // replace the import statements
+ $content = str_replace($search, $replace, $content);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify the data.
+ * Perform CSS optimizations.
+ *
+ * @param string[optional] $path Path to write the data to
+ * @param string[] $parents Parent paths, for circular reference checks
+ *
+ * @return string The minified data
+ */
+ public function execute($path = null, $parents = array())
+ {
+ $content = '';
+
+ // loop CSS data (raw data and files)
+ foreach ($this->data as $source => $css) {
+ /*
+ * Let's first take out strings & comments, since we can't just
+ * remove whitespace anywhere. If whitespace occurs inside a string,
+ * we should leave it alone. E.g.:
+ * p { content: "a test" }
+ */
+ $this->extractStrings();
+ $this->stripComments();
+ $this->extractCalcs();
+ $css = $this->replace($css);
+
+ $css = $this->stripWhitespace($css);
+ $css = $this->shortenColors($css);
+ $css = $this->shortenZeroes($css);
+ $css = $this->shortenFontWeights($css);
+ $css = $this->stripEmptyTags($css);
+
+ // restore the string we've extracted earlier
+ $css = $this->restoreExtractedData($css);
+
+ $source = is_int($source) ? '' : $source;
+ $parents = $source ? array_merge($parents, array($source)) : $parents;
+ $css = $this->combineImports($source, $css, $parents);
+ $css = $this->importFiles($source, $css);
+
+ /*
+ * If we'll save to a new path, we'll have to fix the relative paths
+ * to be relative no longer to the source file, but to the new path.
+ * If we don't write to a file, fall back to same path so no
+ * conversion happens (because we still want it to go through most
+ * of the move code, which also addresses url() & @import syntax...)
+ */
+ $converter = $this->getPathConverter($source, $path ?: $source);
+ $css = $this->move($converter, $css);
+
+ // combine css
+ $content .= $css;
+ }
+
+ $content = $this->moveImportsToTop($content);
+
+ return $content;
+ }
+
+ /**
+ * Moving a css file should update all relative urls.
+ * Relative references (e.g. ../images/image.gif) in a certain css file,
+ * will have to be updated when a file is being saved at another location
+ * (e.g. ../../images/image.gif, if the new CSS file is 1 folder deeper).
+ *
+ * @param ConverterInterface $converter Relative path converter
+ * @param string $content The CSS content to update relative urls for
+ *
+ * @return string
+ */
+ protected function move(ConverterInterface $converter, $content)
+ {
+ /*
+ * Relative path references will usually be enclosed by url(). @import
+ * is an exception, where url() is not necessary around the path (but is
+ * allowed).
+ * This *could* be 1 regular expression, where both regular expressions
+ * in this array are on different sides of a |. But we're using named
+ * patterns in both regexes, the same name on both regexes. This is only
+ * possible with a (?J) modifier, but that only works after a fairly
+ * recent PCRE version. That's why I'm doing 2 separate regular
+ * expressions & combining the matches after executing of both.
+ */
+ $relativeRegexes = array(
+ // url(xxx)
+ '/
+ # open url()
+ url\(
+
+ \s*
+
+ # open path enclosure
+ (?P<quotes>["\'])?
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?(quotes)(?P=quotes))
+
+ \s*
+
+ # close url()
+ \)
+
+ /ix',
+
+ // @import "xxx"
+ '/
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # we don\'t have to check for @import url(), because the
+ # condition above will already catch these
+
+ # open path enclosure
+ (?P<quotes>["\'])
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?P=quotes)
+
+ /ix',
+ );
+
+ // find all relative urls in css
+ $matches = array();
+ foreach ($relativeRegexes as $relativeRegex) {
+ if (preg_match_all($relativeRegex, $content, $regexMatches, PREG_SET_ORDER)) {
+ $matches = array_merge($matches, $regexMatches);
+ }
+ }
+
+ $search = array();
+ $replace = array();
+
+ // loop all urls
+ foreach ($matches as $match) {
+ // determine if it's a url() or an @import match
+ $type = (strpos($match[0], '@import') === 0 ? 'import' : 'url');
+
+ $url = $match['path'];
+ if ($this->canImportByPath($url)) {
+ // attempting to interpret GET-params makes no sense, so let's discard them for awhile
+ $params = strrchr($url, '?');
+ $url = $params ? substr($url, 0, -strlen($params)) : $url;
+
+ // fix relative url
+ $url = $converter->convert($url);
+
+ // now that the path has been converted, re-apply GET-params
+ $url .= $params;
+ }
+
+ /*
+ * Urls with control characters above 0x7e should be quoted.
+ * According to Mozilla's parser, whitespace is only allowed at the
+ * end of unquoted urls.
+ * Urls with `)` (as could happen with data: uris) should also be
+ * quoted to avoid being confused for the url() closing parentheses.
+ * And urls with a # have also been reported to cause issues.
+ * Urls with quotes inside should also remain escaped.
+ *
+ * @see https://developer.mozilla.org/nl/docs/Web/CSS/url#The_url()_functional_notation
+ * @see https://hg.mozilla.org/mozilla-central/rev/14abca4e7378
+ * @see https://github.com/matthiasmullie/minify/issues/193
+ */
+ $url = trim($url);
+ if (preg_match('/[\s\)\'"#\x{7f}-\x{9f}]/u', $url)) {
+ $url = $match['quotes'] . $url . $match['quotes'];
+ }
+
+ // build replacement
+ $search[] = $match[0];
+ if ($type === 'url') {
+ $replace[] = 'url('.$url.')';
+ } elseif ($type === 'import') {
+ $replace[] = '@import "'.$url.'"';
+ }
+ }
+
+ // replace urls
+ return str_replace($search, $replace, $content);
+ }
+
+ /**
+ * Shorthand hex color codes.
+ * #FF0000 -> #F00.
+ *
+ * @param string $content The CSS content to shorten the hex color codes for
+ *
+ * @return string
+ */
+ protected function shortenColors($content)
+ {
+ $content = preg_replace('/(?<=[: ])#([0-9a-z])\\1([0-9a-z])\\2([0-9a-z])\\3(?:([0-9a-z])\\4)?(?=[; }])/i', '#$1$2$3$4', $content);
+
+ // remove alpha channel if it's pointless...
+ $content = preg_replace('/(?<=[: ])#([0-9a-z]{6})ff?(?=[; }])/i', '#$1', $content);
+ $content = preg_replace('/(?<=[: ])#([0-9a-z]{3})f?(?=[; }])/i', '#$1', $content);
+
+ $colors = array(
+ // we can shorten some even more by replacing them with their color name
+ '#F0FFFF' => 'azure',
+ '#F5F5DC' => 'beige',
+ '#A52A2A' => 'brown',
+ '#FF7F50' => 'coral',
+ '#FFD700' => 'gold',
+ '#808080' => 'gray',
+ '#008000' => 'green',
+ '#4B0082' => 'indigo',
+ '#FFFFF0' => 'ivory',
+ '#F0E68C' => 'khaki',
+ '#FAF0E6' => 'linen',
+ '#800000' => 'maroon',
+ '#000080' => 'navy',
+ '#808000' => 'olive',
+ '#CD853F' => 'peru',
+ '#FFC0CB' => 'pink',
+ '#DDA0DD' => 'plum',
+ '#800080' => 'purple',
+ '#F00' => 'red',
+ '#FA8072' => 'salmon',
+ '#A0522D' => 'sienna',
+ '#C0C0C0' => 'silver',
+ '#FFFAFA' => 'snow',
+ '#D2B48C' => 'tan',
+ '#FF6347' => 'tomato',
+ '#EE82EE' => 'violet',
+ '#F5DEB3' => 'wheat',
+ // or the other way around
+ 'WHITE' => '#fff',
+ 'BLACK' => '#000',
+ );
+
+ return preg_replace_callback(
+ '/(?<=[: ])('.implode(array_keys($colors), '|').')(?=[; }])/i',
+ function ($match) use ($colors) {
+ return $colors[strtoupper($match[0])];
+ },
+ $content
+ );
+ }
+
+ /**
+ * Shorten CSS font weights.
+ *
+ * @param string $content The CSS content to shorten the font weights for
+ *
+ * @return string
+ */
+ protected function shortenFontWeights($content)
+ {
+ $weights = array(
+ 'normal' => 400,
+ 'bold' => 700,
+ );
+
+ $callback = function ($match) use ($weights) {
+ return $match[1].$weights[$match[2]];
+ };
+
+ return preg_replace_callback('/(font-weight\s*:\s*)('.implode('|', array_keys($weights)).')(?=[;}])/', $callback, $content);
+ }
+
+ /**
+ * Shorthand 0 values to plain 0, instead of e.g. -0em.
+ *
+ * @param string $content The CSS content to shorten the zero values for
+ *
+ * @return string
+ */
+ protected function shortenZeroes($content)
+ {
+ // we don't want to strip units in `calc()` expressions:
+ // `5px - 0px` is valid, but `5px - 0` is not
+ // `10px * 0` is valid (equates to 0), and so is `10 * 0px`, but
+ // `10 * 0` is invalid
+ // we've extracted calcs earlier, so we don't need to worry about this
+
+ // reusable bits of code throughout these regexes:
+ // before & after are used to make sure we don't match lose unintended
+ // 0-like values (e.g. in #000, or in http://url/1.0)
+ // units can be stripped from 0 values, or used to recognize non 0
+ // values (where wa may be able to strip a .0 suffix)
+ $before = '(?<=[:(, ])';
+ $after = '(?=[ ,);}])';
+ $units = '(em|ex|%|px|cm|mm|in|pt|pc|ch|rem|vh|vw|vmin|vmax|vm)';
+
+ // strip units after zeroes (0px -> 0)
+ // NOTE: it should be safe to remove all units for a 0 value, but in
+ // practice, Webkit (especially Safari) seems to stumble over at least
+ // 0%, potentially other units as well. Only stripping 'px' for now.
+ // @see https://github.com/matthiasmullie/minify/issues/60
+ $content = preg_replace('/'.$before.'(-?0*(\.0+)?)(?<=0)px'.$after.'/', '\\1', $content);
+
+ // strip 0-digits (.0 -> 0)
+ $content = preg_replace('/'.$before.'\.0+'.$units.'?'.$after.'/', '0\\1', $content);
+ // strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px
+ $content = preg_replace('/'.$before.'(-?[0-9]+\.[0-9]+)0+'.$units.'?'.$after.'/', '\\1\\2', $content);
+ // strip trailing 0: 50.00 -> 50, 50.00px -> 50px
+ $content = preg_replace('/'.$before.'(-?[0-9]+)\.0+'.$units.'?'.$after.'/', '\\1\\2', $content);
+ // strip leading 0: 0.1 -> .1, 01.1 -> 1.1
+ $content = preg_replace('/'.$before.'(-?)0+([0-9]*\.[0-9]+)'.$units.'?'.$after.'/', '\\1\\2\\3', $content);
+
+ // strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0)
+ $content = preg_replace('/'.$before.'-?0+'.$units.'?'.$after.'/', '0\\1', $content);
+
+ // IE doesn't seem to understand a unitless flex-basis value (correct -
+ // it goes against the spec), so let's add it in again (make it `%`,
+ // which is only 1 char: 0%, 0px, 0 anything, it's all just the same)
+ // @see https://developer.mozilla.org/nl/docs/Web/CSS/flex
+ $content = preg_replace('/flex:([0-9]+\s[0-9]+\s)0([;\}])/', 'flex:${1}0%${2}', $content);
+ $content = preg_replace('/flex-basis:0([;\}])/', 'flex-basis:0%${1}', $content);
+
+ return $content;
+ }
+
+ /**
+ * Strip empty tags from source code.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function stripEmptyTags($content)
+ {
+ $content = preg_replace('/(?<=^)[^\{\};]+\{\s*\}/', '', $content);
+ $content = preg_replace('/(?<=(\}|;))[^\{\};]+\{\s*\}/', '', $content);
+
+ return $content;
+ }
+
+ /**
+ * Strip comments from source code.
+ */
+ protected function stripComments()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '/*'.$count.'*/';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+ $this->registerPattern('/\n?\/\*(!|.*?@license|.*?@preserve).*?\*\/\n?/s', $callback);
+
+ $this->registerPattern('/\/\*.*?\*\//s', '');
+ }
+
+ /**
+ * Strip whitespace.
+ *
+ * @param string $content The CSS content to strip the whitespace for
+ *
+ * @return string
+ */
+ protected function stripWhitespace($content)
+ {
+ // remove leading & trailing whitespace
+ $content = preg_replace('/^\s*/m', '', $content);
+ $content = preg_replace('/\s*$/m', '', $content);
+
+ // replace newlines with a single space
+ $content = preg_replace('/\s+/', ' ', $content);
+
+ // remove whitespace around meta characters
+ // inspired by stackoverflow.com/questions/15195750/minify-compress-css-with-regex
+ $content = preg_replace('/\s*([\*$~^|]?+=|[{};,>~]|!important\b)\s*/', '$1', $content);
+ $content = preg_replace('/([\[(:>\+])\s+/', '$1', $content);
+ $content = preg_replace('/\s+([\]\)>\+])/', '$1', $content);
+ $content = preg_replace('/\s+(:)(?![^\}]*\{)/', '$1', $content);
+
+ // whitespace around + and - can only be stripped inside some pseudo-
+ // classes, like `:nth-child(3+2n)`
+ // not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or
+ // selectors like `div.weird- p`
+ $pseudos = array('nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type');
+ $content = preg_replace('/:('.implode('|', $pseudos).')\(\s*([+-]?)\s*(.+?)\s*([+-]?)\s*(.*?)\s*\)/', ':$1($2$3$4$5)', $content);
+
+ // remove semicolon/whitespace followed by closing bracket
+ $content = str_replace(';}', '}', $content);
+
+ return trim($content);
+ }
+
+ /**
+ * Replace all `calc()` occurrences.
+ */
+ protected function extractCalcs()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $length = strlen($match[1]);
+ $expr = '';
+ $opened = 0;
+
+ for ($i = 0; $i < $length; $i++) {
+ $char = $match[1][$i];
+ $expr .= $char;
+ if ($char === '(') {
+ $opened++;
+ } elseif ($char === ')' && --$opened === 0) {
+ break;
+ }
+ }
+ $rest = str_replace($expr, '', $match[1]);
+ $expr = trim(substr($expr, 1, -1));
+
+ $count = count($minifier->extracted);
+ $placeholder = 'calc('.$count.')';
+ $minifier->extracted[$placeholder] = 'calc('.$expr.')';
+
+ return $placeholder.$rest;
+ };
+
+ $this->registerPattern('/calc(\(.+?)(?=$|;|calc\()/', $callback);
+ }
+
+ /**
+ * Check if file is small enough to be imported.
+ *
+ * @param string $path The path to the file
+ *
+ * @return bool
+ */
+ protected function canImportBySize($path)
+ {
+ return ($size = @filesize($path)) && $size <= $this->maxImportSize * 1024;
+ }
+
+ /**
+ * Check if file a file can be imported, going by the path.
+ *
+ * @param string $path
+ *
+ * @return bool
+ */
+ protected function canImportByPath($path)
+ {
+ return preg_match('/^(data:|https?:|\\/)/', $path) === 0;
+ }
+
+ /**
+ * Return a converter to update relative paths to be relative to the new
+ * destination.
+ *
+ * @param string $source
+ * @param string $target
+ *
+ * @return ConverterInterface
+ */
+ protected function getPathConverter($source, $target)
+ {
+ return new Converter($source, $target);
+ }
+}
diff --git a/libs/minify/src/Exception.php b/libs/minify/src/Exception.php
new file mode 100755
index 00000000..d03898f0
--- /dev/null
+++ b/libs/minify/src/Exception.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Base Exception
+ *
+ * @deprecated Use Exceptions\BasicException instead
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+namespace MatthiasMullie\Minify;
+
+/**
+ * Base Exception Class
+ * @deprecated Use Exceptions\BasicException instead
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+abstract class Exception extends \Exception
+{
+}
diff --git a/libs/minify/src/Exceptions/BasicException.php b/libs/minify/src/Exceptions/BasicException.php
new file mode 100755
index 00000000..af5e81bc
--- /dev/null
+++ b/libs/minify/src/Exceptions/BasicException.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Basic exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+use MatthiasMullie\Minify\Exception;
+
+/**
+ * Basic Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+abstract class BasicException extends Exception
+{
+}
diff --git a/libs/minify/src/Exceptions/FileImportException.php b/libs/minify/src/Exceptions/FileImportException.php
new file mode 100755
index 00000000..912a2c90
--- /dev/null
+++ b/libs/minify/src/Exceptions/FileImportException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * File Import Exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+/**
+ * File Import Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+class FileImportException extends BasicException
+{
+}
diff --git a/libs/minify/src/Exceptions/IOException.php b/libs/minify/src/Exceptions/IOException.php
new file mode 100755
index 00000000..b172eb48
--- /dev/null
+++ b/libs/minify/src/Exceptions/IOException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * IO Exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+/**
+ * IO Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+class IOException extends BasicException
+{
+}
diff --git a/libs/minify/src/JS.php b/libs/minify/src/JS.php
new file mode 100755
index 00000000..92389cdd
--- /dev/null
+++ b/libs/minify/src/JS.php
@@ -0,0 +1,612 @@
+<?php
+/**
+ * JavaScript minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify;
+
+/**
+ * JavaScript Minifier Class
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @author Tijs Verkoyen <minify@verkoyen.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class JS extends Minify
+{
+ /**
+ * Var-matching regex based on http://stackoverflow.com/a/9337047/802993.
+ *
+ * Note that regular expressions using that bit must have the PCRE_UTF8
+ * pattern modifier (/u) set.
+ *
+ * @var string
+ */
+ const REGEX_VARIABLE = '\b[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}0-9\x{0300}-\x{036f}\x{0483}-\x{0487}\x{0591}-\x{05bd}\x{05bf}\x{05c1}\x{05c2}\x{05c4}\x{05c5}\x{05c7}\x{0610}-\x{061a}\x{064b}-\x{0669}\x{0670}\x{06d6}-\x{06dc}\x{06df}-\x{06e4}\x{06e7}\x{06e8}\x{06ea}-\x{06ed}\x{06f0}-\x{06f9}\x{0711}\x{0730}-\x{074a}\x{07a6}-\x{07b0}\x{07c0}-\x{07c9}\x{07eb}-\x{07f3}\x{0816}-\x{0819}\x{081b}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082d}\x{0859}-\x{085b}\x{08e4}-\x{08fe}\x{0900}-\x{0903}\x{093a}-\x{093c}\x{093e}-\x{094f}\x{0951}-\x{0957}\x{0962}\x{0963}\x{0966}-\x{096f}\x{0981}-\x{0983}\x{09bc}\x{09be}-\x{09c4}\x{09c7}\x{09c8}\x{09cb}-\x{09cd}\x{09d7}\x{09e2}\x{09e3}\x{09e6}-\x{09ef}\x{0a01}-\x{0a03}\x{0a3c}\x{0a3e}-\x{0a42}\x{0a47}\x{0a48}\x{0a4b}-\x{0a4d}\x{0a51}\x{0a66}-\x{0a71}\x{0a75}\x{0a81}-\x{0a83}\x{0abc}\x{0abe}-\x{0ac5}\x{0ac7}-\x{0ac9}\x{0acb}-\x{0acd}\x{0ae2}\x{0ae3}\x{0ae6}-\x{0aef}\x{0b01}-\x{0b03}\x{0b3c}\x{0b3e}-\x{0b44}\x{0b47}\x{0b48}\x{0b4b}-\x{0b4d}\x{0b56}\x{0b57}\x{0b62}\x{0b63}\x{0b66}-\x{0b6f}\x{0b82}\x{0bbe}-\x{0bc2}\x{0bc6}-\x{0bc8}\x{0bca}-\x{0bcd}\x{0bd7}\x{0be6}-\x{0bef}\x{0c01}-\x{0c03}\x{0c3e}-\x{0c44}\x{0c46}-\x{0c48}\x{0c4a}-\x{0c4d}\x{0c55}\x{0c56}\x{0c62}\x{0c63}\x{0c66}-\x{0c6f}\x{0c82}\x{0c83}\x{0cbc}\x{0cbe}-\x{0cc4}\x{0cc6}-\x{0cc8}\x{0cca}-\x{0ccd}\x{0cd5}\x{0cd6}\x{0ce2}\x{0ce3}\x{0ce6}-\x{0cef}\x{0d02}\x{0d03}\x{0d3e}-\x{0d44}\x{0d46}-\x{0d48}\x{0d4a}-\x{0d4d}\x{0d57}\x{0d62}\x{0d63}\x{0d66}-\x{0d6f}\x{0d82}\x{0d83}\x{0dca}\x{0dcf}-\x{0dd4}\x{0dd6}\x{0dd8}-\x{0ddf}\x{0df2}\x{0df3}\x{0e31}\x{0e34}-\x{0e3a}\x{0e47}-\x{0e4e}\x{0e50}-\x{0e59}\x{0eb1}\x{0eb4}-\x{0eb9}\x{0ebb}\x{0ebc}\x{0ec8}-\x{0ecd}\x{0ed0}-\x{0ed9}\x{0f18}\x{0f19}\x{0f20}-\x{0f29}\x{0f35}\x{0f37}\x{0f39}\x{0f3e}\x{0f3f}\x{0f71}-\x{0f84}\x{0f86}\x{0f87}\x{0f8d}-\x{0f97}\x{0f99}-\x{0fbc}\x{0fc6}\x{102b}-\x{103e}\x{1040}-\x{1049}\x{1056}-\x{1059}\x{105e}-\x{1060}\x{1062}-\x{1064}\x{1067}-\x{106d}\x{1071}-\x{1074}\x{1082}-\x{108d}\x{108f}-\x{109d}\x{135d}-\x{135f}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}\x{1753}\x{1772}\x{1773}\x{17b4}-\x{17d3}\x{17dd}\x{17e0}-\x{17e9}\x{180b}-\x{180d}\x{1810}-\x{1819}\x{18a9}\x{1920}-\x{192b}\x{1930}-\x{193b}\x{1946}-\x{194f}\x{19b0}-\x{19c0}\x{19c8}\x{19c9}\x{19d0}-\x{19d9}\x{1a17}-\x{1a1b}\x{1a55}-\x{1a5e}\x{1a60}-\x{1a7c}\x{1a7f}-\x{1a89}\x{1a90}-\x{1a99}\x{1b00}-\x{1b04}\x{1b34}-\x{1b44}\x{1b50}-\x{1b59}\x{1b6b}-\x{1b73}\x{1b80}-\x{1b82}\x{1ba1}-\x{1bad}\x{1bb0}-\x{1bb9}\x{1be6}-\x{1bf3}\x{1c24}-\x{1c37}\x{1c40}-\x{1c49}\x{1c50}-\x{1c59}\x{1cd0}-\x{1cd2}\x{1cd4}-\x{1ce8}\x{1ced}\x{1cf2}-\x{1cf4}\x{1dc0}-\x{1de6}\x{1dfc}-\x{1dff}\x{200c}\x{200d}\x{203f}\x{2040}\x{2054}\x{20d0}-\x{20dc}\x{20e1}\x{20e5}-\x{20f0}\x{2cef}-\x{2cf1}\x{2d7f}\x{2de0}-\x{2dff}\x{302a}-\x{302f}\x{3099}\x{309a}\x{a620}-\x{a629}\x{a66f}\x{a674}-\x{a67d}\x{a69f}\x{a6f0}\x{a6f1}\x{a802}\x{a806}\x{a80b}\x{a823}-\x{a827}\x{a880}\x{a881}\x{a8b4}-\x{a8c4}\x{a8d0}-\x{a8d9}\x{a8e0}-\x{a8f1}\x{a900}-\x{a909}\x{a926}-\x{a92d}\x{a947}-\x{a953}\x{a980}-\x{a983}\x{a9b3}-\x{a9c0}\x{a9d0}-\x{a9d9}\x{aa29}-\x{aa36}\x{aa43}\x{aa4c}\x{aa4d}\x{aa50}-\x{aa59}\x{aa7b}\x{aab0}\x{aab2}-\x{aab4}\x{aab7}\x{aab8}\x{aabe}\x{aabf}\x{aac1}\x{aaeb}-\x{aaef}\x{aaf5}\x{aaf6}\x{abe3}-\x{abea}\x{abec}\x{abed}\x{abf0}-\x{abf9}\x{fb1e}\x{fe00}-\x{fe0f}\x{fe20}-\x{fe26}\x{fe33}\x{fe34}\x{fe4d}-\x{fe4f}\x{ff10}-\x{ff19}\x{ff3f}]*\b';
+
+ /**
+ * Full list of JavaScript reserved words.
+ * Will be loaded from /data/js/keywords_reserved.txt.
+ *
+ * @see https://mathiasbynens.be/notes/reserved-keywords
+ *
+ * @var string[]
+ */
+ protected $keywordsReserved = array();
+
+ /**
+ * List of JavaScript reserved words that accept a <variable, value, ...>
+ * after them. Some end of lines are not the end of a statement, like with
+ * these keywords.
+ *
+ * E.g.: we shouldn't insert a ; after this else
+ * else
+ * console.log('this is quite fine')
+ *
+ * Will be loaded from /data/js/keywords_before.txt
+ *
+ * @var string[]
+ */
+ protected $keywordsBefore = array();
+
+ /**
+ * List of JavaScript reserved words that accept a <variable, value, ...>
+ * before them. Some end of lines are not the end of a statement, like when
+ * continued by one of these keywords on the newline.
+ *
+ * E.g.: we shouldn't insert a ; before this instanceof
+ * variable
+ * instanceof String
+ *
+ * Will be loaded from /data/js/keywords_after.txt
+ *
+ * @var string[]
+ */
+ protected $keywordsAfter = array();
+
+ /**
+ * List of all JavaScript operators.
+ *
+ * Will be loaded from /data/js/operators.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operators = array();
+
+ /**
+ * List of JavaScript operators that accept a <variable, value, ...> after
+ * them. Some end of lines are not the end of a statement, like with these
+ * operators.
+ *
+ * Note: Most operators are fine, we've only removed ++ and --.
+ * ++ & -- have to be joined with the value they're in-/decrementing.
+ *
+ * Will be loaded from /data/js/operators_before.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operatorsBefore = array();
+
+ /**
+ * List of JavaScript operators that accept a <variable, value, ...> before
+ * them. Some end of lines are not the end of a statement, like when
+ * continued by one of these operators on the newline.
+ *
+ * Note: Most operators are fine, we've only removed ), ], ++, --, ! and ~.
+ * There can't be a newline separating ! or ~ and whatever it is negating.
+ * ++ & -- have to be joined with the value they're in-/decrementing.
+ * ) & ] are "special" in that they have lots or usecases. () for example
+ * is used for function calls, for grouping, in if () and for (), ...
+ *
+ * Will be loaded from /data/js/operators_after.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operatorsAfter = array();
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct()
+ {
+ call_user_func_array(array('parent', '__construct'), func_get_args());
+
+ $dataDir = __DIR__.'/../data/js/';
+ $options = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES;
+ $this->keywordsReserved = file($dataDir.'keywords_reserved.txt', $options);
+ $this->keywordsBefore = file($dataDir.'keywords_before.txt', $options);
+ $this->keywordsAfter = file($dataDir.'keywords_after.txt', $options);
+ $this->operators = file($dataDir.'operators.txt', $options);
+ $this->operatorsBefore = file($dataDir.'operators_before.txt', $options);
+ $this->operatorsAfter = file($dataDir.'operators_after.txt', $options);
+ }
+
+ /**
+ * Minify the data.
+ * Perform JS optimizations.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ public function execute($path = null)
+ {
+ $content = '';
+
+ /*
+ * Let's first take out strings, comments and regular expressions.
+ * All of these can contain JS code-like characters, and we should make
+ * sure any further magic ignores anything inside of these.
+ *
+ * Consider this example, where we should not strip any whitespace:
+ * var str = "a test";
+ *
+ * Comments will be removed altogether, strings and regular expressions
+ * will be replaced by placeholder text, which we'll restore later.
+ */
+ $this->extractStrings('\'"`');
+ $this->stripComments();
+ $this->extractRegex();
+
+ // loop files
+ foreach ($this->data as $source => $js) {
+ // take out strings, comments & regex (for which we've registered
+ // the regexes just a few lines earlier)
+ $js = $this->replace($js);
+
+ $js = $this->propertyNotation($js);
+ $js = $this->shortenBools($js);
+ $js = $this->stripWhitespace($js);
+
+ // combine js: separating the scripts by a ;
+ $content .= $js.";";
+ }
+
+ // clean up leftover `;`s from the combination of multiple scripts
+ $content = ltrim($content, ';');
+ $content = (string) substr($content, 0, -1);
+
+ /*
+ * Earlier, we extracted strings & regular expressions and replaced them
+ * with placeholder text. This will restore them.
+ */
+ $content = $this->restoreExtractedData($content);
+
+ return $content;
+ }
+
+ /**
+ * Strip comments from source code.
+ */
+ protected function stripComments()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '/*'.$count.'*/';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+ // multi-line comments
+ $this->registerPattern('/\n?\/\*(!|.*?@license|.*?@preserve).*?\*\/\n?/s', $callback);
+ $this->registerPattern('/\/\*.*?\*\//s', '');
+
+ // single-line comments
+ $this->registerPattern('/\/\/.*$/m', '');
+ }
+
+ /**
+ * JS can have /-delimited regular expressions, like: /ab+c/.match(string).
+ *
+ * The content inside the regex can contain characters that may be confused
+ * for JS code: e.g. it could contain whitespace it needs to match & we
+ * don't want to strip whitespace in there.
+ *
+ * The regex can be pretty simple: we don't have to care about comments,
+ * (which also use slashes) because stripComments() will have stripped those
+ * already.
+ *
+ * This method will replace all string content with simple REGEX#
+ * placeholder text, so we've rid all regular expressions from characters
+ * that may be misinterpreted. Original regex content will be saved in
+ * $this->extracted and after doing all other minifying, we can restore the
+ * original content via restoreRegex()
+ */
+ protected function extractRegex()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '"'.$count.'"';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+
+ // match all chars except `/` and `\`
+ // `\` is allowed though, along with whatever char follows (which is the
+ // one being escaped)
+ // this should allow all chars, except for an unescaped `/` (= the one
+ // closing the regex)
+ // then also ignore bare `/` inside `[]`, where they don't need to be
+ // escaped: anything inside `[]` can be ignored safely
+ $pattern = '\\/(?!\*)(?:[^\\[\\/\\\\\n\r]++|(?:\\\\.)++|(?:\\[(?:[^\\]\\\\\n\r]++|(?:\\\\.)++)++\\])++)++\\/[gimuy]*';
+
+ // a regular expression can only be followed by a few operators or some
+ // of the RegExp methods (a `\` followed by a variable or value is
+ // likely part of a division, not a regex)
+ $keywords = array('do', 'in', 'new', 'else', 'throw', 'yield', 'delete', 'return', 'typeof');
+ $before = '([=:,;\+\-\*\/\}\(\{\[&\|!]|^|'.implode('|', $keywords).')\s*';
+ $propertiesAndMethods = array(
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Properties_2
+ 'constructor',
+ 'flags',
+ 'global',
+ 'ignoreCase',
+ 'multiline',
+ 'source',
+ 'sticky',
+ 'unicode',
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Methods_2
+ 'compile(',
+ 'exec(',
+ 'test(',
+ 'toSource(',
+ 'toString(',
+ );
+ $delimiters = array_fill(0, count($propertiesAndMethods), '/');
+ $propertiesAndMethods = array_map('preg_quote', $propertiesAndMethods, $delimiters);
+ $after = '(?=\s*([\.,;\)\}&\|+]|\/\/|$|\.('.implode('|', $propertiesAndMethods).')))';
+ $this->registerPattern('/'.$before.'\K'.$pattern.$after.'/', $callback);
+
+ // regular expressions following a `)` are rather annoying to detect...
+ // quite often, `/` after `)` is a division operator & if it happens to
+ // be followed by another one (or a comment), it is likely to be
+ // confused for a regular expression
+ // however, it's perfectly possible for a regex to follow a `)`: after
+ // a single-line `if()`, `while()`, ... statement, for example
+ // since, when they occur like that, they're always the start of a
+ // statement, there's only a limited amount of ways they can be useful:
+ // by calling the regex methods directly
+ // if a regex following `)` is not followed by `.<property or method>`,
+ // it's quite likely not a regex
+ $before = '\)\s*';
+ $after = '(?=\s*\.('.implode('|', $propertiesAndMethods).'))';
+ $this->registerPattern('/'.$before.'\K'.$pattern.$after.'/', $callback);
+
+ // 1 more edge case: a regex can be followed by a lot more operators or
+ // keywords if there's a newline (ASI) in between, where the operator
+ // actually starts a new statement
+ // (https://github.com/matthiasmullie/minify/issues/56)
+ $operators = $this->getOperatorsForRegex($this->operatorsBefore, '/');
+ $operators += $this->getOperatorsForRegex($this->keywordsReserved, '/');
+ $after = '(?=\s*\n\s*('.implode('|', $operators).'))';
+ $this->registerPattern('/'.$pattern.$after.'/', $callback);
+ }
+
+ /**
+ * Strip whitespace.
+ *
+ * We won't strip *all* whitespace, but as much as possible. The thing that
+ * we'll preserve are newlines we're unsure about.
+ * JavaScript doesn't require statements to be terminated with a semicolon.
+ * It will automatically fix missing semicolons with ASI (automatic semi-
+ * colon insertion) at the end of line causing errors (without semicolon.)
+ *
+ * Because it's sometimes hard to tell if a newline is part of a statement
+ * that should be terminated or not, we'll just leave some of them alone.
+ *
+ * @param string $content The content to strip the whitespace for
+ *
+ * @return string
+ */
+ protected function stripWhitespace($content)
+ {
+ // uniform line endings, make them all line feed
+ $content = str_replace(array("\r\n", "\r"), "\n", $content);
+
+ // collapse all non-line feed whitespace into a single space
+ $content = preg_replace('/[^\S\n]+/', ' ', $content);
+
+ // strip leading & trailing whitespace
+ $content = str_replace(array(" \n", "\n "), "\n", $content);
+
+ // collapse consecutive line feeds into just 1
+ $content = preg_replace('/\n+/', "\n", $content);
+
+ $operatorsBefore = $this->getOperatorsForRegex($this->operatorsBefore, '/');
+ $operatorsAfter = $this->getOperatorsForRegex($this->operatorsAfter, '/');
+ $operators = $this->getOperatorsForRegex($this->operators, '/');
+ $keywordsBefore = $this->getKeywordsForRegex($this->keywordsBefore, '/');
+ $keywordsAfter = $this->getKeywordsForRegex($this->keywordsAfter, '/');
+
+ // strip whitespace that ends in (or next line begin with) an operator
+ // that allows statements to be broken up over multiple lines
+ unset($operatorsBefore['+'], $operatorsBefore['-'], $operatorsAfter['+'], $operatorsAfter['-']);
+ $content = preg_replace(
+ array(
+ '/('.implode('|', $operatorsBefore).')\s+/',
+ '/\s+('.implode('|', $operatorsAfter).')/',
+ ),
+ '\\1',
+ $content
+ );
+
+ // make sure + and - can't be mistaken for, or joined into ++ and --
+ $content = preg_replace(
+ array(
+ '/(?<![\+\-])\s*([\+\-])(?![\+\-])/',
+ '/(?<![\+\-])([\+\-])\s*(?![\+\-])/',
+ ),
+ '\\1',
+ $content
+ );
+
+ // collapse whitespace around reserved words into single space
+ $content = preg_replace('/(^|[;\}\s])\K('.implode('|', $keywordsBefore).')\s+/', '\\2 ', $content);
+ $content = preg_replace('/\s+('.implode('|', $keywordsAfter).')(?=([;\{\s]|$))/', ' \\1', $content);
+
+ /*
+ * We didn't strip whitespace after a couple of operators because they
+ * could be used in different contexts and we can't be sure it's ok to
+ * strip the newlines. However, we can safely strip any non-line feed
+ * whitespace that follows them.
+ */
+ $operatorsDiffBefore = array_diff($operators, $operatorsBefore);
+ $operatorsDiffAfter = array_diff($operators, $operatorsAfter);
+ $content = preg_replace('/('.implode('|', $operatorsDiffBefore).')[^\S\n]+/', '\\1', $content);
+ $content = preg_replace('/[^\S\n]+('.implode('|', $operatorsDiffAfter).')/', '\\1', $content);
+
+ /*
+ * Whitespace after `return` can be omitted in a few occasions
+ * (such as when followed by a string or regex)
+ * Same for whitespace in between `)` and `{`, or between `{` and some
+ * keywords.
+ */
+ $content = preg_replace('/\breturn\s+(["\'\/\+\-])/', 'return$1', $content);
+ $content = preg_replace('/\)\s+\{/', '){', $content);
+ $content = preg_replace('/}\n(else|catch|finally)\b/', '}$1', $content);
+
+ /*
+ * Get rid of double semicolons, except where they can be used like:
+ * "for(v=1,_=b;;)", "for(v=1;;v++)" or "for(;;ja||(ja=true))".
+ * I'll safeguard these double semicolons inside for-loops by
+ * temporarily replacing them with an invalid condition: they won't have
+ * a double semicolon and will be easy to spot to restore afterwards.
+ */
+ $content = preg_replace('/\bfor\(([^;]*);;([^;]*)\)/', 'for(\\1;-;\\2)', $content);
+ $content = preg_replace('/;+/', ';', $content);
+ $content = preg_replace('/\bfor\(([^;]*);-;([^;]*)\)/', 'for(\\1;;\\2)', $content);
+
+ /*
+ * Next, we'll be removing all semicolons where ASI kicks in.
+ * for-loops however, can have an empty body (ending in only a
+ * semicolon), like: `for(i=1;i<3;i++);`, of `for(i in list);`
+ * Here, nothing happens during the loop; it's just used to keep
+ * increasing `i`. With that ; omitted, the next line would be expected
+ * to be the for-loop's body... Same goes for while loops.
+ * I'm going to double that semicolon (if any) so after the next line,
+ * which strips semicolons here & there, we're still left with this one.
+ */
+ $content = preg_replace('/(for\([^;\{]*;[^;\{]*;[^;\{]*\));(\}|$)/s', '\\1;;\\2', $content);
+ $content = preg_replace('/(for\([^;\{]+\s+in\s+[^;\{]+\));(\}|$)/s', '\\1;;\\2', $content);
+ /*
+ * Below will also keep `;` after a `do{}while();` along with `while();`
+ * While these could be stripped after do-while, detecting this
+ * distinction is cumbersome, so I'll play it safe and make sure `;`
+ * after any kind of `while` is kept.
+ */
+ $content = preg_replace('/(while\([^;\{]+\));(\}|$)/s', '\\1;;\\2', $content);
+
+ /*
+ * We also can't strip empty else-statements. Even though they're
+ * useless and probably shouldn't be in the code in the first place, we
+ * shouldn't be stripping the `;` that follows it as it breaks the code.
+ * We can just remove those useless else-statements completely.
+ *
+ * @see https://github.com/matthiasmullie/minify/issues/91
+ */
+ $content = preg_replace('/else;/s', '', $content);
+
+ /*
+ * We also don't really want to terminate statements followed by closing
+ * curly braces (which we've ignored completely up until now) or end-of-
+ * script: ASI will kick in here & we're all about minifying.
+ * Semicolons at beginning of the file don't make any sense either.
+ */
+ $content = preg_replace('/;(\}|$)/s', '\\1', $content);
+ $content = ltrim($content, ';');
+
+ // get rid of remaining whitespace af beginning/end
+ return trim($content);
+ }
+
+ /**
+ * We'll strip whitespace around certain operators with regular expressions.
+ * This will prepare the given array by escaping all characters.
+ *
+ * @param string[] $operators
+ * @param string $delimiter
+ *
+ * @return string[]
+ */
+ protected function getOperatorsForRegex(array $operators, $delimiter = '/')
+ {
+ // escape operators for use in regex
+ $delimiters = array_fill(0, count($operators), $delimiter);
+ $escaped = array_map('preg_quote', $operators, $delimiters);
+
+ $operators = array_combine($operators, $escaped);
+
+ // ignore + & - for now, they'll get special treatment
+ unset($operators['+'], $operators['-']);
+
+ // dot can not just immediately follow a number; it can be confused for
+ // decimal point, or calling a method on it, e.g. 42 .toString()
+ $operators['.'] = '(?<![0-9]\s)\.';
+
+ // don't confuse = with other assignment shortcuts (e.g. +=)
+ $chars = preg_quote('+-*\=<>%&|', $delimiter);
+ $operators['='] = '(?<!['.$chars.'])\=';
+
+ return $operators;
+ }
+
+ /**
+ * We'll strip whitespace around certain keywords with regular expressions.
+ * This will prepare the given array by escaping all characters.
+ *
+ * @param string[] $keywords
+ * @param string $delimiter
+ *
+ * @return string[]
+ */
+ protected function getKeywordsForRegex(array $keywords, $delimiter = '/')
+ {
+ // escape keywords for use in regex
+ $delimiter = array_fill(0, count($keywords), $delimiter);
+ $escaped = array_map('preg_quote', $keywords, $delimiter);
+
+ // add word boundaries
+ array_walk($keywords, function ($value) {
+ return '\b'.$value.'\b';
+ });
+
+ $keywords = array_combine($keywords, $escaped);
+
+ return $keywords;
+ }
+
+ /**
+ * Replaces all occurrences of array['key'] by array.key.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function propertyNotation($content)
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $keywords = $this->keywordsReserved;
+ $callback = function ($match) use ($minifier, $keywords) {
+ $property = trim($minifier->extracted[$match[1]], '\'"');
+
+ /*
+ * Check if the property is a reserved keyword. In this context (as
+ * property of an object literal/array) it shouldn't matter, but IE8
+ * freaks out with "Expected identifier".
+ */
+ if (in_array($property, $keywords)) {
+ return $match[0];
+ }
+
+ /*
+ * See if the property is in a variable-like format (e.g.
+ * array['key-here'] can't be replaced by array.key-here since '-'
+ * is not a valid character there.
+ */
+ if (!preg_match('/^'.$minifier::REGEX_VARIABLE.'$/u', $property)) {
+ return $match[0];
+ }
+
+ return '.'.$property;
+ };
+
+ /*
+ * Figure out if previous character is a variable name (of the array
+ * we want to use property notation on) - this is to make sure
+ * standalone ['value'] arrays aren't confused for keys-of-an-array.
+ * We can (and only have to) check the last character, because PHP's
+ * regex implementation doesn't allow unfixed-length look-behind
+ * assertions.
+ */
+ preg_match('/(\[[^\]]+\])[^\]]*$/', static::REGEX_VARIABLE, $previousChar);
+ $previousChar = $previousChar[1];
+
+ /*
+ * Make sure word preceding the ['value'] is not a keyword, e.g.
+ * return['x']. Because -again- PHP's regex implementation doesn't allow
+ * unfixed-length look-behind assertions, I'm just going to do a lot of
+ * separate look-behind assertions, one for each keyword.
+ */
+ $keywords = $this->getKeywordsForRegex($keywords);
+ $keywords = '(?<!'.implode(')(?<!', $keywords).')';
+
+ return preg_replace_callback('/(?<='.$previousChar.'|\])'.$keywords.'\[\s*(([\'"])[0-9]+\\2)\s*\]/u', $callback, $content);
+ }
+
+ /**
+ * Replaces true & false by !0 and !1.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function shortenBools($content)
+ {
+ /*
+ * 'true' or 'false' could be used as property names (which may be
+ * followed by whitespace) - we must not replace those!
+ * Since PHP doesn't allow variable-length (to account for the
+ * whitespace) lookbehind assertions, I need to capture the leading
+ * character and check if it's a `.`
+ */
+ $callback = function ($match) {
+ if (trim($match[1]) === '.') {
+ return $match[0];
+ }
+
+ return $match[1].($match[2] === 'true' ? '!0' : '!1');
+ };
+ $content = preg_replace_callback('/(^|.\s*)\b(true|false)\b(?!:)/', $callback, $content);
+
+ // for(;;) is exactly the same as while(true), but shorter :)
+ $content = preg_replace('/\bwhile\(!0\){/', 'for(;;){', $content);
+
+ // now make sure we didn't turn any do ... while(true) into do ... for(;;)
+ preg_match_all('/\bdo\b/', $content, $dos, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
+
+ // go backward to make sure positional offsets aren't altered when $content changes
+ $dos = array_reverse($dos);
+ foreach ($dos as $do) {
+ $offsetDo = $do[0][1];
+
+ // find all `while` (now `for`) following `do`: one of those must be
+ // associated with the `do` and be turned back into `while`
+ preg_match_all('/\bfor\(;;\)/', $content, $whiles, PREG_OFFSET_CAPTURE | PREG_SET_ORDER, $offsetDo);
+ foreach ($whiles as $while) {
+ $offsetWhile = $while[0][1];
+
+ $open = substr_count($content, '{', $offsetDo, $offsetWhile - $offsetDo);
+ $close = substr_count($content, '}', $offsetDo, $offsetWhile - $offsetDo);
+ if ($open === $close) {
+ // only restore `while` if amount of `{` and `}` are the same;
+ // otherwise, that `for` isn't associated with this `do`
+ $content = substr_replace($content, 'while(!0)', $offsetWhile, strlen('for(;;)'));
+ break;
+ }
+ }
+ }
+
+ return $content;
+ }
+}
diff --git a/libs/minify/src/Minify.php b/libs/minify/src/Minify.php
new file mode 100755
index 00000000..e5fefe6f
--- /dev/null
+++ b/libs/minify/src/Minify.php
@@ -0,0 +1,459 @@
+<?php
+/**
+ * Abstract minifier class
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify;
+
+use MatthiasMullie\Minify\Exceptions\IOException;
+use Psr\Cache\CacheItemInterface;
+
+/**
+ * Abstract minifier class.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+abstract class Minify
+{
+ /**
+ * The data to be minified.
+ *
+ * @var string[]
+ */
+ protected $data = array();
+
+ /**
+ * Array of patterns to match.
+ *
+ * @var string[]
+ */
+ protected $patterns = array();
+
+ /**
+ * This array will hold content of strings and regular expressions that have
+ * been extracted from the JS source code, so we can reliably match "code",
+ * without having to worry about potential "code-like" characters inside.
+ *
+ * @var string[]
+ */
+ public $extracted = array();
+
+ /**
+ * Init the minify class - optionally, code may be passed along already.
+ */
+ public function __construct(/* $data = null, ... */)
+ {
+ // it's possible to add the source through the constructor as well ;)
+ if (func_num_args()) {
+ call_user_func_array(array($this, 'add'), func_get_args());
+ }
+ }
+
+ /**
+ * Add a file or straight-up code to be minified.
+ *
+ * @param string|string[] $data
+ *
+ * @return static
+ */
+ public function add($data /* $data = null, ... */)
+ {
+ // bogus "usage" of parameter $data: scrutinizer warns this variable is
+ // not used (we're using func_get_args instead to support overloading),
+ // but it still needs to be defined because it makes no sense to have
+ // this function without argument :)
+ $args = array($data) + func_get_args();
+
+ // this method can be overloaded
+ foreach ($args as $data) {
+ if (is_array($data)) {
+ call_user_func_array(array($this, 'add'), $data);
+ continue;
+ }
+
+ // redefine var
+ $data = (string) $data;
+
+ // load data
+ $value = $this->load($data);
+ $key = ($data != $value) ? $data : count($this->data);
+
+ // replace CR linefeeds etc.
+ // @see https://github.com/matthiasmullie/minify/pull/139
+ $value = str_replace(array("\r\n", "\r"), "\n", $value);
+
+ // store data
+ $this->data[$key] = $value;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Minify the data & (optionally) saves it to a file.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ public function minify($path = null)
+ {
+ $content = $this->execute($path);
+
+ // save to path
+ if ($path !== null) {
+ $this->save($content, $path);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify & gzip the data & (optionally) saves it to a file.
+ *
+ * @param string[optional] $path Path to write the data to
+ * @param int[optional] $level Compression level, from 0 to 9
+ *
+ * @return string The minified & gzipped data
+ */
+ public function gzip($path = null, $level = 9)
+ {
+ $content = $this->execute($path);
+ $content = gzencode($content, $level, FORCE_GZIP);
+
+ // save to path
+ if ($path !== null) {
+ $this->save($content, $path);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify the data & write it to a CacheItemInterface object.
+ *
+ * @param CacheItemInterface $item Cache item to write the data to
+ *
+ * @return CacheItemInterface Cache item with the minifier data
+ */
+ public function cache(CacheItemInterface $item)
+ {
+ $content = $this->execute();
+ $item->set($content);
+
+ return $item;
+ }
+
+ /**
+ * Minify the data.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ abstract public function execute($path = null);
+
+ /**
+ * Load data.
+ *
+ * @param string $data Either a path to a file or the content itself
+ *
+ * @return string
+ */
+ protected function load($data)
+ {
+ // check if the data is a file
+ if ($this->canImportFile($data)) {
+ $data = file_get_contents($data);
+
+ // strip BOM, if any
+ if (substr($data, 0, 3) == "\xef\xbb\xbf") {
+ $data = substr($data, 3);
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Save to file.
+ *
+ * @param string $content The minified data
+ * @param string $path The path to save the minified data to
+ *
+ * @throws IOException
+ */
+ protected function save($content, $path)
+ {
+ $handler = $this->openFileForWriting($path);
+
+ $this->writeToFile($handler, $content);
+
+ @fclose($handler);
+ }
+
+ /**
+ * Register a pattern to execute against the source content.
+ *
+ * @param string $pattern PCRE pattern
+ * @param string|callable $replacement Replacement value for matched pattern
+ */
+ protected function registerPattern($pattern, $replacement = '')
+ {
+ // study the pattern, we'll execute it more than once
+ $pattern .= 'S';
+
+ $this->patterns[] = array($pattern, $replacement);
+ }
+
+ /**
+ * We can't "just" run some regular expressions against JavaScript: it's a
+ * complex language. E.g. having an occurrence of // xyz would be a comment,
+ * unless it's used within a string. Of you could have something that looks
+ * like a 'string', but inside a comment.
+ * The only way to accurately replace these pieces is to traverse the JS one
+ * character at a time and try to find whatever starts first.
+ *
+ * @param string $content The content to replace patterns in
+ *
+ * @return string The (manipulated) content
+ */
+ protected function replace($content)
+ {
+ $processed = '';
+ $positions = array_fill(0, count($this->patterns), -1);
+ $matches = array();
+
+ while ($content) {
+ // find first match for all patterns
+ foreach ($this->patterns as $i => $pattern) {
+ list($pattern, $replacement) = $pattern;
+
+ // we can safely ignore patterns for positions we've unset earlier,
+ // because we know these won't show up anymore
+ if (array_key_exists($i, $positions) == false) {
+ continue;
+ }
+
+ // no need to re-run matches that are still in the part of the
+ // content that hasn't been processed
+ if ($positions[$i] >= 0) {
+ continue;
+ }
+
+ $match = null;
+ if (preg_match($pattern, $content, $match, PREG_OFFSET_CAPTURE)) {
+ $matches[$i] = $match;
+
+ // we'll store the match position as well; that way, we
+ // don't have to redo all preg_matches after changing only
+ // the first (we'll still know where those others are)
+ $positions[$i] = $match[0][1];
+ } else {
+ // if the pattern couldn't be matched, there's no point in
+ // executing it again in later runs on this same content;
+ // ignore this one until we reach end of content
+ unset($matches[$i], $positions[$i]);
+ }
+ }
+
+ // no more matches to find: everything's been processed, break out
+ if (!$matches) {
+ $processed .= $content;
+ break;
+ }
+
+ // see which of the patterns actually found the first thing (we'll
+ // only want to execute that one, since we're unsure if what the
+ // other found was not inside what the first found)
+ $discardLength = min($positions);
+ $firstPattern = array_search($discardLength, $positions);
+ $match = $matches[$firstPattern][0][0];
+
+ // execute the pattern that matches earliest in the content string
+ list($pattern, $replacement) = $this->patterns[$firstPattern];
+ $replacement = $this->replacePattern($pattern, $replacement, $content);
+
+ // figure out which part of the string was unmatched; that's the
+ // part we'll execute the patterns on again next
+ $content = (string) substr($content, $discardLength);
+ $unmatched = (string) substr($content, strpos($content, $match) + strlen($match));
+
+ // move the replaced part to $processed and prepare $content to
+ // again match batch of patterns against
+ $processed .= substr($replacement, 0, strlen($replacement) - strlen($unmatched));
+ $content = $unmatched;
+
+ // first match has been replaced & that content is to be left alone,
+ // the next matches will start after this replacement, so we should
+ // fix their offsets
+ foreach ($positions as $i => $position) {
+ $positions[$i] -= $discardLength + strlen($match);
+ }
+ }
+
+ return $processed;
+ }
+
+ /**
+ * This is where a pattern is matched against $content and the matches
+ * are replaced by their respective value.
+ * This function will be called plenty of times, where $content will always
+ * move up 1 character.
+ *
+ * @param string $pattern Pattern to match
+ * @param string|callable $replacement Replacement value
+ * @param string $content Content to match pattern against
+ *
+ * @return string
+ */
+ protected function replacePattern($pattern, $replacement, $content)
+ {
+ if (is_callable($replacement)) {
+ return preg_replace_callback($pattern, $replacement, $content, 1, $count);
+ } else {
+ return preg_replace($pattern, $replacement, $content, 1, $count);
+ }
+ }
+
+ /**
+ * Strings are a pattern we need to match, in order to ignore potential
+ * code-like content inside them, but we just want all of the string
+ * content to remain untouched.
+ *
+ * This method will replace all string content with simple STRING#
+ * placeholder text, so we've rid all strings from characters that may be
+ * misinterpreted. Original string content will be saved in $this->extracted
+ * and after doing all other minifying, we can restore the original content
+ * via restoreStrings().
+ *
+ * @param string[optional] $chars
+ * @param string[optional] $placeholderPrefix
+ */
+ protected function extractStrings($chars = '\'"', $placeholderPrefix = '')
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier, $placeholderPrefix) {
+ // check the second index here, because the first always contains a quote
+ if ($match[2] === '') {
+ /*
+ * Empty strings need no placeholder; they can't be confused for
+ * anything else anyway.
+ * But we still needed to match them, for the extraction routine
+ * to skip over this particular string.
+ */
+ return $match[0];
+ }
+
+ $count = count($minifier->extracted);
+ $placeholder = $match[1].$placeholderPrefix.$count.$match[1];
+ $minifier->extracted[$placeholder] = $match[1].$match[2].$match[1];
+
+ return $placeholder;
+ };
+
+ /*
+ * The \\ messiness explained:
+ * * Don't count ' or " as end-of-string if it's escaped (has backslash
+ * in front of it)
+ * * Unless... that backslash itself is escaped (another leading slash),
+ * in which case it's no longer escaping the ' or "
+ * * So there can be either no backslash, or an even number
+ * * multiply all of that times 4, to account for the escaping that has
+ * to be done to pass the backslash into the PHP string without it being
+ * considered as escape-char (times 2) and to get it in the regex,
+ * escaped (times 2)
+ */
+ $this->registerPattern('/(['.$chars.'])(.*?(?<!\\\\)(\\\\\\\\)*+)\\1/s', $callback);
+ }
+
+ /**
+ * This method will restore all extracted data (strings, regexes) that were
+ * replaced with placeholder text in extract*(). The original content was
+ * saved in $this->extracted.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function restoreExtractedData($content)
+ {
+ if (!$this->extracted) {
+ // nothing was extracted, nothing to restore
+ return $content;
+ }
+
+ $content = strtr($content, $this->extracted);
+
+ $this->extracted = array();
+
+ return $content;
+ }
+
+ /**
+ * Check if the path is a regular file and can be read.
+ *
+ * @param string $path
+ *
+ * @return bool
+ */
+ protected function canImportFile($path)
+ {
+ $parsed = parse_url($path);
+ if (
+ // file is elsewhere
+ isset($parsed['host']) ||
+ // file responds to queries (may change, or need to bypass cache)
+ isset($parsed['query'])
+ ) {
+ return false;
+ }
+
+ return strlen($path) < PHP_MAXPATHLEN && @is_file($path) && is_readable($path);
+ }
+
+ /**
+ * Attempts to open file specified by $path for writing.
+ *
+ * @param string $path The path to the file
+ *
+ * @return resource Specifier for the target file
+ *
+ * @throws IOException
+ */
+ protected function openFileForWriting($path)
+ {
+ if (($handler = @fopen($path, 'w')) === false) {
+ throw new IOException('The file "'.$path.'" could not be opened for writing. Check if PHP has enough permissions.');
+ }
+
+ return $handler;
+ }
+
+ /**
+ * Attempts to write $content to the file specified by $handler. $path is used for printing exceptions.
+ *
+ * @param resource $handler The resource to write to
+ * @param string $content The content to write
+ * @param string $path The path to the file (for exception printing only)
+ *
+ * @throws IOException
+ */
+ protected function writeToFile($handler, $content, $path = '')
+ {
+ if (($result = @fwrite($handler, $content)) === false || ($result < strlen($content))) {
+ throw new IOException('The file "'.$path.'" could not be written to. Check your disk space and file permissions.');
+ }
+ }
+}
diff --git a/libs/path-converter/LICENSE b/libs/path-converter/LICENSE
new file mode 100755
index 00000000..491295ad
--- /dev/null
+++ b/libs/path-converter/LICENSE
@@ -0,0 +1,18 @@
+Copyright (c) 2015 Matthias Mullie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/libs/path-converter/src/Converter.php b/libs/path-converter/src/Converter.php
new file mode 100755
index 00000000..519d3c84
--- /dev/null
+++ b/libs/path-converter/src/Converter.php
@@ -0,0 +1,196 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Convert paths relative from 1 file to another.
+ *
+ * E.g.
+ * ../../images/icon.jpg relative to /css/imports/icons.css
+ * becomes
+ * ../images/icon.jpg relative to /css/minified.css
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class Converter implements ConverterInterface
+{
+ /**
+ * @var string
+ */
+ protected $from;
+
+ /**
+ * @var string
+ */
+ protected $to;
+
+ /**
+ * @param string $from The original base path (directory, not file!)
+ * @param string $to The new base path (directory, not file!)
+ * @param string $root Root directory (defaults to `getcwd`)
+ */
+ public function __construct($from, $to, $root = '')
+ {
+ $shared = $this->shared($from, $to);
+ if ($shared === '') {
+ // when both paths have nothing in common, one of them is probably
+ // absolute while the other is relative
+ $root = $root ?: getcwd();
+ $from = strpos($from, $root) === 0 ? $from : preg_replace('/\/+/', '/', $root.'/'.$from);
+ $to = strpos($to, $root) === 0 ? $to : preg_replace('/\/+/', '/', $root.'/'.$to);
+
+ // or traveling the tree via `..`
+ // attempt to resolve path, or assume it's fine if it doesn't exist
+ $from = @realpath($from) ?: $from;
+ $to = @realpath($to) ?: $to;
+ }
+
+ $from = $this->dirname($from);
+ $to = $this->dirname($to);
+
+ $from = $this->normalize($from);
+ $to = $this->normalize($to);
+
+ $this->from = $from;
+ $this->to = $to;
+ }
+
+ /**
+ * Normalize path.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ protected function normalize($path)
+ {
+ // deal with different operating systems' directory structure
+ $path = rtrim(str_replace(DIRECTORY_SEPARATOR, '/', $path), '/');
+
+ /*
+ * Example:
+ * /home/forkcms/frontend/cache/compiled_templates/../../core/layout/css/../images/img.gif
+ * to
+ * /home/forkcms/frontend/core/layout/images/img.gif
+ */
+ do {
+ $path = preg_replace('/[^\/]+(?<!\.\.)\/\.\.\//', '', $path, -1, $count);
+ } while ($count);
+
+ return $path;
+ }
+
+ /**
+ * Figure out the shared path of 2 locations.
+ *
+ * Example:
+ * /home/forkcms/frontend/core/layout/images/img.gif
+ * and
+ * /home/forkcms/frontend/cache/minified_css
+ * share
+ * /home/forkcms/frontend
+ *
+ * @param string $path1
+ * @param string $path2
+ *
+ * @return string
+ */
+ protected function shared($path1, $path2)
+ {
+ // $path could theoretically be empty (e.g. no path is given), in which
+ // case it shouldn't expand to array(''), which would compare to one's
+ // root /
+ $path1 = $path1 ? explode('/', $path1) : array();
+ $path2 = $path2 ? explode('/', $path2) : array();
+
+ $shared = array();
+
+ // compare paths & strip identical ancestors
+ foreach ($path1 as $i => $chunk) {
+ if (isset($path2[$i]) && $path1[$i] == $path2[$i]) {
+ $shared[] = $chunk;
+ } else {
+ break;
+ }
+ }
+
+ return implode('/', $shared);
+ }
+
+ /**
+ * Convert paths relative from 1 file to another.
+ *
+ * E.g.
+ * ../images/img.gif relative to /home/forkcms/frontend/core/layout/css
+ * should become:
+ * ../../core/layout/images/img.gif relative to
+ * /home/forkcms/frontend/cache/minified_css
+ *
+ * @param string $path The relative path that needs to be converted
+ *
+ * @return string The new relative path
+ */
+ public function convert($path)
+ {
+ // quit early if conversion makes no sense
+ if ($this->from === $this->to) {
+ return $path;
+ }
+
+ $path = $this->normalize($path);
+ // if we're not dealing with a relative path, just return absolute
+ if (strpos($path, '/') === 0) {
+ return $path;
+ }
+
+ // normalize paths
+ $path = $this->normalize($this->from.'/'.$path);
+
+ // strip shared ancestor paths
+ $shared = $this->shared($path, $this->to);
+ $path = mb_substr($path, mb_strlen($shared));
+ $to = mb_substr($this->to, mb_strlen($shared));
+
+ // add .. for every directory that needs to be traversed to new path
+ $to = str_repeat('../', count(array_filter(explode('/', $to))));
+
+ return $to.ltrim($path, '/');
+ }
+
+ /**
+ * Attempt to get the directory name from a path.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ protected function dirname($path)
+ {
+ if (@is_file($path)) {
+ return dirname($path);
+ }
+
+ if (@is_dir($path)) {
+ return rtrim($path, '/');
+ }
+
+ // no known file/dir, start making assumptions
+
+ // ends in / = dir
+ if (mb_substr($path, -1) === '/') {
+ return rtrim($path, '/');
+ }
+
+ // has a dot in the name, likely a file
+ if (preg_match('/.*\..*$/', basename($path)) !== 0) {
+ return dirname($path);
+ }
+
+ // you're on your own here!
+ return $path;
+ }
+}
diff --git a/libs/path-converter/src/ConverterInterface.php b/libs/path-converter/src/ConverterInterface.php
new file mode 100755
index 00000000..dc1b7657
--- /dev/null
+++ b/libs/path-converter/src/ConverterInterface.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Convert file paths.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+interface ConverterInterface
+{
+ /**
+ * Convert file paths.
+ *
+ * @param string $path The path to be converted
+ *
+ * @return string The new path
+ */
+ public function convert($path);
+}
diff --git a/libs/path-converter/src/NoConverter.php b/libs/path-converter/src/NoConverter.php
new file mode 100755
index 00000000..2fcfd0f2
--- /dev/null
+++ b/libs/path-converter/src/NoConverter.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Don't convert paths.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class NoConverter implements ConverterInterface
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function convert($path)
+ {
+ return $path;
+ }
+}
diff --git a/package.json b/package.json
index 88ec58cb..eb866e29 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,6 @@
"gulp": "^3.9.1",
"gulp-cli": "^1.2.2",
"gulp-concat": "^2.6.1",
- "gulp-sass": "^3.0.0",
"gulp-uglify": "^2.0.0",
"jshint": "^2.9.4"
},