diff --git a/app/Console/CssCommand.php b/app/Console/CssCommand.php
index b4b14f46c..cf6f774b0 100644
--- a/app/Console/CssCommand.php
+++ b/app/Console/CssCommand.php
@@ -30,7 +30,6 @@ class CssCommand extends BaseCommand
const CSS_DIST_PATH = 'assets/css/';
private $appFiles = [
- 'variables.css',
'base.css',
'links.css',
'titles.css',
@@ -105,7 +104,9 @@ class CssCommand extends BaseCommand
protected function execute(InputInterface $input, OutputInterface $output)
{
- $this->minifyFiles(self::CSS_SRC_PATH, $this->appFiles, 'app.min.css');
+ $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'light.css'], $this->appFiles), 'light.min.css');
+ $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'dark.css'], $this->appFiles), 'dark.min.css');
+ $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'auto.css'], $this->appFiles), 'auto.min.css');
$this->minifyFiles(self::CSS_SRC_PATH, $this->printFiles, 'print.min.css');
$vendorBundle = concat_files($this->vendorFiles);
diff --git a/app/Controller/UserCreationController.php b/app/Controller/UserCreationController.php
index 27f1687bb..bd2f94b38 100644
--- a/app/Controller/UserCreationController.php
+++ b/app/Controller/UserCreationController.php
@@ -23,6 +23,7 @@ class UserCreationController extends BaseController
public function show(array $values = array(), array $errors = array())
{
$this->response->html($this->template->render('user_creation/show', array(
+ 'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true),
'roles' => $this->role->getApplicationRoles(),
diff --git a/app/Controller/UserInviteController.php b/app/Controller/UserInviteController.php
index 8c77940ce..a069d010e 100644
--- a/app/Controller/UserInviteController.php
+++ b/app/Controller/UserInviteController.php
@@ -46,6 +46,7 @@ class UserInviteController extends BaseController
'token' => $invite['token'],
'errors' => $errors,
'values' => $values + array('email' => $invite['email']),
+ 'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true),
)));
diff --git a/app/Controller/UserModificationController.php b/app/Controller/UserModificationController.php
index 645a2620e..be432f085 100644
--- a/app/Controller/UserModificationController.php
+++ b/app/Controller/UserModificationController.php
@@ -32,6 +32,7 @@ class UserModificationController extends BaseController
'values' => $values,
'errors' => $errors,
'user' => $user,
+ 'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true),
'roles' => $this->role->getApplicationRoles(),
@@ -52,6 +53,7 @@ class UserModificationController extends BaseController
'username' => isset($values['username']) ? $values['username'] : '',
'name' => isset($values['name']) ? $values['name'] : '',
'email' => isset($values['email']) ? $values['email'] : '',
+ 'theme' => isset($values['theme']) ? $values['theme'] : '',
'timezone' => isset($values['timezone']) ? $values['timezone'] : '',
'language' => isset($values['language']) ? $values['language'] : '',
'filter' => isset($values['filter']) ? $values['filter'] : '',
diff --git a/app/Controller/UserViewController.php b/app/Controller/UserViewController.php
index eb9873797..e3b0f711e 100644
--- a/app/Controller/UserViewController.php
+++ b/app/Controller/UserViewController.php
@@ -43,6 +43,7 @@ class UserViewController extends BaseController
$user = $this->getUser();
$this->response->html($this->helper->layout->user('user_view/show', array(
'user' => $user,
+ 'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true),
)));
diff --git a/app/Core/Base.php b/app/Core/Base.php
index 55bcc0e77..35a0c301d 100644
--- a/app/Core/Base.php
+++ b/app/Core/Base.php
@@ -147,6 +147,7 @@ use Pimple\Container;
* @property \Kanboard\Model\TaskStatusModel $taskStatusModel
* @property \Kanboard\Model\TaskTagModel $taskTagModel
* @property \Kanboard\Model\TaskMetadataModel $taskMetadataModel
+ * @property \Kanboard\Model\ThemeModel $themeModel
* @property \Kanboard\Model\TimezoneModel $timezoneModel
* @property \Kanboard\Model\TransitionModel $transitionModel
* @property \Kanboard\Model\UserModel $userModel
diff --git a/app/Core/User/UserSession.php b/app/Core/User/UserSession.php
index 808346de4..485ec8165 100644
--- a/app/Core/User/UserSession.php
+++ b/app/Core/User/UserSession.php
@@ -195,6 +195,21 @@ class UserSession extends Base
return session_get('user')['timezone'];
}
+ /**
+ * Get user theme
+ *
+ * @access public
+ * @return string
+ */
+ public function getTheme()
+ {
+ if (! $this->isLogged()) {
+ return 'light';
+ }
+
+ return session_get('user')['theme'];
+ }
+
/**
* Return true if subtask list toggle is active
*
diff --git a/app/Helper/UserHelper.php b/app/Helper/UserHelper.php
index eaf431902..4f9f59646 100644
--- a/app/Helper/UserHelper.php
+++ b/app/Helper/UserHelper.php
@@ -12,6 +12,11 @@ use Kanboard\Core\Base;
*/
class UserHelper extends Base
{
+ public function getTheme()
+ {
+ return $this->userSession->getTheme();
+ }
+
/**
* Return subtask list toggle value
*
diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php
index 4171b0965..d19b65a2e 100644
--- a/app/Locale/bs_BA/translations.php
+++ b/app/Locale/bs_BA/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/ca_ES/translations.php b/app/Locale/ca_ES/translations.php
index ef0334bbe..0919ba828 100644
--- a/app/Locale/ca_ES/translations.php
+++ b/app/Locale/ca_ES/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php
index ecdc858f3..7038b1d64 100644
--- a/app/Locale/cs_CZ/translations.php
+++ b/app/Locale/cs_CZ/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Změnit pořadí tohoto sloupce podle zadavatele (Z-A)',
'Reorder this column by due date (ASC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (vzestupně)',
'Reorder this column by due date (DESC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (sestupně)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s přesunul úkol #%d "%s" do projektu "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Úkol #%d "%s" byl přesunut do projektu "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pokud je datum vypršení platnosti menší než určitý počet dní, přesuňte úlohu do jiného sloupce',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php
index cb9428d6c..9acad2574 100644
--- a/app/Locale/da_DK/translations.php
+++ b/app/Locale/da_DK/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Sorter kolonne efter ansvarlig (Z-A)',
'Reorder this column by due date (ASC)' => 'Sorter kolonne efter udløbstid (ASC)',
'Reorder this column by due date (DESC)' => 'Sorter kolonne efter udløbstid (DESC)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s flyttet opgave #%d "%s" til projekt "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Opgave #%d "%s" er flyttet til projekt "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Flyt opgave til anden kolonne når afleveringsdato er mindre end et bestemt antal dage',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php
index 17bd753c2..41cff8504 100644
--- a/app/Locale/de_DE/translations.php
+++ b/app/Locale/de_DE/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)',
'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)',
'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben',
'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben',
'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist',
@@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Kopieren',
'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.',
'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/de_DE_du/translations.php b/app/Locale/de_DE_du/translations.php
index 7b4fd304a..c4d4e5bfc 100644
--- a/app/Locale/de_DE_du/translations.php
+++ b/app/Locale/de_DE_du/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)',
'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)',
'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben',
'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben',
'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist',
@@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Kopieren',
'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.',
'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php
index baa3af046..ca2b0e08d 100644
--- a/app/Locale/el_GR/translations.php
+++ b/app/Locale/el_GR/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php
index 976cef2d6..524f15b5e 100644
--- a/app/Locale/es_ES/translations.php
+++ b/app/Locale/es_ES/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s',
'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s',
'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/es_VE/translations.php b/app/Locale/es_VE/translations.php
index ad787793c..bd6f117e0 100644
--- a/app/Locale/es_VE/translations.php
+++ b/app/Locale/es_VE/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s',
'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s',
'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/fa_IR/translations.php b/app/Locale/fa_IR/translations.php
index 685a65d40..5a00b07e7 100644
--- a/app/Locale/fa_IR/translations.php
+++ b/app/Locale/fa_IR/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'مرتب سازی این ستون بر اساس شخص محول شده (حروف الفبا نزولی)',
'Reorder this column by due date (ASC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (صعودی)',
'Reorder this column by due date (DESC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (نزولی)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => 'کاربر %s کار #%d "%s" را به پروژه "%s" منتقل کرد.',
'Task #%d "%s" has been moved to the project "%s"' => 'کار #%d "%s" به پروژه "%s" منتقل شد.',
'Move the task to another column when the due date is less than a certain number of days' => 'هنگامی که تاریخ سررسید کمتر از تعداد روز مشخصی شد، کار را به ستونی دیگر منتقل کن',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php
index 16d21d893..9bb395a8c 100644
--- a/app/Locale/fi_FI/translations.php
+++ b/app/Locale/fi_FI/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php
index 6b195fa9b..f72fe82d9 100644
--- a/app/Locale/fr_FR/translations.php
+++ b/app/Locale/fr_FR/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Réorganiser cette colonne par assigné (Z-A)',
'Reorder this column by due date (ASC)' => 'Réorganiser cette colonne par date d\'échéance (ASC)',
'Reorder this column by due date (DESC)' => 'Réorganiser cette colonne par date d\'échéance (DESC)',
+ 'Reorder this column by id (ASC)' => 'Réorganiser cette colonne par ID (ASC)',
+ 'Reorder this column by id (DESC)' => 'Réorganiser cette colonne par ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s a déplacé la tâche #%d « %s » vers le projet « %s »',
'Task #%d "%s" has been moved to the project "%s"' => 'La tâche #%d « %s » a été déplacée vers le projet « %s »',
'Move the task to another column when the due date is less than a certain number of days' => 'Déplacer la tâche dans une autre colonne lorsque la date d\'échéance est inférieure à un certain nombre de jour',
@@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Copier',
'Tasks copied successfully.' => 'Tâches copiées avec succès.',
'Unable to copy tasks.' => 'Impossible de copier les tâches.',
+ 'Theme' => 'Thème',
+ 'Theme:' => 'Thème :',
+ 'Light theme' => 'Thème clair',
+ 'Dark theme' => 'Thème sombre',
+ 'Automatic theme - Sync with system' => 'Thème automatique - Se synchronize avec le système d\'exploitation',
);
diff --git a/app/Locale/hr_HR/translations.php b/app/Locale/hr_HR/translations.php
index d05fa6a94..c134f2c3e 100644
--- a/app/Locale/hr_HR/translations.php
+++ b/app/Locale/hr_HR/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Presloži ovaj stupac po izvršitelju (Ž-A)',
'Reorder this column by due date (ASC)' => 'Presloži ovaj stupac po roku završetka (UZLAZNO)',
'Reorder this column by due date (DESC)' => 'Presloži ovaj stupac po roku završetka (SILAZNO)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s je premjestio/la zadatak #%d "%s" u projekt "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premješten u projekt "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pomakni zadatak u drugi stupac kada je datum roka završetka kraći od određenog broja dana',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php
index dce92a323..4794bd4c4 100644
--- a/app/Locale/hu_HU/translations.php
+++ b/app/Locale/hu_HU/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Oszlop átrendezése felelős szerint (Z-A)',
'Reorder this column by due date (ASC)' => 'Oszlop átrendezése határidő szerint (növekvő)',
'Reorder this column by due date (DESC)' => 'Oszlop átrendezése határidő szerint (csökkenő)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s áthelyezte a(z) #%d. „%s” feladatot ebbe a projektbe: „%s”',
'Task #%d "%s" has been moved to the project "%s"' => 'A(z) #%d. „%s” feladat áthelyezésre került ebbe a projektbe: „%s”',
'Move the task to another column when the due date is less than a certain number of days' => 'A feladat áthelyezése egy másik oszlopba, ha a határidő kevesebb egy bizonyos számú napnál',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php
index 09c052d24..e6a7e0328 100644
--- a/app/Locale/id_ID/translations.php
+++ b/app/Locale/id_ID/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Susun ulang kolom ini oleh penerima tugas (Z-A)',
'Reorder this column by due date (ASC)' => 'Susun ulang kolom ini sebelum tanggal jatuh tempo (ASC)',
'Reorder this column by due date (DESC)' => 'Susun ulang kolom ini berdasarkan tanggal jatuh tempo (DESC)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s memindahkan tugas #%d "%s" ke proyek "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Task #%d "%s" telah dipindahkan ke proyek "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pindahkan tugas ke kolom lain ketika batas waktu kurang dari jumlah hari tertentu',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php
index 78fda2460..5a404bf81 100644
--- a/app/Locale/it_IT/translations.php
+++ b/app/Locale/it_IT/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Ordina questa colonna per assegnatario (DESC)',
'Reorder this column by due date (ASC)' => 'Riordina questa colonna per dat di scadenza (ASCENDENTE)',
'Reorder this column by due date (DESC)' => 'Riordina questa colonna per dat di scadenza (DISCENDENTE)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s ha spostato il compito #%d "%s" al progetto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Il compito #%d "%s"è stato spostato al progetto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Sposta il compito ad un\'altra colonna se la dat di scadenza è più vicina di un certo numero di giorni',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php
index d617d98ae..4882feda8 100644
--- a/app/Locale/ja_JP/translations.php
+++ b/app/Locale/ja_JP/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => '担当者で並び替える(Z-A)',
'Reorder this column by due date (ASC)' => '期限で並び替える(昇順)',
'Reorder this column by due date (DESC)' => '期限で並び替える(降順)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s がタスク #%d "%s" をプロジェクト "%s" に移動しました',
'Task #%d "%s" has been moved to the project "%s"' => 'タスク#%d "%s" はプロジェクト "%s" へ移動されました ',
'Move the task to another column when the due date is less than a certain number of days' => '期限までの日数が規定値以下になったら、タスクを別のカラムに移動する',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php
index f67da54b1..9fc92c325 100644
--- a/app/Locale/ko_KR/translations.php
+++ b/app/Locale/ko_KR/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/mk_MK/translations.php b/app/Locale/mk_MK/translations.php
index 5ec141ff5..32edf2ab3 100644
--- a/app/Locale/mk_MK/translations.php
+++ b/app/Locale/mk_MK/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Променете го редоследот на оваа колона од извршител (Ш-A)',
'Reorder this column by due date (ASC)' => 'Променете го редоследот на оваа колона според рок за завршување (РАСТЕЧКИ)',
'Reorder this column by due date (DESC)' => 'Променете го редоследот на оваа колона според рок за завршување (ОПАЃАЧКИ)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s ја премести задачата #%d "%s" за да проектира "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задачата #%d "%s" е преместена во проектот "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Поместете ја задачата во друга колона кога рок за завршување е пократок од одреден број денови',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php
index 8bcc4e56d..4cfcc8290 100644
--- a/app/Locale/my_MY/translations.php
+++ b/app/Locale/my_MY/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php
index e6104ff56..d314f6358 100644
--- a/app/Locale/nb_NO/translations.php
+++ b/app/Locale/nb_NO/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php
index bd5c0bd0d..96ddab196 100644
--- a/app/Locale/nl_NL/translations.php
+++ b/app/Locale/nl_NL/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php
index fe4491be7..a3e1ead42 100644
--- a/app/Locale/pl_PL/translations.php
+++ b/app/Locale/pl_PL/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Sortuj kolumnę po osobie przydzielonej do zadania (malejąco)',
'Reorder this column by due date (ASC)' => 'Sortuj kolumnę po dacie zakończenia (rosnąco)',
'Reorder this column by due date (DESC)' => 'Sortuj kolumnę po dacie zakończenia (malejąco)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s przeniósł zadanie nr %d "%s" do projektu "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadanie nr %d "%s" zostało przeniesione do projektu "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Przenieś zadanie do innej kolumny, kiedy data zakończenia jest oddalona o określoną liczbę dni od aktualnej daty',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php
index b701e433f..36a1a3008 100644
--- a/app/Locale/pt_BR/translations.php
+++ b/app/Locale/pt_BR/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por designado (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data fim estimada (crescente)',
'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data fim estimada (decrescente)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data fim estimada for menor que uma quantidade de dias',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php
index c23613ee8..8c9ee0ef2 100644
--- a/app/Locale/pt_PT/translations.php
+++ b/app/Locale/pt_PT/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por assignado (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data de vencimento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data de vencimento (DESC)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data de vencimento é menos que um certo numero de dias',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/ro_RO/translations.php b/app/Locale/ro_RO/translations.php
index e0d36a8b2..8bce825c1 100644
--- a/app/Locale/ro_RO/translations.php
+++ b/app/Locale/ro_RO/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php
index ea32c5df6..e001b190a 100644
--- a/app/Locale/ru_RU/translations.php
+++ b/app/Locale/ru_RU/translations.php
@@ -1391,8 +1391,6 @@ return array(
'Destination swimlane' => 'Целевая дорожка',
'Assign a category when the task is moved to a specific swimlane' => 'Присвоить категорию, если задача перемещена в определенную дорожку',
'Move the task to another swimlane when the category is changed' => 'Переместить задачу в другую дорожку, если категория изменена',
- 'Reorder this column by id (ASC)' => 'Упорядочить колонку по ID (ASC)',
- 'Reorder this column by id (DESC)' => 'Упорядочить колонку по ID (DESC)',
'Reorder this column by priority (ASC)' => 'Упорядочить колонку по приоритету (ASC)',
'Reorder this column by priority (DESC)' => 'Упорядочить колонку по приоритету (DESC)',
'Reorder this column by assignee and priority (ASC)' => 'Упорядочить колонку по назначенному пользователю и приоритету (ASC)',
@@ -1401,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Упорядочить колонку по назначенному пользователю (Я-А)',
'Reorder this column by due date (ASC)' => 'Упорядочить колонку по дате окончания (ASC)',
'Reorder this column by due date (DESC)' => 'Упорядочить колонку по дате окончания (DESC)',
+ 'Reorder this column by id (ASC)' => 'Упорядочить колонку по ID (ASC)',
+ 'Reorder this column by id (DESC)' => 'Упорядочить колонку по ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s переместил задачу #%d "%s" в проект "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" перемещена в проект "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Переместить задачу в другую колонку, если дата окончания меньше заданного количества дней',
@@ -1436,4 +1436,9 @@ return array(
'Copy' => 'Копировать',
'Tasks copied successfully.' => 'Задачи успешно скопированы.',
'Unable to copy tasks.' => 'Не удалось скопировать задачи.',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/sk_SK/translations.php b/app/Locale/sk_SK/translations.php
index c72f52f35..08e0ca6e0 100644
--- a/app/Locale/sk_SK/translations.php
+++ b/app/Locale/sk_SK/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Zoradiť stĺpec podľa pridelenia (Z-A)',
'Reorder this column by due date (ASC)' => 'Zoradiť stĺpec podľa termínu ukončenia (VZOST)',
'Reorder this column by due date (DESC)' => 'Zoradiť stĺpec podľa termínu ukončenia (ZOST)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s presunul/a úlohu č. %d „%s” do projektu „%s”',
'Task #%d "%s" has been moved to the project "%s"' => 'Úloha č. %d „%s” bola presunutá do projektu „%s”',
'Move the task to another column when the due date is less than a certain number of days' => 'Presunúť úlohu do iného stĺpca, keď je do termínu ukončenia menej ako zadaný počet dní',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php
index 655677e0f..3f1230564 100644
--- a/app/Locale/sr_Latn_RS/translations.php
+++ b/app/Locale/sr_Latn_RS/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Promenite redosled ove kolone prema izvršiocu (Ž-A)',
'Reorder this column by due date (ASC)' => 'Promenite redosled ove kolone prema roku završetka (UZLAZNO)',
'Reorder this column by due date (DESC)' => 'Promenite redosled ove kolone prema roku završetka (SILAZNO)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s je pomerio/la zadatak #%d "%s" u projekat "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premešten u projekat "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pomeri zadatak u neku drugu kolonu kada je datum roka završetka kraći od određenog broja dana',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php
index aaa975689..42a304c6a 100644
--- a/app/Locale/sv_SE/translations.php
+++ b/app/Locale/sv_SE/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Ändra ordning i denna kolumnen enligt tilldelning (Z-A)',
'Reorder this column by due date (ASC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (stigande)',
'Reorder this column by due date (DESC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (fallande)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s flyttade uppgift #%d "%s" till projektet "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Uppgift #%d "%s" har flyttats till projektet "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Flytta uppgiften till en annan kolumn när förfallodatum är närmare än ett visst antal dagar',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php
index 89899ab26..17aa9d508 100644
--- a/app/Locale/th_TH/translations.php
+++ b/app/Locale/th_TH/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php
index f919005a7..c9e5ea3d9 100644
--- a/app/Locale/tr_TR/translations.php
+++ b/app/Locale/tr_TR/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Kolonu atanana göre azalan sırala (Z-A)',
'Reorder this column by due date (ASC)' => 'Kolonu hedef tarihe göre artan sırala',
'Reorder this column by due date (DESC)' => 'Kolonu hedef tarihe göre azalan sırala',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s görevi taşıdı #%d "%s" "%s" projesine',
'Task #%d "%s" has been moved to the project "%s"' => 'Görev #%d "%s" tarafından "%s" projesine taşındı',
'Move the task to another column when the due date is less than a certain number of days' => 'Hedef tarihe belirli bir gün sayısından az kaldığında görevi başka kolona taşı',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/uk_UA/translations.php b/app/Locale/uk_UA/translations.php
index 2062cea65..474941f51 100644
--- a/app/Locale/uk_UA/translations.php
+++ b/app/Locale/uk_UA/translations.php
@@ -1391,8 +1391,6 @@ return array(
'Destination swimlane' => 'Доріжка призначення',
'Assign a category when the task is moved to a specific swimlane' => 'Призначити категорію, коли ця задача мереміщена на вказану доріжку',
'Move the task to another swimlane when the category is changed' => 'Перемістити цю задачу на іншу доріжку при зміні категорії',
- 'Reorder this column by id (ASC)' => 'Впорядкувати цю колонку за ID (ASC)',
- 'Reorder this column by id (DESC)' => 'Впорядкувати цю колонку за ID (DESC)',
'Reorder this column by priority (ASC)' => 'Впорядкувати цю колонку за зростанням пріоритету',
'Reorder this column by priority (DESC)' => 'Впорядкувати цю колонку за спаданням пріоритету',
'Reorder this column by assignee and priority (ASC)' => 'Впорядкувати цю колонку за відповідальним та зростанням пріоритету',
@@ -1401,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Впорядкувати цю колонку за відповідальним (Я-А)',
'Reorder this column by due date (ASC)' => 'Впорядкувати цю колонку за зростанням терміну виконання',
'Reorder this column by due date (DESC)' => 'Впорядкувати цю колонку за спаданням терміну виконання',
+ 'Reorder this column by id (ASC)' => 'Впорядкувати цю колонку за ID (ASC)',
+ 'Reorder this column by id (DESC)' => 'Впорядкувати цю колонку за ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s перемістив задачу #%d "%s" до проєкту "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" переміщено до проєкту "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Перемістити цю задачу до іншої колонки, коли до терміну виконання залишилося менше вказаного числа днів',
@@ -1436,4 +1436,9 @@ return array(
'Copy' => 'Копіювати',
'Tasks copied successfully.' => 'Завдання успішно скопійовано.',
'Unable to copy tasks.' => 'Не вдалося скопіювати завдання.',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/vi_VN/translations.php b/app/Locale/vi_VN/translations.php
index 8511c9b0b..15bc5e8ad 100644
--- a/app/Locale/vi_VN/translations.php
+++ b/app/Locale/vi_VN/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php
index 41f1ae988..98cf38a3f 100644
--- a/app/Locale/zh_CN/translations.php
+++ b/app/Locale/zh_CN/translations.php
@@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => '按指派重排(Z-A)',
'Reorder this column by due date (ASC)' => '按逾期时间重排(升序)',
'Reorder this column by due date (DESC)' => '按逾期时间重排(降序)',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s 已将任务 #%d "%s" 移动到项目"%s" ',
'Task #%d "%s" has been moved to the project "%s"' => '任务 #%d "%s" 已被移动到项目 "%s"',
'Move the task to another column when the due date is less than a certain number of days' => '当任务即将在指定天数内超期时移动到另一栏',
@@ -1434,4 +1436,9 @@ return array(
'Copy' => '复制',
'Tasks copied successfully.' => '任务复制成功。',
'Unable to copy tasks.' => '无法复制任务。',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Locale/zh_TW/translations.php b/app/Locale/zh_TW/translations.php
index db1d301ba..995c1e863 100644
--- a/app/Locale/zh_TW/translations.php
+++ b/app/Locale/zh_TW/translations.php
@@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '',
+ // 'Reorder this column by id (ASC)' => '',
+ // 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '',
@@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '',
// 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '',
+ // 'Theme' => '',
+ // 'Theme:' => '',
+ // 'Light theme' => '',
+ // 'Dark theme' => '',
+ // 'Automatic theme - Sync with system' => '',
);
diff --git a/app/Model/ThemeModel.php b/app/Model/ThemeModel.php
new file mode 100644
index 000000000..3ec9f9579
--- /dev/null
+++ b/app/Model/ThemeModel.php
@@ -0,0 +1,29 @@
+ t('Light theme'),
+ 'dark' => t('Dark theme'),
+ 'auto' => t('Automatic theme - Sync with system'),
+ ];
+ }
+}
diff --git a/app/Schema/Mssql.php b/app/Schema/Mssql.php
index 9f4643881..1834caeea 100644
--- a/app/Schema/Mssql.php
+++ b/app/Schema/Mssql.php
@@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role;
-const VERSION = 1;
+const VERSION = 2;
+
+function version_2(PDO $pdo)
+{
+ $pdo->exec("ALTER TABLE dbo.users ADD COLUMN theme nvarchar(50) DEFAULT N'light' NOT NULL");
+}
function version_1(PDO $pdo)
{
diff --git a/app/Schema/Mysql.php b/app/Schema/Mysql.php
index ca1d1a8e3..8037adaba 100644
--- a/app/Schema/Mysql.php
+++ b/app/Schema/Mysql.php
@@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role;
-const VERSION = 137;
+const VERSION = 138;
+
+function version_138(PDO $pdo)
+{
+ $pdo->exec("ALTER TABLE users ADD COLUMN theme VARCHAR(50) DEFAULT 'light' NOT NULL");
+}
function version_137(PDO $pdo)
{
diff --git a/app/Schema/Postgres.php b/app/Schema/Postgres.php
index de5282ee4..8e18fc270 100644
--- a/app/Schema/Postgres.php
+++ b/app/Schema/Postgres.php
@@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role;
-const VERSION = 115;
+const VERSION = 116;
+
+function version_116(PDO $pdo)
+{
+ $pdo->exec("ALTER TABLE users ADD COLUMN theme TEXT DEFAULT 'light' NOT NULL");
+}
function version_115(PDO $pdo)
{
diff --git a/app/Schema/Sqlite.php b/app/Schema/Sqlite.php
index cf0df92c7..f811312c1 100644
--- a/app/Schema/Sqlite.php
+++ b/app/Schema/Sqlite.php
@@ -8,9 +8,14 @@ use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role;
use PDO;
-const VERSION = 126;
+const VERSION = 127;
+function version_127(PDO $pdo)
+{
+ $pdo->exec("ALTER TABLE users ADD COLUMN theme TEXT DEFAULT 'light' NOT NULL");
+}
+
function version_126(PDO $pdo)
{
$pdo->exec('ALTER TABLE subtask_time_tracking RENAME TO subtask_time_tracking_old');
diff --git a/app/ServiceProvider/ClassProvider.php b/app/ServiceProvider/ClassProvider.php
index c1d823902..f215956bc 100644
--- a/app/ServiceProvider/ClassProvider.php
+++ b/app/ServiceProvider/ClassProvider.php
@@ -90,6 +90,7 @@ class ClassProvider implements ServiceProviderInterface
'TaskStatusModel',
'TaskTagModel',
'TaskMetadataModel',
+ 'ThemeModel',
'TimezoneModel',
'TransitionModel',
'UserModel',
diff --git a/app/Template/layout.php b/app/Template/layout.php
index 4c70c59c6..d48d8d1ee 100644
--- a/app/Template/layout.php
+++ b/app/Template/layout.php
@@ -14,7 +14,11 @@
= $this->asset->colorCss() ?>
= $this->asset->css('assets/css/vendor.min.css') ?>
- = $this->asset->css('assets/css/app.min.css') ?>
+
+ = $this->asset->css('assets/css/'.$this->user->getTheme().'.min.css') ?>
+
+ = $this->asset->css('assets/css/light.min.css') ?>
+
= $this->asset->css('assets/css/print.min.css', true, 'print') ?>
= $this->asset->customCss() ?>
diff --git a/app/Template/user_modification/show.php b/app/Template/user_modification/show.php
index 2977091fb..cb08fd8d9 100644
--- a/app/Template/user_modification/show.php
+++ b/app/Template/user_modification/show.php
@@ -19,6 +19,9 @@
= t('Preferences') ?>
+ = $this->form->label(t('Theme'), 'theme') ?>
+ = $this->form->select('theme', $themes, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_theme') ? '' : 'disabled')) ?>
+
= $this->form->label(t('Timezone'), 'timezone') ?>
= $this->form->select('timezone', $timezones, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_timezone') ? '' : 'disabled')) ?>
diff --git a/app/Template/user_view/show.php b/app/Template/user_view/show.php
index 1c4b5f996..b7144089c 100644
--- a/app/Template/user_view/show.php
+++ b/app/Template/user_view/show.php
@@ -32,6 +32,7 @@
= t('Preferences') ?>
+ = t('Theme:') ?> = $this->text->in($user['theme'], $themes) ?>
= t('Timezone:') ?> = $this->text->in($user['timezone'], $timezones) ?>
= t('Language:') ?> = $this->text->in($user['language'], $languages) ?>
= t('Custom Filter:') ?> = $this->text->e($user['filter']) ?>
diff --git a/app/Validator/UserValidator.php b/app/Validator/UserValidator.php
index a6f1dc7df..003945d1f 100644
--- a/app/Validator/UserValidator.php
+++ b/app/Validator/UserValidator.php
@@ -28,6 +28,7 @@ class UserValidator extends BaseValidator
new Validators\Unique('username', t('This username is already taken'), $this->db->getConnection(), UserModel::TABLE, 'id'),
new Validators\Email('email', t('Email address invalid')),
new Validators\Integer('is_ldap_user', t('This value must be an integer')),
+ new Validators\MaxLength('theme', t('The maximum length is %d characters', 50), 50),
);
}
diff --git a/assets/css/app.min.css b/assets/css/app.min.css
deleted file mode 100644
index d9985a726..000000000
--- a/assets/css/app.min.css
+++ /dev/null
@@ -1 +0,0 @@
-: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;margin-left:auto}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,textarea{font-family:sans-serif}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;-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-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}.project-header .filter-box-component .input-addon{min-width:280px}.input-addon .input-addon-field{flex:1 1 auto;width:1%!important}@media (max-width:400px){.input-addon-item{padding:3px}}.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;visibility:hidden}}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:last-child{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 li:hover i{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;max-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:220px}.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}.no-projects{margin:1rem 0 0;font-style:italic}.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 tr.board-swimlane-columns-first{visibility:hidden;padding:0}#board th.board-column-header{width:240px}#board th.board-column-header-first{visibility:hidden;padding:0}#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}.board-column-expanded-header{display:flex;align-items:center}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-compact{max-height:90vh;overflow-y:auto}.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}}.subtasks-table .subtask-table-td{display:flex;white-space:normal;min-width:400px}.subtasks-table .subtask-submenu{display:flex}.js-subtask-toggle-status{display:flex;text-decoration: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}}.subtask-time-tracking{white-space:normal}.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/auto.min.css b/assets/css/auto.min.css
new file mode 100644
index 000000000..7d329b2a4
--- /dev/null
+++ b/assets/css/auto.min.css
@@ -0,0 +1 @@
+:root{--body-background-color:#FFF;--header-background-color:#fbfbfb;--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;--table-header-background-color:#fbfbfb;--table-nth-background-color:#fefefe;--table-border-color:#eee;--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;--table-list-header-border-color:#e5e5e5;--table-list-header-background-color:#fbfbfb;--table-list-nth-background-color:#fefefe;--table-list-border-color:#e5e5e5;--table-list-row-hover-border-color:#ffeb8e;--table-list-row-background-color:#fff8dc;--sidebar-border-color:#efefef;--dropdown-background-color:#fff;--dropdown-border-color:#b2b2b2;--dropdown-li-border-color:#f8f8f8;--input-addon-background-color:rgba(147,128,108,.1);--input-addon-color:#666;--views-background-color:#fafafa;--views-border-color:#ddd;--views-active-color:#000;--input-focus-color:#000;--input-focus-border-color:rgba(82,168,236,.8);--input-focus-shadow-color:rgba(82,168,236,.6);--input-background-color:#fff;--input-border-color:#ccc;--input-placeholder-color:#dedede;--tooltip-background-color:#fff;--tooltip-border-color:#ddd;--tooltip-shadow-color:#aaa;--panel-background-color:#fcfcfc;--panel-border-color:#ddd;--draggable-item-selected-background-color:#fff;--draggable-item-selected-border-color:#666;--draggable-item-hover-background-color:#FEFFF2;--draggable-row-handle-color:#dedede;--draggable-placeholder-background-color:#fafafa;--draggable-placeholder-border-color:#000;--task-list-icons-color:#999;--form-help-color:brown;--form-error-color:#b94a48;--comment-title-border-color:#eee;--comment-nth-background-color:#fbfbfb;--comment-highlighted-background-color:#fff8dc;--comment-highlighted-hover-background-color:#fff8dc;--comment-highlighted-border-color:#ffeb8e}html{color-scheme:light}@media (prefers-color-scheme:dark){:root{--body-background-color:#222;--header-background-color:#222;--color-primary:#a0a0a0;--color-light:#a0a0a0;--color-lighter:#efefef;--color-dark:#000;--color-medium:#4f4c4c;--color-error:#b94a48;--link-color-primary:#aaa;--link-color-focus:#ddd;--link-color-hover:#ddd;--alert-color-default:#efefef;--alert-color-success:#def6de;--alert-color-error:#de9393;--alert-color-info:#3a87ad;--alert-color-normal:#333;--alert-background-color-default:#333;--alert-background-color-success:#304b27;--alert-background-color-error:#500606;--alert-background-color-info:#d9edf7;--alert-background-color-normal:#f0f0f0;--alert-border-color-default:#444;--alert-border-color-success:#3c621b;--alert-border-color-error:#7e0315;--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:#efefef;--button-primary-background-color:#333;--button-primary-border-color:#444;--button-primary-color-focus:#fff;--button-primary-background-color-focus:#555;--button-primary-border-color-focus:#888;--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;--table-header-background-color:#1a1a1a;--table-nth-background-color:#2d2c2c;--table-border-color:rgba(147,128,108,.25);--avatar-color-letter:#fff;--activity-title-color:#e3e2e2;--activity-title-border-color:#efefef;--activity-event-background-color:#313131;--activity-event-hover-color:#000;--user-mention-color:#fff;--board-task-limit-color:#DF5353;--table-list-header-border-color:rgba(147,128,108,.25);--table-list-header-background-color:rgb(59,59,59);--table-list-nth-background-color:#2d2c2c;--table-list-border-color:rgba(147,128,108,.25);--table-list-row-hover-border-color:rgba(147,128,108,.25);--table-list-row-background-color:#434343;--sidebar-border-color:rgba(147,128,108,.25);--dropdown-background-color:#222;--dropdown-border-color:#000;--dropdown-li-border-color:#555;--input-addon-background-color:#1a1a1a;--input-addon-color:rgba(147,128,108,.25);--views-background-color:#1a1a1a;--views-border-color:rgba(147,128,108,.25);--views-active-color:#949494;--input-focus-color:#e6edf3;--input-focus-border-color:rgba(82,168,236,.8);--input-focus-shadow-color:rgba(82,168,236,.6);--input-background-color:rgb(59,59,59);--input-border-color:#777575;--input-placeholder-color:#666;--tooltip-background-color:#333;--tooltip-border-color:#555;--tooltip-shadow-color:#111;--panel-background-color:#2c2c2c;--panel-border-color:#000;--draggable-item-selected-background-color:#222;--draggable-item-selected-border-color:#111;--draggable-item-hover-background-color:#555;--draggable-row-handle-color:#444;--draggable-placeholder-background-color:#444;--draggable-placeholder-border-color:#666;--task-list-icons-color:#ccc;--form-help-color:#a8a12f;--form-error-color:#f2332f;--comment-title-border-color:#eee;--comment-nth-background-color:#2b2a2a;--comment-highlighted-background-color:#2b2901;--comment-highlighted-hover-background-color:#000;--comment-highlighted-border-color:#c09e05}html{color-scheme:dark}.select2-dropdown,.select2-close-mask{background-color:var(--input-background-color)}.select2-container--default .select2-selection--multiple,.select2-container--default .select2-selection--single{background-color:var(--input-background-color);border-color:var(--input-border-color)}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:var(--input-focus-border-color)}.select2-container--default .select2-selection--single .select2-selection__rendered,.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#fff}.task-board-title{color:#000}.task-summary-column a,.task-summary-column a:hover{color:#000}}h1,li,ul,ol,table,tr,td,th,p,blockquote,body{margin:0;padding:0}body{background-color:var(--body-background-color);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;margin-left:auto}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:var(--table-nth-background-color)}@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 var(--table-border-color);background-color:var(--table-header-background-color)}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 var(--table-border-color);padding:.5em 3px;vertical-align:top}table td li{margin-left:20px}.task-table a{color:#000}.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:var(--draggable-row-handle-color)}.draggable-row-handle:hover{color:var(--color-primary)}tr.draggable-item-selected{background:var(--draggable-item-selected-background-color);border:2px solid var(--draggable-item-selected-border-color);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:var(--draggable-item-hover-background-color)}.table-list{font-size:.85em;margin-bottom:20px}.table-list-header{background:var(--table-list-header-background-color);border:1px solid var(--table-list-header-border-color);border-radius:5px 5px 0 0;line-height:28px;padding-left:3px;padding-right:3px}.table-list-header a{color:var(--color-primary);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 var(--table-list-border-color);border-right:1px solid var(--table-list-border-color)}.table-list-row.table-border-left{border-left:1px solid var(--table-list-border-color)}.table-list-row:nth-child(odd){background:var(--table-list-nth-background-color)}.table-list-row:last-child{border-radius:0 0 5px 5px}.table-list-row:hover{background:var(--table-list-row-background-color);border-bottom:1px solid var(--table-list-row-hover-border-color);border-right:1px solid var(--table-list-row-hover-border-color)}.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:var(--color-primary);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:var(--color-primary)}.table-list-row .table-list-icons a:hover i{color:var(--color-primary)}.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,textarea{font-family:sans-serif;background-color:var(--input-background-color)}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 var(--input-border-color);width:300px;max-width:95%;font-size:1em;height:25px;padding-bottom:0;padding-left:4px;-webkit-appearance:none;-moz-appearance:none}input[type="number"]::placeholder,input[type="date"]::placeholder,input[type="email"]::placeholder,input[type="password"]::placeholder,input[type="text"]:not(.input-addon-field)::placeholder{color:var(--input-placeholder-color)}input[type="number"]:focus,input[type="date"]:focus,input[type="email"]:focus,input[type="password"]:focus,input[type="text"]:focus{color:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}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:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}textarea{padding:4px;border:1px solid var(--input-border-color);width:400px;max-width:99%;height:200px;font-size:1em}textarea::placeholder{color:var(--input-placeholder-color)}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 var(--form-error-color)}input.form-error:focus,textarea.form-error:focus{box-shadow:none;border:2px solid var(--form-error-color)}.form-errors{color:var(--form-error-color);list-style-type:none}ul.form-errors li{margin-left:0}.form-help{font-size:.8em;color:var(--form-help-color);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:var(--input-addon-background-color);color:var(--input-addon-color);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}.project-header .filter-box-component .input-addon{min-width:280px}.input-addon .input-addon-field{flex:1 1 auto;width:1%!important}@media (max-width:400px){.input-addon-item{padding:3px}}.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;visibility:hidden}}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:var(--tooltip-background-color);border:1px solid var(--tooltip-border-color);border-radius:4px;box-shadow:0 6px 12px var(--tooltip-shadow-color);position:absolute;min-width:350px}#tooltip-container .markdown p:last-child{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:var(--dropdown-background-color);border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 li:hover i{color:#fff}.dropdown-submenu-open a{text-decoration:none;color:var(--color-primary)}.dropdown-submenu-open a:focus{text-decoration:underline}.dropdown-menu-link-text,.dropdown-menu-link-icon{color:var(--color-primary);text-decoration:none}.dropdown-menu-link-text:hover{text-decoration:underline}td a.dropdown-menu strong{color:var(--color-primary)}td a.dropdown-menu strong i{color:var(--color-primary)}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:var(--dropdown-background-color);list-style:none;border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 var(--input-border-color);border-radius:5px;background-color:var(--input-background-color);max-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:var(--body-background-color);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:var(--header-background-color)}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 var(--sidebar-border-color);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:400}.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:220px}.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}.no-projects{margin:1rem 0 0;font-style:italic}.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:var(--views-background-color);border:1px solid var(--views-border-color);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 var(--views-border-color)}}.views li.active a{font-weight:700;color:var(--views-active-color);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 var(--views-border-color);border-top-right-radius:5px;border-bottom-right-radius:5px}.views a{color:var(--color-ligth);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 tr.board-swimlane-columns-first{visibility:hidden;padding:0}#board th.board-column-header{width:240px}#board th.board-column-header-first{visibility:hidden;padding:0}#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}.board-column-expanded-header{display:flex;align-items:center}td.board-column-task-collapsed{font-weight:700;background-color:var(--table-header-background-color)}#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;transform:rotate(90deg);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-compact{max-height:90vh;overflow-y:auto}.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 var(--draggable-placeholder-border-color);background:var(--draggable-placeholder-background-color);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:var(--task-list-icons-color);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-dark)}.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 var(--comment-title-border-color);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:var(--comment-highlighted-background-color);border:2px solid var(--comment-highlighted-border-color)}.comments .comment-highlighted:hover{background-color:var(--comment-highlighted-hover-background-color)}.comments .comment:hover{background:var(--comment-highlighted-hover-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted){background:var(--comment-nth-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted):hover{background:var(--comment-highlighted-hover-background-color)}.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}}.subtasks-table .subtask-table-td{display:flex;white-space:normal;min-width:400px}.subtasks-table .subtask-submenu{display:flex}.js-subtask-toggle-status{display:flex;text-decoration: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}}.subtask-time-tracking{white-space:normal}.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 var(--panel-border-color);color:var(--color-primary);background-color:var(--panel-background-color);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-light);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/dark.min.css b/assets/css/dark.min.css
new file mode 100644
index 000000000..b6d3ea0eb
--- /dev/null
+++ b/assets/css/dark.min.css
@@ -0,0 +1 @@
+:root{--body-background-color:#222;--header-background-color:#222;--color-primary:#a0a0a0;--color-light:#a0a0a0;--color-lighter:#efefef;--color-dark:#000;--color-medium:#4f4c4c;--color-error:#b94a48;--link-color-primary:#aaa;--link-color-focus:#ddd;--link-color-hover:#ddd;--alert-color-default:#efefef;--alert-color-success:#def6de;--alert-color-error:#de9393;--alert-color-info:#3a87ad;--alert-color-normal:#333;--alert-background-color-default:#333;--alert-background-color-success:#304b27;--alert-background-color-error:#500606;--alert-background-color-info:#d9edf7;--alert-background-color-normal:#f0f0f0;--alert-border-color-default:#444;--alert-border-color-success:#3c621b;--alert-border-color-error:#7e0315;--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:#efefef;--button-primary-background-color:#333;--button-primary-border-color:#444;--button-primary-color-focus:#fff;--button-primary-background-color-focus:#555;--button-primary-border-color-focus:#888;--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;--table-header-background-color:#1a1a1a;--table-nth-background-color:#2d2c2c;--table-border-color:rgba(147,128,108,.25);--avatar-color-letter:#fff;--activity-title-color:#e3e2e2;--activity-title-border-color:#efefef;--activity-event-background-color:#313131;--activity-event-hover-color:#000;--user-mention-color:#fff;--board-task-limit-color:#DF5353;--table-list-header-border-color:rgba(147,128,108,.25);--table-list-header-background-color:rgb(59,59,59);--table-list-nth-background-color:#2d2c2c;--table-list-border-color:rgba(147,128,108,.25);--table-list-row-hover-border-color:rgba(147,128,108,.25);--table-list-row-background-color:#434343;--sidebar-border-color:rgba(147,128,108,.25);--dropdown-background-color:#222;--dropdown-border-color:#000;--dropdown-li-border-color:#555;--input-addon-background-color:#1a1a1a;--input-addon-color:rgba(147,128,108,.25);--views-background-color:#1a1a1a;--views-border-color:rgba(147,128,108,.25);--views-active-color:#949494;--input-focus-color:#e6edf3;--input-focus-border-color:rgba(82,168,236,.8);--input-focus-shadow-color:rgba(82,168,236,.6);--input-background-color:rgb(59,59,59);--input-border-color:#777575;--input-placeholder-color:#666;--tooltip-background-color:#333;--tooltip-border-color:#555;--tooltip-shadow-color:#111;--panel-background-color:#2c2c2c;--panel-border-color:#000;--draggable-item-selected-background-color:#222;--draggable-item-selected-border-color:#111;--draggable-item-hover-background-color:#555;--draggable-row-handle-color:#444;--draggable-placeholder-background-color:#444;--draggable-placeholder-border-color:#666;--task-list-icons-color:#ccc;--form-help-color:#a8a12f;--form-error-color:#f2332f;--comment-title-border-color:#eee;--comment-nth-background-color:#2b2a2a;--comment-highlighted-background-color:#2b2901;--comment-highlighted-hover-background-color:#000;--comment-highlighted-border-color:#c09e05}html{color-scheme:dark}.select2-dropdown,.select2-close-mask{background-color:var(--input-background-color)}.select2-container--default .select2-selection--multiple,.select2-container--default .select2-selection--single{background-color:var(--input-background-color);border-color:var(--input-border-color)}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:var(--input-focus-border-color)}.select2-container--default .select2-selection--single .select2-selection__rendered,.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#fff}.task-board-title{color:#000}.task-summary-column a,.task-summary-column a:hover{color:#000}h1,li,ul,ol,table,tr,td,th,p,blockquote,body{margin:0;padding:0}body{background-color:var(--body-background-color);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;margin-left:auto}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:var(--table-nth-background-color)}@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 var(--table-border-color);background-color:var(--table-header-background-color)}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 var(--table-border-color);padding:.5em 3px;vertical-align:top}table td li{margin-left:20px}.task-table a{color:#000}.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:var(--draggable-row-handle-color)}.draggable-row-handle:hover{color:var(--color-primary)}tr.draggable-item-selected{background:var(--draggable-item-selected-background-color);border:2px solid var(--draggable-item-selected-border-color);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:var(--draggable-item-hover-background-color)}.table-list{font-size:.85em;margin-bottom:20px}.table-list-header{background:var(--table-list-header-background-color);border:1px solid var(--table-list-header-border-color);border-radius:5px 5px 0 0;line-height:28px;padding-left:3px;padding-right:3px}.table-list-header a{color:var(--color-primary);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 var(--table-list-border-color);border-right:1px solid var(--table-list-border-color)}.table-list-row.table-border-left{border-left:1px solid var(--table-list-border-color)}.table-list-row:nth-child(odd){background:var(--table-list-nth-background-color)}.table-list-row:last-child{border-radius:0 0 5px 5px}.table-list-row:hover{background:var(--table-list-row-background-color);border-bottom:1px solid var(--table-list-row-hover-border-color);border-right:1px solid var(--table-list-row-hover-border-color)}.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:var(--color-primary);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:var(--color-primary)}.table-list-row .table-list-icons a:hover i{color:var(--color-primary)}.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,textarea{font-family:sans-serif;background-color:var(--input-background-color)}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 var(--input-border-color);width:300px;max-width:95%;font-size:1em;height:25px;padding-bottom:0;padding-left:4px;-webkit-appearance:none;-moz-appearance:none}input[type="number"]::placeholder,input[type="date"]::placeholder,input[type="email"]::placeholder,input[type="password"]::placeholder,input[type="text"]:not(.input-addon-field)::placeholder{color:var(--input-placeholder-color)}input[type="number"]:focus,input[type="date"]:focus,input[type="email"]:focus,input[type="password"]:focus,input[type="text"]:focus{color:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}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:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}textarea{padding:4px;border:1px solid var(--input-border-color);width:400px;max-width:99%;height:200px;font-size:1em}textarea::placeholder{color:var(--input-placeholder-color)}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 var(--form-error-color)}input.form-error:focus,textarea.form-error:focus{box-shadow:none;border:2px solid var(--form-error-color)}.form-errors{color:var(--form-error-color);list-style-type:none}ul.form-errors li{margin-left:0}.form-help{font-size:.8em;color:var(--form-help-color);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:var(--input-addon-background-color);color:var(--input-addon-color);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}.project-header .filter-box-component .input-addon{min-width:280px}.input-addon .input-addon-field{flex:1 1 auto;width:1%!important}@media (max-width:400px){.input-addon-item{padding:3px}}.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;visibility:hidden}}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:var(--tooltip-background-color);border:1px solid var(--tooltip-border-color);border-radius:4px;box-shadow:0 6px 12px var(--tooltip-shadow-color);position:absolute;min-width:350px}#tooltip-container .markdown p:last-child{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:var(--dropdown-background-color);border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 li:hover i{color:#fff}.dropdown-submenu-open a{text-decoration:none;color:var(--color-primary)}.dropdown-submenu-open a:focus{text-decoration:underline}.dropdown-menu-link-text,.dropdown-menu-link-icon{color:var(--color-primary);text-decoration:none}.dropdown-menu-link-text:hover{text-decoration:underline}td a.dropdown-menu strong{color:var(--color-primary)}td a.dropdown-menu strong i{color:var(--color-primary)}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:var(--dropdown-background-color);list-style:none;border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 var(--input-border-color);border-radius:5px;background-color:var(--input-background-color);max-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:var(--body-background-color);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:var(--header-background-color)}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 var(--sidebar-border-color);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:400}.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:220px}.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}.no-projects{margin:1rem 0 0;font-style:italic}.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:var(--views-background-color);border:1px solid var(--views-border-color);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 var(--views-border-color)}}.views li.active a{font-weight:700;color:var(--views-active-color);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 var(--views-border-color);border-top-right-radius:5px;border-bottom-right-radius:5px}.views a{color:var(--color-ligth);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 tr.board-swimlane-columns-first{visibility:hidden;padding:0}#board th.board-column-header{width:240px}#board th.board-column-header-first{visibility:hidden;padding:0}#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}.board-column-expanded-header{display:flex;align-items:center}td.board-column-task-collapsed{font-weight:700;background-color:var(--table-header-background-color)}#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;transform:rotate(90deg);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-compact{max-height:90vh;overflow-y:auto}.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 var(--draggable-placeholder-border-color);background:var(--draggable-placeholder-background-color);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:var(--task-list-icons-color);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-dark)}.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 var(--comment-title-border-color);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:var(--comment-highlighted-background-color);border:2px solid var(--comment-highlighted-border-color)}.comments .comment-highlighted:hover{background-color:var(--comment-highlighted-hover-background-color)}.comments .comment:hover{background:var(--comment-highlighted-hover-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted){background:var(--comment-nth-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted):hover{background:var(--comment-highlighted-hover-background-color)}.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}}.subtasks-table .subtask-table-td{display:flex;white-space:normal;min-width:400px}.subtasks-table .subtask-submenu{display:flex}.js-subtask-toggle-status{display:flex;text-decoration: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}}.subtask-time-tracking{white-space:normal}.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 var(--panel-border-color);color:var(--color-primary);background-color:var(--panel-background-color);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-light);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/light.min.css b/assets/css/light.min.css
new file mode 100644
index 000000000..222ca8966
--- /dev/null
+++ b/assets/css/light.min.css
@@ -0,0 +1 @@
+:root{--body-background-color:#FFF;--header-background-color:#fbfbfb;--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;--table-header-background-color:#fbfbfb;--table-nth-background-color:#fefefe;--table-border-color:#eee;--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;--table-list-header-border-color:#e5e5e5;--table-list-header-background-color:#fbfbfb;--table-list-nth-background-color:#fefefe;--table-list-border-color:#e5e5e5;--table-list-row-hover-border-color:#ffeb8e;--table-list-row-background-color:#fff8dc;--sidebar-border-color:#efefef;--dropdown-background-color:#fff;--dropdown-border-color:#b2b2b2;--dropdown-li-border-color:#f8f8f8;--input-addon-background-color:rgba(147,128,108,.1);--input-addon-color:#666;--views-background-color:#fafafa;--views-border-color:#ddd;--views-active-color:#000;--input-focus-color:#000;--input-focus-border-color:rgba(82,168,236,.8);--input-focus-shadow-color:rgba(82,168,236,.6);--input-background-color:#fff;--input-border-color:#ccc;--input-placeholder-color:#dedede;--tooltip-background-color:#fff;--tooltip-border-color:#ddd;--tooltip-shadow-color:#aaa;--panel-background-color:#fcfcfc;--panel-border-color:#ddd;--draggable-item-selected-background-color:#fff;--draggable-item-selected-border-color:#666;--draggable-item-hover-background-color:#FEFFF2;--draggable-row-handle-color:#dedede;--draggable-placeholder-background-color:#fafafa;--draggable-placeholder-border-color:#000;--task-list-icons-color:#999;--form-help-color:brown;--form-error-color:#b94a48;--comment-title-border-color:#eee;--comment-nth-background-color:#fbfbfb;--comment-highlighted-background-color:#fff8dc;--comment-highlighted-hover-background-color:#fff8dc;--comment-highlighted-border-color:#ffeb8e}html{color-scheme:light}h1,li,ul,ol,table,tr,td,th,p,blockquote,body{margin:0;padding:0}body{background-color:var(--body-background-color);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;margin-left:auto}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:var(--table-nth-background-color)}@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 var(--table-border-color);background-color:var(--table-header-background-color)}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 var(--table-border-color);padding:.5em 3px;vertical-align:top}table td li{margin-left:20px}.task-table a{color:#000}.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:var(--draggable-row-handle-color)}.draggable-row-handle:hover{color:var(--color-primary)}tr.draggable-item-selected{background:var(--draggable-item-selected-background-color);border:2px solid var(--draggable-item-selected-border-color);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:var(--draggable-item-hover-background-color)}.table-list{font-size:.85em;margin-bottom:20px}.table-list-header{background:var(--table-list-header-background-color);border:1px solid var(--table-list-header-border-color);border-radius:5px 5px 0 0;line-height:28px;padding-left:3px;padding-right:3px}.table-list-header a{color:var(--color-primary);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 var(--table-list-border-color);border-right:1px solid var(--table-list-border-color)}.table-list-row.table-border-left{border-left:1px solid var(--table-list-border-color)}.table-list-row:nth-child(odd){background:var(--table-list-nth-background-color)}.table-list-row:last-child{border-radius:0 0 5px 5px}.table-list-row:hover{background:var(--table-list-row-background-color);border-bottom:1px solid var(--table-list-row-hover-border-color);border-right:1px solid var(--table-list-row-hover-border-color)}.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:var(--color-primary);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:var(--color-primary)}.table-list-row .table-list-icons a:hover i{color:var(--color-primary)}.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,textarea{font-family:sans-serif;background-color:var(--input-background-color)}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 var(--input-border-color);width:300px;max-width:95%;font-size:1em;height:25px;padding-bottom:0;padding-left:4px;-webkit-appearance:none;-moz-appearance:none}input[type="number"]::placeholder,input[type="date"]::placeholder,input[type="email"]::placeholder,input[type="password"]::placeholder,input[type="text"]:not(.input-addon-field)::placeholder{color:var(--input-placeholder-color)}input[type="number"]:focus,input[type="date"]:focus,input[type="email"]:focus,input[type="password"]:focus,input[type="text"]:focus{color:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}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:var(--input-focus-color);border-color:var(--input-focus-border-color);outline:0;box-shadow:0 0 8px var(--input-focus-shadow-color)}textarea{padding:4px;border:1px solid var(--input-border-color);width:400px;max-width:99%;height:200px;font-size:1em}textarea::placeholder{color:var(--input-placeholder-color)}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 var(--form-error-color)}input.form-error:focus,textarea.form-error:focus{box-shadow:none;border:2px solid var(--form-error-color)}.form-errors{color:var(--form-error-color);list-style-type:none}ul.form-errors li{margin-left:0}.form-help{font-size:.8em;color:var(--form-help-color);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:var(--input-addon-background-color);color:var(--input-addon-color);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}.project-header .filter-box-component .input-addon{min-width:280px}.input-addon .input-addon-field{flex:1 1 auto;width:1%!important}@media (max-width:400px){.input-addon-item{padding:3px}}.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;visibility:hidden}}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:var(--tooltip-background-color);border:1px solid var(--tooltip-border-color);border-radius:4px;box-shadow:0 6px 12px var(--tooltip-shadow-color);position:absolute;min-width:350px}#tooltip-container .markdown p:last-child{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:var(--dropdown-background-color);border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 li:hover i{color:#fff}.dropdown-submenu-open a{text-decoration:none;color:var(--color-primary)}.dropdown-submenu-open a:focus{text-decoration:underline}.dropdown-menu-link-text,.dropdown-menu-link-icon{color:var(--color-primary);text-decoration:none}.dropdown-menu-link-text:hover{text-decoration:underline}td a.dropdown-menu strong{color:var(--color-primary)}td a.dropdown-menu strong i{color:var(--color-primary)}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:var(--dropdown-background-color);list-style:none;border:1px solid var(--dropdown-border-color);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 var(--dropdown-li-border-color);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 var(--input-border-color);border-radius:5px;background-color:var(--input-background-color);max-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:var(--body-background-color);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:var(--header-background-color)}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 var(--sidebar-border-color);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:400}.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:220px}.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}.no-projects{margin:1rem 0 0;font-style:italic}.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:var(--views-background-color);border:1px solid var(--views-border-color);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 var(--views-border-color)}}.views li.active a{font-weight:700;color:var(--views-active-color);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 var(--views-border-color);border-top-right-radius:5px;border-bottom-right-radius:5px}.views a{color:var(--color-ligth);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 tr.board-swimlane-columns-first{visibility:hidden;padding:0}#board th.board-column-header{width:240px}#board th.board-column-header-first{visibility:hidden;padding:0}#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}.board-column-expanded-header{display:flex;align-items:center}td.board-column-task-collapsed{font-weight:700;background-color:var(--table-header-background-color)}#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;transform:rotate(90deg);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-compact{max-height:90vh;overflow-y:auto}.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 var(--draggable-placeholder-border-color);background:var(--draggable-placeholder-background-color);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:var(--task-list-icons-color);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-dark)}.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 var(--comment-title-border-color);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:var(--comment-highlighted-background-color);border:2px solid var(--comment-highlighted-border-color)}.comments .comment-highlighted:hover{background-color:var(--comment-highlighted-hover-background-color)}.comments .comment:hover{background:var(--comment-highlighted-hover-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted){background:var(--comment-nth-background-color)}.comments .comment:nth-child(even):not(.comment-highlighted):hover{background:var(--comment-highlighted-hover-background-color)}.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}}.subtasks-table .subtask-table-td{display:flex;white-space:normal;min-width:400px}.subtasks-table .subtask-submenu{display:flex}.js-subtask-toggle-status{display:flex;text-decoration: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}}.subtask-time-tracking{white-space:normal}.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 var(--panel-border-color);color:var(--color-primary);background-color:var(--panel-background-color);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-light);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/src/activity_stream.css b/assets/css/src/activity_stream.css
index 54175cdf6..925c5dc32 100644
--- a/assets/css/src/activity_stream.css
+++ b/assets/css/src/activity_stream.css
@@ -18,7 +18,7 @@
}
.activity-content {
- margin-left: 55px
+ margin-left: 55px;
}
.activity-title {
@@ -28,7 +28,7 @@
}
.activity-description {
- color: var(--color-medium);
+ color: var(--color-light);
margin-top: 10px
}
diff --git a/assets/css/src/base.css b/assets/css/src/base.css
index 991a67884..faab97338 100644
--- a/assets/css/src/base.css
+++ b/assets/css/src/base.css
@@ -14,6 +14,7 @@ body {
}
body {
+ background-color: var(--body-background-color);
font-size: 100%;
padding-bottom: 10px;
color: var(--color-primary);
diff --git a/assets/css/src/board.css b/assets/css/src/board.css
index 74d525276..f89b6d7ab 100644
--- a/assets/css/src/board.css
+++ b/assets/css/src/board.css
@@ -60,7 +60,7 @@
td.board-column-task-collapsed {
font-weight: bold;
- background-color: #fbfbfb
+ background-color: var(--table-header-background-color)
}
#board th.board-column-header-collapsed {
@@ -79,14 +79,7 @@ td.board-column-task-collapsed {
.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%
}
@@ -152,8 +145,8 @@ a.board-swimlane-toggle:focus {
}
.draggable-placeholder {
- border: 2px dashed #000;
- background: #fafafa;
+ border: 2px dashed var(--draggable-placeholder-border-color);
+ background: var(--draggable-placeholder-background-color);
height: 70px;
margin-bottom: 10px
}
diff --git a/assets/css/src/comment.css b/assets/css/src/comment.css
index 252ede211..5499f2654 100644
--- a/assets/css/src/comment.css
+++ b/assets/css/src/comment.css
@@ -18,7 +18,7 @@
}
.comment-title {
- border-bottom: 1px dotted #eee;
+ border-bottom: 1px dotted var(--comment-title-border-color);
margin-left: 55px
}
@@ -44,22 +44,22 @@
}
.comments .comment-highlighted {
- background-color: #fff8dc;
- border: 2px solid #ffeb8e
+ background-color: var(--comment-highlighted-background-color);
+ border: 2px solid var(--comment-highlighted-border-color);
}
.comments .comment-highlighted:hover {
- background-color: #fff8dc
+ background-color: var(--comment-highlighted-hover-background-color)
}
.comments .comment:hover {
- background: #fff8dc
+ background: var(--comment-highlighted-hover-background-color)
}
.comments .comment:nth-child(even):not(.comment-highlighted) {
- background: #fbfbfb
+ background: var(--comment-nth-background-color);
}
.comments .comment:nth-child(even):not(.comment-highlighted):hover {
- background: #fff8dc
+ background: var(--comment-highlighted-hover-background-color)
}
diff --git a/assets/css/src/dropdown.css b/assets/css/src/dropdown.css
index b8e45fd80..3fa0aef30 100644
--- a/assets/css/src/dropdown.css
+++ b/assets/css/src/dropdown.css
@@ -23,8 +23,8 @@ ul.dropdown-submenu-open {
list-style: none;
margin: 3px 0 0 1px;
padding: 6px 0;
- background-color: #fff;
- border: 1px solid #b2b2b2;
+ background-color: var(--dropdown-background-color);
+ border: 1px solid var(--dropdown-border-color);
border-radius: 3px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15)
}
@@ -34,7 +34,7 @@ ul.dropdown-submenu-open {
margin: 0;
padding: 8px 10px;
font-size: 0.9em;
- border-bottom: 1px solid #f8f8f8;
+ border-bottom: 1px solid var(--dropdown-li-border-color);
cursor: pointer
}
@@ -61,7 +61,7 @@ ul.dropdown-submenu-open {
.dropdown-submenu-open a {
text-decoration: none;
- color: #333
+ color: var(--color-primary)
}
.dropdown-submenu-open a:focus {
@@ -70,7 +70,7 @@ ul.dropdown-submenu-open {
.dropdown-menu-link-text,
.dropdown-menu-link-icon {
- color: #333;
+ color: var(--color-primary);
text-decoration: none
}
@@ -79,11 +79,11 @@ ul.dropdown-submenu-open {
}
td a.dropdown-menu strong {
- color: #333
+ color: var(--color-primary);
}
td a.dropdown-menu strong i {
- color: #333
+ color: var(--color-primary);
}
td a.dropdown-menu i {
diff --git a/assets/css/src/form.css b/assets/css/src/form.css
index c4aa93551..a147a8bbd 100644
--- a/assets/css/src/form.css
+++ b/assets/css/src/form.css
@@ -17,6 +17,7 @@ label {
input, textarea {
font-family: sans-serif;
+ background-color: var(--input-background-color);
}
input[type="number"],
@@ -25,7 +26,7 @@ input[type="email"],
input[type="password"],
input[type="text"]:not(.input-addon-field) {
color: var(--color-light);
- border: 1px solid #ccc;
+ border: 1px solid var(--input-border-color);
width: 300px;
max-width: 95%;
font-size: 1em;
@@ -36,28 +37,12 @@ input[type="text"]:not(.input-addon-field) {
-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"]::placeholder,
+input[type="date"]::placeholder,
+input[type="email"]::placeholder,
+input[type="password"]::placeholder,
+input[type="text"]:not(.input-addon-field)::placeholder {
+ color: var(--input-placeholder-color)
}
input[type="number"]:focus,
@@ -65,10 +50,10 @@ 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);
+ color: var(--input-focus-color);
+ border-color: var(--input-focus-border-color);
outline: 0;
- box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
+ box-shadow: 0 0 8px var(--input-focus-shadow-color);
}
input[type="number"] {
@@ -93,31 +78,23 @@ input[type="text"]:not(.input-addon-field).form-input-small {
}
textarea:focus {
- color: #000;
- border-color: rgba(82, 168, 236, 0.8);
+ color: var(--input-focus-color);
+ border-color: var(--input-focus-border-color);
outline: 0;
- box-shadow: 0 0 8px rgba(82, 168, 236, 0.6)
+ box-shadow: 0 0 8px var(--input-focus-shadow-color);
}
textarea {
padding: 4px;
- border: 1px solid #ccc;
+ border: 1px solid var(--input-border-color);
width: 400px;
max-width: 99%;
height: 200px;
font-size: 1em
}
-textarea::-webkit-input-placeholder {
- color: #dedede
-}
-
-textarea::-moz-placeholder {
- color: #dedede
-}
-
-textarea:-ms-input-placeholder {
- color: #dedede
+textarea::placeholder {
+ color: var(--input-placeholder-color)
}
select {
@@ -164,17 +141,17 @@ input[type="text"].form-max-width {
input.form-error,
textarea.form-error {
- border: 2px solid #b94a48
+ border: 2px solid var(--form-error-color);
}
input.form-error:focus,
textarea.form-error:focus {
box-shadow: none;
- border: 2px solid #b94a48
+ border: 2px solid var(--form-error-color)
}
.form-errors {
- color: #b94a48;
+ color: var(--form-error-color);
list-style-type: none
}
@@ -184,7 +161,7 @@ ul.form-errors li {
.form-help {
font-size: 0.8em;
- color: brown;
+ color: var(--form-help-color);
margin-bottom: 15px
}
diff --git a/assets/css/src/header.css b/assets/css/src/header.css
index 98b696b23..322e554a9 100644
--- a/assets/css/src/header.css
+++ b/assets/css/src/header.css
@@ -4,7 +4,7 @@ header {
padding: 5px 10px;
margin-bottom: 5px;
border-bottom: 1px solid #dedede;
- background-color: #fbfbfb
+ background-color: var(--header-background-color);
}
header .title-container {
diff --git a/assets/css/src/input_addon.css b/assets/css/src/input_addon.css
index b81aafdab..86a105cc1 100644
--- a/assets/css/src/input_addon.css
+++ b/assets/css/src/input_addon.css
@@ -20,8 +20,8 @@
}
.input-addon-item {
- background-color: rgba(147, 128, 108, 0.1);
- color: #666;
+ background-color: var(--input-addon-background-color);
+ color: var(--input-addon-color);
font: inherit;
font-weight: normal
}
diff --git a/assets/css/src/modal.css b/assets/css/src/modal.css
index 6f455f8d0..9ee3557d2 100644
--- a/assets/css/src/modal.css
+++ b/assets/css/src/modal.css
@@ -15,7 +15,7 @@
top: 2%;
left: 50%;
transform: translateX(-50%);
- background: #fff;
+ background: var(--body-background-color);
overflow: auto;
border-radius: 5px
}
diff --git a/assets/css/src/panel.css b/assets/css/src/panel.css
index 87d72ac3c..2de30fdfd 100644
--- a/assets/css/src/panel.css
+++ b/assets/css/src/panel.css
@@ -3,9 +3,9 @@
padding: 8px 35px 8px 10px;
margin-top: 10px;
margin-bottom: 15px;
- border: 1px solid #ddd;
+ border: 1px solid var(--panel-border-color);
color: var(--color-primary);
- background-color: #fcfcfc;
+ background-color: var(--panel-background-color);
overflow: auto
}
diff --git a/assets/css/src/select_dropdown.css b/assets/css/src/select_dropdown.css
index b69b5e74c..3b78317a2 100644
--- a/assets/css/src/select_dropdown.css
+++ b/assets/css/src/select_dropdown.css
@@ -4,9 +4,9 @@
z-index: 1000;
min-width: 160px;
padding: 5px 0;
- background: #fff;
+ background: var(--dropdown-background-color);
list-style: none;
- border: 1px solid #ccc;
+ border: 1px solid var(--dropdown-border-color);
border-radius: 3px;
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
overflow: scroll
@@ -18,7 +18,7 @@
padding: 3px 10px;
color: var(--color-medium);
cursor: pointer;
- border-bottom: 1px solid #f8f8f8;
+ border-bottom: 1px solid var(--dropdown-li-border-color);
line-height: 1.5em;
font-weight: 400
}
@@ -34,9 +34,9 @@
.select-dropdown-input-container {
position: relative;
- border: 1px solid #ccc;
+ border: 1px solid var(--input-border-color);
border-radius: 5px;
- background-color: #fff;
+ background-color: var(--input-background-color);
max-width: 300px
}
diff --git a/assets/css/src/sidebar.css b/assets/css/src/sidebar.css
index 467e48b1c..745a4e181 100644
--- a/assets/css/src/sidebar.css
+++ b/assets/css/src/sidebar.css
@@ -60,7 +60,7 @@
.sidebar>ul li {
list-style-type: none;
line-height: 35px;
- border-bottom: 1px dotted #efefef;
+ border-bottom: 1px dotted var(--sidebar-border-color);
padding-left: 13px
}
@@ -76,7 +76,7 @@
.sidebar>ul li.active a {
color: var(--color-primary);
- font-weight: bold
+ font-weight: 400
}
.sidebar-icons>ul li {
diff --git a/assets/css/src/table.css b/assets/css/src/table.css
index 0f446fb69..6af9b6416 100644
--- a/assets/css/src/table.css
+++ b/assets/css/src/table.css
@@ -25,7 +25,7 @@ table.table-small {
}
table.table-striped tr:nth-child(odd) {
- background: #fefefe
+ background: var(--table-nth-background-color);
}
@media (max-width: 768px) {
@@ -41,8 +41,8 @@ table.table-striped tr:nth-child(odd) {
table th {
text-align: left;
padding: 0.5em 3px;
- border: 1px solid #eee;
- background: #fbfbfb
+ border: 1px solid var(--table-border-color);
+ background-color: var(--table-header-background-color)
}
table th a {
@@ -56,7 +56,7 @@ table th a:hover {
}
table td {
- border: 1px solid #eee;
+ border: 1px solid var(--table-border-color);
padding: 0.5em 3px;
vertical-align: top
}
@@ -65,6 +65,10 @@ table td li {
margin-left: 20px
}
+.task-table a {
+ color: #000;
+}
+
.column-1 {
width: 1%
}
diff --git a/assets/css/src/table_drag_and_drop.css b/assets/css/src/table_drag_and_drop.css
index aaee9fc7d..e0a40189f 100644
--- a/assets/css/src/table_drag_and_drop.css
+++ b/assets/css/src/table_drag_and_drop.css
@@ -1,6 +1,6 @@
.draggable-row-handle {
cursor: move;
- color: #dedede
+ color: var(--draggable-row-handle-color)
}
.draggable-row-handle:hover {
@@ -8,8 +8,8 @@
}
tr.draggable-item-selected {
- background: #fff;
- border: 2px solid #666;
+ background: var(--draggable-item-selected-background-color);
+ border: 2px solid var(--draggable-item-selected-border-color);
box-shadow: 4px 2px 10px -4px rgba(0, 0, 0, 0.55)
}
@@ -28,5 +28,5 @@ tr.draggable-item-selected td:last-child {
.table-stripped tr.draggable-item-hover,
.table-stripped tr.draggable-item-hover {
- background: #FEFFF2
+ background: var(--draggable-item-hover-background-color)
}
diff --git a/assets/css/src/table_list.css b/assets/css/src/table_list.css
index ce6b0e64a..1b3998b9b 100644
--- a/assets/css/src/table_list.css
+++ b/assets/css/src/table_list.css
@@ -4,8 +4,8 @@
}
.table-list-header {
- background: #fbfbfb;
- border: 1px solid #e5e5e5;
+ background: var(--table-list-header-background-color);
+ border: 1px solid var(--table-list-header-border-color);
border-radius: 5px 5px 0 0;
line-height: 28px;
padding-left: 3px;
@@ -13,7 +13,7 @@
}
.table-list-header a {
- color: #333;
+ color: var(--color-primary);
font-weight: 500;
text-decoration: none;
margin-right: 10px
@@ -31,22 +31,22 @@
}
.table-list-header .table-list-header-menu {
- text-align: right
+ text-align: right;
}
.table-list-row {
padding-left: 3px;
padding-right: 3px;
- border-bottom: 1px solid #e5e5e5;
- border-right: 1px solid #e5e5e5
+ border-bottom: 1px solid var(--table-list-border-color);
+ border-right: 1px solid var(--table-list-border-color);
}
.table-list-row.table-border-left {
- border-left: 1px solid #e5e5e5
+ border-left: 1px solid var(--table-list-border-color);
}
.table-list-row:nth-child(odd) {
- background: #fefefe
+ background: var(--table-list-nth-background-color)
}
.table-list-row:last-child {
@@ -54,9 +54,9 @@
}
.table-list-row:hover {
- background: #fff8dc;
- border-bottom: 1px solid #ffeb8e;
- border-right: 1px solid #ffeb8e
+ background: var(--table-list-row-background-color);
+ border-bottom: 1px solid var(--table-list-row-hover-border-color);
+ border-right: 1px solid var(--table-list-row-hover-border-color)
}
.table-list-row .table-list-title {
@@ -74,7 +74,7 @@
}
.table-list-row .table-list-title a {
- color: #333;
+ color: var(--color-primary);
text-decoration: none
}
@@ -147,11 +147,11 @@
}
.table-list-row .table-list-icons a:hover {
- color: #333
+ color: var(--color-primary)
}
.table-list-row .table-list-icons a:hover i {
- color: #333
+ color: var(--color-primary)
}
.table-list-category {
diff --git a/assets/css/src/task_icons.css b/assets/css/src/task_icons.css
index a22417c27..35ed967ef 100644
--- a/assets/css/src/task_icons.css
+++ b/assets/css/src/task_icons.css
@@ -87,7 +87,7 @@
.task-list-icons a,
.task-list-icons span,
.task-list-icons i {
- color: #999;
+ color: var(--task-list-icons-color);
opacity: 1.0
}
diff --git a/assets/css/src/task_summary.css b/assets/css/src/task_summary.css
index f6cbea265..115bb1bb4 100644
--- a/assets/css/src/task_summary.css
+++ b/assets/css/src/task_summary.css
@@ -32,7 +32,7 @@
}
.task-summary-column {
- color: var(--color-primary);
+ color: var(--color-dark);
}
.task-summary-column span {
diff --git a/assets/css/src/themes/auto.css b/assets/css/src/themes/auto.css
new file mode 100644
index 000000000..cfd40c52d
--- /dev/null
+++ b/assets/css/src/themes/auto.css
@@ -0,0 +1,294 @@
+:root {
+ --body-background-color: #FFF;
+ --header-background-color: #fbfbfb;
+
+ --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;
+
+ --table-header-background-color: #fbfbfb;
+ --table-nth-background-color: #fefefe;
+ --table-border-color: #eee;
+
+ --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;
+
+ --table-list-header-border-color: #e5e5e5;
+ --table-list-header-background-color: #fbfbfb;
+ --table-list-nth-background-color: #fefefe;
+ --table-list-border-color: #e5e5e5;
+ --table-list-row-hover-border-color: #ffeb8e;
+ --table-list-row-background-color: #fff8dc;
+
+ --sidebar-border-color: #efefef;
+
+ --dropdown-background-color: #fff;
+ --dropdown-border-color: #b2b2b2;
+ --dropdown-li-border-color: #f8f8f8;
+
+ --input-addon-background-color: rgba(147, 128, 108, 0.1);
+ --input-addon-color: #666;
+
+ --views-background-color: #fafafa;
+ --views-border-color: #ddd;
+ --views-active-color: #000;
+
+ --input-focus-color: #000;
+ --input-focus-border-color: rgba(82, 168, 236, 0.8);
+ --input-focus-shadow-color: rgba(82, 168, 236, 0.6);
+ --input-background-color: #fff;
+ --input-border-color: #ccc;
+ --input-placeholder-color: #dedede;
+
+ --tooltip-background-color: #fff;
+ --tooltip-border-color: #ddd;
+ --tooltip-shadow-color: #aaa;
+
+ --panel-background-color: #fcfcfc;
+ --panel-border-color: #ddd;
+
+ --draggable-item-selected-background-color: #fff;
+ --draggable-item-selected-border-color: #666;
+ --draggable-item-hover-background-color: #FEFFF2;
+ --draggable-row-handle-color: #dedede;
+ --draggable-placeholder-background-color: #fafafa;
+ --draggable-placeholder-border-color: #000;
+
+ --task-list-icons-color: #999;
+
+ --form-help-color: brown;
+ --form-error-color: #b94a48;
+
+ --comment-title-border-color: #eee;
+ --comment-nth-background-color: #fbfbfb;
+ --comment-highlighted-background-color: #fff8dc;
+ --comment-highlighted-hover-background-color: #fff8dc;
+ --comment-highlighted-border-color: #ffeb8e;
+}
+
+html {
+ color-scheme: light;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --body-background-color: #222;
+ --header-background-color: #222;
+
+ --color-primary: #a0a0a0;
+ --color-light: #a0a0a0;
+ --color-lighter: #efefef;
+ --color-dark: #000;
+ --color-medium: #4f4c4c;
+ --color-error: #b94a48;
+
+ --link-color-primary: #aaa;
+ --link-color-focus: #ddd;
+ --link-color-hover: #ddd;
+
+ --alert-color-default: #efefef;
+ --alert-color-success: #def6de;
+ --alert-color-error: #de9393;
+ --alert-color-info: #3a87ad;
+ --alert-color-normal: #333;
+
+ --alert-background-color-default: #333;
+ --alert-background-color-success: #304b27;
+ --alert-background-color-error: #500606;
+ --alert-background-color-info: #d9edf7;
+ --alert-background-color-normal: #f0f0f0;
+
+ --alert-border-color-default: #444;
+ --alert-border-color-success: #3c621b;
+ --alert-border-color-error: #7e0315;
+ --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: #efefef;
+ --button-primary-background-color: #333;
+ --button-primary-border-color: #444;
+
+ --button-primary-color-focus: #fff;
+ --button-primary-background-color-focus: #555;
+ --button-primary-border-color-focus: #888;
+
+ --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;
+
+ --table-header-background-color: #1a1a1a;
+ --table-nth-background-color: #2d2c2c;
+ --table-border-color: rgba(147, 128, 108, 0.25);
+
+ --avatar-color-letter: #fff;
+
+ --activity-title-color: #e3e2e2;
+ --activity-title-border-color: #efefef;
+ --activity-event-background-color: #313131;
+ --activity-event-hover-color: #000;
+
+ --user-mention-color: #fff;
+
+ --board-task-limit-color: #DF5353;
+
+ --table-list-header-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-header-background-color: rgb(59, 59, 59);
+ --table-list-nth-background-color: #2d2c2c;
+ --table-list-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-row-hover-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-row-background-color: #434343;
+
+ --sidebar-border-color: rgba(147, 128, 108, 0.25);
+
+ --dropdown-background-color: #222;
+ --dropdown-border-color: #000;
+ --dropdown-li-border-color: #555;
+
+ --input-addon-background-color: #1a1a1a;
+ --input-addon-color: rgba(147, 128, 108, 0.25);
+
+ --views-background-color: #1a1a1a;
+ --views-border-color: rgba(147, 128, 108, 0.25);
+ --views-active-color: #949494;
+
+ --input-focus-color: #e6edf3;
+ --input-focus-border-color: rgba(82, 168, 236, 0.8);
+ --input-focus-shadow-color: rgba(82, 168, 236, 0.6);
+ --input-background-color: rgb(59, 59, 59);
+ --input-border-color: #777575;
+ --input-placeholder-color: #666;
+
+ --tooltip-background-color: #333;
+ --tooltip-border-color: #555;
+ --tooltip-shadow-color: #111;
+
+ --panel-background-color: #2c2c2c;
+ --panel-border-color: #000;
+
+ --draggable-item-selected-background-color: #222;
+ --draggable-item-selected-border-color: #111;
+ --draggable-item-hover-background-color: #555;
+ --draggable-row-handle-color: #444;
+ --draggable-placeholder-background-color: #444;
+ --draggable-placeholder-border-color: #666;
+
+ --task-list-icons-color: #cccccc;
+
+ --form-help-color: #a8a12f;
+ --form-error-color: #f2332f;
+
+ --comment-title-border-color: #eee;
+ --comment-nth-background-color: #2b2a2a;
+ --comment-highlighted-background-color: #2b2901;
+ --comment-highlighted-hover-background-color: #000;
+ --comment-highlighted-border-color: #c09e05;
+ }
+
+ html {
+ color-scheme: dark;
+ }
+
+ .select2-dropdown, .select2-close-mask {
+ background-color: var(--input-background-color);
+ }
+
+ .select2-container--default .select2-selection--multiple,
+ .select2-container--default .select2-selection--single {
+ background-color: var(--input-background-color);
+ border-color: var(--input-border-color);
+ }
+
+ .select2-container--default.select2-container--focus .select2-selection--multiple {
+ border-color: var(--input-focus-border-color);
+ }
+
+ .select2-container--default .select2-selection--single .select2-selection__rendered,
+ .select2-container--classic .select2-selection--single .select2-selection__rendered {
+ color: #fff;
+ }
+
+ .task-board-title {
+ color: #000;
+ }
+
+ .task-summary-column a, .task-summary-column a:hover {
+ color: #000;
+ }
+}
diff --git a/assets/css/src/themes/dark.css b/assets/css/src/themes/dark.css
new file mode 100644
index 000000000..6164d1a97
--- /dev/null
+++ b/assets/css/src/themes/dark.css
@@ -0,0 +1,159 @@
+:root {
+ --body-background-color: #222;
+ --header-background-color: #222;
+
+ --color-primary: #a0a0a0;
+ --color-light: #a0a0a0;
+ --color-lighter: #efefef;
+ --color-dark: #000;
+ --color-medium: #4f4c4c;
+ --color-error: #b94a48;
+
+ --link-color-primary: #aaa;
+ --link-color-focus: #ddd;
+ --link-color-hover: #ddd;
+
+ --alert-color-default: #efefef;
+ --alert-color-success: #def6de;
+ --alert-color-error: #de9393;
+ --alert-color-info: #3a87ad;
+ --alert-color-normal: #333;
+
+ --alert-background-color-default: #333;
+ --alert-background-color-success: #304b27;
+ --alert-background-color-error: #500606;
+ --alert-background-color-info: #d9edf7;
+ --alert-background-color-normal: #f0f0f0;
+
+ --alert-border-color-default: #444;
+ --alert-border-color-success: #3c621b;
+ --alert-border-color-error: #7e0315;
+ --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: #efefef;
+ --button-primary-background-color: #333;
+ --button-primary-border-color: #444;
+
+ --button-primary-color-focus: #fff;
+ --button-primary-background-color-focus: #555;
+ --button-primary-border-color-focus: #888;
+
+ --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;
+
+ --table-header-background-color: #1a1a1a;
+ --table-nth-background-color: #2d2c2c;
+ --table-border-color: rgba(147, 128, 108, 0.25);
+
+ --avatar-color-letter: #fff;
+
+ --activity-title-color: #e3e2e2;
+ --activity-title-border-color: #efefef;
+ --activity-event-background-color: #313131;
+ --activity-event-hover-color: #000;
+
+ --user-mention-color: #fff;
+
+ --board-task-limit-color: #DF5353;
+
+ --table-list-header-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-header-background-color: rgb(59, 59, 59);
+ --table-list-nth-background-color: #2d2c2c;
+ --table-list-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-row-hover-border-color: rgba(147, 128, 108, 0.25);
+ --table-list-row-background-color: #434343;
+
+ --sidebar-border-color: rgba(147, 128, 108, 0.25);
+
+ --dropdown-background-color: #222;
+ --dropdown-border-color: #000;
+ --dropdown-li-border-color: #555;
+
+ --input-addon-background-color: #1a1a1a;
+ --input-addon-color: rgba(147, 128, 108, 0.25);
+
+ --views-background-color: #1a1a1a;
+ --views-border-color: rgba(147, 128, 108, 0.25);
+ --views-active-color: #949494;
+
+ --input-focus-color: #e6edf3;
+ --input-focus-border-color: rgba(82, 168, 236, 0.8);
+ --input-focus-shadow-color: rgba(82, 168, 236, 0.6);
+ --input-background-color: rgb(59, 59, 59);
+ --input-border-color: #777575;
+ --input-placeholder-color: #666;
+
+ --tooltip-background-color: #333;
+ --tooltip-border-color: #555;
+ --tooltip-shadow-color: #111;
+
+ --panel-background-color: #2c2c2c;
+ --panel-border-color: #000;
+
+ --draggable-item-selected-background-color: #222;
+ --draggable-item-selected-border-color: #111;
+ --draggable-item-hover-background-color: #555;
+ --draggable-row-handle-color: #444;
+ --draggable-placeholder-background-color: #444;
+ --draggable-placeholder-border-color: #666;
+
+ --task-list-icons-color: #cccccc;
+
+ --form-help-color: #a8a12f;
+ --form-error-color: #f2332f;
+
+ --comment-title-border-color: #eee;
+ --comment-nth-background-color: #2b2a2a;
+ --comment-highlighted-background-color: #2b2901;
+ --comment-highlighted-hover-background-color: #000;
+ --comment-highlighted-border-color: #c09e05;
+}
+
+html {
+ color-scheme: dark;
+}
+
+.select2-dropdown, .select2-close-mask {
+ background-color: var(--input-background-color);
+}
+
+.select2-container--default .select2-selection--multiple,
+.select2-container--default .select2-selection--single {
+ background-color: var(--input-background-color);
+ border-color: var(--input-border-color);
+}
+
+.select2-container--default.select2-container--focus .select2-selection--multiple {
+ border-color: var(--input-focus-border-color);
+}
+
+.select2-container--default .select2-selection--single .select2-selection__rendered,
+.select2-container--classic .select2-selection--single .select2-selection__rendered {
+ color: #fff;
+}
+
+.task-board-title {
+ color: #000;
+}
+
+.task-summary-column a, .task-summary-column a:hover {
+ color: #000;
+}
diff --git a/assets/css/src/variables.css b/assets/css/src/themes/light.css
similarity index 51%
rename from assets/css/src/variables.css
rename to assets/css/src/themes/light.css
index 80964589f..6eb8bd6dd 100644
--- a/assets/css/src/variables.css
+++ b/assets/css/src/themes/light.css
@@ -1,4 +1,7 @@
:root {
+ --body-background-color: #FFF;
+ --header-background-color: #fbfbfb;
+
--color-primary: #333;
--color-light: #999;
--color-lighter: #dedede;
@@ -56,6 +59,10 @@
--button-disabled-background-color: #f7f7f7;
--button-disabled-border-color: #ccc;
+ --table-header-background-color: #fbfbfb;
+ --table-nth-background-color: #fefefe;
+ --table-border-color: #eee;
+
--avatar-color-letter: #fff;
--activity-title-color: #000;
@@ -66,4 +73,61 @@
--user-mention-color: #000;
--board-task-limit-color: #DF5353;
+
+ --table-list-header-border-color: #e5e5e5;
+ --table-list-header-background-color: #fbfbfb;
+ --table-list-nth-background-color: #fefefe;
+ --table-list-border-color: #e5e5e5;
+ --table-list-row-hover-border-color: #ffeb8e;
+ --table-list-row-background-color: #fff8dc;
+
+ --sidebar-border-color: #efefef;
+
+ --dropdown-background-color: #fff;
+ --dropdown-border-color: #b2b2b2;
+ --dropdown-li-border-color: #f8f8f8;
+
+ --input-addon-background-color: rgba(147, 128, 108, 0.1);
+ --input-addon-color: #666;
+
+ --views-background-color: #fafafa;
+ --views-border-color: #ddd;
+ --views-active-color: #000;
+
+ --input-focus-color: #000;
+ --input-focus-border-color: rgba(82, 168, 236, 0.8);
+ --input-focus-shadow-color: rgba(82, 168, 236, 0.6);
+ --input-background-color: #fff;
+ --input-border-color: #ccc;
+ --input-placeholder-color: #dedede;
+
+ --tooltip-background-color: #fff;
+ --tooltip-border-color: #ddd;
+ --tooltip-shadow-color: #aaa;
+
+ --panel-background-color: #fcfcfc;
+ --panel-border-color: #ddd;
+
+ --draggable-item-selected-background-color: #fff;
+ --draggable-item-selected-border-color: #666;
+ --draggable-item-hover-background-color: #FEFFF2;
+ --draggable-row-handle-color: #dedede;
+ --draggable-placeholder-background-color: #fafafa;
+ --draggable-placeholder-border-color: #000;
+
+ --task-list-icons-color: #999;
+
+ --form-help-color: brown;
+ --form-error-color: #b94a48;
+
+ --comment-title-border-color: #eee;
+ --comment-nth-background-color: #fbfbfb;
+ --comment-highlighted-background-color: #fff8dc;
+ --comment-highlighted-hover-background-color: #fff8dc;
+ --comment-highlighted-border-color: #ffeb8e;
}
+
+html {
+ color-scheme: light;
+}
+
diff --git a/assets/css/src/tooltip.css b/assets/css/src/tooltip.css
index 6075d8af6..de893b4bc 100644
--- a/assets/css/src/tooltip.css
+++ b/assets/css/src/tooltip.css
@@ -8,10 +8,10 @@
#tooltip-container {
padding: 5px;
- background: #fff;
- border: 1px solid #ddd;
+ background: var(--tooltip-background-color);
+ border: 1px solid var(--tooltip-border-color);
border-radius: 4px;
- box-shadow: 0 6px 12px #aaa;
+ box-shadow: 0 6px 12px var(--tooltip-shadow-color);
position: absolute;
min-width: 350px
}
diff --git a/assets/css/src/views.css b/assets/css/src/views.css
index b8bb1e691..3f754b96a 100644
--- a/assets/css/src/views.css
+++ b/assets/css/src/views.css
@@ -25,8 +25,8 @@
.views li {
white-space: nowrap;
- background: #fafafa;
- border: 1px solid #ddd;
+ background: var(--views-background-color);
+ border: 1px solid var(--views-border-color);
border-right: none;
padding: 4px 8px;
display: inline
@@ -37,13 +37,13 @@
display: block;
margin-top: 5px;
border-radius: 5px;
- border: 1px solid #ddd
+ border: 1px solid var(--views-border-color)
}
}
.views li.active a {
font-weight: bold;
- color: #000;
+ color: var(--views-active-color);
text-decoration: none
}
@@ -53,13 +53,13 @@
}
.views li:last-child {
- border-right: 1px solid #ddd;
+ border-right: 1px solid var(--views-border-color);
border-top-right-radius: 5px;
border-bottom-right-radius: 5px
}
.views a {
- color: var(--color-medium);
+ color: var(--color-ligth);
text-decoration: none
}
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 424f6132e..389769d16 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -2,6 +2,24 @@
// autoload.php @generated by Composer
+if (PHP_VERSION_ID < 50600) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, $err);
+ } elseif (!headers_sent()) {
+ echo $err;
+ }
+ }
+ trigger_error(
+ $err,
+ E_USER_ERROR
+ );
+}
+
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 4d989a212..a72151c77 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -42,30 +42,79 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
+ /** @var \Closure(string):void */
+ private static $includeFile;
+
+ /** @var ?string */
private $vendorDir;
// PSR-4
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
private $prefixLengthsPsr4 = array();
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
private $prefixDirsPsr4 = array();
+ /**
+ * @var array[]
+ * @psalm-var array
+ */
private $fallbackDirsPsr4 = array();
// PSR-0
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
private $prefixesPsr0 = array();
+ /**
+ * @var array[]
+ * @psalm-var array
+ */
private $fallbackDirsPsr0 = array();
+ /** @var bool */
private $useIncludePath = false;
+
+ /**
+ * @var string[]
+ * @psalm-var array
+ */
private $classMap = array();
+
+ /** @var bool */
private $classMapAuthoritative = false;
+
+ /**
+ * @var bool[]
+ * @psalm-var array
+ */
private $missingClasses = array();
+
+ /** @var ?string */
private $apcuPrefix;
+ /**
+ * @var self[]
+ */
private static $registeredLoaders = array();
+ /**
+ * @param ?string $vendorDir
+ */
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
+ self::initializeIncludeClosure();
}
+ /**
+ * @return string[]
+ */
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@@ -75,28 +124,47 @@ class ClassLoader
return array();
}
+ /**
+ * @return array[]
+ * @psalm-return array>
+ */
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
+ /**
+ * @return array[]
+ * @psalm-return array
+ */
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
+ /**
+ * @return array[]
+ * @psalm-return array
+ */
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
+ /**
+ * @return string[] Array of classname => path
+ * @psalm-return array
+ */
public function getClassMap()
{
return $this->classMap;
}
/**
- * @param array $classMap Class to filename map
+ * @param string[] $classMap Class to filename map
+ * @psalm-param array $classMap
+ *
+ * @return void
*/
public function addClassMap(array $classMap)
{
@@ -111,9 +179,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
+ * @param string $prefix The prefix
+ * @param string[]|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@@ -156,11 +226,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
- * @param bool $prepend Whether to prepend the directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param string[]|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
+ *
+ * @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@@ -204,8 +276,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 base directories
+ * @param string $prefix The prefix
+ * @param string[]|string $paths The PSR-0 base directories
+ *
+ * @return void
*/
public function set($prefix, $paths)
{
@@ -220,10 +294,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
+ *
+ * @return void
*/
public function setPsr4($prefix, $paths)
{
@@ -243,6 +319,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
+ *
+ * @return void
*/
public function setUseIncludePath($useIncludePath)
{
@@ -265,6 +343,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
+ *
+ * @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@@ -285,6 +365,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
+ *
+ * @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@@ -305,14 +387,18 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
+ *
+ * @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
- //no-op
- } elseif ($prepend) {
+ return;
+ }
+
+ if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
@@ -322,6 +408,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
+ *
+ * @return void
*/
public function unregister()
{
@@ -336,15 +424,18 @@ class ClassLoader
* Loads the given class or interface.
*
* @param string $class The name of the class
- * @return bool|null True if loaded, null otherwise
+ * @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
- includeFile($file);
+ $includeFile = self::$includeFile;
+ $includeFile($file);
return true;
}
+
+ return null;
}
/**
@@ -399,6 +490,11 @@ class ClassLoader
return self::$registeredLoaders;
}
+ /**
+ * @param string $class
+ * @param string $ext
+ * @return string|false
+ */
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@@ -464,14 +560,26 @@ class ClassLoader
return false;
}
-}
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- */
-function includeFile($file)
-{
- include $file;
+ /**
+ * @return void
+ */
+ private static function initializeIncludeClosure()
+ {
+ if (self::$includeFile !== null) {
+ return;
+ }
+
+ /**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ */
+ self::$includeFile = \Closure::bind(static function($file) {
+ include $file;
+ }, null, null);
+ }
}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
index 62ecfd8d0..f27399a04 100644
--- a/vendor/composer/LICENSE
+++ b/vendor/composer/LICENSE
@@ -1,3 +1,4 @@
+
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -17,3 +18,4 @@ 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/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 866d072bb..f7c54f8dc 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
@@ -612,6 +612,7 @@ return array(
'Kanboard\\Model\\TaskReorderModel' => $baseDir . '/app/Model/TaskReorderModel.php',
'Kanboard\\Model\\TaskStatusModel' => $baseDir . '/app/Model/TaskStatusModel.php',
'Kanboard\\Model\\TaskTagModel' => $baseDir . '/app/Model/TaskTagModel.php',
+ 'Kanboard\\Model\\ThemeModel' => $baseDir . '/app/Model/ThemeModel.php',
'Kanboard\\Model\\TimezoneModel' => $baseDir . '/app/Model/TimezoneModel.php',
'Kanboard\\Model\\TransitionModel' => $baseDir . '/app/Model/TransitionModel.php',
'Kanboard\\Model\\UserLockingModel' => $baseDir . '/app/Model/UserLockingModel.php',
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index 13e329ebe..296bf0761 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -2,14 +2,14 @@
// autoload_files.php @generated by Composer
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
+ '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
- '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'8a67f3044590529ed0a5e02f9cc9c90b' => $baseDir . '/app/functions.php',
'dda285bdc738399c7167126cf41c82cb' => $baseDir . '/libs/swiftmailer/swift_required.php',
);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index 8e3b3dfe7..320893054 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 141ce2675..8e226cbe3 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 96c279bc5..6af2e83ba 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -25,51 +25,26 @@ class ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader'), true, true);
- self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader'));
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
- if ($useStaticLoader) {
- require __DIR__ . '/autoload_static.php';
-
- call_user_func(\Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::getInitializer($loader));
- } else {
- $map = require __DIR__ . '/autoload_namespaces.php';
- foreach ($map as $namespace => $path) {
- $loader->set($namespace, $path);
- }
-
- $map = require __DIR__ . '/autoload_psr4.php';
- foreach ($map as $namespace => $path) {
- $loader->setPsr4($namespace, $path);
- }
-
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
- }
- }
+ require __DIR__ . '/autoload_static.php';
+ call_user_func(\Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::getInitializer($loader));
$loader->register(true);
- if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::$files;
- } else {
- $includeFiles = require __DIR__ . '/autoload_files.php';
- }
- foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire80f59a55e693f3d5493bcaaa968d1851($fileIdentifier, $file);
+ $filesToLoad = \Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::$files;
+ $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+ require $file;
+ }
+ }, null, null);
+ foreach ($filesToLoad as $fileIdentifier => $file) {
+ $requireFile($fileIdentifier, $file);
}
return $loader;
}
}
-
-function composerRequire80f59a55e693f3d5493bcaaa968d1851($fileIdentifier, $file)
-{
- if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
- require $file;
-
- $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
- }
-}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 1b989816e..d6b389806 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -8,9 +8,9 @@ class ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
+ '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
- '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'8a67f3044590529ed0a5e02f9cc9c90b' => __DIR__ . '/../..' . '/app/functions.php',
'dda285bdc738399c7167126cf41c82cb' => __DIR__ . '/../..' . '/libs/swiftmailer/swift_required.php',
);
@@ -776,6 +776,7 @@ class ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851
'Kanboard\\Model\\TaskReorderModel' => __DIR__ . '/../..' . '/app/Model/TaskReorderModel.php',
'Kanboard\\Model\\TaskStatusModel' => __DIR__ . '/../..' . '/app/Model/TaskStatusModel.php',
'Kanboard\\Model\\TaskTagModel' => __DIR__ . '/../..' . '/app/Model/TaskTagModel.php',
+ 'Kanboard\\Model\\ThemeModel' => __DIR__ . '/../..' . '/app/Model/ThemeModel.php',
'Kanboard\\Model\\TimezoneModel' => __DIR__ . '/../..' . '/app/Model/TimezoneModel.php',
'Kanboard\\Model\\TransitionModel' => __DIR__ . '/../..' . '/app/Model/TransitionModel.php',
'Kanboard\\Model\\UserLockingModel' => __DIR__ . '/../..' . '/app/Model/UserLockingModel.php',