From ad3e2246345a1d331bf1097eda9209d033839d20 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Thu, 29 Feb 2024 13:17:51 +0800
Subject: [PATCH 001/276] * Fix bug #46207.
---
lib/zin/wg/password/js/v1.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/zin/wg/password/js/v1.js b/lib/zin/wg/password/js/v1.js
index 0b986374f5..d892b9175e 100644
--- a/lib/zin/wg/password/js/v1.js
+++ b/lib/zin/wg/password/js/v1.js
@@ -1,4 +1,4 @@
-function checkPassword()
+window.checkPassword = function ()
{
const password = $(event.target).val();
const $strength = $(event.target).closest('.input-group').find('.' + strengthClass);
@@ -12,7 +12,7 @@ function checkPassword()
$strength.html(passwordStrength).removeClass('hidden');
}
-function computePasswordStrength(password)
+window.computePasswordStrength = function(password)
{
if(password.length == 0) return 0;
From 476e4cea16616407b5b97a4161ccf2b059dd5c7d Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Thu, 29 Feb 2024 13:29:32 +0800
Subject: [PATCH 002/276] + Fix bug #21863, replace image url.
---
module/action/control.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/action/control.php b/module/action/control.php
index d1817156b8..978387bb90 100755
--- a/module/action/control.php
+++ b/module/action/control.php
@@ -335,6 +335,7 @@ class action extends control
return $this->send(array('status' => 'success', 'closeModal' => true, 'callback' => array('name' => 'zui.HistoryPanel.update', 'params' => array('objectType' => $action->objectType, 'objectID' => $action->objectID))));
}
+ $action = $this->loadModel('file')->replaceImgURL($action, 'comment');
$this->view->title = $this->lang->action->editComment;
$this->view->actionID = $actionID;
$this->view->comment = $this->action->formatActionComment($action->comment);
From 141c1ac38f96974746bd5501e6aa66b04e95e476 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 13:40:36 +0800
Subject: [PATCH 003/276] * Update downgrade version setting.
---
ci.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ci.json b/ci.json
index 2a90cbcb8f..6a735b212e 100644
--- a/ci.json
+++ b/ci.json
@@ -15,6 +15,7 @@
"gitVersion": "master"
},
"downgrade": {
+ "gitVersion": "release-20.0.stable",
"gitRepo": "devops/zentaopms-downgrade"
}
},
@@ -44,7 +45,7 @@
}
},
"notice": {
- "users": "qishiyao,hufangzhou,zhujinyong",
+ "users": "qishiyao,hufangzhou,zhujinyong,caoyanyi",
"groups": "38a4e39b-df5d-4606-a988-e22673bdc358",
"groups2": "38a4e39b-df5d-4606-a988-e22673bdc358,6f5bb3f5-f4e3-4f67-963e-0cc9d59ad3c7"
}
From 470609629c5256a9800ed517c86b4d8a383e5c02 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 13:43:17 +0800
Subject: [PATCH 004/276] * Adjust delete files setting.
---
module/upgrade/config.php | 122 +++++++++++++++++++-------------------
1 file changed, 61 insertions(+), 61 deletions(-)
diff --git a/module/upgrade/config.php b/module/upgrade/config.php
index fb5e336dce..ea0dfe6bd8 100644
--- a/module/upgrade/config.php
+++ b/module/upgrade/config.php
@@ -939,67 +939,67 @@ $config->delete['18_9'][] = 'module/automation/lang/de.php';
$config->delete['18_9'][] = 'module/automation/lang/en.php';
$config->delete['18_9'][] = 'module/automation/view/browse.html.php';
-$config->delete['20.0.beta1'][] = 'extension/lite/kanban/ext/model/lite.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/my/ext/model/class/effort.class.php';
-$config->delete['20.0.beta1'][] = 'extension/max/my/ext/model/class/effort.class.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/todo/ext/control/batchcreate.php';
-$config->delete['20.0.beta1'][] = 'extension/max/todo/ext/control/batchcreate.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/bug/ext/control/export.php';
-$config->delete['20.0.beta1'][] = 'extension/max/bug/ext/control/export.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/story/ext/control/export.php';
-$config->delete['20.0.beta1'][] = 'extension/max/story/ext/control/export.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/view/calendarblock.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/view/calendarblock.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/view/calendarblock.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/view/calendarblock.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/config/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/config/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/zh-cn/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/zh-cn/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/zh-tw/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/zh-tw/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/de/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/de/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/en/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/en/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/fr/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/fr/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/lang/vi/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/lang/vi/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/model/class/calendar.class.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/model/class/calendar.class.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/block/ext/model/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/block/ext/model/calendar.php';
-$config->delete['20.0.beta1'][] = 'extension/max/admin/ext/config/repo.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/admin/ext/config/repo.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/common/view/flowchart.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/common/view/flowchart.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/workflow/css/flowchart.css';
-$config->delete['20.0.beta1'][] = 'extension/max/workflow/css/flowchart.css';
-$config->delete['20.0.beta1'][] = 'extension/biz/workflow/js/flowchart.js';
-$config->delete['20.0.beta1'][] = 'extension/max/workflow/js/flowchart.js';
-$config->delete['20.0.beta1'][] = 'extension/biz/workflow/view/flowchart.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/workflow/view/flowchart.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/my/ext/view/effort.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/my/ext/view/effort.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/task/ext/view/view.effort.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/task/ext/view/view.effort.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/todo/ext/view/batchcreate.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/todo/ext/view/batchcreate.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/doc/ext/view/view.effort.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/doc/ext/view/view.effort.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/execution/ext/view/effort.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/execution/ext/view/effort.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/execution/ext/view/featurebar.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/execution/ext/view/featurebar.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/effort/view/footer.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/effort/view/footer.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/effort/view/effortsforobject.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/effort/view/effortsforobject.html.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/user/ext/view/featurebar.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/max/user/ext/view/featurebar.calendar.html.hook.php';
-$config->delete['20.0.beta1'][] = 'extension/biz/bug/ext/view/import.html.php';
-$config->delete['20.0.beta1'][] = 'extension/max/bug/ext/view/import.html.php';
+$config->delete['20_0_beta1'][] = 'extension/lite/kanban/ext/model/lite.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/my/ext/model/class/effort.class.php';
+$config->delete['20_0_beta1'][] = 'extension/max/my/ext/model/class/effort.class.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/todo/ext/control/batchcreate.php';
+$config->delete['20_0_beta1'][] = 'extension/max/todo/ext/control/batchcreate.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/bug/ext/control/export.php';
+$config->delete['20_0_beta1'][] = 'extension/max/bug/ext/control/export.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/story/ext/control/export.php';
+$config->delete['20_0_beta1'][] = 'extension/max/story/ext/control/export.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/view/calendarblock.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/view/calendarblock.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/view/calendarblock.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/view/calendarblock.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/config/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/config/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/zh-cn/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/zh-cn/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/zh-tw/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/zh-tw/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/de/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/de/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/en/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/en/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/fr/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/fr/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/lang/vi/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/lang/vi/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/model/class/calendar.class.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/model/class/calendar.class.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/block/ext/model/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/block/ext/model/calendar.php';
+$config->delete['20_0_beta1'][] = 'extension/max/admin/ext/config/repo.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/admin/ext/config/repo.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/common/view/flowchart.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/common/view/flowchart.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/workflow/css/flowchart.css';
+$config->delete['20_0_beta1'][] = 'extension/max/workflow/css/flowchart.css';
+$config->delete['20_0_beta1'][] = 'extension/biz/workflow/js/flowchart.js';
+$config->delete['20_0_beta1'][] = 'extension/max/workflow/js/flowchart.js';
+$config->delete['20_0_beta1'][] = 'extension/biz/workflow/view/flowchart.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/workflow/view/flowchart.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/my/ext/view/effort.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/my/ext/view/effort.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/task/ext/view/view.effort.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/task/ext/view/view.effort.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/todo/ext/view/batchcreate.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/todo/ext/view/batchcreate.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/doc/ext/view/view.effort.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/doc/ext/view/view.effort.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/execution/ext/view/effort.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/execution/ext/view/effort.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/execution/ext/view/featurebar.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/execution/ext/view/featurebar.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/effort/view/footer.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/effort/view/footer.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/effort/view/effortsforobject.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/effort/view/effortsforobject.html.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/user/ext/view/featurebar.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/max/user/ext/view/featurebar.calendar.html.hook.php';
+$config->delete['20_0_beta1'][] = 'extension/biz/bug/ext/view/import.html.php';
+$config->delete['20_0_beta1'][] = 'extension/max/bug/ext/view/import.html.php';
$config->upgrade->openModules = array('action', 'admin', 'ai', 'aiapp', 'api', 'automation', 'backup', 'block', 'branch', 'budget', 'bug', 'build', 'caselib', 'chart', 'ci', 'client', 'common', 'company', 'compile', 'convert', 'cron', 'custom', 'datatable', 'dataview', 'dept', 'design', 'dev', 'dimension', 'doc', 'durationestimation', 'entry', 'execution', 'extension', 'file', 'git', 'gitlab', 'group', 'holiday', 'im', 'index', 'index.html', 'install', 'issue', 'jenkins', 'job', 'kanban', 'license', 'mail', 'message', 'metric', 'misc', 'mr', 'my', 'personnel', 'pipeline', 'product', 'productplan', 'productset', 'program', 'programplan', 'project', 'projectbuild', 'projectplan', 'projectrelease', 'projectstory', 'pivot', 'qa', 'release', 'repo', 'report', 'risk', 'score', 'screen', 'search', 'setting', 'sonarqube', 'sso', 'stage', 'stakeholder', 'story', 'subject', 'svn', 'task', 'testcase', 'testreport', 'testsuite', 'testtask', 'todo', 'tree', 'tutorial', 'upgrade', 'user', 'webhook', 'weekly', 'workestimation', 'gitea', 'gogs', 'transfer', 'zahost', 'zanode', 'editor', 'charter', 'roadmap', 'account', 'artifactrepo', 'cne', 'host', 'instance', 'ops', 'serverroom', 'space', 'store', 'system', 'solution');
From 235453967fe326d8f52f182380f4afbc7696485c Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Thu, 29 Feb 2024 13:44:21 +0800
Subject: [PATCH 005/276] * Replace `set::control(array('type' => 'xxx'))` with
`set::control(array('control' => 'xxx'))`.
---
module/artifactrepo/ui/create.html.php | 2 +-
module/artifactrepo/ui/edit.html.php | 2 +-
module/block/ui/systemmode.html.php | 2 +-
module/bug/ui/batchedit.html.php | 6 +++---
module/caselib/ui/createcase.html.php | 4 ++--
module/caselib/ui/exporttemplate.html.php | 2 +-
module/custom/ui/set.html.php | 18 +++++++++---------
module/doc/ui/create.html.php | 2 +-
module/execution/ui/batchedit.html.php | 2 +-
module/gitlab/ui/creategroup.html.php | 4 ++--
module/gitlab/ui/createuser.html.php | 6 +++---
module/gitlab/ui/editgroup.html.php | 4 ++--
module/gitlab/ui/edituser.html.php | 6 +++---
.../ui/ajaxgetmultiplemetricbox.html.php | 2 +-
module/metric/ui/create.html.php | 6 +++---
module/metric/ui/edit.html.php | 6 +++---
module/metric/ui/previewmultiple.html.php | 2 +-
module/metric/ui/previewsingle.html.php | 2 +-
module/mr/ui/create.html.php | 6 +++---
module/mr/ui/edit.html.php | 6 +++---
module/product/ui/manageline.html.php | 8 ++++----
module/repo/ui/create.html.php | 4 ++--
module/repo/ui/createrepo.html.php | 4 ++--
module/repo/ui/edit.html.php | 4 ++--
module/stakeholder/ui/create.html.php | 6 +++---
module/stakeholder/ui/edit.html.php | 2 +-
module/system/ui/editdomain.html.php | 2 +-
module/task/ui/recordworkhour.html.php | 2 +-
module/todo/ui/batchcreate.html.php | 6 +++---
module/todo/ui/edit.html.php | 2 +-
module/user/ui/create.html.php | 2 +-
module/user/ui/login.html.php | 4 ++--
32 files changed, 68 insertions(+), 68 deletions(-)
diff --git a/module/artifactrepo/ui/create.html.php b/module/artifactrepo/ui/create.html.php
index d4d71e6b47..ecc67fe030 100644
--- a/module/artifactrepo/ui/create.html.php
+++ b/module/artifactrepo/ui/create.html.php
@@ -27,7 +27,7 @@ formPanel
set::width('2/3'),
set::name('products[]'),
set::label($lang->repo->product),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($products)
),
formGroup
diff --git a/module/artifactrepo/ui/edit.html.php b/module/artifactrepo/ui/edit.html.php
index 5520337ed1..a6e4ae1e95 100644
--- a/module/artifactrepo/ui/edit.html.php
+++ b/module/artifactrepo/ui/edit.html.php
@@ -27,7 +27,7 @@ formPanel
set::width('2/3'),
set::name('products[]'),
set::label($lang->repo->product),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($products),
set::value($artifactRepo->products)
),
diff --git a/module/block/ui/systemmode.html.php b/module/block/ui/systemmode.html.php
index 5097d5047b..1ea3a1fca2 100644
--- a/module/block/ui/systemmode.html.php
+++ b/module/block/ui/systemmode.html.php
@@ -54,7 +54,7 @@ function printSystemMode()
set('class', 'hidden'),
set::name('mode'),
set::value('light'),
- set::control(array('type' => 'input'))
+ set::control(array('control' => 'input'))
),
formGroup
(
diff --git a/module/bug/ui/batchedit.html.php b/module/bug/ui/batchedit.html.php
index 848ee5393f..b2ca10013d 100644
--- a/module/bug/ui/batchedit.html.php
+++ b/module/bug/ui/batchedit.html.php
@@ -77,7 +77,7 @@ formBatchPanel
set::name('severity'),
set::label($lang->bug->severity),
set::hidden(zget($visibleFields, 'severity', true, false)),
- set::control(array('type' => 'severityPicker', 'required' => true)),
+ set::control(array('control' => 'severityPicker', 'required' => true)),
set::items($lang->bug->severityList),
set::width('80px'),
set::required(isset($requiredFields['severity']))
@@ -88,7 +88,7 @@ formBatchPanel
set::name('pri'),
set::label($lang->bug->pri),
set::hidden(zget($visibleFields, 'pri', true, false)),
- set::control(array('type' => 'priPicker', 'required' => true)),
+ set::control(array('control' => 'priPicker', 'required' => true)),
set::items($lang->bug->priList),
set::width('80px'),
set::required(isset($requiredFields['pri']))
@@ -130,7 +130,7 @@ formBatchPanel
(
set::name('plan'),
set::label($lang->bug->plan),
- set::control(array('type' => 'picker', 'required' => false)),
+ set::control(array('control' => 'picker', 'required' => false)),
set::items(array()),
set::width('200px'),
set::required(isset($requiredFields['plan'])),
diff --git a/module/caselib/ui/createcase.html.php b/module/caselib/ui/createcase.html.php
index 7ea7de077a..09db0b8bec 100644
--- a/module/caselib/ui/createcase.html.php
+++ b/module/caselib/ui/createcase.html.php
@@ -130,7 +130,7 @@ formPanel
(
setClass('grow-0'),
set::label($lang->testcase->pri),
- set::control(array('type' => 'priPicker', 'items' => array_filter($lang->testcase->priList), 'required' => true)),
+ set::control(array('control' => 'priPicker', 'items' => array_filter($lang->testcase->priList), 'required' => true)),
set::name('pri'),
set::value('3')
)
@@ -140,7 +140,7 @@ formPanel
formGroup
(
set::label($lang->testcase->precondition),
- set::control(array('type' => 'textarea', 'rows' => 2)),
+ set::control(array('control' => 'textarea', 'rows' => 2)),
set::name('precondition'),
set::value($precondition)
)
diff --git a/module/caselib/ui/exporttemplate.html.php b/module/caselib/ui/exporttemplate.html.php
index acccb7efa6..42a7c93fac 100644
--- a/module/caselib/ui/exporttemplate.html.php
+++ b/module/caselib/ui/exporttemplate.html.php
@@ -29,7 +29,7 @@ formPanel
set::name('encode'),
set::required(true),
set::value('gbk'),
- set::control(array('type' => 'picker', 'items' => $config->charsets[$this->cookie->lang]))
+ set::control(array('control' => 'picker', 'items' => $config->charsets[$this->cookie->lang]))
),
set::actions(array('submit')),
set::submitBtnText($lang->export)
diff --git a/module/custom/ui/set.html.php b/module/custom/ui/set.html.php
index 5b8c1aae51..aa535b8437 100644
--- a/module/custom/ui/set.html.php
+++ b/module/custom/ui/set.html.php
@@ -67,7 +67,7 @@ elseif($module == 'story' && $field == 'reviewRules')
set::label($lang->custom->superReviewers),
set::name('superReviewers'),
set::value($superReviewers),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($users)
);
}
@@ -125,7 +125,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceReview'),
set::value($forceReview),
set::items($users),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
),
formRow
(
@@ -137,7 +137,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceReviewRoles'),
set::value($forceReviewRoles),
set::items($lang->user->roleList),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
)
),
formGroup
@@ -147,7 +147,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceReviewDepts'),
set::value($forceReviewDepts),
set::items($depts),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
)
);
$formItems[] = div
@@ -161,7 +161,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceNotReview'),
set::value($forceNotReview),
set::items($users),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
),
formRow
(
@@ -173,7 +173,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceNotReviewRoles'),
set::value($forceNotReviewRoles),
set::items($lang->user->roleList),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
)
),
formGroup
@@ -183,7 +183,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceNotReviewDepts'),
set::value($forceNotReviewDepts),
set::items($depts),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
)
);
}
@@ -206,7 +206,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceNotReview'),
set::value($forceNotReview),
set::items($users),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
),
icon
(
@@ -236,7 +236,7 @@ elseif(($module == 'story' || $module == 'testcase') && $field == 'review')
set::name('forceReview'),
set::value($forceReview),
set::items($users),
- set::control(array('type' => 'picker', 'multiple' => true))
+ set::control(array('control' => 'picker', 'multiple' => true))
),
icon
(
diff --git a/module/doc/ui/create.html.php b/module/doc/ui/create.html.php
index 0fa486bd09..7095e5436e 100644
--- a/module/doc/ui/create.html.php
+++ b/module/doc/ui/create.html.php
@@ -142,7 +142,7 @@ else
setClass('flex items-center'),
set::label($lang->doc->title),
set::name('showTitle'),
- set::control(array('type' => 'input', 'className' => 'hidden')),
+ set::control(array('control' => 'input', 'className' => 'hidden')),
span(setClass('showTitle'))
),
$projectRow,
diff --git a/module/execution/ui/batchedit.html.php b/module/execution/ui/batchedit.html.php
index 2ef199ef31..60db5c7559 100644
--- a/module/execution/ui/batchedit.html.php
+++ b/module/execution/ui/batchedit.html.php
@@ -64,7 +64,7 @@ formBatchPanel
(
set::name('type'),
set::label($lang->execution->method),
- set::control(array('type' => 'picker', 'required' => true)),
+ set::control(array('control' => 'picker', 'required' => true)),
set::items($lang->execution->typeList),
set::disabled(true),
set::width('100px')
diff --git a/module/gitlab/ui/creategroup.html.php b/module/gitlab/ui/creategroup.html.php
index 2002369a94..0f7fdc4700 100644
--- a/module/gitlab/ui/creategroup.html.php
+++ b/module/gitlab/ui/creategroup.html.php
@@ -66,13 +66,13 @@ formPanel
(
set::label($lang->gitlab->group->permission),
set::name('request_access_enabled'),
- set::control(array('type' => 'checkbox', 'value' => '1', 'text' => $lang->gitlab->group->requestAccessEnabledTip, 'checked' => true))
+ set::control(array('control' => 'checkbox', 'value' => '1', 'text' => $lang->gitlab->group->requestAccessEnabledTip, 'checked' => true))
),
formGroup
(
set::label($lang->gitlab->group->lfsEnabled),
set::name('lfs_enabled'),
- set::control(array('type' => 'checkbox', 'value' => '1' , 'text' => $lang->gitlab->group->lfsEnabledTip, 'checked' => true))
+ set::control(array('control' => 'checkbox', 'value' => '1' , 'text' => $lang->gitlab->group->lfsEnabledTip, 'checked' => true))
),
formGroup
(
diff --git a/module/gitlab/ui/createuser.html.php b/module/gitlab/ui/createuser.html.php
index 4462cab1bf..1552144b6e 100644
--- a/module/gitlab/ui/createuser.html.php
+++ b/module/gitlab/ui/createuser.html.php
@@ -77,21 +77,21 @@ formPanel
(
set::name('can_create_group'),
set::label($lang->gitlab->user->canCreateGroup),
- set::control(array('type' => 'checkbox', 'checked' => true)),
+ set::control(array('control' => 'checkbox', 'checked' => true)),
set::value('1')
),
formGroup
(
set::name('external'),
set::label($lang->gitlab->user->external),
- set::control(array('type' => 'checkbox', 'text' => $lang->gitlab->user->externalTip)),
+ set::control(array('control' => 'checkbox', 'text' => $lang->gitlab->user->externalTip)),
set::value('1')
),
formGroup
(
set::name('avatar'),
set::label($lang->gitlab->user->avatar),
- set::control(array('type' => 'file', 'class' => 'hidden', 'id' => 'files')),
+ set::control(array('control' => 'file', 'class' => 'hidden', 'id' => 'files')),
h::div
(
set::id('avatarUpload'),
diff --git a/module/gitlab/ui/editgroup.html.php b/module/gitlab/ui/editgroup.html.php
index 7d402bd882..2a19b081d3 100644
--- a/module/gitlab/ui/editgroup.html.php
+++ b/module/gitlab/ui/editgroup.html.php
@@ -78,13 +78,13 @@ formPanel
(
set::label($lang->gitlab->group->permission),
set::name('request_access_enabled'),
- set::control(array('type' => 'checkbox', 'value' => '1', 'text' => $lang->gitlab->group->requestAccessEnabledTip, 'checked' => $group->request_access_enabled ? true : false))
+ set::control(array('control' => 'checkbox', 'value' => '1', 'text' => $lang->gitlab->group->requestAccessEnabledTip, 'checked' => $group->request_access_enabled ? true : false))
),
formGroup
(
set::label($lang->gitlab->group->lfsEnabled),
set::name('lfs_enabled'),
- set::control(array('type' => 'checkbox', 'value' => '1' , 'text' => $lang->gitlab->group->lfsEnabledTip, 'checked' => $group->lfs_enabled ? true : false))
+ set::control(array('control' => 'checkbox', 'value' => '1' , 'text' => $lang->gitlab->group->lfsEnabledTip, 'checked' => $group->lfs_enabled ? true : false))
),
formGroup
(
diff --git a/module/gitlab/ui/edituser.html.php b/module/gitlab/ui/edituser.html.php
index bc659608fb..2aa8d3567b 100644
--- a/module/gitlab/ui/edituser.html.php
+++ b/module/gitlab/ui/edituser.html.php
@@ -83,21 +83,21 @@ formPanel
(
set::name('can_create_group'),
set::label($lang->gitlab->user->canCreateGroup),
- set::control(array('type' => 'checkbox', 'checked' => $user->can_create_group ? true : false)),
+ set::control(array('control' => 'checkbox', 'checked' => $user->can_create_group ? true : false)),
set::value('1')
),
formGroup
(
set::name('external'),
set::label($lang->gitlab->user->external),
- set::control(array('type' => 'checkbox', 'text' => $lang->gitlab->user->externalTip, 'checked' => $user->external ? true : false)),
+ set::control(array('control' => 'checkbox', 'text' => $lang->gitlab->user->externalTip, 'checked' => $user->external ? true : false)),
set::value('1')
),
formGroup
(
set::name('avatar'),
set::label($lang->gitlab->user->avatar),
- set::control(array('type' => 'file', 'class' => 'hidden', 'id' => 'files')),
+ set::control(array('control' => 'file', 'class' => 'hidden', 'id' => 'files')),
h::div
(
set::id('avatarUpload'),
diff --git a/module/metric/ui/ajaxgetmultiplemetricbox.html.php b/module/metric/ui/ajaxgetmultiplemetricbox.html.php
index b8d153077c..9fe22476c9 100644
--- a/module/metric/ui/ajaxgetmultiplemetricbox.html.php
+++ b/module/metric/ui/ajaxgetmultiplemetricbox.html.php
@@ -26,7 +26,7 @@ $fnGenerateQueryForm = function() use($metricRecordType, $metric, $metricID, $da
setClass('query-inline picker-nowrap w-40'),
set::label($this->lang->metric->query->scope[$metric->scope]),
set::name('scope_' . $metricID),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($objectPairs),
set::placeholder($this->lang->metric->placeholder->{$metric->scope})
);
diff --git a/module/metric/ui/create.html.php b/module/metric/ui/create.html.php
index 923e31c7af..63d0986c18 100644
--- a/module/metric/ui/create.html.php
+++ b/module/metric/ui/create.html.php
@@ -121,14 +121,14 @@ formPanel
formGroup
(
set::label($lang->metric->desc),
- set::control(array('type' => 'textarea', 'rows' => 3)),
+ set::control(array('control' => 'textarea', 'rows' => 3)),
set::name('desc'),
set::placeholder($lang->metric->descTip)
),
formGroup
(
set::label($lang->metric->definition),
- set::control(array('type' => 'textarea', 'rows' => 3)),
+ set::control(array('control' => 'textarea', 'rows' => 3)),
set::name('definition'),
set::placeholder($lang->metric->definitionTip)
),
@@ -137,7 +137,7 @@ formPanel
set::width('1/2'),
set::name('afterCreate'),
set::label($lang->metric->afterCreate),
- set::control(array('type' => 'radioList', 'inline' => true)),
+ set::control(array('control' => 'radioList', 'inline' => true)),
set::items($lang->metric->afterCreateList),
set::value('implement')
),
diff --git a/module/metric/ui/edit.html.php b/module/metric/ui/edit.html.php
index cb08329311..0a10b40cf1 100644
--- a/module/metric/ui/edit.html.php
+++ b/module/metric/ui/edit.html.php
@@ -18,7 +18,7 @@ $afterEdit = $isDisabled ? '' : formGroup
set::width('1/2'),
set::name('afterEdit'),
set::label($lang->metric->afterCreate),
- set::control(array('type' => 'radioList', 'inline' => true)),
+ set::control(array('control' => 'radioList', 'inline' => true)),
set::items($lang->metric->afterCreateList),
set::value('implement')
);
@@ -146,7 +146,7 @@ formPanel
formGroup
(
set::label($lang->metric->desc),
- set::control(array('type' => 'textarea', 'rows' => 3)),
+ set::control(array('control' => 'textarea', 'rows' => 3)),
set::name('desc'),
set::value($metric->desc),
set::placeholder($lang->metric->descTip)
@@ -154,7 +154,7 @@ formPanel
formGroup
(
set::label($lang->metric->definition),
- set::control(array('type' => 'textarea', 'rows' => 3)),
+ set::control(array('control' => 'textarea', 'rows' => 3)),
set::name('definition'),
set::value($metric->definition),
set::placeholder($lang->metric->definitionTip),
diff --git a/module/metric/ui/previewmultiple.html.php b/module/metric/ui/previewmultiple.html.php
index 3764a08408..c41991080c 100644
--- a/module/metric/ui/previewmultiple.html.php
+++ b/module/metric/ui/previewmultiple.html.php
@@ -155,7 +155,7 @@ $fnGenerateQueryForm = function() use($metricRecordType, $current, $dateLabels,
setClass('query-inline picker-nowrap w-40'),
set::label($this->lang->metric->query->scope[$current->scope]),
set::name('scope_' . $current->id),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($objectPairs),
set::placeholder($this->lang->metric->placeholder->{$current->scope})
);
diff --git a/module/metric/ui/previewsingle.html.php b/module/metric/ui/previewsingle.html.php
index dd28f42bcf..905eccffc2 100644
--- a/module/metric/ui/previewsingle.html.php
+++ b/module/metric/ui/previewsingle.html.php
@@ -150,7 +150,7 @@ $fnGenerateQueryForm = function() use($metricRecordType, $current, $dateLabels,
(
setClass('query-inline picker-nowrap w-40'),
set::name('scope'),
- set::control(array('type' => 'picker', 'multiple' => true)),
+ set::control(array('control' => 'picker', 'multiple' => true)),
set::items($objectPairs),
set::placeholder($this->lang->metric->placeholder->{$current->scope})
);
diff --git a/module/mr/ui/create.html.php b/module/mr/ui/create.html.php
index fc8cb79190..525ccd9f4d 100644
--- a/module/mr/ui/create.html.php
+++ b/module/mr/ui/create.html.php
@@ -120,19 +120,19 @@ formPanel
set::label($lang->mr->submitType),
set::name('needCI'),
set::width('270px'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->needCI, 'value' => '1')),
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->needCI, 'value' => '1')),
on::change('onNeedCiChange')
),
formGroup
(
set::name('removeSourceBranch'),
set::width('150px'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->removeSourceBranch, 'value' => '1'))
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->removeSourceBranch, 'value' => '1'))
),
formGroup
(
set::name('squash'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->squash, 'value' => '1'))
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->squash, 'value' => '1'))
)
),
formGroup
diff --git a/module/mr/ui/edit.html.php b/module/mr/ui/edit.html.php
index 04978c21f8..bce587a97d 100644
--- a/module/mr/ui/edit.html.php
+++ b/module/mr/ui/edit.html.php
@@ -93,20 +93,20 @@ formPanel
set::label($lang->mr->submitType),
set::name('needCI'),
set::width('270px'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->needCI, 'value' => '1', 'checked' => $MR->needCI == '1')),
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->needCI, 'value' => '1', 'checked' => $MR->needCI == '1')),
on::change('onNeedCiChange')
),
formGroup
(
set::name('removeSourceBranch'),
set::width('150px'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->removeSourceBranch, 'value' => '1', 'checked' => $MR->canDeleteBranch && $MR->removeSourceBranch == '1')),
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->removeSourceBranch, 'value' => '1', 'checked' => $MR->canDeleteBranch && $MR->removeSourceBranch == '1')),
set::disabled(!$MR->canDeleteBranch)
),
formGroup
(
set::name('squash'),
- set::control(array('type' => 'checkbox', 'text' => $lang->mr->squash, 'value' => '1', 'checked' => $MR->squash == '1'))
+ set::control(array('control' => 'checkbox', 'text' => $lang->mr->squash, 'value' => '1', 'checked' => $MR->squash == '1'))
)
),
formRow
diff --git a/module/product/ui/manageline.html.php b/module/product/ui/manageline.html.php
index 0d325621cc..8dc8b3e5ea 100644
--- a/module/product/ui/manageline.html.php
+++ b/module/product/ui/manageline.html.php
@@ -64,7 +64,7 @@ foreach($lines as $line)
formGroup
(
set::width(in_array($this->config->systemMode, array('ALM', 'PLM')) ? '1/2' : 'full'),
- set::control(array('type' => 'text', 'id' => "modules_id{$line->id}")),
+ set::control(array('control' => 'text', 'id' => "modules_id{$line->id}")),
set::name("modules[id$line->id]"),
set::value($line->name)
),
@@ -72,7 +72,7 @@ foreach($lines as $line)
(
set::width('1/2'),
set::className('ml-4'),
- set::control(array('type' => 'picker', 'id' => "programs_id{$line->id}")),
+ set::control(array('control' => 'picker', 'id' => "programs_id{$line->id}")),
set::name("programs[id$line->id]"),
set::items($programs),
set::value($line->root)
@@ -93,14 +93,14 @@ for($i = 0; $i <= 5; $i ++)
formGroup
(
set::width(in_array($this->config->systemMode, array('ALM', 'PLM')) ? '1/2' : 'full'),
- set::control(array('type' => 'text', 'id' => "modules_{$i}")),
+ set::control(array('control' => 'text', 'id' => "modules_{$i}")),
set::name("modules[$i]")
),
in_array($this->config->systemMode, array('ALM', 'PLM')) ? formGroup
(
set::width('1/2'),
set::className('ml-4'),
- set::control(array('type' => 'picker', 'id' => "programs_{$i}")),
+ set::control(array('control' => 'picker', 'id' => "programs_{$i}")),
set::name("programs[$i]"),
set::items($programs)
) : null
diff --git a/module/repo/ui/create.html.php b/module/repo/ui/create.html.php
index 114346910c..da34b196f9 100644
--- a/module/repo/ui/create.html.php
+++ b/module/repo/ui/create.html.php
@@ -43,7 +43,7 @@ formPanel
set::name("product[]"),
set::label($lang->story->product),
set::required(true),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($products),
set::value(empty($objectID) ? '' : implode(',', array_keys($products)))
)
@@ -53,7 +53,7 @@ formPanel
set::width('1/2'),
set::name("projects[]"),
set::label($lang->repo->projects),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($projects),
set::value(empty($relatedProjects) ? '' : implode(',', array_values($relatedProjects)))
),
diff --git a/module/repo/ui/createrepo.html.php b/module/repo/ui/createrepo.html.php
index 1b6c5e551d..34389fa505 100644
--- a/module/repo/ui/createrepo.html.php
+++ b/module/repo/ui/createrepo.html.php
@@ -43,7 +43,7 @@ formPanel
set::name("product[]"),
set::label($lang->story->product),
set::required(true),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($products),
set::value(empty($objectID) ? '' : implode(',', array_keys($products)))
)
@@ -53,7 +53,7 @@ formPanel
set::width('1/2'),
set::name("projects[]"),
set::label($lang->repo->projects),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($projects),
set::value(empty($relatedProjects) ? '' : implode(',', array_values($relatedProjects)))
),
diff --git a/module/repo/ui/edit.html.php b/module/repo/ui/edit.html.php
index a350c3e43a..e93ee510d4 100644
--- a/module/repo/ui/edit.html.php
+++ b/module/repo/ui/edit.html.php
@@ -31,7 +31,7 @@ formPanel
set::name("product[]"),
set::label($lang->story->product),
set::required(true),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($products),
set::value($repo->product)
),
@@ -40,7 +40,7 @@ formPanel
set::width('1/2'),
set::name("projects[]"),
set::label($lang->repo->projects),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::items($relatedProjects),
set::value($repo->projects)
),
diff --git a/module/stakeholder/ui/create.html.php b/module/stakeholder/ui/create.html.php
index 44613b5ae7..4e7c6beca7 100644
--- a/module/stakeholder/ui/create.html.php
+++ b/module/stakeholder/ui/create.html.php
@@ -163,17 +163,17 @@ formPanel
formGroup
(
set::label($lang->stakeholder->nature),
- set::control(array('name' => 'nature', 'type' => 'editor'))
+ set::control(array('name' => 'nature', 'control' => 'editor'))
),
formGroup
(
set::label($lang->stakeholder->analysis),
- set::control(array('name' => 'analysis', 'type' => 'editor'))
+ set::control(array('name' => 'analysis', 'control' => 'editor'))
),
formGroup
(
set::label($lang->stakeholder->strategy),
- set::control(array('name' => 'strategy', 'type' => 'editor'))
+ set::control(array('name' => 'strategy', 'control' => 'editor'))
)
);
diff --git a/module/stakeholder/ui/edit.html.php b/module/stakeholder/ui/edit.html.php
index 60fe665e5f..fab3a3aab9 100644
--- a/module/stakeholder/ui/edit.html.php
+++ b/module/stakeholder/ui/edit.html.php
@@ -67,7 +67,7 @@ formPanel
setClass('user-info'),
set::label($lang->stakeholder->company),
set::name('company'),
- set::control(array('type' => 'picker', 'items' => $companys)),
+ set::control(array('control' => 'picker', 'items' => $companys)),
set::value($stakeholder->company)
) : null,
formGroup
diff --git a/module/system/ui/editdomain.html.php b/module/system/ui/editdomain.html.php
index c3024e5667..53835bfd30 100644
--- a/module/system/ui/editdomain.html.php
+++ b/module/system/ui/editdomain.html.php
@@ -53,7 +53,7 @@ formPanel
(
set::label(''),
set::name('https[]'),
- set::control(array('type' => 'checkbox', 'text' => $lang->system->domain->uploadCert, 'value' => 'true')),
+ set::control(array('control' => 'checkbox', 'text' => $lang->system->domain->uploadCert, 'value' => 'true')),
on::change('onHttpsChange')
),
formGroup
diff --git a/module/task/ui/recordworkhour.html.php b/module/task/ui/recordworkhour.html.php
index 86cbef3040..2890b0fbc5 100644
--- a/module/task/ui/recordworkhour.html.php
+++ b/module/task/ui/recordworkhour.html.php
@@ -182,7 +182,7 @@ else
set::name('date'),
set::label($lang->task->date),
set::width('120px'),
- set::control(array('type' => 'date', 'id' => '$GID')),
+ set::control(array('control' => 'date', 'id' => '$GID')),
set::value(helper::today())
),
formBatchItem
diff --git a/module/todo/ui/batchcreate.html.php b/module/todo/ui/batchcreate.html.php
index 82107009b0..bee084d187 100644
--- a/module/todo/ui/batchcreate.html.php
+++ b/module/todo/ui/batchcreate.html.php
@@ -127,7 +127,7 @@ formBatchPanel
set::name('type'),
set::label($lang->todo->type),
set::width('120px'),
- set::control(array('type' => 'picker', 'required' => true)),
+ set::control(array('control' => 'picker', 'required' => true)),
set::value('custom'),
set::items($lang->todo->typeList)
),
@@ -151,7 +151,7 @@ formBatchPanel
set::value($app->user->account),
set::ditto(true),
set::width('140px'),
- set::control(array('type' => 'picker', 'required' => true)),
+ set::control(array('control' => 'picker', 'required' => true)),
set::items($users)
),
formBatchItem
@@ -159,7 +159,7 @@ formBatchPanel
set::name('pri'),
set::label($lang->todo->pri),
set::width('80px'),
- set::control(array('type' => 'priPicker', 'required' => true)),
+ set::control(array('control' => 'priPicker', 'required' => true)),
set::value('3'),
set::items($lang->todo->priList)
),
diff --git a/module/todo/ui/edit.html.php b/module/todo/ui/edit.html.php
index 16198d1f9b..7ccb994c90 100644
--- a/module/todo/ui/edit.html.php
+++ b/module/todo/ui/edit.html.php
@@ -503,7 +503,7 @@ formPanel
(
set::width('1/3'),
set::label($lang->todo->status),
- set::control(array('type' => 'picker', 'id' => 'status', 'name' => 'status', 'items' => $lang->todo->statusList, 'value' => $todo->status))
+ set::control(array('control' => 'picker', 'id' => 'status', 'name' => 'status', 'items' => $lang->todo->statusList, 'value' => $todo->status))
),
formRow
(
diff --git a/module/user/ui/create.html.php b/module/user/ui/create.html.php
index 7cbeecab51..fc1b9b9dc1 100644
--- a/module/user/ui/create.html.php
+++ b/module/user/ui/create.html.php
@@ -169,7 +169,7 @@ formPanel
(
set::width('1/2'),
set::label($lang->user->group),
- set::control(array("type" => "picker","multiple" => true)),
+ set::control(array("control" => "picker","multiple" => true)),
set::name('group[]'),
set::items($groupList),
set::placeholder($lang->user->placeholder->group)
diff --git a/module/user/ui/login.html.php b/module/user/ui/login.html.php
index c9cea2f447..79abe20a6d 100644
--- a/module/user/ui/login.html.php
+++ b/module/user/ui/login.html.php
@@ -122,7 +122,7 @@ div
(
set::width('full'),
set::label($lang->user->account),
- set::control(array('type' => 'input', 'name' => 'account', 'id' => 'account'))
+ set::control(array('control' => 'input', 'name' => 'account', 'id' => 'account'))
),
formGroup
(
@@ -148,7 +148,7 @@ div
(
setID('loginOptions'),
set::width('full'),
- set::control(array('type' => 'checkList', 'items' => $lang->user->keepLogin, 'name' => 'keepLogin', 'value' => $keepLogin)),
+ set::control(array('control' => 'checkList', 'items' => $lang->user->keepLogin, 'name' => 'keepLogin', 'value' => $keepLogin)),
a(
set('href', $resetLink),
set('class', 'resetPassword'),
From 5c31ced93a31298ed43e05f4956f9020569b8c07 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Thu, 29 Feb 2024 13:54:48 +0800
Subject: [PATCH 006/276] * Replace `control(array('type' => 'xxx'))` to
`control(array('control' => 'xxx'))`.
---
module/bug/ui/batchcreate.html.php | 4 ++--
module/product/ui/batchedit.html.php | 2 +-
module/product/ui/common.field.php | 4 ++--
module/repo/ui/import.html.php | 4 ++--
module/story/config/form.php | 6 +++---
module/task/ui/create.field.php | 4 ++--
module/testcase/config/table.php | 4 ++--
module/testcase/ui/batchcreate.html.php | 4 ++--
module/testcase/ui/batchedit.html.php | 10 +++++-----
module/testcase/ui/create.field.php | 2 +-
module/user/config/form.php | 4 ++--
11 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/module/bug/ui/batchcreate.html.php b/module/bug/ui/batchcreate.html.php
index b09a2e0d07..ef42d4223a 100644
--- a/module/bug/ui/batchcreate.html.php
+++ b/module/bug/ui/batchcreate.html.php
@@ -83,10 +83,10 @@ $items[] = array('name' => 'steps', 'label' => $lang->bug->steps, 'width' => '24
$items[] = array('name' => 'type', 'label' => $lang->typeAB, 'control' => 'picker', 'items' => $lang->bug->typeList, 'value' => '', 'width' => '160px', 'required' => isset($requiredFields['type']), 'ditto' => true);
/* Field of pri. */
-$items[] = array('name' => 'pri', 'label' => $lang->bug->pri, 'control' => array('type' => 'priPicker', 'required' => true), 'items' => $lang->bug->priList, 'value' => 3, 'width' => '100px', 'required' => isset($requiredFields['pri']), 'ditto' => true);
+$items[] = array('name' => 'pri', 'label' => $lang->bug->pri, 'control' => array('control' => 'priPicker', 'required' => true), 'items' => $lang->bug->priList, 'value' => 3, 'width' => '100px', 'required' => isset($requiredFields['pri']), 'ditto' => true);
/* Field of severity. */
-$items[] = array('name' => 'severity', 'label' => $lang->bug->severity, 'control' => array('type' => 'severityPicker', 'required' => true), 'items' => $lang->bug->severityList, 'value' => 3, 'width' => '80px', 'required' => isset($requiredFields['severity']));
+$items[] = array('name' => 'severity', 'label' => $lang->bug->severity, 'control' => array('control' => 'severityPicker', 'required' => true), 'items' => $lang->bug->severityList, 'value' => 3, 'width' => '80px', 'required' => isset($requiredFields['severity']));
/* Field of os. */
$items[] = array('name' => 'os', 'label' => $lang->bug->os, 'control' => 'picker', 'items' => $lang->bug->osList, 'width' => '200px', 'multiple' => true, 'required' => isset($requiredFields['os']));
diff --git a/module/product/ui/batchedit.html.php b/module/product/ui/batchedit.html.php
index 1241b5831c..8c84337a27 100644
--- a/module/product/ui/batchedit.html.php
+++ b/module/product/ui/batchedit.html.php
@@ -19,7 +19,7 @@ foreach($fields as $fieldName => $field)
$items[$fieldName] = array('name' => $fieldName, 'label' => $field['title'], 'control' => $field['control'], 'width' => $field['width'], 'required' => $field['required'], 'items' => zget($field, 'options', array()));
if($items[$fieldName]['control'] == 'select') $items[$fieldName]['control'] = 'picker';
}
-$items['acl']['control'] = array('type' => $items['acl']['control'], 'inline' => true);
+$items['acl']['control'] = array('control' => $items['acl']['control'], 'inline' => true);
$extendFields = $this->product->getFlowExtendFields();
foreach($extendFields as $extendField)
diff --git a/module/product/ui/common.field.php b/module/product/ui/common.field.php
index d436f09f3b..496d53d044 100644
--- a/module/product/ui/common.field.php
+++ b/module/product/ui/common.field.php
@@ -21,7 +21,7 @@ if($config->systemMode != 'light')
$fields->field('name')->wrapBefore()->required()->control('input');
$fields->field('type')
- ->control(array('type' => 'picker', 'required' => true))
+ ->control(array('control' => 'picker', 'required' => true))
->items(data('fields.type.options'))
->value(data('fields.type.default'));
@@ -55,4 +55,4 @@ $fields->field('desc')
$fields->field('acl')
->width('full')
- ->control(array('type' => 'aclBox', 'aclItems' => data('fields.acl.options'), 'aclValue' => data('fields.acl.default'),'whitelistLabel' => $lang->product->whitelist, 'aclValue' => data('fields.acl.default'), 'userValue' => data('fields.whitelist.default')));
+ ->control(array('control' => 'aclBox', 'aclItems' => data('fields.acl.options'), 'aclValue' => data('fields.acl.default'),'whitelistLabel' => $lang->product->whitelist, 'aclValue' => data('fields.acl.default'), 'userValue' => data('fields.whitelist.default')));
diff --git a/module/repo/ui/import.html.php b/module/repo/ui/import.html.php
index c528b95278..0b6962fac6 100644
--- a/module/repo/ui/import.html.php
+++ b/module/repo/ui/import.html.php
@@ -15,8 +15,8 @@ $items[] = array('name' => 'no', 'label' => $lang->user->abbr->id, 'control' =>
$items[] = array('name' => 'serviceProject', 'label' => '', 'hidden' => true);
$items[] = array('name' => 'name_with_namespace', 'label' => $lang->repo->repo, 'control' => 'static', 'width' => '264px');
$items[] = array('name' => 'name', 'label' => $lang->repo->importName);
-$items[] = array('name' => 'product', 'label' => $lang->repo->product, 'control' => array('type' => 'picker', 'multiple' => true), 'items' => $products);
-$items[] = array('name' => 'projects', 'label' => $lang->repo->projects, 'control' => array('type' => 'picker', 'multiple' => true), 'items' => $projects);
+$items[] = array('name' => 'product', 'label' => $lang->repo->product, 'control' => array('control' => 'picker', 'multiple' => true), 'items' => $products);
+$items[] = array('name' => 'projects', 'label' => $lang->repo->projects, 'control' => array('control' => 'picker', 'multiple' => true), 'items' => $projects);
$no = 1;
foreach($repoList as $repo)
diff --git a/module/story/config/form.php b/module/story/config/form.php
index e2a98cecf2..c4c88f77dd 100644
--- a/module/story/config/form.php
+++ b/module/story/config/form.php
@@ -90,13 +90,13 @@ $config->story->form->batchCreate['mailto'] = array('ditto' => false, 'type'
$config->story->form->batchEdit = array();
$config->story->form->batchEdit['branch'] = array('type' => 'int', 'width' => '200px', 'control' => 'picker', 'required' => false, 'default' => 0, 'options' => array());
-$config->story->form->batchEdit['module'] = array('type' => 'int', 'width' => '200px', 'control' => array('type' => 'picker', 'required' => true), 'required' => false, 'default' => 0, 'options' => array());
+$config->story->form->batchEdit['module'] = array('type' => 'int', 'width' => '200px', 'control' => array('control' => 'picker', 'required' => true), 'required' => false, 'default' => 0, 'options' => array());
$config->story->form->batchEdit['plan'] = array('type' => 'int', 'width' => '200px', 'control' => 'picker', 'required' => false, 'default' => 0, 'options' => array());
-$config->story->form->batchEdit['title'] = array('type' => 'string', 'width' => '240px', 'control' => array('type' => 'colorInput', 'inputClass' => 'filter-none'), 'required' => true, 'filter' => 'trim', 'base' => true);
+$config->story->form->batchEdit['title'] = array('type' => 'string', 'width' => '240px', 'control' => array('control' => 'colorInput', 'inputClass' => 'filter-none'), 'required' => true, 'filter' => 'trim', 'base' => true);
$config->story->form->batchEdit['color'] = array('type' => 'string', 'control' => 'color', 'required' => false, 'default' => '', 'filter' => 'trim');
$config->story->form->batchEdit['estimate'] = array('type' => 'float', 'width' => '76px', 'control' => 'text', 'required' => false, 'default' => '0');
$config->story->form->batchEdit['category'] = array('type' => 'string', 'width' => '160px', 'control' => 'picker', 'required' => false, 'default' => 'feature', 'options' => array_filter($lang->story->categoryList));
-$config->story->form->batchEdit['pri'] = array('type' => 'string', 'width' => '92px', 'control' => array('type' => 'picker', 'required' => true), 'required' => false, 'default' => $config->story->defaultPriority, 'options' => array_filter($lang->story->priList));
+$config->story->form->batchEdit['pri'] = array('type' => 'string', 'width' => '92px', 'control' => array('control' => 'picker', 'required' => true), 'required' => false, 'default' => $config->story->defaultPriority, 'options' => array_filter($lang->story->priList));
$config->story->form->batchEdit['assignedTo'] = array('type' => 'string', 'width' => '136px', 'control' => 'picker', 'required' => false, 'default' => '', 'options' => 'users');
$config->story->form->batchEdit['source'] = array('type' => 'string', 'width' => '160px', 'control' => 'picker', 'required' => false, 'default' => '', 'options' => array_filter($lang->story->sourceList));
$config->story->form->batchEdit['sourceNote'] = array('type' => 'string', 'width' => '200px', 'control' => 'text', 'required' => false, 'default' => '', 'filter' => 'trim');
diff --git a/module/task/ui/create.field.php b/module/task/ui/create.field.php
index e9bbdc34be..bd1b79cac6 100644
--- a/module/task/ui/create.field.php
+++ b/module/task/ui/create.field.php
@@ -7,7 +7,7 @@ $fields = defineFieldList('task.create', 'task');
/* Set module field. */
$fields->field('module')
->checkbox(array('text' => $lang->task->allModule, 'name' => 'isShowAllModule', 'checked' => data('showAllModule')))
- ->control(array('type' => 'picker', 'required' => true))
+ ->control(array('control' => 'picker', 'required' => true))
->items(data('modulePairs'))
->value(data('task.module'));
@@ -182,7 +182,7 @@ if(!isAjaxRequest('modal'))
$fields->field('after')
->label($lang->task->afterSubmit)
->width('full')
- ->control(array('type' => 'radioList', 'inline' => true))
+ ->control(array('control' => 'radioList', 'inline' => true))
->value(data('task.id') ? 'continueAdding' : 'toTaskList')
->items(empty(data('features.story')) ? array('toTaskList' => $lang->task->afterChoices['toTaskList']) : $config->task->afterOptions);
}
diff --git a/module/testcase/config/table.php b/module/testcase/config/table.php
index 1cf6e1e9a4..f25c57ca19 100644
--- a/module/testcase/config/table.php
+++ b/module/testcase/config/table.php
@@ -265,7 +265,7 @@ $config->testcase->importfromlib->dtable->fieldList['id']['fixed'] = false;
$config->testcase->importfromlib->dtable->fieldList['branch']['name'] = 'branch';
$config->testcase->importfromlib->dtable->fieldList['branch']['title'] = $lang->testcase->branch;
$config->testcase->importfromlib->dtable->fieldList['branch']['type'] = 'control';
-$config->testcase->importfromlib->dtable->fieldList['branch']['control'] = array('type' => 'picker', 'props' => array('required' => true));
+$config->testcase->importfromlib->dtable->fieldList['branch']['control'] = array('control' => 'picker', 'props' => array('required' => true));
$config->testcase->importfromlib->dtable->fieldList['branch']['width'] = '200px';
$config->testcase->importfromlib->dtable->fieldList['pri']['name'] = 'pri';
@@ -286,7 +286,7 @@ $config->testcase->importfromlib->dtable->fieldList['fromModule']['type'] = 'ca
$config->testcase->importfromlib->dtable->fieldList['module']['name'] = 'module';
$config->testcase->importfromlib->dtable->fieldList['module']['title'] = $lang->testcase->module;
$config->testcase->importfromlib->dtable->fieldList['module']['type'] = 'control';
-$config->testcase->importfromlib->dtable->fieldList['module']['control'] = array('type' => 'picker', 'props' => "RAWJSRAWJS");
+$config->testcase->importfromlib->dtable->fieldList['module']['control'] = array('control' => 'picker', 'props' => "RAWJSRAWJS");
$config->testcase->importfromlib->dtable->fieldList['module']['width'] = '200px';
$config->testcase->importfromlib->dtable->fieldList['type']['name'] = 'type';
diff --git a/module/testcase/ui/batchcreate.html.php b/module/testcase/ui/batchcreate.html.php
index 455d095edf..97f1d049bb 100644
--- a/module/testcase/ui/batchcreate.html.php
+++ b/module/testcase/ui/batchcreate.html.php
@@ -63,7 +63,7 @@ $items[] = array
'name' => 'module',
'label' => $lang->testcase->module,
'hidden' => zget($visibleFields, 'module', true, false),
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => $moduleOptionMenu,
'value' => $currentModuleID,
'width' => '200px',
@@ -77,7 +77,7 @@ $items[] = array
'name' => 'scene',
'label' => $lang->testcase->scene,
'hidden' => zget($visibleFields, 'scene', true, false),
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => $sceneOptionMenu,
'value' => $currentSceneID,
'width' => '200px',
diff --git a/module/testcase/ui/batchedit.html.php b/module/testcase/ui/batchedit.html.php
index 54e6c352ce..0dfba1eedc 100644
--- a/module/testcase/ui/batchedit.html.php
+++ b/module/testcase/ui/batchedit.html.php
@@ -65,7 +65,7 @@ else
'name' => 'pri',
'label' => $lang->priAB,
'width' => '100px',
- 'control' => array('type' => 'priPicker', 'required' => true),
+ 'control' => array('control' => 'priPicker', 'required' => true),
'items' => $lang->testcase->priList,
'ditto' => true,
'hidden' => !isset($visibleFields['pri']),
@@ -77,7 +77,7 @@ else
'name' => 'status',
'label' => $lang->statusAB,
'width' => '120px',
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => $lang->testcase->statusList,
'hidden' => !isset($visibleFields['status']),
'required' => isset($requiredFields['status'])
@@ -96,7 +96,7 @@ else
'name' => 'module',
'label' => $lang->testcase->module,
'width' => '180px',
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => array(),
'hidden' => !isset($visibleFields['module']),
'required' => isset($requiredFields['module'])
@@ -106,7 +106,7 @@ else
'name' => 'scene',
'label' => $lang->testcase->scene,
'width' => '180px',
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => array(),
'hidden' => ($isLibCase || !isset($visibleFields['scene'])),
'required' => isset($requiredFields['scene'])
@@ -136,7 +136,7 @@ else
'name' => 'type',
'label' => $lang->testcase->type,
'width' => '140px',
- 'control' => array('type' => 'picker', 'required' => true),
+ 'control' => array('control' => 'picker', 'required' => true),
'items' => $lang->testcase->typeList,
'ditto' => true,
'required' => isset($requiredFields['type']),
diff --git a/module/testcase/ui/create.field.php b/module/testcase/ui/create.field.php
index 8a9d133ed9..4784be5c81 100644
--- a/module/testcase/ui/create.field.php
+++ b/module/testcase/ui/create.field.php
@@ -29,7 +29,7 @@ $fields->field('story')
->itemBegin()->control('btn', array('url' => helper::createLink('story', 'view', 'storyID=' . data('case.story')), 'data-toggle' => 'modal', 'data-size' => 'lg'))->className('hidden', empty(data('case.story')))->icon('eye text-primary')->hint($lang->preview)->id('preview')->itemEnd();
$fields->field('scene')
- ->control(array('type' => 'picker', 'required' => true))
+ ->control(array('control' => 'picker', 'required' => true))
->items(data('sceneOptionMenu'))
->value(data('currentSceneID'));
diff --git a/module/user/config/form.php b/module/user/config/form.php
index c4bcca43af..1a0e2b45fa 100644
--- a/module/user/config/form.php
+++ b/module/user/config/form.php
@@ -81,14 +81,14 @@ $config->user->form->edit['passwordLength'] = array('required' => false, 'type
$config->user->form->edit['passwordStrength'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->user->form->batchEdit = array();
-$config->user->form->batchEdit['dept'] = array('required' => false, 'type' => 'int', 'width' => '200px', 'name' => 'dept', 'label' => $lang->user->dept, 'control' => array('type' => 'picker', 'required' => true), 'default' => 0, 'ditto' => true);
+$config->user->form->batchEdit['dept'] = array('required' => false, 'type' => 'int', 'width' => '200px', 'name' => 'dept', 'label' => $lang->user->dept, 'control' => array('control' => 'picker', 'required' => true), 'default' => 0, 'ditto' => true);
$config->user->form->batchEdit['company'] = array('required' => false, 'type' => 'int', 'width' => '200px', 'name' => 'company', 'label' => $lang->user->company, 'control' => 'picker', 'default' => 0);
$config->user->form->batchEdit['account'] = array('required' => true, 'type' => 'string', 'width' => '140px', 'name' => 'account', 'label' => $lang->user->account, 'control' => 'text', 'default' => '', 'readonly' => true, 'base' => true);
$config->user->form->batchEdit['realname'] = array('required' => true, 'type' => 'string', 'width' => '96px', 'name' => 'realname', 'label' => $lang->user->realname, 'control' => 'text', 'default' => '');
$config->user->form->batchEdit['visions'] = array('required' => true, 'type' => 'array', 'width' => '240px', 'name' => 'visions', 'label' => $lang->user->visions, 'control' => 'picker', 'default' => [], 'multiple' => true, 'filter' => 'join');
$config->user->form->batchEdit['role'] = array('required' => false, 'type' => 'string', 'width' => '160px', 'name' => 'role', 'label' => $lang->user->role, 'control' => 'picker', 'default' => '', 'ditto' => true, 'items' => $lang->user->roleList);
$config->user->form->batchEdit['email'] = array('required' => false, 'type' => 'string', 'width' => '160px', 'name' => 'email', 'label' => $lang->user->email, 'control' => 'text', 'default' => '');
-$config->user->form->batchEdit['gender'] = array('required' => false, 'type' => 'string', 'width' => '100px', 'name' => 'gender', 'label' => $lang->user->gender, 'control' => array('type' => 'radioList', 'inline' => true), 'default' => 'm', 'items' => $lang->user->genderList);
+$config->user->form->batchEdit['gender'] = array('required' => false, 'type' => 'string', 'width' => '100px', 'name' => 'gender', 'label' => $lang->user->gender, 'control' => array('control' => 'radioList', 'inline' => true), 'default' => 'm', 'items' => $lang->user->genderList);
$config->user->form->batchEdit['commiter'] = array('required' => false, 'type' => 'string', 'width' => '120px', 'name' => 'commiter', 'label' => $lang->user->commiter, 'control' => 'text', 'default' => '');
$config->user->form->batchEdit['join'] = array('required' => false, 'type' => 'date', 'width' => '120px', 'name' => 'join', 'label' => $lang->user->join, 'control' => 'date', 'default' => '');
$config->user->form->batchEdit['mobile'] = array('required' => false, 'type' => 'string', 'width' => '120px', 'name' => 'mobile', 'label' => $lang->user->mobile, 'control' => 'text', 'default' => '');
From c25150bdf3e9a17accc5957e201d8e88039e67aa Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 15:15:57 +0800
Subject: [PATCH 007/276] * Adjust language check script.
---
misc/check.php | 263 +++++++++++++++++++++++++++++++++----------------
1 file changed, 179 insertions(+), 84 deletions(-)
diff --git a/misc/check.php b/misc/check.php
index 73f410b449..b4f6e9e0d5 100755
--- a/misc/check.php
+++ b/misc/check.php
@@ -17,68 +17,159 @@ $config->systemScore = true;
/* set module root path and included the resource of group module. */
$lang = new stdclass();
-$lang->index = new stdclass();
-$lang->my = new stdclass();
-$lang->personnel = new stdclass();
-$lang->program = new stdclass();
-$lang->project = new stdclass();
+$lang->common = new stdclass();
+$lang->index = new stdclass();
+$lang->my = new stdclass();
+$lang->todo = new stdclass();
+$lang->block = new stdclass();
+$lang->program = new stdclass();
+$lang->programplan = new stdclass();
+$lang->product = new stdclass();
+$lang->project = new stdclass();
+$lang->design = new stdclass();
+$lang->stage = new stdclass();
+$lang->scrum = new stdclass();
+$lang->waterfall = new stdclass();
+$lang->execution = new stdclass();
+$lang->kanban = new stdclass();
+$lang->story = new stdclass();
+$lang->requirement = new stdclass();
+$lang->release = new stdclass();
+$lang->branch = new stdclass();
+$lang->productplan = new stdclass();
+$lang->review = new stdclass();
+$lang->milestone = new stdclass();
+$lang->qa = new stdclass();
+$lang->doc = new stdclass();
+$lang->system = new stdclass();
+$lang->testcase = new stdclass();
+$lang->testtask = new stdclass();
+$lang->testreport = new stdclass();
+$lang->score = new stdclass();
+$lang->auditplan = new stdclass();
+$lang->cm = new stdclass();
+$lang->nc = new stdclass();
+$lang->pssp = new stdclass();
+$lang->stakeholder = new stdclass();
+$lang->task = new stdclass();
+$lang->build = new stdclass();
+$lang->bug = new stdclass();
+$lang->company = new stdclass();
+$lang->dept = new stdclass();
+$lang->group = new stdclass();
+$lang->user = new stdclass();
+$lang->bi = new stdclass();
+$lang->screen = new stdclass();
+$lang->pivot = new stdclass();
+$lang->chart = new stdclass();
+$lang->report = new stdclass();
+$lang->repo = new stdclass();
+$lang->jenkins = new stdclass();
+$lang->gitlab = new stdclass();
+$lang->gitea = new stdclass();
+$lang->gogs = new stdclass();
+$lang->mr = new stdclass();
+$lang->compile = new stdclass();
+$lang->job = new stdclass();
+$lang->svn = new stdclass();
+$lang->git = new stdclass();
+$lang->subject = new stdclass();
+$lang->admin = new stdclass();
+$lang->convert = new stdclass();
+$lang->upgrade = new stdclass();
+$lang->action = new stdclass();
+$lang->backup = new stdclass();
+$lang->extension = new stdclass();
+$lang->custom = new stdclass();
+$lang->mail = new stdclass();
+$lang->cron = new stdclass();
+$lang->dev = new stdclass();
+$lang->editor = new stdclass();
+$lang->entry = new stdclass();
+$lang->webhook = new stdclass();
+$lang->message = new stdclass();
+$lang->search = new stdclass();
+$lang->devops = new stdclass();
+$lang->team = new stdclass();
+$lang->automation = new stdclass();
+$lang->personnel = new stdclass();
+$lang->testsuite = new stdclass();
+$lang->caselib = new stdclass();
+$lang->ci = new stdclass();
+$lang->datatable = new stdclass();
+$lang->tree = new stdclass();
+$lang->api = new stdclass();
+$lang->file = new stdclass();
+$lang->misc = new stdclass();
+$lang->acl = new stdclass();
+$lang->curd = new stdclass();
+$lang->sonarqube = new stdclass();
+$lang->app = new stdclass();
+$lang->host = new stdclass();
+$lang->zahost = new stdclass();
+$lang->zanode = new stdclass();
+$lang->holiday = new stdclass();
+$lang->contact = new stdclass();
+$lang->dimension = new stdclass();
+$lang->space = new stdclass();
+$lang->store = new stdclass();
+$lang->instance = new stdclass();
+$lang->CNE = new stdclass();
+$lang->account = new stdclass();
+$lang->ops = new stdclass();
+$lang->domain = new stdclass();
+$lang->service = new stdclass();
+$lang->deploy = new stdclass();
+$lang->metric = new stdclass();
+$lang->ai = new stdclass();
+$lang->aiapp = new stdclass();
+$lang->serverroom = new stdclass();
+$lang->programstakeholder = new stdclass();
+$lang->researchplan = new stdclass();
+$lang->workestimation = new stdclass();
+$lang->gapanalysis = new stdclass();
+$lang->executionview = new stdclass();
+$lang->managespace = new stdclass();
+$lang->systemteam = new stdclass();
+$lang->systemschedule = new stdclass();
+$lang->systemeffort = new stdclass();
+$lang->systemdynamic = new stdclass();
+$lang->systemcompany = new stdclass();
+$lang->pipeline = new stdclass();
+$lang->devopssetting = new stdclass();
+$lang->featureswitch = new stdclass();
+$lang->importdata = new stdclass();
+$lang->systemsetting = new stdclass();
+$lang->staffmanage = new stdclass();
+$lang->modelconfig = new stdclass();
+$lang->featureconfig = new stdclass();
+$lang->doctemplate = new stdclass();
+$lang->notifysetting = new stdclass();
+$lang->bidesign = new stdclass();
+$lang->personalsettings = new stdclass();
+$lang->projectsettings = new stdclass();
+$lang->dataaccess = new stdclass();
+$lang->executiongantt = new stdclass();
+$lang->executionkanban = new stdclass();
+$lang->executionburn = new stdclass();
+$lang->executioncfd = new stdclass();
+$lang->executionstory = new stdclass();
+$lang->executionqa = new stdclass();
+$lang->executionsettings = new stdclass();
+$lang->generalcomment = new stdclass();
+$lang->generalping = new stdclass();
+$lang->generaltemplate = new stdclass();
+$lang->generaleffort = new stdclass();
+$lang->productsettings = new stdclass();
+$lang->projectreview = new stdclass();
+$lang->projecttrack = new stdclass();
+$lang->projectqa = new stdclass();
+$lang->holidayseason = new stdclass();
+$lang->codereview = new stdclass();
+$lang->repocode = new stdclass();
$lang->projectbuild = new stdclass();
-$lang->projectstory = new stdclass();
$lang->projectrelease = new stdclass();
-$lang->stakeholder = new stdclass();
-$lang->product = new stdclass();
-$lang->branch = new stdclass();
-$lang->story = new stdclass();
-$lang->productplan = new stdclass();
-$lang->release = new stdclass();
-$lang->execution = new stdclass();
-$lang->task = new stdclass();
-$lang->build = new stdclass();
-$lang->qa = new stdclass();
-$lang->bug = new stdclass();
-$lang->testcase = new stdclass();
-$lang->testtask = new stdclass();
-$lang->testreport = new stdclass();
-$lang->testsuite = new stdclass();
-$lang->caselib = new stdclass();
-$lang->automation = new stdclass();
-$lang->repo = new stdclass();
-$lang->ci = new stdclass();
-$lang->compile = new stdclass();
-$lang->jenkins = new stdclass();
-$lang->job = new stdclass();
-$lang->doc = new stdclass();
-$lang->mail = new stdclass();
-$lang->custom = new stdclass();
-$lang->datatable = new stdclass();
-$lang->svn = new stdclass();
-$lang->gitlab = new stdclass();
-$lang->mr = new stdclass();
-$lang->git = new stdclass();
-$lang->company = new stdclass();
-$lang->dept = new stdclass();
-$lang->group = new stdclass();
-$lang->user = new stdclass();
-$lang->tree = new stdclass();
-$lang->report = new stdclass();
-$lang->search = new stdclass();
-$lang->admin = new stdclass();
-$lang->extension = new stdclass();
-$lang->webhook = new stdclass();
-$lang->api = new stdclass();
-$lang->file = new stdclass();
-$lang->misc = new stdclass();
-$lang->message = new stdclass();
-$lang->action = new stdclass();
-$lang->backup = new stdclass();
-$lang->cron = new stdclass();
-$lang->dev = new stdclass();
-
-$moduleRoot = '../module/';
-include '../framework/helper.class.php';
-include $moduleRoot . '/group/lang/resource.php';
-foreach(glob($moduleRoot . '/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile;
-foreach(glob('../xuanxuan/module/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile;
+$lang->projectstory = new stdclass();
$lang->projectCommon = '';
$lang->storyCommon = '';
@@ -87,6 +178,33 @@ $lang->URCommon = '';
$lang->productCommon = '';
$lang->executionCommon = '';
+$config = new stdclass();
+$config->disabledFeatures = '';
+$config->URAndSR = '';
+$config->systemScore = '';
+$config->programLink = 'program-browse';
+$config->productLink = 'product-browse';
+$config->projectLink = 'project-browse';
+$config->executionLink = 'execution-all';
+$config->systemMode = 'ALM';
+$config->edition = 'open';
+
+$config->featureGroup = new stdclass();
+$config->featureGroup->my = array('score');
+$config->featureGroup->product = array('roadmap', 'track', 'UR');
+$config->featureGroup->scrum = array();
+$config->featureGroup->waterfall = array();
+$config->featureGroup->agileplus = array();
+$config->featureGroup->waterfallplus = array();
+$config->featureGroup->assetlib = array();
+$config->featureGroup->other = array('devops', 'kanban', 'setCode');
+
+$moduleRoot = '../module/';
+include '../framework/helper.class.php';
+include $moduleRoot . '/group/lang/resource.php';
+foreach(glob($moduleRoot . '/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile;
+foreach(glob('../xuanxuan/module/group/ext/lang/zh-cn/*.php') as $resourceFile) include $resourceFile;
+
$whiteList[] = 'report-annualdata';
$whiteList[] = 'api-getsessionid';
$whiteList[] = 'admin-setflow';
@@ -277,7 +395,7 @@ foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot)
if(empty(trim($line))) continue;
if(strpos($line, '$lang') === 0)
{
- if(strpos($line, '=') !== false)
+ if(strpos($line, '=') !== false && strpos($lines[$lineNO], '=') !== false)
{
list($mainKey, $mainValue) = explode('=', $line);
list($key, $value) = explode('=', $lines[$lineNO]);
@@ -325,29 +443,6 @@ foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot)
}
}
-echo '-------------php5.4 synatax checking-----------------' . "\n";
-class app {function loadLang() {}}
-$app = new app;
-$lang = new stdclass();
-
-error_reporting(E_WARNING | E_STRICT );
-foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot)
-{
- foreach(glob($subModuleRoot . '*') as $modulePath)
- {
- $moduleName = basename($modulePath);
- $cnLangFile = $modulePath . '/lang/zh-cn.php';
- $enLangFile = $modulePath . '/lang/en.php';
- $configFile = $modulePath . '/config.php';
-
- if(!isset($lang->$moduleName)) $lang->$moduleName = new stdclass();
- if(!isset($config->$moduleName)) $config->$moduleName = new stdclass();
- if(file_exists($cnLangFile)) include $cnLangFile;
- if(file_exists($enLangFile)) include $enLangFile;
- if(file_exists($configFile)) include $configFile;
- }
-}
-
echo '-------------demo data checking. -----------------' . "\n";
$demoSQL = file("../db/demo.sql");
foreach($demoSQL as $line => $sql)
From 489b437dcfbc5f6241a5a8bb8661f34849c3bf3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=88=9A?=
Date: Thu, 29 Feb 2024 15:40:11 +0800
Subject: [PATCH 008/276] * add ai model upgrade.
---
module/upgrade/config/upgradeflow.php | 3 +-
module/upgrade/model.php | 44 +++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php
index 8675c884dc..dddca70909 100644
--- a/module/upgrade/config/upgradeflow.php
+++ b/module/upgrade/config/upgradeflow.php
@@ -92,7 +92,8 @@ $config->upgrade->execFlow['18_6'] = array('functions' => 'removeProductL
$config->upgrade->execFlow['18_7'] = array('functions' => 'processHistoryDataForMetric,metric-updateMetricDate');
$config->upgrade->execFlow['18_8'] = array('functions' => 'upgradeTesttaskMembers,deleteGeneralReportBlock,stopOldCron');
$config->upgrade->execFlow['18_9'] = array('functions' => 'addDefaultTraincoursePriv,renameBIModule,migrateXuanClientSettings');
-$config->upgrade->execFlow['20.0.alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA');
+$config->upgrade->execFlow['18_10_1'] = array('functions' => 'migrateAIModelConfig');
+$config->upgrade->execFlow['20.0.alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA,migrateAIModelConfig');
if(!empty($config->isINT))
{
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 376593a73c..f7024d66a7 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -8469,6 +8469,50 @@ class upgradeModel extends model
return true;
}
+ /**
+ * Migrate configured AI model (from pre 18.11) into table.
+ *
+ * @access public
+ * @return void
+ */
+ public function migrateAIModelConfig()
+ {
+ $aiSettings = $this->loadModel('setting')->getItems('owner=system&module=ai');
+ if(empty($aiSettings)) return;
+
+ $aiConfig = new stdclass();
+ foreach($aiSettings as $item) $aiConfig->{$item->key} = $item->value;
+
+ $model = new stdclass();
+ $model->type = $aiConfig->type;
+ $model->vendor = $aiConfig->vendor ?: '';
+ $model->enabled = $aiConfig->status == 'on' ? '1' : '0';
+ $model->desc = $aiConfig->description ?: '';
+ $model->createdDate = helper::now();
+ $model->createdBy = 'system';
+
+ $credentials = new stdclass();
+ if($model->type == 'baidu-ernie')
+ {
+ $credentials->secret = $aiConfig->secret ?: '';
+ }
+ else
+ {
+ if($aiConfig->vendor == 'azure')
+ {
+ $credentials->resource = $aiConfig->resource ?: '';
+ $credentials->deployment = $aiConfig->deployment ?: '';
+ }
+ $credentials->key = $aiConfig->key ?: '';
+ }
+ $model->credentials = json_encode($credentials);
+
+ $model->proxy = $aiConfig->proxyType == 'socks5' ? json_encode((object)array('type' => 'socks5', 'addr' => $aiConfig->proxyAddr)) : null;
+
+ $this->dao->insert(TABLE_AI_MODEL)->data($model)->exec();
+ if(!dao::isError()) $this->setting->deleteItems('owner=system&module=ai');
+ }
+
/**
* 检查办公应用是否有数据,没有就隐藏。
* Check if the office app has data, if not, hide it.
From 85a5c6829bf2d988ec61f00a8b120e875bd4ea9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=88=9A?=
Date: Thu, 29 Feb 2024 15:40:58 +0800
Subject: [PATCH 009/276] * Move updateMetricDate function to master from 18x.
---
module/upgrade/config/upgradeflow.php | 2 +-
module/upgrade/model.php | 15 +++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php
index dddca70909..bffe450455 100644
--- a/module/upgrade/config/upgradeflow.php
+++ b/module/upgrade/config/upgradeflow.php
@@ -93,7 +93,7 @@ $config->upgrade->execFlow['18_7'] = array('functions' => 'processHistory
$config->upgrade->execFlow['18_8'] = array('functions' => 'upgradeTesttaskMembers,deleteGeneralReportBlock,stopOldCron');
$config->upgrade->execFlow['18_9'] = array('functions' => 'addDefaultTraincoursePriv,renameBIModule,migrateXuanClientSettings');
$config->upgrade->execFlow['18_10_1'] = array('functions' => 'migrateAIModelConfig');
-$config->upgrade->execFlow['20.0.alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA,migrateAIModelConfig');
+$config->upgrade->execFlow['20.0.alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA,updateMetricDateType,migrateAIModelConfig');
if(!empty($config->isINT))
{
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index f7024d66a7..473b5cba84 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -8513,6 +8513,21 @@ class upgradeModel extends model
if(!dao::isError()) $this->setting->deleteItems('owner=system&module=ai');
}
+ /**
+ * Update metric datetype.
+ *
+ * @access public
+ * @return void
+ */
+ public function updateMetricDateType()
+ {
+ $this->loadModel('metric');
+ foreach($this->config->metric->dateType as $code => $dateType)
+ {
+ $this->dao->update(TABLE_METRIC)->set('dateType')->eq($dateType)->where('code')->eq($code)->exec();
+ }
+ }
+
/**
* 检查办公应用是否有数据,没有就隐藏。
* Check if the office app has data, if not, hide it.
From 9d12fa37fd6d3ea79aab7b771de93a1bc7f99c02 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=88=9A?=
Date: Thu, 29 Feb 2024 15:41:12 +0800
Subject: [PATCH 010/276] * Fix bug #46305
---
module/story/ui/review.html.php | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/module/story/ui/review.html.php b/module/story/ui/review.html.php
index 2e70809a73..cbaf46e3d8 100644
--- a/module/story/ui/review.html.php
+++ b/module/story/ui/review.html.php
@@ -29,8 +29,17 @@ foreach($fields as $field => $attr)
$formItems[$field] = formRow
(
+ in_array($field, array('assignedTo', 'closedReason', 'pri', 'estimate', 'childStories')) ? setID($field . 'Box') : null,
+ in_array($field, array('closedReason', 'duplicateStory', 'pri', 'estimate', 'childStories', 'status')) ? set::hidden(true) : null,
+
+ $field == 'duplicateStory' ? setID('rejectedReasonBox') : null,
+ $field == 'assignedTo' ? set::hidden(!$isLastOne) : null,
+ $field == 'result' ? on::change('switchShow(e.target);') : null,
+ $field == 'closedReason' ? on::change('setStory(e.target);') : null,
+
formGroup
(
+
set::width($width),
set::name($fieldName),
set::label($attr['title']),
@@ -42,15 +51,6 @@ foreach($fields as $field => $attr)
}
if($this->config->vision != 'or') $formItems['affected'] = $getAffectedTabs($story, $users);
-$formItems['result']->add(on::change('switchShow(e.target);'));
-$formItems['assignedTo']->add(setID('assignedToBox'))->add(set::hidden(!$isLastOne));
-$formItems['closedReason']->add(setID('rejectedReasonBox'))->add(set::hidden(true))->add(on::change('setStory(e.target);'));
-$formItems['duplicateStory']->add(setID('duplicateStoryBox'))->add(set::hidden(true));
-$formItems['pri']->add(setID('priBox'))->add(set::hidden(true));
-$formItems['estimate']->add(setID('estimateBox'))->add(set::hidden(true));
-$formItems['childStories']->add(setID('childStoriesBox'))->add(set::hidden(true));
-$formItems['status']->add(set::hidden(true));
-
modalHeader();
panel
(
From c30a71f9839613df8bfe56f1d9e75575dc3e2b4f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=88=9A?=
Date: Thu, 29 Feb 2024 15:41:26 +0800
Subject: [PATCH 011/276] * Fix bug #46314
---
lib/zin/wg/productsbox/js/v1.js | 6 +++---
lib/zin/wg/productsbox/v1.php | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/zin/wg/productsbox/js/v1.js b/lib/zin/wg/productsbox/js/v1.js
index 28398ba8f4..a7d8b3a671 100644
--- a/lib/zin/wg/productsbox/js/v1.js
+++ b/lib/zin/wg/productsbox/js/v1.js
@@ -4,7 +4,7 @@ window.branchChange = function(e)
loadPlans($product, $(e.target));
}
-function loadBranches(e)
+window.loadBranches = function(e)
{
/* When selecting a product, delete a plan that is empty by default. */
$("#planDefault").remove();
@@ -52,7 +52,7 @@ function loadBranches(e)
loadPlans(e.target, branch.length > 0 ? branch[0] : branch);
}
-function addNewLine(e)
+window.addNewLine = function(e)
{
const obj = e.target
const newLine = $(obj).closest('.productBox').clone();
@@ -96,7 +96,7 @@ function addNewLine(e)
new zui.Picker(`#plans${index}`, {items:[], multiple: true, name: `plans[${index}]`});
}
-function removeLine(e)
+window.removeLine = function(e)
{
const obj = e.target;
$(obj).closest('.productBox').remove();
diff --git a/lib/zin/wg/productsbox/v1.php b/lib/zin/wg/productsbox/v1.php
index 3c797c667d..1657ae18f8 100644
--- a/lib/zin/wg/productsbox/v1.php
+++ b/lib/zin/wg/productsbox/v1.php
@@ -58,9 +58,9 @@ class productsBox extends wg
return div
(
setClass('productsBox'),
- on::click('.productsBox .addLine', 'addNewLine'),
- on::click('.productsBox .removeLine', 'removeLine'),
- on::change('.productsBox [name^=products]', 'loadBranches'),
+ on::click('.productsBox .addLine', 'window.addNewLine'),
+ on::click('.productsBox .removeLine', 'window.removeLine'),
+ on::change('.productsBox [name^=products]', 'window.loadBranches'),
jsVar('multiBranchProducts', data('multiBranchProducts')),
jsVar('project', \zget($project, 'id', 0)),
jsVar('errorSameProducts', $errorSameProducts),
From f6f9834962913853011085bd69c4eeb750ffa780 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=88=9A?=
Date: Thu, 29 Feb 2024 15:41:45 +0800
Subject: [PATCH 012/276] * Cherry pick
7840285fa392beb9c0c76298153a3f16d2771014.
---
module/metric/config/datetype.php | 166 ------------------------------
module/metric/model.php | 5 +-
module/upgrade/model.php | 17 +++
3 files changed, 19 insertions(+), 169 deletions(-)
diff --git a/module/metric/config/datetype.php b/module/metric/config/datetype.php
index f5284e677c..0487d26d5b 100644
--- a/module/metric/config/datetype.php
+++ b/module/metric/config/datetype.php
@@ -1,30 +1,10 @@
metric->dateType = array();
-$config->metric->dateType['count_of_program'] = 'nodate';
-$config->metric->dateType['count_of_doing_program'] = 'nodate';
-$config->metric->dateType['count_of_closed_program'] = 'nodate';
-$config->metric->dateType['count_of_suspended_program'] = 'nodate';
-$config->metric->dateType['count_of_wait_program'] = 'nodate';
-$config->metric->dateType['count_of_top_program'] = 'nodate';
-$config->metric->dateType['count_of_closed_top_program'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_top_program'] = 'nodate';
$config->metric->dateType['count_of_annual_created_top_program'] = 'year';
$config->metric->dateType['count_of_annual_closed_top_program'] = 'year';
-$config->metric->dateType['count_of_line'] = 'nodate';
-$config->metric->dateType['count_of_product'] = 'nodate';
-$config->metric->dateType['count_of_normal_product'] = 'nodate';
-$config->metric->dateType['count_of_closed_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_product'] = 'year';
$config->metric->dateType['count_of_annual_closed_product'] = 'year';
-$config->metric->dateType['count_of_project'] = 'nodate';
-$config->metric->dateType['count_of_wait_project'] = 'nodate';
-$config->metric->dateType['count_of_doing_project'] = 'nodate';
-$config->metric->dateType['count_of_suspended_project'] = 'nodate';
-$config->metric->dateType['count_of_closed_project'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_project'] = 'nodate';
-$config->metric->dateType['count_of_undelayed_finished_project_which_finished'] = 'nodate';
-$config->metric->dateType['count_of_delayed_finished_project_which_finished'] = 'nodate';
$config->metric->dateType['count_of_annual_created_project'] = 'year';
$config->metric->dateType['count_of_annual_closed_project'] = 'year';
$config->metric->dateType['count_of_undelayed_finished_project_which_annual_started'] = 'year';
@@ -39,49 +19,25 @@ $config->metric->dateType['consume_of_monthly_closed_project'] = 'month';
$config->metric->dateType['day_of_annual_closed_project'] = 'year';
$config->metric->dateType['rate_of_undelayed_finished_project_which_annual_finished'] = 'year';
$config->metric->dateType['rate_of_delayed_finished_project_which_annual_finished'] = 'year';
-$config->metric->dateType['count_of_productplan'] = 'nodate';
$config->metric->dateType['count_of_annual_created_productplan'] = 'year';
$config->metric->dateType['count_of_annual_finished_productplan'] = 'year';
$config->metric->dateType['count_of_annual_closed_productplan'] = 'year';
-$config->metric->dateType['count_of_finished_productplan'] = 'nodate';
-$config->metric->dateType['count_of_unfinished_productplan'] = 'nodate';
-$config->metric->dateType['count_of_execution'] = 'nodate';
-$config->metric->dateType['count_of_wait_execution'] = 'nodate';
-$config->metric->dateType['count_of_doing_execution'] = 'nodate';
-$config->metric->dateType['count_of_suspended_execution'] = 'nodate';
-$config->metric->dateType['count_of_closed_execution'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_execution'] = 'nodate';
$config->metric->dateType['count_of_annual_created_execution'] = 'year';
$config->metric->dateType['count_of_annual_closed_execution'] = 'year';
$config->metric->dateType['count_of_monthly_created_execution'] = 'month';
$config->metric->dateType['count_of_monthly_closed_execution'] = 'month';
-$config->metric->dateType['count_of_undelayed_finished_execution_which_finished'] = 'nodate';
-$config->metric->dateType['count_of_delayed_finished_execution_which_finished'] = 'nodate';
$config->metric->dateType['count_of_undelayed_finished_execution_which_annual_finished'] = 'year';
$config->metric->dateType['count_of_delayed_finished_execution_which_annual_finished'] = 'year';
$config->metric->dateType['rate_of_undelayed_closed_execution_which_annual_finished'] = 'year';
$config->metric->dateType['rate_of_delayed_closed_execution_which_annual_finished'] = 'year';
-$config->metric->dateType['count_of_release'] = 'nodate';
-$config->metric->dateType['count_of_marker_release'] = 'nodate';
$config->metric->dateType['count_of_annual_created_release'] = 'year';
$config->metric->dateType['count_of_monthly_created_release'] = 'month';
$config->metric->dateType['count_of_weekly_created_release'] = 'week';
-$config->metric->dateType['count_of_story'] = 'nodate';
-$config->metric->dateType['count_of_closed_story'] = 'nodate';
-$config->metric->dateType['count_of_finished_story'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_story'] = 'nodate';
-$config->metric->dateType['count_of_invalid_story'] = 'nodate';
-$config->metric->dateType['count_of_valid_story'] = 'nodate';
-$config->metric->dateType['count_of_delivered_story'] = 'nodate';
$config->metric->dateType['count_of_annual_created_story'] = 'year';
$config->metric->dateType['count_of_annual_finished_story'] = 'year';
$config->metric->dateType['count_of_monthly_created_story'] = 'month';
$config->metric->dateType['count_of_monthly_finished_story'] = 'month';
$config->metric->dateType['count_of_annual_delivered_story'] = 'year';
-$config->metric->dateType['scale_of_story'] = 'nodate';
-$config->metric->dateType['scale_of_finished_story'] = 'nodate';
-$config->metric->dateType['scale_of_invalid_story'] = 'nodate';
-$config->metric->dateType['scale_of_valid_story'] = 'nodate';
$config->metric->dateType['scale_of_annual_finished_story'] = 'year';
$config->metric->dateType['scale_of_annual_delivered_story'] = 'year';
$config->metric->dateType['scale_of_annual_closed_story'] = 'year';
@@ -91,101 +47,45 @@ $config->metric->dateType['scale_of_monthly_closed_story'] = 'month';
$config->metric->dateType['scale_of_weekly_finished_story'] = 'week';
$config->metric->dateType['count_of_weekly_finished_story'] = 'week';
$config->metric->dateType['count_of_daily_created_story'] = 'day';
-$config->metric->dateType['rate_of_finished_story'] = 'nodate';
-$config->metric->dateType['rate_of_delivered_story'] = 'nodate';
$config->metric->dateType['rate_of_annual_finished_story'] = 'year';
$config->metric->dateType['rate_of_annual_delivered_story'] = 'year';
-$config->metric->dateType['count_of_task'] = 'nodate';
-$config->metric->dateType['count_of_finished_task'] = 'nodate';
-$config->metric->dateType['count_of_unfinished_task'] = 'nodate';
-$config->metric->dateType['count_of_closed_task'] = 'nodate';
$config->metric->dateType['count_of_annual_created_task'] = 'year';
$config->metric->dateType['count_of_annual_finished_task'] = 'year';
$config->metric->dateType['count_of_monthly_created_task'] = 'month';
$config->metric->dateType['count_of_monthly_finished_task'] = 'month';
-$config->metric->dateType['estimate_of_task'] = 'nodate';
-$config->metric->dateType['consume_of_task'] = 'nodate';
-$config->metric->dateType['left_of_task'] = 'nodate';
$config->metric->dateType['count_of_daily_finished_task'] = 'day';
-$config->metric->dateType['count_of_bug'] = 'nodate';
-$config->metric->dateType['count_of_activated_bug'] = 'nodate';
-$config->metric->dateType['count_of_resolved_bug'] = 'nodate';
-$config->metric->dateType['count_of_closed_bug'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_bug'] = 'nodate';
-$config->metric->dateType['count_of_fixed_bug'] = 'nodate';
-$config->metric->dateType['count_of_valid_bug'] = 'nodate';
$config->metric->dateType['count_of_annual_created_bug'] = 'year';
$config->metric->dateType['count_of_annual_fixed_bug'] = 'year';
$config->metric->dateType['count_of_monthly_created_bug'] = 'month';
$config->metric->dateType['count_of_monthly_fixed_bug'] = 'month';
$config->metric->dateType['count_of_daily_closed_bug'] = 'day';
-$config->metric->dateType['rate_of_fixed_bug'] = 'nodate';
-$config->metric->dateType['count_of_case'] = 'nodate';
$config->metric->dateType['count_of_annual_created_case'] = 'year';
$config->metric->dateType['count_of_daily_run_case'] = 'day';
-$config->metric->dateType['count_of_user'] = 'nodate';
$config->metric->dateType['count_of_annual_created_user'] = 'year';
$config->metric->dateType['hour_of_annual_effort'] = 'year';
$config->metric->dateType['day_of_annual_effort'] = 'year';
$config->metric->dateType['day_of_daily_effort'] = 'day';
$config->metric->dateType['hour_of_daily_effort'] = 'day';
-$config->metric->dateType['count_of_doc'] = 'nodate';
$config->metric->dateType['count_of_annual_created_doc'] = 'year';
-$config->metric->dateType['count_of_feedback'] = 'nodate';
-$config->metric->dateType['count_of_closed_feedback'] = 'nodate';
$config->metric->dateType['count_of_annual_created_feedback'] = 'year';
$config->metric->dateType['count_of_annual_closed_feedback'] = 'year';
-$config->metric->dateType['count_of_codebase'] = 'nodate';
-$config->metric->dateType['count_of_pipeline'] = 'nodate';
-$config->metric->dateType['count_of_artifactrepo'] = 'nodate';
-$config->metric->dateType['count_of_node'] = 'nodate';
-$config->metric->dateType['count_of_application'] = 'nodate';
-$config->metric->dateType['count_of_pending_issue'] = 'nodate';
-$config->metric->dateType['count_of_pending_mergeRequest'] = 'nodate';
-$config->metric->dateType['count_of_pending_deployment'] = 'nodate';
-$config->metric->dateType['count_of_productplan_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_productplan_in_product'] = 'year';
$config->metric->dateType['count_of_annual_finished_productplan_in_product'] = 'year';
-$config->metric->dateType['count_of_release_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_release_in_product'] = 'year';
$config->metric->dateType['count_of_monthly_created_release_in_product'] = 'month';
-$config->metric->dateType['count_of_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_finished_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_closed_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_delivered_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_invalid_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_valid_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_developed_story_in_product'] = 'nodate';
-$config->metric->dateType['case_coverage_of_projected_story_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_story_in_product'] = 'year';
$config->metric->dateType['count_of_annual_finished_story_in_product'] = 'year';
$config->metric->dateType['count_of_annual_delivered_story_in_product'] = 'year';
$config->metric->dateType['count_of_annual_closed_story_in_product'] = 'year';
$config->metric->dateType['count_of_monthly_finished_story_in_product'] = 'month';
-$config->metric->dateType['count_of_projected_story_in_product'] = 'nodate';
$config->metric->dateType['count_of_monthly_delivered_story_in_product'] = 'month';
-$config->metric->dateType['count_of_projected_story_with_case_in_product'] = 'nodate';
$config->metric->dateType['count_of_monthly_closed_story_in_product'] = 'month';
$config->metric->dateType['count_of_monthly_created_story_in_product'] = 'month';
-$config->metric->dateType['scale_of_story_in_product'] = 'nodate';
$config->metric->dateType['scale_of_annual_finished_story_in_product'] = 'year';
$config->metric->dateType['scale_of_annual_delivered_story_in_product'] = 'year';
$config->metric->dateType['scale_of_annual_closed_story_in_product'] = 'year';
$config->metric->dateType['scale_of_monthly_finished_story_in_product'] = 'month';
-$config->metric->dateType['rate_of_approved_story_in_product'] = 'nodate';
-$config->metric->dateType['rate_of_finish_story_in_product'] = 'nodate';
-$config->metric->dateType['rate_of_delivery_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_requirement_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_requirement_in_product'] = 'year';
-$config->metric->dateType['bug_concentration_of_developed_story_in_product'] = 'nodate';
-$config->metric->dateType['count_of_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_activated_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_effective_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_fixed_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_severity_1_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_severity_2_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_severe_bug_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_bug_in_product'] = 'year';
$config->metric->dateType['count_of_annual_created_effective_bug_in_product'] = 'year';
$config->metric->dateType['count_of_annual_fixed_bug_in_product'] = 'year';
@@ -195,81 +95,15 @@ $config->metric->dateType['count_of_daily_closed_bug_in_product'] = 'day';
$config->metric->dateType['count_of_monthly_fixed_bug_in_product'] = 'month';
$config->metric->dateType['count_of_monthly_closed_bug_in_product'] = 'month';
$config->metric->dateType['count_of_monthly_created_bug_in_product'] = 'month';
-$config->metric->dateType['rate_of_fixed_bug_in_product'] = 'nodate';
-$config->metric->dateType['count_of_case_in_product'] = 'nodate';
$config->metric->dateType['count_of_annual_created_case_in_product'] = 'year';
$config->metric->dateType['count_of_feedback_in_product'] = 'year';
$config->metric->dateType['count_of_annual_created_feedback_in_product'] = 'year';
$config->metric->dateType['count_of_annual_closed_feedback_in_product'] = 'year';
-$config->metric->dateType['planned_period_of_project'] = 'nodate';
-$config->metric->dateType['left_period_of_project'] = 'nodate';
-$config->metric->dateType['count_of_actual_time_in_project'] = 'nodate';
-$config->metric->dateType['variance_of_time_in_project'] = 'nodate';
-$config->metric->dateType['count_of_closed_execution_in_project'] = 'nodate';
-$config->metric->dateType['count_of_suspended_execution_in_project'] = 'nodate';
-$config->metric->dateType['count_of_doing_execution_in_project'] = 'nodate';
-$config->metric->dateType['count_wait_execution_in_project'] = 'nodate';
$config->metric->dateType['count_annual_closed_execution_in_project'] = 'year';
-$config->metric->dateType['count_of_execution_in_project'] = 'nodate';
-$config->metric->dateType['count_of_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_closed_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_unclosed_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_finished_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_invalid_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_valid_story_in_project'] = 'nodate';
-$config->metric->dateType['scale_of_story_in_project'] = 'nodate';
$config->metric->dateType['count_of_annual_finished_story_in_project'] = 'year';
$config->metric->dateType['scale_of_annual_finished_story_in_project'] = 'year';
-$config->metric->dateType['rate_of_finished_story_in_project'] = 'nodate';
-$config->metric->dateType['count_of_task_in_project'] = 'nodate';
-$config->metric->dateType['count_of_wait_task_in_project'] = 'nodate';
-$config->metric->dateType['count_of_doing_task_in_project'] = 'nodate';
-$config->metric->dateType['count_of_finished_task_in_project'] = 'nodate';
-$config->metric->dateType['estimate_of_task_in_project'] = 'nodate';
-$config->metric->dateType['consume_of_task_in_project'] = 'nodate';
-$config->metric->dateType['left_of_task_in_project'] = 'nodate';
-$config->metric->dateType['ev_of_finished_task_in_waterfall'] = 'nodate';
-$config->metric->dateType['pv_of_task_in_waterfall'] = 'nodate';
-$config->metric->dateType['progress_of_task_in_project'] = 'nodate';
-$config->metric->dateType['sv_in_waterfall'] = 'nodate';
-$config->metric->dateType['cv_in_waterfall'] = 'nodate';
-$config->metric->dateType['count_of_bug_in_project'] = 'nodate';
-$config->metric->dateType['count_of_activated_bug_in_project'] = 'nodate';
-$config->metric->dateType['count_of_closed_bug_in_project'] = 'nodate';
-$config->metric->dateType['count_of_user_in_project'] = 'nodate';
-$config->metric->dateType['consume_of_all_in_project'] = 'nodate';
-$config->metric->dateType['day_of_invested_in_project'] = 'nodate';
-$config->metric->dateType['ac_of_all_in_waterfall'] = 'nodate';
-$config->metric->dateType['count_of_opened_risk_in_project'] = 'nodate';
-$config->metric->dateType['count_of_opened_issue_in_project'] = 'nodate';
-$config->metric->dateType['count_of_story_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_finished_story_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_invalid_story_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_valid_story_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_developed_story_in_execution'] = 'nodate';
-$config->metric->dateType['rate_of_finished_story_in_execution'] = 'nodate';
-$config->metric->dateType['rate_of_developed_story_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_task_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_finished_task_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_unfinished_task_in_execution'] = 'nodate';
$config->metric->dateType['count_of_daily_finished_task_in_execution'] = 'day';
-$config->metric->dateType['estimate_of_task_in_execution'] = 'nodate';
-$config->metric->dateType['consume_of_task_in_execution'] = 'nodate';
-$config->metric->dateType['left_of_task_in_execution'] = 'nodate';
-$config->metric->dateType['progress_of_task_in_execution'] = 'nodate';
-$config->metric->dateType['count_of_reviewing_story_in_user'] = 'nodate';
$config->metric->dateType['count_of_daily_review_story_in_user'] = 'day';
-$config->metric->dateType['count_of_pending_story_in_user'] = 'nodate';
$config->metric->dateType['count_of_daily_finished_task_in_user'] = 'day';
-$config->metric->dateType['count_of_assigned_task_in_user'] = 'nodate';
$config->metric->dateType['count_of_daily_fixed_bug_in_user'] = 'day';
-$config->metric->dateType['count_of_assigned_bug_in_user'] = 'nodate';
-$config->metric->dateType['count_of_assigned_case_in_user'] = 'nodate';
-$config->metric->dateType['count_of_assigned_feedback_in_user'] = 'nodate';
-$config->metric->dateType['count_of_reviewing_feedback_in_user'] = 'nodate';
$config->metric->dateType['count_of_daily_review_feedback_in_user'] = 'day';
-$config->metric->dateType['count_of_submitted_code_issues_in_codebase'] = 'nodate';
-$config->metric->dateType['count_of_resolved_code_issues_in_codebase'] = 'nodate';
-$config->metric->dateType['count_of_pending_issues_in_codebase'] = 'nodate';
-$config->metric->dateType['count_of_merged_pull_requests_in_codebase'] = 'nodate';
-$config->metric->dateType['count_of_code_commits_in_codebase'] = 'nodate';
diff --git a/module/metric/model.php b/module/metric/model.php
index 12e864dd31..48d4b5b57a 100755
--- a/module/metric/model.php
+++ b/module/metric/model.php
@@ -2128,9 +2128,8 @@ class metricModel extends model
/* Get dateType from config second. */
if(isset($this->config->metric->dateType[$code])) return $this->config->metric->dateType[$code];
- /* At last, infer dateType by code. */
- $dataFields = $this->getMetricRecordDateField($code);
- return $this->getDateType($dataFields);
+ /* Return nodate if no matches. */
+ return 'nodate';
}
/**
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 473b5cba84..2a37cfc810 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -8469,6 +8469,23 @@ class upgradeModel extends model
return true;
}
+ /**
+ * Update metric datetype.
+ *
+ * @access public
+ * @return void
+ */
+ public function updateMetricDateType()
+ {
+ $this->loadModel('metric');
+ foreach($this->config->metric->dateType as $code => $dateType)
+ {
+ $this->dao->update(TABLE_METRIC)->set('dateType')->eq($dateType)->where('code')->eq($code)->exec();
+ }
+
+ $this->dao->update(TABLE_METRIC)->set('dateType')->eq('nodate')->where('dateType')->eq('')->exec();
+ }
+
/**
* Migrate configured AI model (from pre 18.11) into table.
*
From 27eec77d3c83cb912bfbceb30cada378267b2eb1 Mon Sep 17 00:00:00 2001
From: liyang
Date: Thu, 29 Feb 2024 15:53:01 +0800
Subject: [PATCH 013/276] * Fix bug #46323.
---
module/story/ui/batchcreate.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/story/ui/batchcreate.html.php b/module/story/ui/batchcreate.html.php
index 081c8e0b45..688374ee91 100644
--- a/module/story/ui/batchcreate.html.php
+++ b/module/story/ui/batchcreate.html.php
@@ -82,7 +82,7 @@ formBatchPanel
array('text' => $lang->goback, 'data-back' => 'APP', 'class' => 'open-url')
)),
formHidden('type', $type),
- formHidden('status')
+ formHidden('status', '')
);
render();
From a097083d97ea2ee34f181c0a06a8abe5e5a49f15 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Thu, 29 Feb 2024 15:55:45 +0800
Subject: [PATCH 014/276] * Fix bug #46312.
---
module/task/model.php | 2 ++
module/task/ui/view.html.php | 29 ++++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/module/task/model.php b/module/task/model.php
index 3f9f7153bb..9b8f1c4083 100755
--- a/module/task/model.php
+++ b/module/task/model.php
@@ -1270,6 +1270,8 @@ class taskModel extends model
$task = $this->loadModel('file')->replaceImgURL($task, 'desc');
$task->files = $this->file->getByObject('task', $taskID);
if($setImgSize && $task->desc) $task->desc = $this->file->setImgSize($task->desc);
+ /* Get related test cases. */
+ if($task->story) $task->cases = $this->dao->select('id, title')->from(TABLE_CASE)->where('story')->eq($task->story)->andWhere('storyVersion')->eq($task->storyVersion)->andWhere('deleted')->eq('0')->fetchPairs();
/* Process a task, compute its progress and get its related information. */
return $this->processTask($task);
diff --git a/module/task/ui/view.html.php b/module/task/ui/view.html.php
index 4c4a9cde8d..c0171dcb7d 100644
--- a/module/task/ui/view.html.php
+++ b/module/task/ui/view.html.php
@@ -183,6 +183,28 @@ foreach($linkCommits as $commit)
) : div($revision . ' ' . $commit->comment);
}
+$linkedCases = array();
+$canViewCase = common::hasPriv('testcase', 'view');
+if(!empty($task->cases))
+{
+ foreach($task->cases as $caseID => $case)
+ {
+ $linkedCases[] = $canViewCase ? a
+ (
+ setClass('flex clip'),
+ set::href(createLink('testcase', 'view', "caseID={$caseID}")),
+ setData('toggle', 'modal'),
+ setData('size', 'lg'),
+ set::title($case),
+ "#{$caseID} " . $case
+ ) : div(
+ setClass('flex clip'),
+ set::title($case),
+ "#{$caseID} " . $case
+ );
+ }
+}
+
detailBody
(
sectionList
@@ -252,6 +274,11 @@ detailBody
)
)
) : null,
+ !empty($task->cases) ? section
+ (
+ set::title($lang->task->case),
+ div($linkedCases)
+ ) : null,
$task->children ?
section
(
@@ -325,7 +352,7 @@ detailBody
item
(
set::name($lang->task->assignedTo),
- $task->assignedToRealName
+ zget($users, $task->assignedTo, '')
),
item
(
From 169e8bd324e2f8e5a446636b04c1b14877031b6e Mon Sep 17 00:00:00 2001
From: liyang
Date: Thu, 29 Feb 2024 16:06:19 +0800
Subject: [PATCH 015/276] * Add "repo-view" configuration in the back button.
---
lib/zin/wg/backbtn/v1.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/zin/wg/backbtn/v1.php b/lib/zin/wg/backbtn/v1.php
index 04402a3166..9c085a41c2 100644
--- a/lib/zin/wg/backbtn/v1.php
+++ b/lib/zin/wg/backbtn/v1.php
@@ -43,9 +43,9 @@ class backBtn extends btn
global $app;
$backs = array(
- 'task' => 'execution-task,my-work,my-contribute,execution-tree,execution-grouptask,project-execution,product-track',
- 'story' => 'product-browse,projectstory-story,execution-story,my-work,my-contribute,productplan-view,build-view,projectbuild-view,product-track',
- 'bug' => 'bug-browse,project-bug,my-work,my-contribute,execution-bug,bug-view,qa-index,execution-task,product-track,execution-task,task-view',
+ 'task' => 'execution-task,my-work,my-contribute,execution-tree,execution-grouptask,project-execution,product-track,repo-view',
+ 'story' => 'product-browse,projectstory-story,execution-story,my-work,my-contribute,productplan-view,build-view,projectbuild-view,product-track,repo-view',
+ 'bug' => 'bug-browse,project-bug,my-work,my-contribute,execution-bug,bug-view,qa-index,execution-task,product-track,execution-task,task-view,repo-view',
'testcase' => 'testcase-browse,project-testcase,my-work,my-contribute,execution-testcase,testtask-cases,testsuite-view,product-browse,testcase-view,qa-index,caselib-browse,product-track',
'testsuite' => 'testsuite-browse,testsuite-view,',
'testtask' => 'testtask-browse,testtask-cases,qa-index,testcase-browse,',
From 1030177244bbd634f780be275a345014b773213d Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 16:06:49 +0800
Subject: [PATCH 016/276] * Adjust language check script.
---
misc/check.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/misc/check.php b/misc/check.php
index b4f6e9e0d5..f2bf3bc5dd 100755
--- a/misc/check.php
+++ b/misc/check.php
@@ -406,7 +406,7 @@ foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot)
$lineNO = $lineNO + 1;
$referLang = $langKey != 'en' ? 'en' : 'zh-cn';
echo "module $moduleName need checking, command is:";
- echo " vim -O +$lineNO ../module/$moduleName/lang/$referLang.php +$lineNO ../module/$moduleName/lang/$langKey.php \n";
+ echo " vimdiff -O +$lineNO ../module/$moduleName/lang/$referLang.php ../module/$moduleName/lang/$langKey.php \n";
break;
}
}
@@ -434,7 +434,7 @@ foreach(array($moduleRoot, '../xuanxuan/module/') as $subModuleRoot)
$key = trim($key);
$lineNO = $lineNO + 1;
echo "module $moduleName need checking, command is:";
- echo " vim -O +$lineNO ../../module/$moduleName/ext/lang/zh-cn/$extLangFile +$lineNO ../../module/$moduleName/ext/lang/en/$extLangFile \n";
+ echo " vimdiff -O +$lineNO ../../module/$moduleName/ext/lang/zh-cn/$extLangFile ../../module/$moduleName/ext/lang/en/$extLangFile \n";
break;
}
}
From e15585ba148610c61774f5b03f7bd2b84794d24f Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 16:06:55 +0800
Subject: [PATCH 017/276] * Complete language item configuration.
---
module/account/lang/de.php | 1 +
module/account/lang/en.php | 1 +
module/account/lang/fr.php | 1 +
module/action/lang/de.php | 9 +++++++-
module/action/lang/fr.php | 7 ++++++
module/action/lang/zh-cn.php | 5 ++---
module/aiapp/lang/zh-cn.php | 10 ++++-----
module/block/lang/de.php | 11 +--------
module/block/lang/en.php | 11 +--------
module/block/lang/fr.php | 4 +---
module/bug/lang/de.php | 2 +-
module/bug/lang/en.php | 2 +-
module/bug/lang/fr.php | 2 +-
module/chart/lang/de.php | 3 +++
module/chart/lang/en.php | 3 +++
module/chart/lang/fr.php | 3 +++
module/common/lang/de.php | 5 +----
module/common/lang/en.php | 1 +
module/common/lang/fr.php | 5 +----
module/common/lang/zh-cn.php | 2 +-
module/cron/lang/de.php | 1 +
module/cron/lang/fr.php | 1 +
module/cron/lang/zh-cn.php | 1 +
module/extension/lang/de.php | 4 ++++
module/extension/lang/en.php | 4 ++++
module/extension/lang/fr.php | 4 ++++
module/file/lang/zh-cn.php | 2 +-
module/group/lang/fr.php | 3 +--
module/program/lang/de.php | 3 +--
module/program/lang/en.php | 1 -
module/program/lang/fr.php | 3 +--
module/project/lang/de.php | 23 +++++++++++--------
module/project/lang/en.php | 17 +++++++-------
module/project/lang/fr.php | 25 ++++++++++++---------
module/release/lang/de.php | 2 +-
module/score/lang/fr.php | 4 ++--
module/testcase/lang/de.php | 33 ++++++++++++++-------------
module/testcase/lang/en.php | 33 ++++++++++++++-------------
module/testcase/lang/fr.php | 33 ++++++++++++++-------------
module/testtask/lang/de.php | 1 +
module/testtask/lang/en.php | 1 +
module/testtask/lang/fr.php | 5 +++--
module/tree/lang/zh-cn.php | 1 -
module/tutorial/lang/en.php | 4 ----
module/tutorial/lang/fr.php | 1 -
module/upgrade/lang/de.php | 43 ++++++++++++++++++------------------
module/upgrade/lang/en.php | 39 ++++++++++++++++----------------
module/upgrade/lang/fr.php | 39 ++++++++++++++++----------------
module/user/lang/de.php | 8 +++----
module/user/lang/fr.php | 8 +++----
50 files changed, 227 insertions(+), 208 deletions(-)
diff --git a/module/account/lang/de.php b/module/account/lang/de.php
index 9131c43be9..74379aadd4 100644
--- a/module/account/lang/de.php
+++ b/module/account/lang/de.php
@@ -10,6 +10,7 @@ $lang->account->view = 'view account';
$lang->account->editAction = 'edit account';
$lang->account->deleteAction = 'delete account';
+$lang->account->id = 'id';
$lang->account->provider = 'provider';
$lang->account->type = 'type';
$lang->account->name = 'name';
diff --git a/module/account/lang/en.php b/module/account/lang/en.php
index 9131c43be9..74379aadd4 100644
--- a/module/account/lang/en.php
+++ b/module/account/lang/en.php
@@ -10,6 +10,7 @@ $lang->account->view = 'view account';
$lang->account->editAction = 'edit account';
$lang->account->deleteAction = 'delete account';
+$lang->account->id = 'id';
$lang->account->provider = 'provider';
$lang->account->type = 'type';
$lang->account->name = 'name';
diff --git a/module/account/lang/fr.php b/module/account/lang/fr.php
index 9131c43be9..74379aadd4 100644
--- a/module/account/lang/fr.php
+++ b/module/account/lang/fr.php
@@ -10,6 +10,7 @@ $lang->account->view = 'view account';
$lang->account->editAction = 'edit account';
$lang->account->deleteAction = 'delete account';
+$lang->account->id = 'id';
$lang->account->provider = 'provider';
$lang->account->type = 'type';
$lang->account->name = 'name';
diff --git a/module/action/lang/de.php b/module/action/lang/de.php
index c191ee7673..a85ae5e85c 100644
--- a/module/action/lang/de.php
+++ b/module/action/lang/de.php
@@ -317,7 +317,7 @@ $lang->action->desc->install = '$date, installed by $act
$lang->action->desc->uninstall = '$date, uninstalled by $actor .' . "\n";
$lang->action->desc->start = '$date, started by $actor .' . "\n";
$lang->action->desc->stop = '$date, closed by $actor .' . "\n";
-$lang->action->desc->editextra = '$date, updated from $oldname to $newName by $actor .' . "\n";
+$lang->action->desc->editname = '$date, updated from $oldname to $newName by $actor .' . "\n";
$lang->action->desc->upgrade = '$date, upgraded from $oldVersion to $newVersion by $actor .' . "\n";
$lang->action->desc->backup = '$date, backuped by $actor .' . "\n";
$lang->action->desc->adjustmemory = '$date, resized to $newMemory of memory by $actor .' . "\n";
@@ -817,6 +817,13 @@ $lang->action->dynamicAction->repo['edited'] = 'Edit Repo';
$lang->action->dynamicAction->repo['deleted'] = 'Delete Repo';
$lang->action->dynamicAction->repo['undeleted'] = 'Undelete Repo';
+$lang->action->dynamicAction->metric['created'] = 'Create Metric';
+$lang->action->dynamicAction->metric['edited'] = 'Edit Metric';
+$lang->action->dynamicAction->metric['deleted'] = 'Delete Metric';
+$lang->action->dynamicAction->metric['undeleted'] = 'Undelete Metric';
+$lang->action->dynamicAction->metric['delist'] = 'Delist Metric';
+$lang->action->dynamicAction->metric['publish'] = 'Publish Metric';
+
/* Generate the corresponding object link. */
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
$lang->action->label->productplan = 'Plan|productplan|view|productID=%s';
diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php
index 10f5d13a81..ed15cc9e1f 100644
--- a/module/action/lang/fr.php
+++ b/module/action/lang/fr.php
@@ -817,6 +817,13 @@ $lang->action->dynamicAction->repo['edited'] = 'Edit Repo';
$lang->action->dynamicAction->repo['deleted'] = 'Delete Repo';
$lang->action->dynamicAction->repo['undeleted'] = 'Undelete Repo';
+$lang->action->dynamicAction->metric['created'] = 'Create Metric';
+$lang->action->dynamicAction->metric['edited'] = 'Edit Metric';
+$lang->action->dynamicAction->metric['deleted'] = 'Delete Metric';
+$lang->action->dynamicAction->metric['undeleted'] = 'Undelete Metric';
+$lang->action->dynamicAction->metric['delist'] = 'Delist Metric';
+$lang->action->dynamicAction->metric['publish'] = 'Publish Metric';
+
/* Generate the corresponding object link. */
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
$lang->action->label->productplan = 'Plan|productplan|view|productID=%s';
diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php
index 3b3c761ec4..125dfbfd5b 100755
--- a/module/action/lang/zh-cn.php
+++ b/module/action/lang/zh-cn.php
@@ -654,7 +654,7 @@ $lang->action->dynamicAction->task['confirmed'] = "确认{$lang->SRCo
$lang->action->dynamicAction->task['started'] = '开始任务';
$lang->action->dynamicAction->task['finished'] = '完成任务';
$lang->action->dynamicAction->task['recordworkhour'] = '记录工时';
-$lang->action->dynamicAction->task['recordestimate '] = '记录工时';
+$lang->action->dynamicAction->task['recordestimate'] = '记录工时';
$lang->action->dynamicAction->task['editestimate'] = '编辑工时';
$lang->action->dynamicAction->task['deleteestimate'] = '删除工时';
$lang->action->dynamicAction->task['paused'] = '暂停任务';
@@ -824,7 +824,6 @@ $lang->action->dynamicAction->metric['undeleted'] = '还原度量';
$lang->action->dynamicAction->metric['delist'] = '下架度量';
$lang->action->dynamicAction->metric['publish'] = '发布度量';
-
/* 用来生成相应对象的链接。*/
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
$lang->action->label->productplan = "计划|productplan|view|productID=%s";
@@ -938,7 +937,7 @@ $lang->action->search->label['linked2kanban'] = $lang->action->label->li
$lang->action->search->label['started'] = $lang->action->label->started;
$lang->action->search->label['restarted'] = $lang->action->label->restarted;
$lang->action->search->label['recordworkhour'] = $lang->action->label->recordworkhour;
-$lang->action->search->label['recordestimate '] = $lang->action->label->recordworkhour;
+$lang->action->search->label['recordestimate'] = $lang->action->label->recordworkhour;
$lang->action->search->label['editestimate'] = $lang->action->label->editestimate;
$lang->action->search->label['canceled'] = $lang->action->label->canceled;
$lang->action->search->label['finished'] = $lang->action->label->finished;
diff --git a/module/aiapp/lang/zh-cn.php b/module/aiapp/lang/zh-cn.php
index 9ce20f6919..38ec7682dc 100644
--- a/module/aiapp/lang/zh-cn.php
+++ b/module/aiapp/lang/zh-cn.php
@@ -23,17 +23,17 @@ $lang->aiapp->deleted = '已删除';
$lang->aiapp->clear = '清空';
$lang->aiapp->modelCurrent = '当前语言模型';
$lang->aiapp->categoryList = array('work' => '工作', 'personal' => '个人', 'life' => '生活', 'creative' => '创意', 'others' => '其它');
+$lang->aiapp->generate = '生成';
$lang->aiapp->regenerate = '重新生成';
$lang->aiapp->emptyNameWarning = '「%s」不能为空';
+$lang->aiapp->chatTip = '请在左侧输入字段内容,生成结果试试吧。';
+$lang->aiapp->noModel = array('尚未配置语言模型,请联系管理员或跳转至后台配置语言模型 。', '若已完成相关配置,请尝试重新加载 页面。');
$lang->aiapp->clearContext = '上下文内容已清除';
$lang->aiapp->newChatTip = '请在左侧输入字段内容,开启新对话。';
$lang->aiapp->disabledTip = '当前小程序已被禁用。';
-$lang->aiapp->generate = '生成';
-$lang->aiapp->chatTip = '请在左侧输入字段内容,生成结果试试吧。';
-$lang->aiapp->noModel = array('尚未配置语言模型,请联系管理员或跳转至后台配置语言模型 。', '若已完成相关配置,请尝试重新加载 页面。');
$lang->aiapp->continueasking = '继续追问';
$lang->aiapp->miniProgramSquare = '查看AI小程序列表';
-$lang->aiapp->view = '查看AI小程序详情';
-$lang->aiapp->miniProgramChat = '执行AI小程序';
$lang->aiapp->collectMiniProgram = '收藏AI小程序';
+$lang->aiapp->miniProgramChat = '执行AI小程序';
+$lang->aiapp->view = '查看AI小程序详情';
diff --git a/module/block/lang/de.php b/module/block/lang/de.php
index da8cec7bee..62283aeb94 100644
--- a/module/block/lang/de.php
+++ b/module/block/lang/de.php
@@ -497,7 +497,7 @@ $lang->block->themes['default'] = 'Default';
$lang->block->themes['blue'] = 'Young Blue';
$lang->block->themes['green'] = 'Green';
$lang->block->themes['red'] = 'Red';
-$lang->block->themes['pink'] = 'Pink';
+$lang->block->themes['purple'] = 'Purple';
$lang->block->visionTitle = 'The user interface of ZenTao is divided into 【Full feature interface】 and 【Operation Management Interface】.';
$lang->block->visions['rnd'] = new stdclass();
@@ -524,21 +524,12 @@ $lang->block->welcome->assignToMe = 'AssignToMe';
$lang->block->welcome->reviewList = array();
$lang->block->welcome->reviewList['story'] = 'Story';
-$lang->block->welcome->reviewList['feedback'] = 'Feedback';
-$lang->block->welcome->reviewList['testcase'] = 'Testcase';
$lang->block->welcome->assignList = array();
$lang->block->welcome->assignList['task'] = 'Task';
$lang->block->welcome->assignList['bug'] = 'Bug';
$lang->block->welcome->assignList['story'] = 'SRStroy';
$lang->block->welcome->assignList['testcase'] = 'TestCase';
-$lang->block->welcome->assignList['requirement'] = 'URStory';
-$lang->block->welcome->assignList['testtask'] = 'Testtask';
-$lang->block->welcome->assignList['issue'] = 'Issue';
-$lang->block->welcome->assignList['risk'] = 'Risk';
-$lang->block->welcome->assignList['qa'] = 'QA';
-$lang->block->welcome->assignList['meeting'] = 'Meeting';
-$lang->block->welcome->assignList['feedback'] = 'Feedback';
$lang->block->customModeTip = new stdClass();
$lang->block->customModeTip->common = 'There are 2 running modes of ZenTao: Light Mode and ALM Mode.';
diff --git a/module/block/lang/en.php b/module/block/lang/en.php
index 2b372490d1..ef5c4befd2 100644
--- a/module/block/lang/en.php
+++ b/module/block/lang/en.php
@@ -497,7 +497,7 @@ $lang->block->themes['default'] = 'Default';
$lang->block->themes['blue'] = 'Young Blue';
$lang->block->themes['green'] = 'Green';
$lang->block->themes['red'] = 'Red';
-$lang->block->themes['pink'] = 'Pink';
+$lang->block->themes['purple'] = 'Purple';
$lang->block->visionTitle = 'The user interface of ZenTao is divided into 【Full feature interface】 and 【Operation Management Interface】.';
$lang->block->visions['rnd'] = new stdclass();
@@ -524,21 +524,12 @@ $lang->block->welcome->assignToMe = 'AssignToMe';
$lang->block->welcome->reviewList = array();
$lang->block->welcome->reviewList['story'] = 'Story';
-$lang->block->welcome->reviewList['feedback'] = 'Feedback';
-$lang->block->welcome->reviewList['testcase'] = 'Testcase';
$lang->block->welcome->assignList = array();
$lang->block->welcome->assignList['task'] = 'Task';
$lang->block->welcome->assignList['bug'] = 'Bug';
$lang->block->welcome->assignList['story'] = 'SRStroy';
$lang->block->welcome->assignList['testcase'] = 'TestCase';
-$lang->block->welcome->assignList['requirement'] = 'URStory';
-$lang->block->welcome->assignList['testtask'] = 'Test Request';
-$lang->block->welcome->assignList['issue'] = 'Issue';
-$lang->block->welcome->assignList['risk'] = 'Risk';
-$lang->block->welcome->assignList['qa'] = 'QA';
-$lang->block->welcome->assignList['meeting'] = 'Meeting';
-$lang->block->welcome->assignList['feedback'] = 'Feedback';
$lang->block->customModeTip = new stdClass();
$lang->block->customModeTip->common = 'There are 2 running modes of ZenTao: Light Mode and ALM Mode.';
diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php
index 60b702edc5..351753849b 100644
--- a/module/block/lang/fr.php
+++ b/module/block/lang/fr.php
@@ -497,7 +497,7 @@ $lang->block->themes['default'] = 'Default';
$lang->block->themes['blue'] = 'Young Blue';
$lang->block->themes['green'] = 'Green';
$lang->block->themes['red'] = 'Red';
-$lang->block->themes['pink'] = 'Pink';
+$lang->block->themes['purple'] = 'Purple';
$lang->block->visionTitle = 'The user interface of ZenTao is divided into 【Full feature interface】 and 【Operation Management Interface】.';
$lang->block->visions['rnd'] = new stdclass();
@@ -524,8 +524,6 @@ $lang->block->welcome->assignToMe = 'AssignToMe';
$lang->block->welcome->reviewList = array();
$lang->block->welcome->reviewList['story'] = 'Story';
-$lang->block->welcome->reviewList['feedback'] = 'Feedback';
-$lang->block->welcome->reviewList['testcase'] = 'Testcase';
$lang->block->welcome->assignList = array();
$lang->block->welcome->assignList['task'] = 'Task';
diff --git a/module/bug/lang/de.php b/module/bug/lang/de.php
index de1967c286..71b86431ce 100644
--- a/module/bug/lang/de.php
+++ b/module/bug/lang/de.php
@@ -398,10 +398,10 @@ $lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
$lang->bug->featureBar['browse']['openedbyme'] = $lang->bug->openedByMe;
$lang->bug->featureBar['browse']['assigntome'] = $lang->bug->assignToMe;
$lang->bug->featureBar['browse']['resolvedbyme'] = $lang->bug->resolvedByMe;
+$lang->bug->featureBar['browse']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->featureBar['browse']['more'] = $lang->more;
$lang->bug->moreSelects['browse']['more']['unresolved'] = $lang->bug->unResolved;
-$lang->bug->moreSelects['browse']['more']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->moreSelects['browse']['more']['unconfirmed'] = $lang->bug->unconfirmed;
$lang->bug->moreSelects['browse']['more']['assigntonull'] = $lang->bug->assignToNull;
$lang->bug->moreSelects['browse']['more']['longlifebugs'] = $lang->bug->longLifeBugs;
diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php
index 9c3d311730..1c9bd860a6 100644
--- a/module/bug/lang/en.php
+++ b/module/bug/lang/en.php
@@ -398,10 +398,10 @@ $lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
$lang->bug->featureBar['browse']['openedbyme'] = $lang->bug->openedByMe;
$lang->bug->featureBar['browse']['assigntome'] = $lang->bug->assignToMe;
$lang->bug->featureBar['browse']['resolvedbyme'] = $lang->bug->resolvedByMe;
+$lang->bug->featureBar['browse']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->featureBar['browse']['more'] = $lang->more;
$lang->bug->moreSelects['browse']['more']['unresolved'] = $lang->bug->unResolved;
-$lang->bug->moreSelects['browse']['more']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->moreSelects['browse']['more']['unconfirmed'] = $lang->bug->unconfirmed;
$lang->bug->moreSelects['browse']['more']['assigntonull'] = $lang->bug->assignToNull;
$lang->bug->moreSelects['browse']['more']['longlifebugs'] = $lang->bug->longLifeBugs;
diff --git a/module/bug/lang/fr.php b/module/bug/lang/fr.php
index e5f71100d2..46cac99a10 100644
--- a/module/bug/lang/fr.php
+++ b/module/bug/lang/fr.php
@@ -398,10 +398,10 @@ $lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
$lang->bug->featureBar['browse']['openedbyme'] = $lang->bug->openedByMe;
$lang->bug->featureBar['browse']['assigntome'] = $lang->bug->assignToMe;
$lang->bug->featureBar['browse']['resolvedbyme'] = $lang->bug->resolvedByMe;
+$lang->bug->featureBar['browse']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->featureBar['browse']['more'] = $lang->more;
$lang->bug->moreSelects['browse']['more']['unresolved'] = $lang->bug->unResolved;
-$lang->bug->moreSelects['browse']['more']['assignedbyme'] = $lang->bug->assignedByMe;
$lang->bug->moreSelects['browse']['more']['unconfirmed'] = $lang->bug->unconfirmed;
$lang->bug->moreSelects['browse']['more']['assigntonull'] = $lang->bug->assignToNull;
$lang->bug->moreSelects['browse']['more']['longlifebugs'] = $lang->bug->longLifeBugs;
diff --git a/module/chart/lang/de.php b/module/chart/lang/de.php
index 65cf8903e7..04c2ad8207 100644
--- a/module/chart/lang/de.php
+++ b/module/chart/lang/de.php
@@ -25,6 +25,9 @@ $lang->chart->noChart = 'No Chart';
$lang->chart->noChartSelected = 'Please select one chart.';
$lang->chart->chartMaxChecked = 'You can only select up to %s charts.';
+$lang->chart->featureBar = array();
+$lang->chart->featureBar['preview'] = array();
+
$lang->chart->aggList = array();
$lang->chart->aggList['count'] = 'Count';
$lang->chart->aggList['distinct'] = 'Count after distinct';
diff --git a/module/chart/lang/en.php b/module/chart/lang/en.php
index 65cf8903e7..04c2ad8207 100644
--- a/module/chart/lang/en.php
+++ b/module/chart/lang/en.php
@@ -25,6 +25,9 @@ $lang->chart->noChart = 'No Chart';
$lang->chart->noChartSelected = 'Please select one chart.';
$lang->chart->chartMaxChecked = 'You can only select up to %s charts.';
+$lang->chart->featureBar = array();
+$lang->chart->featureBar['preview'] = array();
+
$lang->chart->aggList = array();
$lang->chart->aggList['count'] = 'Count';
$lang->chart->aggList['distinct'] = 'Count after distinct';
diff --git a/module/chart/lang/fr.php b/module/chart/lang/fr.php
index 65cf8903e7..04c2ad8207 100644
--- a/module/chart/lang/fr.php
+++ b/module/chart/lang/fr.php
@@ -25,6 +25,9 @@ $lang->chart->noChart = 'No Chart';
$lang->chart->noChartSelected = 'Please select one chart.';
$lang->chart->chartMaxChecked = 'You can only select up to %s charts.';
+$lang->chart->featureBar = array();
+$lang->chart->featureBar['preview'] = array();
+
$lang->chart->aggList = array();
$lang->chart->aggList['count'] = 'Count';
$lang->chart->aggList['distinct'] = 'Count after distinct';
diff --git a/module/common/lang/de.php b/module/common/lang/de.php
index 2c3222683b..3a4ff109c2 100644
--- a/module/common/lang/de.php
+++ b/module/common/lang/de.php
@@ -118,9 +118,9 @@ $lang->showMoreInfo = 'Display more information';
$lang->hideMoreInfo = 'Hide more information';
$lang->saveSuccess = 'Gespeichert';
$lang->importSuccess = 'Gespeichert';
-$lang->deleteSuccess = 'Gelöscht';
$lang->fail = 'Fehlgeschlagen';
$lang->addFiles = 'Hinzufügen ';
+$lang->deleteSuccess = 'Gelöscht';
$lang->files = 'Datei ';
$lang->pasteText = 'Einfügen';
$lang->uploadImages = 'Hochladen';
@@ -144,9 +144,6 @@ $lang->noticeOkFile = 'Aus Sicherheitsgrü nden muss Ihr Adminkonto bestätig
$lang->noticeDrag = 'Click to add or drag to upload, no more than %s';
$lang->allProgress = 'All Progress';
-$lang->fieldDisplaySetting = 'Einstellungen der Feldanzeige';
-$lang->fieldSettingTip = 'Die folgenden Felder sind standardmäßig eingeklappt, klicken Sie auf die Schaltfläche "Weitere Felder anzeigen", um die Ansicht zu erweitern. Wenn Sie möchten, dass einige Felder nicht standardmäßig eingeklappt sind, können Sie dies mit einem Stift festlegen.';
-
$lang->fieldDisplaySetting = 'Field Display Setting';
$lang->fieldSettingTip = 'The following fields are collapsed by default, click on the "Show more fields" button to expand the view, if you want some fields not to be collapsed by default, you can fix it with a pin.';
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 2de807048a..a3f41ced68 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -120,6 +120,7 @@ $lang->saveSuccess = 'Saved';
$lang->importSuccess = 'Saved';
$lang->fail = 'Fail';
$lang->addFiles = 'Added Files ';
+$lang->deleteSuccess = 'Deleted Success';
$lang->files = 'Files ';
$lang->pasteText = 'Multi-line Paste';
$lang->uploadImages = 'Multi-image Upload';
diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php
index 6426175a70..6c23835d55 100644
--- a/module/common/lang/fr.php
+++ b/module/common/lang/fr.php
@@ -118,9 +118,9 @@ $lang->showMoreInfo = 'Display more information';
$lang->hideMoreInfo = 'Hide more information';
$lang->saveSuccess = 'Sauvegardé';
$lang->importSuccess = 'Sauvé';
-$lang->deleteSuccess = 'Supprimé';
$lang->fail = 'Echec';
$lang->addFiles = 'Fichiers ajoutés ';
+$lang->deleteSuccess = 'Supprimé';
$lang->files = 'Fichiers ';
$lang->pasteText = 'Collage Multi-lignes';
$lang->uploadImages = 'Upload Multi-images';
@@ -144,9 +144,6 @@ $lang->noticeOkFile = 'For security reasons, your Admin account has to be con
$lang->noticeDrag = 'Click to add or drag to upload, no more than %s';
$lang->allProgress = 'All Progress';
-$lang->fieldDisplaySetting = 'Paramètres d\'affichage des champs';
-$lang->fieldSettingTip = 'Les champs suivants sont réduits par défaut, cliquez sur le bouton "Afficher plus de champs" pour développer la vue. Si vous souhaitez que certains champs ne soient pas réduits par défaut, vous pouvez les fixer avec une épingle.';
-
$lang->fieldDisplaySetting = 'Field Display Setting';
$lang->fieldSettingTip = 'The following fields are collapsed by default, click on the "Show more fields" button to expand the view, if you want some fields not to be collapsed by default, you can fix it with a pin.';
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 13fd5ea678..4f99160060 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -118,9 +118,9 @@ $lang->showMoreInfo = '显示更多信息';
$lang->hideMoreInfo = '隐藏更多信息';
$lang->saveSuccess = '保存成功';
$lang->importSuccess = '导入成功';
-$lang->deleteSuccess = '删除成功';
$lang->fail = '失败';
$lang->addFiles = '上传了附件 ';
+$lang->deleteSuccess = '删除成功';
$lang->files = '附件 ';
$lang->pasteText = '多项录入';
$lang->uploadImages = '多图上传 ';
diff --git a/module/cron/lang/de.php b/module/cron/lang/de.php
index e6d155f0d8..552a1eb2ee 100644
--- a/module/cron/lang/de.php
+++ b/module/cron/lang/de.php
@@ -56,3 +56,4 @@ $lang->cron->notice->mon = 'Bereich:1-12';
$lang->cron->notice->dow = 'Bereich:0-6';
$lang->cron->notice->help = 'Hinweis:nach einem Server Neustart oder wenn die geplanten Tasks nicht funktionieren, bedeutet das, dass die Aufgaben nicht ausgeführt werden. Sie können die Aufgaben neustarten indem Sie 【Neustart】 klicken oder diese Seite neu laden. Wenn sich die Zeit der letzen Ausführung ändert, beduetet das, dass die geplanten Tasks funktionieren.';
$lang->cron->notice->errorRule = '"%s" ist nicht gültig';
+$lang->cron->notice->errorType = 'You cannot create scheduled tasks of operating system command types';
diff --git a/module/cron/lang/fr.php b/module/cron/lang/fr.php
index 73a87a44b8..b8af029826 100644
--- a/module/cron/lang/fr.php
+++ b/module/cron/lang/fr.php
@@ -56,3 +56,4 @@ $lang->cron->notice->mon = 'Range:1-12';
$lang->cron->notice->dow = 'Range:0-6';
$lang->cron->notice->help = "Note : Si le serveur est redémarré ou que le Cron ne fonctionne pas, cela signifie que le Cron s'est arrêté. Vous pouvez le redémarrer en cliquant sur 【Restart】 ou en rafraichissant cette page. Si la dernière heure d'exécution est modifiée, cela signifie que le Cron est en cours d'exécution.";
$lang->cron->notice->errorRule = '"%s" invalide';
+$lang->cron->notice->errorType = 'You cannot create scheduled tasks of operating system command types';
diff --git a/module/cron/lang/zh-cn.php b/module/cron/lang/zh-cn.php
index c0a5e5bce4..e95615ef8e 100644
--- a/module/cron/lang/zh-cn.php
+++ b/module/cron/lang/zh-cn.php
@@ -43,6 +43,7 @@ $lang->cron->confirmTurnon = '是否关闭计划任务?';
$lang->cron->introduction = <<计划任务功能可以定时执行诸如更新燃尽图、备份等操作,免除自己布置计划任务。
EOD;
+
$lang->cron->confirmOpen = <<是否开启该功能?打开计划任务
EOD;
diff --git a/module/extension/lang/de.php b/module/extension/lang/de.php
index b58b81b4b2..38b8e4231c 100644
--- a/module/extension/lang/de.php
+++ b/module/extension/lang/de.php
@@ -74,6 +74,10 @@ $lang->extension->byUpdatedTime = 'Zuletzt bearbeitet';
$lang->extension->bySearch = 'Suche';
$lang->extension->byCategory = 'Kategorie';
+$lang->extension->featureBar['browse']['installed'] = $lang->extension->installed;
+$lang->extension->featureBar['browse']['deactivated'] = $lang->extension->deactivated;
+$lang->extension->featureBar['browse']['available'] = $lang->extension->available;
+
$lang->extension->installFailed = '%s fehlgeschlagen. Error:';
$lang->extension->uninstallFailed = 'Deinstallation fehlgeschlagen. Error:';
$lang->extension->confirmUninstall = 'Deinstallation der Erweiterung führt zur Anpassung der Datenbank. Möchten Sie deinstallieren?';
diff --git a/module/extension/lang/en.php b/module/extension/lang/en.php
index bf57f97c6c..8d6978cd84 100644
--- a/module/extension/lang/en.php
+++ b/module/extension/lang/en.php
@@ -74,6 +74,10 @@ $lang->extension->byUpdatedTime = 'Latest Update';
$lang->extension->bySearch = 'Search';
$lang->extension->byCategory = 'Category';
+$lang->extension->featureBar['browse']['installed'] = $lang->extension->installed;
+$lang->extension->featureBar['browse']['deactivated'] = $lang->extension->deactivated;
+$lang->extension->featureBar['browse']['available'] = $lang->extension->available;
+
$lang->extension->installFailed = '%s failed. Error:';
$lang->extension->uninstallFailed = 'Uninstallation failed. Error:';
$lang->extension->confirmUninstall = 'Uninstallation will delete or change related database. Do you want to uninstall it?';
diff --git a/module/extension/lang/fr.php b/module/extension/lang/fr.php
index b618c5cecf..13e013e7be 100644
--- a/module/extension/lang/fr.php
+++ b/module/extension/lang/fr.php
@@ -74,6 +74,10 @@ $lang->extension->byUpdatedTime = 'Dernier Update';
$lang->extension->bySearch = 'Rechercher';
$lang->extension->byCategory = 'Category';
+$lang->extension->featureBar['browse']['installed'] = $lang->extension->installed;
+$lang->extension->featureBar['browse']['deactivated'] = $lang->extension->deactivated;
+$lang->extension->featureBar['browse']['available'] = $lang->extension->available;
+
$lang->extension->installFailed = '%s a échoué. Erreur:';
$lang->extension->uninstallFailed = 'Echec de désinstallation. Erreur:';
$lang->extension->confirmUninstall = 'La désinstallation va supprimer ou changer la base de données. Voulez-vous la désinstaller malgré tout ?';
diff --git a/module/file/lang/zh-cn.php b/module/file/lang/zh-cn.php
index 450d859356..bbf772f11e 100755
--- a/module/file/lang/zh-cn.php
+++ b/module/file/lang/zh-cn.php
@@ -70,6 +70,7 @@ $lang->file->errorFileSize = " 文件大小已经超过%s,可能不能成
$lang->file->errorFileUpload = " 文件上传失败,文件大小可能超出限制";
$lang->file->errorFileFormate = " 文件上传失败,文件格式不在规定范围内";
$lang->file->errorFileMove = " 文件上传失败,移动文件时出错";
+$lang->file->errorFileCount = " 只能上传 %s 个文件,超出数量限制的文件无法上传。";
$lang->file->dangerFile = " 您选择的文件存在安全风险,系统将不予上传。";
$lang->file->errorSuffix = '压缩包格式错误,只能上传zip压缩包!';
$lang->file->errorExtract = '解压缩失败!可能文件已经损坏,或压缩包里含有非法上传文件。';
@@ -77,7 +78,6 @@ $lang->file->errorUploadEmpty = '没有等待上传的文件';
$lang->file->fileNotFound = '未找到该文件,可能物理文件已被删除!';
$lang->file->fileContentEmpty = '上传文件内容为空,请检查后重新上传。';
$lang->file->bizGuide = '如需使用Excel导入导出功能,可升级到 %s';
-$lang->file->errorFileCount = " 只能上传 %s 个文件,超出数量限制的文件无法上传。";
$lang->file->uploadError[1] = "上传的文件大小超过了限制,请修改 php.ini 中 upload_max_filesize 与 post_max_size 选项限制的值";
$lang->file->uploadError[2] = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php
index d7c9f55598..14d6dd13e1 100644
--- a/module/group/lang/fr.php
+++ b/module/group/lang/fr.php
@@ -317,7 +317,7 @@ $lang->group->package->exportOffice = 'Export Office';
$lang->group->package->browseFeedback = 'Browse Feedback';
$lang->group->package->manageFeedback = 'Manage Feedback';
$lang->group->package->importFeedback = 'Import Feedback';
-$lang->group->package->handleFeedback = 'Handle Feedback';
+$lang->group->package->manageFeedback = 'Manage Feedback';
$lang->group->package->faq = 'Faq';
$lang->group->package->browseTicket = 'Browse Ticket';
$lang->group->package->manageTicket = 'Manage Ticket';
@@ -592,6 +592,5 @@ $lang->group->package->deleteArtifactrepo = 'Delete Artifact Repo';
$lang->group->package->browseApplication = 'Application List';
$lang->group->package->mangeApplication = 'Manage Application';
$lang->group->package->trainPracticeLib = 'Practice Library';
-$lang->group->package->other = 'Other';
include (dirname(__FILE__) . '/resource.php');
diff --git a/module/program/lang/de.php b/module/program/lang/de.php
index d58229a36b..09b0f174f8 100644
--- a/module/program/lang/de.php
+++ b/module/program/lang/de.php
@@ -190,7 +190,6 @@ $lang->program->featureBar['project']['closed'] = 'Closed';
$lang->program->featureBar['productview']['all'] = 'All';
$lang->program->featureBar['productview']['unclosed'] = 'Unclosed';
-$lang->program->featureBar['productview']['end'] = 'End';
$lang->program->featureBar['productview']['wait'] = 'Waiting';
$lang->program->featureBar['productview']['doing'] = 'Doing';
$lang->program->featureBar['productview']['more'] = $lang->more;
@@ -220,7 +219,7 @@ $lang->program->project = 'Projects';
$lang->program->totalBugs = 'Total Bugs';
$lang->program->latestReleaseDate = 'Latest Release Date';
$lang->program->latestRelease = 'Latest Release';
-$lang->program->manageLine = 'Verwalte Produktlinie';
+$lang->program->manageLine = 'Manage Product Line';
$lang->program->checkedProducts = '%total% products selected.';
$lang->program->programBudget = 'Program Budget';
diff --git a/module/program/lang/en.php b/module/program/lang/en.php
index f7cf7eb214..e51ebf02e7 100644
--- a/module/program/lang/en.php
+++ b/module/program/lang/en.php
@@ -190,7 +190,6 @@ $lang->program->featureBar['project']['closed'] = 'Closed';
$lang->program->featureBar['productview']['all'] = 'All';
$lang->program->featureBar['productview']['unclosed'] = 'Unclosed';
-$lang->program->featureBar['productview']['end'] = 'End';
$lang->program->featureBar['productview']['wait'] = 'Waiting';
$lang->program->featureBar['productview']['doing'] = 'Doing';
$lang->program->featureBar['productview']['more'] = $lang->more;
diff --git a/module/program/lang/fr.php b/module/program/lang/fr.php
index e1891f8c5f..0919507797 100644
--- a/module/program/lang/fr.php
+++ b/module/program/lang/fr.php
@@ -190,7 +190,6 @@ $lang->program->featureBar['project']['closed'] = 'Fermées';
$lang->program->featureBar['productview']['all'] = 'All';
$lang->program->featureBar['productview']['unclosed'] = 'Unclosed';
-$lang->program->featureBar['productview']['end'] = 'End';
$lang->program->featureBar['productview']['wait'] = 'Waiting';
$lang->program->featureBar['productview']['doing'] = 'Doing';
$lang->program->featureBar['productview']['more'] = $lang->more;
@@ -220,7 +219,7 @@ $lang->program->project = 'Projects';
$lang->program->totalBugs = 'Total Bugs';
$lang->program->latestReleaseDate = 'Latest Release Date';
$lang->program->latestRelease = 'Latest Release';
-$lang->program->manageLine = 'Gérer Ligne Produit';
+$lang->program->manageLine = 'Manage Product Line';
$lang->program->checkedProducts = '%total% products selected.';
$lang->program->programBudget = 'Program Budget';
diff --git a/module/project/lang/de.php b/module/project/lang/de.php
index 10ef663be2..4036479ef5 100644
--- a/module/project/lang/de.php
+++ b/module/project/lang/de.php
@@ -47,6 +47,7 @@ $lang->project->unbindWhitelist = "{$lang->projectCommon} Remove Whitelist";
$lang->project->manageProducts = "Manage {$lang->productCommon}s";
$lang->project->manageOtherProducts = "Manage Other {$lang->productCommon}s";
$lang->project->manageProductPlan = "Manage {$lang->productCommon}s And Plans";
+$lang->project->managePlans = 'Manage Plans';
$lang->project->copyTitle = "Please select an {$lang->projectCommon} to copy";
$lang->project->errorSameProducts = "{$lang->projectCommon} cannot be associated with multiple identical {$lang->productCommon}s.";
$lang->project->errorSameBranches = "{$lang->projectCommon} cannot be associated with multiple identical branches.";
@@ -147,6 +148,7 @@ $lang->project->estimate = 'Estimates';
$lang->project->consume = 'Cost';
$lang->project->surplus = 'Left';
$lang->project->progress = 'Progress';
+$lang->project->allProgress = 'All Progress';
$lang->project->weekProgress = 'This Week Progress';
$lang->project->dateRange = 'Plan Duration';
$lang->project->to = ' to ';
@@ -172,7 +174,6 @@ $lang->project->leftHours = 'Left Hours';
$lang->project->children = "Child {$lang->projectCommon}";
$lang->project->parent = 'Parent Program';
$lang->project->allStories = 'All Stories';
-$lang->project->allProgress = 'All Progress';
$lang->project->doneStories = 'Finished Stories';
$lang->project->doneProjects = 'Finished';
$lang->project->allInput = 'Total Input';
@@ -248,14 +249,6 @@ $lang->project->allSummary = "Total {$lang->projectCommon}s: %s, Wai
$lang->project->checkedSummary = 'Seleted: %total%.';
$lang->project->checkedAllSummary = 'Seleted: %total%, Wait: %wait%, Doing: %doing%, Suspended: %suspended%, Closed: %closed%.';
-$lang->project->tip = new stdclass();
-$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
-$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
-$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
-$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
-$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
-$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
-
$lang->project->error = new stdclass();
$lang->project->error->existProductName = "{$lang->productCommon} name already exists.";
$lang->project->error->budgetGe0 = '『Budget』must be greater than or equal to 0.';
@@ -264,6 +257,14 @@ $lang->project->error->productNotEmpty = "Please link {$lang->productCommon}s o
$lang->project->error->emptyBranch = 'Branch can not be empty!';
$lang->project->error->endLessBegin = 'The end date must be greater than the start date.';
+$lang->project->tip = new stdclass();
+$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
+$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
+$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
+$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
+$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
+$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
+
$lang->project->tenThousand = 'Ten Thousand';
$lang->project->hundredMillion = 'Hundred Million';
@@ -350,6 +351,10 @@ $lang->project->multipleList['0'] = 'No';
$lang->project->acls['private'] = 'Private';
$lang->project->acls['open'] = 'Open';
+$lang->project->shortAclList['open'] = 'Open';
+$lang->project->shortAclList['private'] = 'Private';
+$lang->project->shortAclList['program'] = 'Open within the program';
+
$lang->project->subAclList['open'] = "Open (accessible with {$lang->projectCommon} view permissions)";
$lang->project->subAclList['private'] = "Private (Only the {$lang->projectCommon} leader, team members and stakeholders can access)";
$lang->project->subAclList['program'] = "Open in the program (all upper-level program team leaders and stakeholders, the {$lang->projectCommon} leader, team members and stakeholders can access)";
diff --git a/module/project/lang/en.php b/module/project/lang/en.php
index 00aa92c39c..4036479ef5 100644
--- a/module/project/lang/en.php
+++ b/module/project/lang/en.php
@@ -47,6 +47,7 @@ $lang->project->unbindWhitelist = "{$lang->projectCommon} Remove Whitelist";
$lang->project->manageProducts = "Manage {$lang->productCommon}s";
$lang->project->manageOtherProducts = "Manage Other {$lang->productCommon}s";
$lang->project->manageProductPlan = "Manage {$lang->productCommon}s And Plans";
+$lang->project->managePlans = 'Manage Plans';
$lang->project->copyTitle = "Please select an {$lang->projectCommon} to copy";
$lang->project->errorSameProducts = "{$lang->projectCommon} cannot be associated with multiple identical {$lang->productCommon}s.";
$lang->project->errorSameBranches = "{$lang->projectCommon} cannot be associated with multiple identical branches.";
@@ -248,14 +249,6 @@ $lang->project->allSummary = "Total {$lang->projectCommon}s: %s, Wai
$lang->project->checkedSummary = 'Seleted: %total%.';
$lang->project->checkedAllSummary = 'Seleted: %total%, Wait: %wait%, Doing: %doing%, Suspended: %suspended%, Closed: %closed%.';
-$lang->project->tip = new stdclass();
-$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
-$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
-$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
-$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
-$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
-$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
-
$lang->project->error = new stdclass();
$lang->project->error->existProductName = "{$lang->productCommon} name already exists.";
$lang->project->error->budgetGe0 = '『Budget』must be greater than or equal to 0.';
@@ -264,6 +257,14 @@ $lang->project->error->productNotEmpty = "Please link {$lang->productCommon}s o
$lang->project->error->emptyBranch = 'Branch can not be empty!';
$lang->project->error->endLessBegin = 'The end date must be greater than the start date.';
+$lang->project->tip = new stdclass();
+$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
+$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
+$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
+$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
+$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
+$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
+
$lang->project->tenThousand = 'Ten Thousand';
$lang->project->hundredMillion = 'Hundred Million';
diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php
index 5cb2cdbb95..4036479ef5 100644
--- a/module/project/lang/fr.php
+++ b/module/project/lang/fr.php
@@ -47,6 +47,7 @@ $lang->project->unbindWhitelist = "{$lang->projectCommon} Remove Whitelist";
$lang->project->manageProducts = "Manage {$lang->productCommon}s";
$lang->project->manageOtherProducts = "Manage Other {$lang->productCommon}s";
$lang->project->manageProductPlan = "Manage {$lang->productCommon}s And Plans";
+$lang->project->managePlans = 'Manage Plans';
$lang->project->copyTitle = "Please select an {$lang->projectCommon} to copy";
$lang->project->errorSameProducts = "{$lang->projectCommon} cannot be associated with multiple identical {$lang->productCommon}s.";
$lang->project->errorSameBranches = "{$lang->projectCommon} cannot be associated with multiple identical branches.";
@@ -147,6 +148,7 @@ $lang->project->estimate = 'Estimates';
$lang->project->consume = 'Cost';
$lang->project->surplus = 'Left';
$lang->project->progress = 'Progress';
+$lang->project->allProgress = 'All Progress';
$lang->project->weekProgress = 'This Week Progress';
$lang->project->dateRange = 'Plan Duration';
$lang->project->to = ' to ';
@@ -172,7 +174,6 @@ $lang->project->leftHours = 'Left Hours';
$lang->project->children = "Child {$lang->projectCommon}";
$lang->project->parent = 'Parent Program';
$lang->project->allStories = 'All Stories';
-$lang->project->allProgress = 'All Progress';
$lang->project->doneStories = 'Finished Stories';
$lang->project->doneProjects = 'Finished';
$lang->project->allInput = 'Total Input';
@@ -213,7 +214,7 @@ $lang->project->typeList = array();
$lang->project->typeList['my'] = "{$lang->projectCommon}s Ownedbyme";
$lang->project->typeList['other'] = "Other {$lang->projectCommon}s";
-$lang->project->stageByList['product'] = "Create by {$lang->projectCommon}";
+$lang->project->stageByList['project'] = "Create by {$lang->projectCommon}";
$lang->project->stageByList['product'] = "Create by {$lang->productCommon}";
$lang->project->stageBySwitchList['0'] = 'Close';
@@ -248,14 +249,6 @@ $lang->project->allSummary = "Total {$lang->projectCommon}s: %s, Wai
$lang->project->checkedSummary = 'Seleted: %total%.';
$lang->project->checkedAllSummary = 'Seleted: %total%, Wait: %wait%, Doing: %doing%, Suspended: %suspended%, Closed: %closed%.';
-$lang->project->tip = new stdclass();
-$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
-$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
-$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
-$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
-$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
-$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
-
$lang->project->error = new stdclass();
$lang->project->error->existProductName = "{$lang->productCommon} name already exists.";
$lang->project->error->budgetGe0 = '『Budget』must be greater than or equal to 0.';
@@ -264,6 +257,14 @@ $lang->project->error->productNotEmpty = "Please link {$lang->productCommon}s o
$lang->project->error->emptyBranch = 'Branch can not be empty!';
$lang->project->error->endLessBegin = 'The end date must be greater than the start date.';
+$lang->project->tip = new stdclass();
+$lang->project->tip->closed = 'The project has been closed. Re-close is not available.';
+$lang->project->tip->notSuspend = 'The project has been closed. Suspend is not available.';
+$lang->project->tip->suspended = 'The project has been suspended. Re-suspend is not available.';
+$lang->project->tip->actived = 'The project has been activated. Re-activated is not available.';
+$lang->project->tip->group = "It's a Kanban project. Editing privilege group is not available.";
+$lang->project->tip->whitelist = "It's a public project with open permissions. No need to edit whitelists.";
+
$lang->project->tenThousand = 'Ten Thousand';
$lang->project->hundredMillion = 'Hundred Million';
@@ -350,6 +351,10 @@ $lang->project->multipleList['0'] = 'No';
$lang->project->acls['private'] = 'Private';
$lang->project->acls['open'] = 'Open';
+$lang->project->shortAclList['open'] = 'Open';
+$lang->project->shortAclList['private'] = 'Private';
+$lang->project->shortAclList['program'] = 'Open within the program';
+
$lang->project->subAclList['open'] = "Open (accessible with {$lang->projectCommon} view permissions)";
$lang->project->subAclList['private'] = "Private (Only the {$lang->projectCommon} leader, team members and stakeholders can access)";
$lang->project->subAclList['program'] = "Open in the program (all upper-level program team leaders and stakeholders, the {$lang->projectCommon} leader, team members and stakeholders can access)";
diff --git a/module/release/lang/de.php b/module/release/lang/de.php
index d1d6fa8299..661b1471fc 100644
--- a/module/release/lang/de.php
+++ b/module/release/lang/de.php
@@ -28,9 +28,9 @@ $lang->release->confirmUnlinkStory = 'Möchten Sie diese Story löschen?';
$lang->release->confirmUnlinkBug = 'Möchten Sie diesen Bug löschen?';
$lang->release->existBuild = '『Build』『%s』 existiert bereits. Sie können den 『name』 ändern oder ein anderes 『build』 wählen.';
$lang->release->noRelease = 'Keine Releases. ';
+$lang->release->errorDate = 'The release date should not be greater than today.';
$lang->release->confirmActivate = 'Do you want to activate this release?';
$lang->release->confirmTerminate = 'Do you want to pause this release?';
-$lang->release->errorDate = 'The release date should not be greater than today.';
$lang->release->basicInfo = 'Basis Info';
diff --git a/module/score/lang/fr.php b/module/score/lang/fr.php
index 10bf2dfd9e..28e2d27f15 100644
--- a/module/score/lang/fr.php
+++ b/module/score/lang/fr.php
@@ -65,7 +65,7 @@ $lang->score->methods['todo']['create'] = 'Cr?er Entr?e Agenda';
$lang->score->methods['story']['create'] = 'Cr?er Story';
$lang->score->methods['story']['close'] = 'Fermer Story';
$lang->score->methods['bug']['create'] = 'Signaler un Bug';
-$lang->score->methods['bug']['confirmBug'] = 'Confirmer Bug';
+$lang->score->methods['bug']['confirm'] = 'Confirmer Bug';
$lang->score->methods['bug']['createFormCase'] = 'Cr?er Formulaire Bug';
$lang->score->methods['bug']['resolve'] = 'R?soudre Bug';
$lang->score->methods['bug']['saveTplModal'] = 'Sauver Mod?le';
@@ -83,7 +83,7 @@ $lang->score->methods['search']['saveQueryAdvanced'] = 'Recherche Avanc?e';
$lang->score->extended['user']['changePassword'] = "Obtenez ##strength,1## points, si le mot de passe est moyen. Obtenez ##strength,2## points, s'il est fort.";
$lang->score->extended['execution']['close'] = "Apr?s que le projet soit ferm?, le Project Manager obtient ##manager,close## points et les membres de l'?quipe obtiennent ##member,close## points. S'il a ?t? r?alis? dans les temps ou plus vite, le Project Manager obtient ##manager,onTime## points et les membres de l'?quipe obtiennent ##member,onTime## points.";
$lang->score->extended['bug']['resolve'] = 'Apr?s un bug r?solu, obtenez des extra-points en fonction de sa s?v?rit?. S1, + ##severity,3##; S2 + ##severity,2##, S3 + ##severity,1##.';
-$lang->score->extended['bug']['confirmBug'] = 'Apr?s un bug confirm?, obtenez des extra-points en fonction de sa s?v?rit?. S1, + ##severity,3##; S2 + ##severity,2##, S3 + ##severity,1##.';
+$lang->score->extended['bug']['confirm'] = 'Apr?s un bug confirm?, obtenez des extra-points en fonction de sa s?v?rit?. S1, + ##severity,3##; S2 + ##severity,2##, S3 + ##severity,1##.';
$lang->score->extended['task']['finish'] = 'Apr?s une t?che accomplie, obtenez des extra-points par arrondi(heures-homme / 10 Estim?s / Co?t) + Points de Priorit? (p1 ##pri,1##, p2 ##pri,2##).';
$lang->score->extended['story']['close'] = "Apr?s la fermeture d'une Story, son cr?ateur recevra extra ##createID## points.";
diff --git a/module/testcase/lang/de.php b/module/testcase/lang/de.php
index e87b0a4c45..2e2f2137b9 100644
--- a/module/testcase/lang/de.php
+++ b/module/testcase/lang/de.php
@@ -203,15 +203,13 @@ $lang->testcase->ditto = 'Dito';
$lang->testcase->dittoNotice = "This Case is not linked to the {$lang->productCommon} as the last one is!";
$lang->testcase->confirmUnlinkTesttask = 'The case [%s] is already associated in the testtask order of the previous branch/platform, after adjusting the branch/platform, it will be removed from the test list of the previous branch/platform, please confirm whether to continue to modify.';
-$lang->testcase->reviewList[0] = 'Nein';
-$lang->testcase->reviewList[1] = 'Ja';
-
-$lang->testcase->autoList = array();
$lang->testcase->autoList[''] = '';
$lang->testcase->autoList['auto'] = 'Yes';
$lang->testcase->autoList['no'] = 'No';
-$lang->testcase->priList[0] = '';
+$lang->testcase->reviewList[0] = '否';
+$lang->testcase->reviewList[1] = '是';
+
$lang->testcase->priList[3] = 3;
$lang->testcase->priList[1] = 1;
$lang->testcase->priList[2] = 2;
@@ -314,18 +312,19 @@ $lang->testcase->settingCase = 'Testcase';
$lang->testcase->settingPri = 'Priority';
$lang->testcase->settingGroup = 'Step Group';
-$lang->testcase->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
-$lang->testcase->saveFail = 'Save failed';
-$lang->testcase->set2Scene = 'Set as Scene';
-$lang->testcase->set2Testcase = 'Set as Testcase';
-$lang->testcase->clearSetting = 'Clear Settings';
-$lang->testcase->setModule = 'Set scene module';
-$lang->testcase->pickModule = 'Please select a module';
-$lang->testcase->clearBefore = 'Clear previous scenes';
-$lang->testcase->clearAfter = 'Clear the following scenes';
-$lang->testcase->clearCurrent = 'Clear the current scene';
-$lang->testcase->removeGroup = 'Remove Group';
-$lang->testcase->set2Group = 'Set as Group';
+$lang->testcase->jsLng = new stdclass();
+$lang->testcase->jsLng->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
+$lang->testcase->jsLng->saveFail = 'Save failed';
+$lang->testcase->jsLng->set2Scene = 'Set as Scene';
+$lang->testcase->jsLng->set2Testcase = 'Set as Testcase';
+$lang->testcase->jsLng->clearSetting = 'Clear Settings';
+$lang->testcase->jsLng->setModule = 'Set scene module';
+$lang->testcase->jsLng->pickModule = 'Please select a module';
+$lang->testcase->jsLng->clearBefore = 'Clear previous scenes';
+$lang->testcase->jsLng->clearAfter = 'Clear the following scenes';
+$lang->testcase->jsLng->clearCurrent = 'Clear the current scene';
+$lang->testcase->jsLng->removeGroup = 'Remove Group';
+$lang->testcase->jsLng->set2Group = 'Set as Group';
$lang->testcase->exportTemplet = 'Export Template';
diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php
index daec53734a..9f44fd2dd7 100644
--- a/module/testcase/lang/en.php
+++ b/module/testcase/lang/en.php
@@ -203,15 +203,13 @@ $lang->testcase->ditto = 'Ditto';
$lang->testcase->dittoNotice = "This Case is not linked to the {$lang->productCommon} as the last one is!";
$lang->testcase->confirmUnlinkTesttask = 'The case [%s] is already associated in the testtask order of the previous branch/platform, after adjusting the branch/platform, it will be removed from the test list of the previous branch/platform, please confirm whether to continue to modify.';
-$lang->testcase->reviewList[0] = 'NO';
-$lang->testcase->reviewList[1] = 'YES';
-
-$lang->testcase->autoList = array();
$lang->testcase->autoList[''] = '';
$lang->testcase->autoList['auto'] = 'Yes';
$lang->testcase->autoList['no'] = 'No';
-$lang->testcase->priList[0] = '';
+$lang->testcase->reviewList[0] = '否';
+$lang->testcase->reviewList[1] = '是';
+
$lang->testcase->priList[3] = 3;
$lang->testcase->priList[1] = 1;
$lang->testcase->priList[2] = 2;
@@ -314,18 +312,19 @@ $lang->testcase->settingCase = 'Testcase';
$lang->testcase->settingPri = 'Priority';
$lang->testcase->settingGroup = 'Step Group';
-$lang->testcase->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
-$lang->testcase->saveFail = 'Save failed';
-$lang->testcase->set2Scene = 'Set as Scene';
-$lang->testcase->set2Testcase = 'Set as Testcase';
-$lang->testcase->clearSetting = 'Clear Settings';
-$lang->testcase->setModule = 'Set scene module';
-$lang->testcase->pickModule = 'Please select a module';
-$lang->testcase->clearBefore = 'Clear previous scenes';
-$lang->testcase->clearAfter = 'Clear the following scenes';
-$lang->testcase->clearCurrent = 'Clear the current scene';
-$lang->testcase->removeGroup = 'Remove Group';
-$lang->testcase->set2Group = 'Set as Group';
+$lang->testcase->jsLng = new stdclass();
+$lang->testcase->jsLng->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
+$lang->testcase->jsLng->saveFail = 'Save failed';
+$lang->testcase->jsLng->set2Scene = 'Set as Scene';
+$lang->testcase->jsLng->set2Testcase = 'Set as Testcase';
+$lang->testcase->jsLng->clearSetting = 'Clear Settings';
+$lang->testcase->jsLng->setModule = 'Set scene module';
+$lang->testcase->jsLng->pickModule = 'Please select a module';
+$lang->testcase->jsLng->clearBefore = 'Clear previous scenes';
+$lang->testcase->jsLng->clearAfter = 'Clear the following scenes';
+$lang->testcase->jsLng->clearCurrent = 'Clear the current scene';
+$lang->testcase->jsLng->removeGroup = 'Remove Group';
+$lang->testcase->jsLng->set2Group = 'Set as Group';
$lang->testcase->exportTemplet = 'Export Template';
diff --git a/module/testcase/lang/fr.php b/module/testcase/lang/fr.php
index e1eb7ec3df..1f4e9df678 100644
--- a/module/testcase/lang/fr.php
+++ b/module/testcase/lang/fr.php
@@ -203,15 +203,13 @@ $lang->testcase->ditto = 'Idem';
$lang->testcase->dittoNotice = "This Case is not linked to the {$lang->productCommon} as the last one is!";
$lang->testcase->confirmUnlinkTesttask = 'The case [%s] is already associated in the testtask order of the previous branch/platform, after adjusting the branch/platform, it will be removed from the test list of the previous branch/platform, please confirm whether to continue to modify.';
-$lang->testcase->reviewList[0] = 'NON';
-$lang->testcase->reviewList[1] = 'OUI';
-
-$lang->testcase->autoList = array();
$lang->testcase->autoList[''] = '';
$lang->testcase->autoList['auto'] = 'Yes';
$lang->testcase->autoList['no'] = 'No';
-$lang->testcase->priList[0] = '';
+$lang->testcase->reviewList[0] = '否';
+$lang->testcase->reviewList[1] = '是';
+
$lang->testcase->priList[3] = 3;
$lang->testcase->priList[1] = 1;
$lang->testcase->priList[2] = 2;
@@ -314,18 +312,19 @@ $lang->testcase->settingCase = 'Testcase';
$lang->testcase->settingPri = 'Priority';
$lang->testcase->settingGroup = 'Step Group';
-$lang->testcase->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
-$lang->testcase->saveFail = 'Save failed';
-$lang->testcase->set2Scene = 'Set as Scene';
-$lang->testcase->set2Testcase = 'Set as Testcase';
-$lang->testcase->clearSetting = 'Clear Settings';
-$lang->testcase->setModule = 'Set scene module';
-$lang->testcase->pickModule = 'Please select a module';
-$lang->testcase->clearBefore = 'Clear previous scenes';
-$lang->testcase->clearAfter = 'Clear the following scenes';
-$lang->testcase->clearCurrent = 'Clear the current scene';
-$lang->testcase->removeGroup = 'Remove Group';
-$lang->testcase->set2Group = 'Set as Group';
+$lang->testcase->jsLng = new stdclass();
+$lang->testcase->jsLng->caseNotExist = 'The test case in the imported file was not recognized and the import failed';
+$lang->testcase->jsLng->saveFail = 'Save failed';
+$lang->testcase->jsLng->set2Scene = 'Set as Scene';
+$lang->testcase->jsLng->set2Testcase = 'Set as Testcase';
+$lang->testcase->jsLng->clearSetting = 'Clear Settings';
+$lang->testcase->jsLng->setModule = 'Set scene module';
+$lang->testcase->jsLng->pickModule = 'Please select a module';
+$lang->testcase->jsLng->clearBefore = 'Clear previous scenes';
+$lang->testcase->jsLng->clearAfter = 'Clear the following scenes';
+$lang->testcase->jsLng->clearCurrent = 'Clear the current scene';
+$lang->testcase->jsLng->removeGroup = 'Remove Group';
+$lang->testcase->jsLng->set2Group = 'Set as Group';
$lang->testcase->exportTemplet = 'Export Template';
diff --git a/module/testtask/lang/de.php b/module/testtask/lang/de.php
index bf883564d8..5e5c9e2d56 100644
--- a/module/testtask/lang/de.php
+++ b/module/testtask/lang/de.php
@@ -88,6 +88,7 @@ $lang->testtask->realFinishedDate = 'Actual Finished Date';
$lang->testtask->desc = 'Beschreibung';
$lang->testtask->mailto = 'Mail an';
$lang->testtask->status = 'Status';
+$lang->testtask->statusAB = 'Status';
$lang->testtask->subStatus = 'Sub Status';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Zugeordnet';
diff --git a/module/testtask/lang/en.php b/module/testtask/lang/en.php
index 7b644c309c..3b892c6766 100644
--- a/module/testtask/lang/en.php
+++ b/module/testtask/lang/en.php
@@ -88,6 +88,7 @@ $lang->testtask->realFinishedDate = 'Actual Finished Date';
$lang->testtask->desc = 'Description';
$lang->testtask->mailto = 'Mailto';
$lang->testtask->status = 'Status';
+$lang->testtask->statusAB = 'Status';
$lang->testtask->subStatus = 'Sub Status';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Assigned';
diff --git a/module/testtask/lang/fr.php b/module/testtask/lang/fr.php
index 1ca27ab9c9..fc54060709 100644
--- a/module/testtask/lang/fr.php
+++ b/module/testtask/lang/fr.php
@@ -40,16 +40,16 @@ $lang->testtask->next = 'Suiv';
$lang->testtask->start = "Commencer";
$lang->testtask->close = "Clôturer";
$lang->testtask->wait = "En Attente";
-$lang->testtask->waitAB = "Waiting";
$lang->testtask->block = "Bloquer";
$lang->testtask->activate = "Activer";
$lang->testtask->testing = "En Déroulement";
-$lang->testtask->testingAB = "Testing";
$lang->testtask->blocked = "Bloquée";
$lang->testtask->done = "Jouée";
$lang->testtask->totalStatus = "Toutes";
$lang->testtask->all = 'Toutes';
$lang->testtask->allTasks = 'Toutes Recettes';
+$lang->testtask->collapseAll = 'Collapse';
+$lang->testtask->expandAll = 'Expand';
$lang->testtask->auto = 'Test Automation Tasks';
$lang->testtask->task = 'Test Task';
$lang->testtask->run = 'Test Run ID';
@@ -88,6 +88,7 @@ $lang->testtask->realFinishedDate = 'Actual Finished Date';
$lang->testtask->desc = 'Description';
$lang->testtask->mailto = 'Mailto';
$lang->testtask->status = 'Statut';
+$lang->testtask->statusAB = 'Status';
$lang->testtask->subStatus = 'Sous-statut';
$lang->testtask->testreport = 'Test Report';
$lang->testtask->assignedTo = 'Affecté';
diff --git a/module/tree/lang/zh-cn.php b/module/tree/lang/zh-cn.php
index 9983725342..dce1d54991 100755
--- a/module/tree/lang/zh-cn.php
+++ b/module/tree/lang/zh-cn.php
@@ -37,7 +37,6 @@ $lang->tree->manageDashboard = '维护仪表盘模块';
$lang->tree->manageDashboardChild = '维护仪表盘子模块';
$lang->tree->manageProjectChild = "维护{$lang->projectCommon}子模块";
$lang->tree->manageTaskChild = "维护{$lang->execution->common}子模块";
-$lang->tree->manageTaskChild = "维护{$lang->execution->common}子模块";
$lang->tree->syncFromProduct = '复制模块';
$lang->tree->dragAndSort = "拖放排序";
$lang->tree->sort = "排序";
diff --git a/module/tutorial/lang/en.php b/module/tutorial/lang/en.php
index 5320d92cf3..96dc088664 100644
--- a/module/tutorial/lang/en.php
+++ b/module/tutorial/lang/en.php
@@ -41,25 +41,21 @@ $lang->tutorial->tasks->createAccount->targetPageName = 'Add User';
$lang->tutorial->tasks->createAccount->desc = "Create a User:
Open Admin Company Users New; Fill the form with user information; Save ";
$lang->tutorial->tasks->createProgram = new stdClass();
-
$lang->tutorial->tasks->createProgram->title = 'Create a program';
$lang->tutorial->tasks->createProgram->targetPageName = 'Create program';
$lang->tutorial->tasks->createProgram->desc = "Create a new program:
Open Program Program list Create program ; Fill the form with program information; Save ";
$lang->tutorial->tasks->createProduct = new stdClass();
-
$lang->tutorial->tasks->createProduct->title = 'Create a product';
$lang->tutorial->tasks->createProduct->targetPageName = 'Create product';
$lang->tutorial->tasks->createProduct->desc = "Create a new product:
Open Product Product list Create product ; Fill the form with product information; Save ";
$lang->tutorial->tasks->createStory = new stdClass();
-
$lang->tutorial->tasks->createStory->title = 'Create a story';
$lang->tutorial->tasks->createStory->targetPageName = 'Create story';
$lang->tutorial->tasks->createStory->desc = "Create a story:
Open {$lang->productCommon} Story Create; Fill the form with story information; Save ";
$lang->tutorial->tasks->createProject = new stdClass();
-
$lang->tutorial->tasks->createProject->title = 'Create a project';
$lang->tutorial->tasks->createProject->targetPageName = 'Create project';
$lang->tutorial->tasks->createProject->desc = "Create a project:
Open {$lang->productCommon} Project Create; Fill the form with project information; Save ";
diff --git a/module/tutorial/lang/fr.php b/module/tutorial/lang/fr.php
index 60f4cf980a..0f5f35af0f 100644
--- a/module/tutorial/lang/fr.php
+++ b/module/tutorial/lang/fr.php
@@ -41,7 +41,6 @@ $lang->tutorial->tasks->createAccount->targetPageName = 'Add User';
$lang->tutorial->tasks->createAccount->desc = "Create a User:
Open Company Users New; Fill the form with user information; Save ";
$lang->tutorial->tasks->createProgram = new stdclass();
-
$lang->tutorial->tasks->createProgram->title = 'Create a program';
$lang->tutorial->tasks->createProgram->targetPageName = 'Create program';
$lang->tutorial->tasks->createProgram->desc = "Create a new program:
Open Program Program list Create program ; Fill the form with program information; Save ";
diff --git a/module/upgrade/lang/de.php b/module/upgrade/lang/de.php
index 059eba3166..6185ab3c0f 100644
--- a/module/upgrade/lang/de.php
+++ b/module/upgrade/lang/de.php
@@ -58,25 +58,26 @@ $lang->upgrade->setStatusFile = 'Please complete the following actions<
I have read and done as instructed above. Continue upgrading.
';
-$lang->upgrade->selectVersion = 'Version auswählen';
-$lang->upgrade->continue = 'Weiter';
-$lang->upgrade->noteVersion = "Wählen Sie eine kompatible Version oder es droht Datenverlust.";
-$lang->upgrade->fromVersion = 'Von Version';
-$lang->upgrade->toVersion = 'Upgrade nach Version';
-$lang->upgrade->confirm = 'SQL Bestätigen';
-$lang->upgrade->sureExecute = 'Ausführen';
-$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!';
-$lang->upgrade->forbiddenExt = 'Die Erweiterung ist nicht kompatibel mit der Upgradeversion. Sie wurde deaktiviert:';
-$lang->upgrade->updateFile = 'Updateinformation wurden hinzugefügt.';
-$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.';
-$lang->upgrade->afterDeleted = 'Please modify the database manually according to the above error information, and refresh after the modification!';
-$lang->upgrade->afterExec = 'Please manually modify the database according to the above error information, and refresh after modifiy!';
-$lang->upgrade->mergeProgram = 'Data Merge';
-$lang->upgrade->mergeTips = 'Data Migration Tips';
-$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
-$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
-$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
-$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
+$lang->upgrade->selectVersion = 'Version auswählen';
+$lang->upgrade->continue = 'Weiter';
+$lang->upgrade->noteVersion = "Wählen Sie eine kompatible Version oder es droht Datenverlust.";
+$lang->upgrade->fromVersion = 'Von Version';
+$lang->upgrade->toVersion = 'Upgrade nach Version';
+$lang->upgrade->confirm = 'SQL Bestätigen';
+$lang->upgrade->sureExecute = 'Ausführen';
+$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!';
+$lang->upgrade->forbiddenExt = 'Die Erweiterung ist nicht kompatibel mit der Upgradeversion. Sie wurde deaktiviert:';
+$lang->upgrade->updateFile = 'Updateinformation wurden hinzugefügt.';
+$lang->upgrade->showSQLLog = 'Your database is inconsistent with the standard and try fix it.';
+$lang->upgrade->noticeErrSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.';
+$lang->upgrade->afterDeleted = 'Please modify the database manually according to the above error information, and refresh after the modification!';
+$lang->upgrade->afterExec = 'Please manually modify the database according to the above error information, and refresh after modifiy!';
+$lang->upgrade->mergeProgram = 'Data Merge';
+$lang->upgrade->mergeTips = 'Data Migration Tips';
+$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
+$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
+$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
+$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
$lang->upgrade->line = 'Product Line';
$lang->upgrade->allLines = "All Product Lines";
@@ -157,8 +158,8 @@ $lang->upgrade->recoveryActions = new stdclass();
$lang->upgrade->recoveryActions->cancel = 'Cancel';
$lang->upgrade->recoveryActions->review = 'Review';
-$lang->upgrade->remark = 'Remark';
-$lang->upgrade->remarkDesc = 'You can also switch the mode in the Admin-System-Mode page of the system.';
+$lang->upgrade->remark = 'Remark';
+$lang->upgrade->remarkDesc = 'You can also switch the mode in the Admin-System-Mode page of the system.';
$lang->upgrade->upgradingTip = 'The system is being upgraded, please wait patiently...';
diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php
index d282f6f136..7dd46bbc11 100644
--- a/module/upgrade/lang/en.php
+++ b/module/upgrade/lang/en.php
@@ -58,25 +58,26 @@ $lang->upgrade->setStatusFile = 'Please complete the following actions<
I have read and done as instructed above. Continue upgrading.
';
-$lang->upgrade->selectVersion = 'Version';
-$lang->upgrade->continue = 'Continue';
-$lang->upgrade->noteVersion = "Select the compatible version, or it might cause data loss.";
-$lang->upgrade->fromVersion = 'From';
-$lang->upgrade->toVersion = 'To';
-$lang->upgrade->confirm = 'Confirm SQL';
-$lang->upgrade->sureExecute = 'Execute';
-$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!';
-$lang->upgrade->forbiddenExt = 'The extension is incompatible with the version. It has been deactivated:';
-$lang->upgrade->updateFile = 'File information has to be updated.';
-$lang->upgrade->noticeSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.';
-$lang->upgrade->afterDeleted = 'Please execute commands to delete the files. Please refresh after you delete them.';
-$lang->upgrade->afterExec = 'Please modify the database manually according to the above error information, and refresh after the modification!';
-$lang->upgrade->mergeProgram = 'Data Merge';
-$lang->upgrade->mergeTips = 'Data Migration Tips';
-$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
-$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
-$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
-$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
+$lang->upgrade->selectVersion = 'Version';
+$lang->upgrade->continue = 'Continue';
+$lang->upgrade->noteVersion = "Select the compatible version, or it might cause data loss.";
+$lang->upgrade->fromVersion = 'From';
+$lang->upgrade->toVersion = 'To';
+$lang->upgrade->confirm = 'Confirm SQL';
+$lang->upgrade->sureExecute = 'Execute';
+$lang->upgrade->upgradingTips = 'The upgrade is in progress, please be patient. Do not refresh the page, blackout, or turn off your computer!';
+$lang->upgrade->forbiddenExt = 'The extension is incompatible with the version. It has been deactivated:';
+$lang->upgrade->updateFile = 'File information has to be updated.';
+$lang->upgrade->showSQLLog = 'Your database is inconsistent with the standard and try fix it.';
+$lang->upgrade->noticeErrSQL = 'Your database is inconsistent with the standard and it failed to fix it. Please run the following SQL and refresh.';
+$lang->upgrade->afterDeleted = 'Please execute commands to delete the files. Please refresh after you delete them.';
+$lang->upgrade->afterExec = 'Please modify the database manually according to the above error information, and refresh after the modification!';
+$lang->upgrade->mergeProgram = 'Data Merge';
+$lang->upgrade->mergeTips = 'Data Migration Tips';
+$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
+$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
+$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
+$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
$lang->upgrade->line = 'Product Line';
$lang->upgrade->allLines = "All Product Lines";
diff --git a/module/upgrade/lang/fr.php b/module/upgrade/lang/fr.php
index 59610c4de7..487d91e730 100644
--- a/module/upgrade/lang/fr.php
+++ b/module/upgrade/lang/fr.php
@@ -58,25 +58,26 @@ $lang->upgrade->setStatusFile = 'Please complete the following actions<
I have read and done as instructed above. Continue upgrading.
';
-$lang->upgrade->selectVersion = 'Version';
-$lang->upgrade->continue = 'Continuer';
-$lang->upgrade->noteVersion = "Sélectionnez une version compatible où vous pourriez perdre des données.";
-$lang->upgrade->fromVersion = 'De';
-$lang->upgrade->toVersion = 'à';
-$lang->upgrade->confirm = 'Confirmez SQL';
-$lang->upgrade->sureExecute = 'Executez';
-$lang->upgrade->upgradingTips = 'La mise à jour est en cours, veuillez être patient. Ne pas actualiser la page ou éteindre votre ordinateur!';
-$lang->upgrade->forbiddenExt = 'Cette extension est incompatible avec la version. Elle a été désactivée :';
-$lang->upgrade->updateFile = "Le fichier information a besoin d'une mise à jour.";
-$lang->upgrade->noticeSQL = 'Votre base de donnée est inconsistente avec le standard et il y a eu un échec pour la corriger. Exécutez la commande SQL suivante et rafraichissez.';
-$lang->upgrade->afterDeleted = "Le fichier n'est pas supprimé. Recommencez après l'avoir supprimé.";
-$lang->upgrade->afterExec = 'Please modify the database manually according to the above error information, and refresh after the modification!';
-$lang->upgrade->mergeProgram = 'Data Merge';
-$lang->upgrade->mergeTips = 'Data Migration Tips';
-$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
-$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
-$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
-$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
+$lang->upgrade->selectVersion = 'Version';
+$lang->upgrade->continue = 'Continuer';
+$lang->upgrade->noteVersion = "Sélectionnez une version compatible où vous pourriez perdre des données.";
+$lang->upgrade->fromVersion = 'De';
+$lang->upgrade->toVersion = 'à';
+$lang->upgrade->confirm = 'Confirmez SQL';
+$lang->upgrade->sureExecute = 'Executez';
+$lang->upgrade->upgradingTips = 'La mise à jour est en cours, veuillez être patient. Ne pas actualiser la page ou éteindre votre ordinateur!';
+$lang->upgrade->forbiddenExt = 'Cette extension est incompatible avec la version. Elle a été désactivée :';
+$lang->upgrade->updateFile = "Le fichier information a besoin d'une mise à jour.";
+$lang->upgrade->showSQLLog = 'Your database is inconsistent with the standard and try fix it.';
+$lang->upgrade->noticeErrSQL = 'Votre base de donnée est inconsistente avec le standard et il y a eu un échec pour la corriger. Exécutez la commande SQL suivante et rafraichissez.';
+$lang->upgrade->afterDeleted = "Le fichier n'est pas supprimé. Recommencez après l'avoir supprimé.";
+$lang->upgrade->afterExec = 'Please modify the database manually according to the above error information, and refresh after the modification!';
+$lang->upgrade->mergeProgram = 'Data Merge';
+$lang->upgrade->mergeTips = 'Data Migration Tips';
+$lang->upgrade->toPMS15Guide = 'ZenTao open source version 15 upgrade';
+$lang->upgrade->toPRO10Guide = 'ZenTao profession version 10 upgrade';
+$lang->upgrade->toBIZ5Guide = 'ZenTao enterprise version 5 upgrade';
+$lang->upgrade->toMAXGuide = 'ZenTao ultimate version upgrade';
$lang->upgrade->line = 'Product Line';
$lang->upgrade->allLines = "All Product Lines";
diff --git a/module/user/lang/de.php b/module/user/lang/de.php
index 9b79928f99..b619068ade 100644
--- a/module/user/lang/de.php
+++ b/module/user/lang/de.php
@@ -82,10 +82,10 @@ $lang->user->resetPwdByAdmin = 'Reset password via admin';
$lang->user->resetPwdByMail = 'Reset password via email';
$lang->user->abbr = new stdclass();
-$lang->user->abbr->id = 'ID';
-$lang->user->abbr->password2AB = 'Passwort wiederholen';
-$lang->user->abbr->addressAB = 'Adresse';
-$lang->user->abbr->joinAB = 'Induktion';
+$lang->user->abbr->id = 'ID';
+$lang->user->abbr->password2 = 'Passwort wiederholen';
+$lang->user->abbr->address = 'Adresse';
+$lang->user->abbr->join = 'Induktion';
$lang->user->legendBasic = 'Basic Information';
$lang->user->legendContribution = 'Contribution';
diff --git a/module/user/lang/fr.php b/module/user/lang/fr.php
index 0f0292714d..f55ff3b8af 100644
--- a/module/user/lang/fr.php
+++ b/module/user/lang/fr.php
@@ -82,10 +82,10 @@ $lang->user->resetPwdByAdmin = 'Reset password via admin';
$lang->user->resetPwdByMail = 'Reset password via email';
$lang->user->abbr = new stdclass();
-$lang->user->abbr->id = 'ID';
-$lang->user->abbr->password2AB = 'Répétez Password';
-$lang->user->abbr->addressAB = 'Adresse';
-$lang->user->abbr->joinAB = 'Ajouté le';
+$lang->user->abbr->id = 'ID';
+$lang->user->abbr->password2 = 'Répétez Password';
+$lang->user->abbr->address = 'Adresse';
+$lang->user->abbr->join = 'Ajouté le';
$lang->user->legendBasic = 'Informations de Base';
$lang->user->legendContribution = 'Contribution';
From 7ecfc71adb9bdb2b244025b1241f71f8c4fea9c8 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 16:30:48 +0800
Subject: [PATCH 018/276] * Update version info.
---
VERSION | 2 +-
config/config.php | 2 +-
doc/CHANGELOG | 2 ++
module/misc/lang/de.php | 2 ++
module/misc/lang/en.php | 2 ++
module/misc/lang/fr.php | 2 ++
module/misc/lang/zh-cn.php | 2 ++
module/upgrade/lang/version.php | 3 ++-
8 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/VERSION b/VERSION
index 5f11db3c7a..bf79c7af7e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-20.0.beta1
+20.0.stable
diff --git a/config/config.php b/config/config.php
index adb669e3cf..5e262f8143 100644
--- a/config/config.php
+++ b/config/config.php
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
-$config->version = '20.0.beta1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
+$config->version = '20.0.stable'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index 8c3ff548fc..750f2ccb5f 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -1,3 +1,5 @@
+2024-02-29 20.0.stable
+
2024-02-20 18.11
完成的需求
开源版:
diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php
index d989f630d6..8d7c284f4a 100644
--- a/module/misc/lang/de.php
+++ b/module/misc/lang/de.php
@@ -113,6 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
+$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -223,6 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
+$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php
index 553fbcf4d9..6b32bdf3b4 100644
--- a/module/misc/lang/en.php
+++ b/module/misc/lang/en.php
@@ -113,6 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
+$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -223,6 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
+$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php
index 061e76baea..9c570f5c58 100644
--- a/module/misc/lang/fr.php
+++ b/module/misc/lang/fr.php
@@ -113,6 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
+$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -223,6 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
+$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php
index b23a46bbdd..072ecd9692 100644
--- a/module/misc/lang/zh-cn.php
+++ b/module/misc/lang/zh-cn.php
@@ -113,6 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
+$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -223,6 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
+$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => '实现AI小程序功能,实现大屏引用度量项、全局筛选器功能,OR界面实现反馈功能,需求池需求增加关键词,撤回用户需求后需求池需求可以再次分发。', 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => '需求池增加通知功能,支持产品线功能,支持一个需求分发到多个产品。', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => '本次发布主要对代码进行了大规模重构,同时对用户界面(UI)进行了全新升级,带来了更好的产品性能、更强的安全性和更友好的用户体验。', 'desc' => '');
diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php
index f26c420eb8..56f5eb043d 100644
--- a/module/upgrade/lang/version.php
+++ b/module/upgrade/lang/version.php
@@ -187,7 +187,8 @@ $lang->upgrade->fromVersions['18_9'] = '18.9';
$lang->upgrade->fromVersions['18_10'] = '18.10';
$lang->upgrade->fromVersions['18_10_1'] = '18.10.1';
$lang->upgrade->fromVersions['18_11'] = '18.11';
-$lang->upgrade->fromVersions['20_0_alpha1'] = '20.0.alpha1'; // pms insert position.
+$lang->upgrade->fromVersions['20_0_alpha1'] = '20.0.alpha1';
+$lang->upgrade->fromVersions['20_0_stable'] = '20.0.stable'; // pms insert position.
global $config;
/* Lite. */
From 2f839cc3b2910a2049656cd6287e57481a0bdd70 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Thu, 29 Feb 2024 14:23:36 +0800
Subject: [PATCH 019/276] * Modify function define.
---
module/transfer/ui/exporttemplate.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/transfer/ui/exporttemplate.html.php b/module/transfer/ui/exporttemplate.html.php
index 935cceb209..ec8b8ad8cc 100644
--- a/module/transfer/ui/exporttemplate.html.php
+++ b/module/transfer/ui/exporttemplate.html.php
@@ -39,7 +39,7 @@ form
js
(
<< -1) return true; // Opera don't support, omit it.
From e3e747d48c71f3efab3067e2d533d05ea0a36832 Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Thu, 29 Feb 2024 14:39:12 +0800
Subject: [PATCH 020/276] * Add required function for old view pages.
---
framework/model.class.php | 73 +++++++++++++++++++++++++++++++++++++++
module/common/model.php | 56 +++++++++++++++++++++++++++++-
2 files changed, 128 insertions(+), 1 deletion(-)
diff --git a/framework/model.class.php b/framework/model.class.php
index 08e1e08069..62d8f1b480 100644
--- a/framework/model.class.php
+++ b/framework/model.class.php
@@ -126,6 +126,79 @@ class model extends baseModel
return false;
}
+ /**
+ * Build menu of a module.
+ *
+ * @param string $moduleName
+ * @param string $methodName
+ * @param string $params
+ * @param object $data
+ * @param string $type
+ * @param string $icon
+ * @param string $target
+ * @param string $class
+ * @param bool $onlyBody
+ * @param string $misc
+ * @param string $title
+ * @param bool $returnHtml
+ * @access public
+ * @return string
+ */
+
+ public function buildMenu($moduleName, $methodName, $params, $data, $type = 'view', $icon = '', $target = '', $class = '', $onlyBody = false, $misc = '' , $title = '', $returnHtml = true)
+ {
+ if(strpos($moduleName, '.') !== false) list($appName, $moduleName) = explode('.', $moduleName);
+
+ if(strpos($methodName, '_') !== false && strpos($methodName, '_') > 0) list($module, $method) = explode('_', $methodName);
+
+ if(empty($module)) $module = $moduleName;
+ if(empty($method)) $method = $methodName;
+
+ static $actions = array();
+ if(isset($this->config->bizVersion))
+ {
+ if(empty($actions[$moduleName]))
+ {
+ $actions[$moduleName] = $this->dao->select('*')->from(TABLE_WORKFLOWACTION)
+ ->where('module')->eq($moduleName)
+ ->andWhere('buildin')->eq('1')
+ ->andWhere('status')->eq('enable')
+ ->beginIF(!empty($this->config->vision))->andWhere('vision')->eq($this->config->vision)->fi()
+ ->fetchAll('action');
+ }
+ }
+
+ $enabled = true;
+ if(!empty($actions) and isset($actions[$moduleName][$methodName]))
+ {
+ $action = $actions[$moduleName][$methodName];
+
+ if($action->extensionType == 'override') return $this->loadModel('flow')->buildActionMenu($moduleName, $action, $data, $type);
+
+ $conditions = json_decode($action->conditions);
+ if($conditions and $action->extensionType == 'extend')
+ {
+ if($icon != 'copy' and $methodName != 'create') $title = $action->name;
+ if($conditions) $enabled = $this->loadModel('flow')->checkConditions($conditions, $data);
+ }
+ else
+ {
+ if(method_exists($this, 'isClickable')) $enabled = $this->isClickable($data, $method, $module);
+ }
+ }
+ else
+ {
+ if(method_exists($this, 'isClickable')) $enabled = $this->isClickable($data, $method, $module);
+ }
+
+ if(!$returnHtml) return $enabled;
+
+ $html = '';
+ $type = $type == 'browse' ? 'list' : 'button';
+ $html = common::buildIconButton($module, $method, $params, $data, $type, $icon, $target, $class, $onlyBody, $misc, $title, '', $enabled);
+ return $html;
+ }
+
/**
* Build menu of actions created by workflow action.
*
diff --git a/module/common/model.php b/module/common/model.php
index 9abce2e6af..609642a4e0 100644
--- a/module/common/model.php
+++ b/module/common/model.php
@@ -2596,7 +2596,7 @@ class commonModel extends model
$currentMethod = strtolower($method);
if(!commonModel::hasPriv($module, $method, $object, $vars) and !in_array("$currentModule.$currentMethod", $config->openMethods)) return false;
- $link = helper::createLink($module, $method, $vars, '', $onlyBody);
+ $link = helper::createLink($module, $method, $vars, '', $onlyBody ? true : false);
/* Set the icon title, try search the $method defination in $module's lang or $common's lang. */
if(empty($title))
@@ -3449,6 +3449,60 @@ class commonModel extends model
echo html::a(helper::createLink($module, $method, $vars, '', $onlyBody), $label, $target, $misc, $newline);
return true;
}
+
+ /**
+ * Print pre and next link
+ *
+ * @param string $preAndNext
+ * @param string $linkTemplate
+ * @static
+ * @access public
+ * @return void
+ */
+ public static function printPreAndNext($preAndNext = '', $linkTemplate = '')
+ {
+ global $lang, $app;
+ if(isonlybody()) return false;
+
+ $moduleName = ($app->getModuleName() == 'story' and $app->tab == 'project') ? 'projectstory' : $app->getModuleName();
+ echo "";
+ if(isset($preAndNext->pre) and $preAndNext->pre)
+ {
+ $id = (isset($_SESSION['testcaseOnlyCondition']) and !$_SESSION['testcaseOnlyCondition'] and $app->getModuleName() == 'testcase' and isset($preAndNext->pre->case)) ? 'case' : 'id';
+ $title = isset($preAndNext->pre->title) ? $preAndNext->pre->title : $preAndNext->pre->name;
+ $title = '#' . $preAndNext->pre->$id . ' ' . $title . ' ' . $lang->preShortcutKey;
+
+ $params = $moduleName == 'story' ? "&version=0¶m=0&storyType={$preAndNext->pre->type}" : '';
+ $link = $linkTemplate ? sprintf($linkTemplate, $preAndNext->pre->$id) : helper::createLink($moduleName, 'view', "ID={$preAndNext->pre->$id}" . $params);
+ $link .= '#app=' . $app->tab;
+ if(isset($preAndNext->pre->objectType) and $preAndNext->pre->objectType == 'doc')
+ {
+ echo html::a('javascript:void(0)', ' ', '', "id='prevPage' class='btn' title='{$title}' data-url='{$link}'");
+ }
+ else
+ {
+ echo html::a($link, ' ', '', "id='prevPage' class='btn' title='{$title}'");
+ }
+ }
+ if(isset($preAndNext->next) and $preAndNext->next)
+ {
+ $id = (isset($_SESSION['testcaseOnlyCondition']) and !$_SESSION['testcaseOnlyCondition'] and $app->getModuleName() == 'testcase' and isset($preAndNext->next->case)) ? 'case' : 'id';
+ $title = isset($preAndNext->next->title) ? $preAndNext->next->title : $preAndNext->next->name;
+ $title = '#' . $preAndNext->next->$id . ' ' . $title . ' ' . $lang->nextShortcutKey;
+ $params = $moduleName == 'story' ? "&version=0¶m=0&storyType={$preAndNext->next->type}" : '';
+ $link = $linkTemplate ? sprintf($linkTemplate, $preAndNext->next->$id) : helper::createLink($moduleName, 'view', "ID={$preAndNext->next->$id}" . $params);
+ $link .= '#app=' . $app->tab;
+ if(isset($preAndNext->next->objectType) and $preAndNext->next->objectType == 'doc')
+ {
+ echo html::a('javascript:void(0)', ' ', '', "id='nextPage' class='btn' title='$title' data-url='{$link}'");
+ }
+ else
+ {
+ echo html::a($link, ' ', '', "id='nextPage' class='btn' title='$title'");
+ }
+ }
+ echo ' ';
+ }
}
class common extends commonModel
From 42316bfb37f2123cfade058699c54498d8cb5497 Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Thu, 29 Feb 2024 15:11:46 +0800
Subject: [PATCH 021/276] * Add old buildform page.
---
module/file/control.php | 10 ++
module/file/view/buildoldform.html.php | 123 +++++++++++++++++++++++++
2 files changed, 133 insertions(+)
create mode 100644 module/file/view/buildoldform.html.php
diff --git a/module/file/control.php b/module/file/control.php
index f1a0e943ce..4f449532e5 100755
--- a/module/file/control.php
+++ b/module/file/control.php
@@ -32,6 +32,16 @@ class file extends control
$this->display();
}
+ public function buildOldForm(int $fileCount = 1, float $percent = 0.9, string $filesName = "files", string $labelsName = "labels")
+ {
+ if(!file_exists($this->file->savePath)) return printf($this->lang->file->errorNotExists, $this->file->savePath);
+ if(!is_writable($this->file->savePath)) return printf($this->lang->file->errorCanNotWrite, $this->file->savePath, $this->file->savePath);
+
+ $this->view->filesName = $filesName;
+ $this->view->labelsName = $labelsName;
+ $this->display();
+ }
+
/**
* AJAX: get upload request from the web editor.
*
diff --git a/module/file/view/buildoldform.html.php b/module/file/view/buildoldform.html.php
new file mode 100644
index 0000000000..39ba1f3806
--- /dev/null
+++ b/module/file/view/buildoldform.html.php
@@ -0,0 +1,123 @@
+config->file->dangers . ',');
+js::set('maxUploadSize', $maxUploadSize);
+?>
+
+
+
+
+
From 19de2fe02c50d1f78a1bdfe0405d50cd2e81a1e8 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Thu, 29 Feb 2024 15:33:35 +0800
Subject: [PATCH 022/276] * zin: add the prepend parameter for adding sub
items.
---
lib/zin/core/node.class.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/zin/core/node.class.php b/lib/zin/core/node.class.php
index 793c198a21..81989a97b3 100644
--- a/lib/zin/core/node.class.php
+++ b/lib/zin/core/node.class.php
@@ -268,7 +268,7 @@ class node implements \JsonSerializable
if(is_array($item))
{
- foreach($item as $child) $this->add($child, $blockName);
+ foreach($item as $child) $this->add($child, $blockName, $prepend);
return;
}
From b5aeb0247e39aa877ebee0e5bb68d580838f0c45 Mon Sep 17 00:00:00 2001
From: liugang
Date: Thu, 29 Feb 2024 16:36:53 +0800
Subject: [PATCH 023/276] + upgrade: add method to check database consistency.
---
module/upgrade/config/upgradeflow.php | 2 +-
module/upgrade/model.php | 40 +++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php
index bffe450455..1b136f52a3 100644
--- a/module/upgrade/config/upgradeflow.php
+++ b/module/upgrade/config/upgradeflow.php
@@ -93,7 +93,7 @@ $config->upgrade->execFlow['18_7'] = array('functions' => 'processHistory
$config->upgrade->execFlow['18_8'] = array('functions' => 'upgradeTesttaskMembers,deleteGeneralReportBlock,stopOldCron');
$config->upgrade->execFlow['18_9'] = array('functions' => 'addDefaultTraincoursePriv,renameBIModule,migrateXuanClientSettings');
$config->upgrade->execFlow['18_10_1'] = array('functions' => 'migrateAIModelConfig');
-$config->upgrade->execFlow['20.0.alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA,updateMetricDateType,migrateAIModelConfig');
+$config->upgrade->execFlow['20_0_alpha1'] = array('functions' => 'revertStoryCustomFields,hideOA,updateMetricDateType,migrateAIModelConfig,update1810,update18101');
if(!empty($config->isINT))
{
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 2a37cfc810..76748667c8 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -8571,4 +8571,44 @@ class upgradeModel extends model
$this->setting->setItem('system.common.closedFeatures', trim($closedFeatures . ',otherOA', ','));
}
+
+ /**
+ * 检查是否添加了18.10版本的需求池字段,如果没有就添加。
+ * Check if the demand pool field of version 18.10 is added, if not, add it.
+ *
+ * @access public
+ * @return void
+ */
+ public function update1810(): void
+ {
+ $fields = $this->dbo->query('DESC ' . TABLE_DEMANDPOOL)->fetchAll();
+ foreach($fields as $field)
+ {
+ if($field->Field == 'products') return;
+ }
+
+ /* Execute open edition. */
+ $this->saveLogs('Execute 18_10');
+ $this->execSQL($this->getUpgradeFile('18.10'));
+ }
+
+ /**
+ * 检查是否添加了18.10.1版本的需求反馈字段,如果没有就添加。
+ * Check if the demand feedback field of version 18.10.1 is added, if not, add it.
+ *
+ * @access public
+ * @return void
+ */
+ public function update18101(): void
+ {
+ $fields = $this->dbo->query('DESC ' . TABLE_DEMAND)->fetchAll();
+ foreach($fields as $field)
+ {
+ if($field->Field == 'feedback') return;
+ }
+
+ /* Execute open edition. */
+ $this->saveLogs('Execute 18_10_1');
+ $this->execSQL($this->getUpgradeFile('18.10.1'));
+ }
}
From 40e7c937fe52dd46375a1ea9311d2c8d720afd1d Mon Sep 17 00:00:00 2001
From: liyang
Date: Thu, 29 Feb 2024 16:47:33 +0800
Subject: [PATCH 024/276] * Fix bug #46144.
---
module/execution/js/linkstory.ui.js | 6 ++++++
module/execution/ui/linkstory.html.php | 2 ++
2 files changed, 8 insertions(+)
diff --git a/module/execution/js/linkstory.ui.js b/module/execution/js/linkstory.ui.js
index 0a33932898..be666147df 100644
--- a/module/execution/js/linkstory.ui.js
+++ b/module/execution/js/linkstory.ui.js
@@ -33,6 +33,12 @@ $(document).off('click','.batch-btn').on('click', '.batch-btn', function(e)
*/
window.onRenderLinkStoryCell = function(result, {row, col})
{
+ if(col.name == 'title')
+ {
+ if(row.data.parent > 0) html = ""+ childrenAB +" ";
+ if(html) result.unshift({html});
+ }
+
if(col.name !== 'branch')
{
return result;
diff --git a/module/execution/ui/linkstory.html.php b/module/execution/ui/linkstory.html.php
index ec068be9bd..d69e3e6248 100644
--- a/module/execution/ui/linkstory.html.php
+++ b/module/execution/ui/linkstory.html.php
@@ -58,6 +58,8 @@ if(!isInModal())
}
$objectType = $object->type == 'project' ? 'projectstory' : 'execution';
+
+jsVar('childrenAB', $lang->story->childrenAB);
dtable
(
set::groupDivider(true),
From 2abda948b79749c9ab5ebcf1d17265a985a7505a Mon Sep 17 00:00:00 2001
From: liugang
Date: Thu, 29 Feb 2024 17:04:23 +0800
Subject: [PATCH 025/276] - upgrade: remove duplicate method.
---
module/upgrade/model.php | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 76748667c8..4ee3932ae0 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -8530,21 +8530,6 @@ class upgradeModel extends model
if(!dao::isError()) $this->setting->deleteItems('owner=system&module=ai');
}
- /**
- * Update metric datetype.
- *
- * @access public
- * @return void
- */
- public function updateMetricDateType()
- {
- $this->loadModel('metric');
- foreach($this->config->metric->dateType as $code => $dateType)
- {
- $this->dao->update(TABLE_METRIC)->set('dateType')->eq($dateType)->where('code')->eq($code)->exec();
- }
- }
-
/**
* 检查办公应用是否有数据,没有就隐藏。
* Check if the office app has data, if not, hide it.
From 35fc728cd34b576831eb8cb020e5d47eb2481194 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 17:04:50 +0800
Subject: [PATCH 026/276] + Add notify user.
---
misc/ci/Jenkinsfile.downgrade | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/misc/ci/Jenkinsfile.downgrade b/misc/ci/Jenkinsfile.downgrade
index 841813d29c..f0629f4bea 100755
--- a/misc/ci/Jenkinsfile.downgrade
+++ b/misc/ci/Jenkinsfile.downgrade
@@ -44,7 +44,7 @@ pipeline {
env.GIT_URL = sh(returnStdout: true, script: 'git config --get remote.origin.url').trim()
env.GIT_COMMIT = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
-
+
def j = job.newJob()
env.GIT_HOST = "git.zcorp.cc"
@@ -54,10 +54,10 @@ pipeline {
zentaopms.setupEnvAfterCheckout()
// def ximUsers = sh(returnStdout: true,script: 'jq -r .notice.users < ci.json').trim()
- env.XIM_USERS = "qishiyao"
+ env.XIM_USERS = "qishiyao,caoyanyi"
// env.XIM_GROUPS = "31a0008b-6e3e-4b7f-9b7b-396a46b1f8f4"
}
-
+
}
}
From 7824f336be9dd19530aee07b886962f3b119b8d2 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 17:05:11 +0800
Subject: [PATCH 027/276] * Adjust version info to config file.
---
config/config.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/config.php b/config/config.php
index 5e262f8143..594c0ce8d8 100644
--- a/config/config.php
+++ b/config/config.php
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
-$config->version = '20.0.stable'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
+$config->version = '20.0'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
From 606648e6c7c620dc6ca8892ad4a717cada92e14a Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 21:54:47 +0800
Subject: [PATCH 028/276] + Add standard sql.
---
db/standard/zentao20.0.sql | 4297 ++++++++++++++++++++++++++++++++++++
1 file changed, 4297 insertions(+)
create mode 100644 db/standard/zentao20.0.sql
diff --git a/db/standard/zentao20.0.sql b/db/standard/zentao20.0.sql
new file mode 100644
index 0000000000..75db27d26b
--- /dev/null
+++ b/db/standard/zentao20.0.sql
@@ -0,0 +1,4297 @@
+CREATE TABLE `zt_account` (
+ `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `provider` varchar(255) NOT NULL DEFAULT '',
+ `adminURI` varchar(255) NOT NULL DEFAULT '',
+ `account` varchar(255) NOT NULL DEFAULT '',
+ `password` varchar(255) NOT NULL DEFAULT '',
+ `email` varchar(255) NOT NULL DEFAULT '',
+ `mobile` varchar(255) NOT NULL DEFAULT '',
+ `extra` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `name` (`name`),
+ KEY `provider` (`provider`),
+ KEY `status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_acl` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `type` char(40) NOT NULL DEFAULT 'whitelist',
+ `source` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_action` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` text DEFAULT NULL,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `actor` varchar(100) NOT NULL DEFAULT '',
+ `action` varchar(80) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `comment` text DEFAULT NULL,
+ `extra` text DEFAULT NULL,
+ `read` enum('0','1') NOT NULL DEFAULT '0',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `efforted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `date` (`date`),
+ KEY `actor` (`actor`),
+ KEY `project` (`project`),
+ KEY `action` (`action`),
+ KEY `objectID` (`objectID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_actionrecent` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` text DEFAULT NULL,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `actor` varchar(100) NOT NULL DEFAULT '',
+ `action` varchar(80) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `comment` text DEFAULT NULL,
+ `extra` text DEFAULT NULL,
+ `read` enum('0','1') NOT NULL DEFAULT '0',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `efforted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `date` (`date`),
+ KEY `actor` (`actor`),
+ KEY `project` (`project`),
+ KEY `action` (`action`),
+ KEY `objectID` (`objectID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_activity` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `process` mediumint(9) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `optional` varchar(255) NOT NULL DEFAULT '',
+ `tailorNorm` varchar(255) NOT NULL DEFAULT '',
+ `content` mediumtext DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `order` mediumint(8) DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_message` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `appID` mediumint(8) unsigned NOT NULL,
+ `user` mediumint(8) unsigned NOT NULL,
+ `type` enum('req','res','ntf') NOT NULL,
+ `content` text NOT NULL,
+ `createdDate` datetime NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_miniprogram` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) NOT NULL,
+ `category` varchar(30) NOT NULL,
+ `desc` text DEFAULT NULL,
+ `model` mediumint(8) unsigned DEFAULT NULL,
+ `icon` varchar(30) NOT NULL DEFAULT 'writinghand-7',
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `published` enum('0','1') NOT NULL DEFAULT '0',
+ `publishedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `prompt` text NOT NULL,
+ `builtIn` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_miniprogramfield` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `appID` mediumint(8) unsigned NOT NULL,
+ `name` varchar(30) NOT NULL,
+ `type` enum('radio','checkbox','text','textarea') DEFAULT 'text',
+ `placeholder` text DEFAULT NULL,
+ `options` text DEFAULT NULL,
+ `required` enum('0','1') DEFAULT '1',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_miniprogramstar` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `appID` mediumint(8) unsigned NOT NULL,
+ `userID` mediumint(8) unsigned NOT NULL,
+ `createdDate` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `appID` (`appID`,`userID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_model` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(20) NOT NULL,
+ `vendor` varchar(20) NOT NULL,
+ `credentials` text NOT NULL,
+ `proxy` text DEFAULT NULL,
+ `name` varchar(20) DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) DEFAULT NULL,
+ `editedDate` datetime DEFAULT NULL,
+ `enabled` enum('0','1') NOT NULL DEFAULT '1',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_prompt` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(20) NOT NULL,
+ `desc` text DEFAULT NULL,
+ `model` mediumint(8) unsigned DEFAULT NULL,
+ `module` varchar(30) DEFAULT NULL,
+ `source` text DEFAULT NULL,
+ `targetForm` varchar(30) DEFAULT NULL,
+ `purpose` text DEFAULT NULL,
+ `elaboration` text DEFAULT NULL,
+ `role` text DEFAULT NULL,
+ `characterization` text DEFAULT NULL,
+ `status` enum('draft','active') NOT NULL DEFAULT 'draft',
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) DEFAULT NULL,
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ai_promptrole` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `model` mediumint(8) unsigned DEFAULT NULL,
+ `role` text DEFAULT NULL,
+ `characterization` text DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_api` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `product` varchar(255) NOT NULL DEFAULT '',
+ `lib` int(11) unsigned NOT NULL DEFAULT 0,
+ `module` int(11) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(100) NOT NULL DEFAULT '',
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `protocol` varchar(10) NOT NULL DEFAULT '',
+ `method` varchar(10) NOT NULL DEFAULT '',
+ `requestType` varchar(100) NOT NULL DEFAULT '',
+ `responseType` varchar(100) NOT NULL DEFAULT '',
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '0',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `params` text DEFAULT NULL,
+ `paramsExample` text DEFAULT NULL,
+ `responseExample` text DEFAULT NULL,
+ `response` text DEFAULT NULL,
+ `commonParams` text DEFAULT NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT '0',
+ `addedDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_api_lib_release` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `lib` int(11) unsigned NOT NULL DEFAULT 0,
+ `desc` varchar(255) NOT NULL DEFAULT '',
+ `version` varchar(255) NOT NULL DEFAULT '',
+ `snap` mediumtext DEFAULT NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT '0',
+ `addedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_apispec` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `doc` int(11) unsigned NOT NULL DEFAULT 0,
+ `module` int(11) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(100) NOT NULL DEFAULT '',
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `protocol` varchar(10) NOT NULL DEFAULT '',
+ `method` varchar(10) NOT NULL DEFAULT '',
+ `requestType` varchar(100) NOT NULL DEFAULT '',
+ `responseType` varchar(100) NOT NULL DEFAULT '',
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `owner` varchar(255) NOT NULL DEFAULT '0',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `params` text DEFAULT NULL,
+ `paramsExample` text DEFAULT NULL,
+ `responseExample` text DEFAULT NULL,
+ `response` text DEFAULT NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT '0',
+ `addedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_apistruct` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `lib` int(11) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `type` varchar(50) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `attribute` text DEFAULT NULL,
+ `addedBy` varchar(30) NOT NULL DEFAULT '0',
+ `addedDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_apistruct_spec` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(50) NOT NULL DEFAULT '',
+ `desc` varchar(255) NOT NULL DEFAULT '',
+ `attribute` text DEFAULT NULL,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `addedBy` varchar(30) NOT NULL DEFAULT '0',
+ `addedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approval` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `flow` mediumint(8) NOT NULL DEFAULT 0,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `nodes` mediumtext DEFAULT NULL,
+ `version` mediumint(9) NOT NULL DEFAULT 0,
+ `status` varchar(20) NOT NULL DEFAULT 'doing',
+ `result` varchar(20) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalflow` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `code` varchar(100) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `version` mediumint(8) NOT NULL DEFAULT 1,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalflowobject` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `root` int(8) NOT NULL DEFAULT 0,
+ `flow` int(8) NOT NULL DEFAULT 0,
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `extra` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalflowspec` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `flow` mediumint(8) NOT NULL DEFAULT 0,
+ `version` mediumint(8) NOT NULL DEFAULT 0,
+ `nodes` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalnode` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `approval` mediumint(8) NOT NULL DEFAULT 0,
+ `type` enum('review','cc') NOT NULL DEFAULT 'review',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `account` char(30) NOT NULL DEFAULT '',
+ `node` varchar(100) NOT NULL DEFAULT '',
+ `reviewType` varchar(100) NOT NULL DEFAULT 'manual',
+ `multipleType` enum('and','or') NOT NULL DEFAULT 'and',
+ `prev` mediumtext DEFAULT NULL,
+ `next` mediumtext DEFAULT NULL,
+ `status` varchar(20) NOT NULL DEFAULT 'wait',
+ `result` varchar(10) NOT NULL DEFAULT '',
+ `date` date DEFAULT NULL,
+ `opinion` mediumtext DEFAULT NULL,
+ `extra` mediumtext DEFAULT NULL,
+ `reviewedBy` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx_reviewed_date` (`reviewedDate`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalobject` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `approval` int(8) NOT NULL DEFAULT 0,
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) NOT NULL DEFAULT 0,
+ `extra` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_approvalrole` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `code` char(30) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `users` longtext DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_artifactrepo` (
+ `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(45) NOT NULL DEFAULT '',
+ `products` varchar(255) NOT NULL DEFAULT '',
+ `serverID` smallint(8) NOT NULL DEFAULT 0,
+ `repoName` varchar(45) NOT NULL DEFAULT '',
+ `format` varchar(10) NOT NULL DEFAULT '',
+ `type` char(7) NOT NULL DEFAULT '',
+ `status` varchar(10) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_assetlib` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_attend` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `date` date DEFAULT NULL,
+ `signIn` time DEFAULT NULL,
+ `signOut` time DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `ip` varchar(15) NOT NULL DEFAULT '',
+ `device` varchar(30) NOT NULL DEFAULT '',
+ `client` varchar(20) NOT NULL DEFAULT '',
+ `manualIn` time DEFAULT NULL,
+ `manualOut` time DEFAULT NULL,
+ `reason` varchar(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `reviewStatus` varchar(30) DEFAULT NULL,
+ `reviewedBy` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `attend` (`date`,`account`),
+ KEY `account` (`account`),
+ KEY `date` (`date`),
+ KEY `status` (`status`),
+ KEY `reason` (`reason`),
+ KEY `reviewStatus` (`reviewStatus`),
+ KEY `reviewedBy` (`reviewedBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_attendstat` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `month` char(10) NOT NULL DEFAULT '',
+ `normal` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `late` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `early` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `absent` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `trip` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `egress` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `lieu` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `paidLeave` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `unpaidLeave` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `timeOvertime` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `restOvertime` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `holidayOvertime` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `deserve` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `actual` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `status` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `attend` (`month`,`account`),
+ KEY `account` (`account`),
+ KEY `month` (`month`),
+ KEY `status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_auditcl` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `model` char(30) NOT NULL DEFAULT 'waterfall',
+ `practiceArea` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `objectID` int(11) NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_auditplan` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `dateType` char(30) NOT NULL DEFAULT '',
+ `config` text DEFAULT NULL,
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `process` mediumint(9) NOT NULL DEFAULT 0,
+ `processType` char(30) NOT NULL DEFAULT '',
+ `checkDate` date DEFAULT NULL,
+ `checkedBy` varchar(30) NOT NULL DEFAULT '',
+ `realCheckDate` date DEFAULT NULL,
+ `result` char(30) NOT NULL DEFAULT '',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `checkBy` varchar(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_auditresult` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `auditplan` mediumint(8) NOT NULL DEFAULT 0,
+ `listID` mediumint(8) NOT NULL DEFAULT 0,
+ `result` char(30) NOT NULL DEFAULT '',
+ `checkedBy` varchar(30) NOT NULL DEFAULT '',
+ `checkedDate` date DEFAULT NULL,
+ `comment` text DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_automation` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `node` int(11) unsigned NOT NULL DEFAULT 0,
+ `product` int(11) unsigned NOT NULL DEFAULT 0,
+ `scriptPath` varchar(255) NOT NULL DEFAULT '',
+ `shell` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_basicmeas` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `purpose` varchar(50) NOT NULL DEFAULT '',
+ `scope` char(30) NOT NULL DEFAULT '',
+ `object` char(30) NOT NULL DEFAULT '',
+ `name` varchar(90) NOT NULL DEFAULT '',
+ `code` char(30) NOT NULL DEFAULT '',
+ `unit` varchar(10) NOT NULL DEFAULT '',
+ `configure` text DEFAULT NULL,
+ `params` text DEFAULT NULL,
+ `definition` text DEFAULT NULL,
+ `source` varchar(255) NOT NULL DEFAULT '',
+ `collectType` varchar(30) NOT NULL DEFAULT '',
+ `collectConf` text DEFAULT NULL,
+ `execTime` varchar(30) NOT NULL DEFAULT '',
+ `collectedBy` varchar(10) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `order` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `code` (`code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_block` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `dashboard` varchar(20) NOT NULL DEFAULT '',
+ `module` varchar(20) NOT NULL DEFAULT '',
+ `title` varchar(100) NOT NULL DEFAULT '',
+ `block` varchar(30) NOT NULL DEFAULT '',
+ `code` varchar(30) NOT NULL DEFAULT '',
+ `width` enum('1','2','3') NOT NULL DEFAULT '1',
+ `height` smallint(6) unsigned NOT NULL DEFAULT 3,
+ `left` enum('0','1','2') NOT NULL DEFAULT '0',
+ `top` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `params` text DEFAULT NULL,
+ `hidden` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_branch` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `default` enum('0','1') NOT NULL DEFAULT '0',
+ `status` enum('active','closed') NOT NULL DEFAULT 'active',
+ `desc` varchar(255) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `closedDate` date DEFAULT NULL,
+ `order` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_budget` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `stage` char(30) NOT NULL DEFAULT '',
+ `subject` mediumint(8) NOT NULL DEFAULT 0,
+ `amount` char(30) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_bug` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `injection` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `identify` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `plan` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `storyVersion` smallint(6) NOT NULL DEFAULT 1,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `toTask` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `toStory` mediumint(8) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `severity` tinyint(4) NOT NULL DEFAULT 0,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `os` varchar(255) NOT NULL DEFAULT '',
+ `browser` varchar(255) NOT NULL DEFAULT '',
+ `hardware` varchar(30) NOT NULL DEFAULT '',
+ `found` varchar(30) NOT NULL DEFAULT '',
+ `steps` mediumtext DEFAULT NULL,
+ `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL DEFAULT '',
+ `confirmed` tinyint(1) NOT NULL DEFAULT 0,
+ `activatedCount` smallint(6) NOT NULL DEFAULT 0,
+ `activatedDate` datetime DEFAULT NULL,
+ `feedbackBy` varchar(100) NOT NULL DEFAULT '',
+ `notifyEmail` varchar(100) NOT NULL DEFAULT '',
+ `mailto` text DEFAULT NULL,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `openedBuild` varchar(255) NOT NULL DEFAULT '',
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deadline` date DEFAULT NULL,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `resolution` varchar(30) NOT NULL DEFAULT '',
+ `resolvedBuild` varchar(30) NOT NULL DEFAULT '',
+ `resolvedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `duplicateBug` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `relatedBug` varchar(255) NOT NULL DEFAULT '',
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `caseVersion` smallint(6) NOT NULL DEFAULT 1,
+ `feedback` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `result` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `repo` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `mr` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `entry` text DEFAULT NULL,
+ `lines` varchar(10) NOT NULL DEFAULT '',
+ `v1` varchar(40) NOT NULL DEFAULT '',
+ `v2` varchar(40) NOT NULL DEFAULT '',
+ `repoType` varchar(30) NOT NULL DEFAULT '',
+ `issueKey` varchar(50) NOT NULL DEFAULT '',
+ `testtask` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `execution` (`execution`),
+ KEY `status` (`status`),
+ KEY `plan` (`plan`),
+ KEY `story` (`story`),
+ KEY `case` (`case`),
+ KEY `toStory` (`toStory`),
+ KEY `result` (`result`),
+ KEY `assignedTo` (`assignedTo`),
+ KEY `deleted` (`deleted`),
+ KEY `project` (`project`),
+ KEY `product_status_deleted` (`product`,`status`,`deleted`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_build` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` varchar(255) NOT NULL DEFAULT '0',
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `builds` varchar(255) NOT NULL DEFAULT '',
+ `name` char(150) NOT NULL DEFAULT '',
+ `scmPath` char(255) NOT NULL DEFAULT '',
+ `filePath` char(255) NOT NULL DEFAULT '',
+ `date` date DEFAULT NULL,
+ `stories` text DEFAULT NULL,
+ `bugs` text DEFAULT NULL,
+ `artifactRepoID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `builder` char(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `execution` (`execution`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_burn` (
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `date` date NOT NULL,
+ `estimate` float NOT NULL DEFAULT 0,
+ `left` float NOT NULL DEFAULT 0,
+ `consumed` float NOT NULL DEFAULT 0,
+ `storyPoint` float NOT NULL DEFAULT 0,
+ PRIMARY KEY (`execution`,`date`,`task`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_case` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `lib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(30) unsigned NOT NULL DEFAULT 0,
+ `storyVersion` smallint(6) NOT NULL DEFAULT 1,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `precondition` text DEFAULT NULL,
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 3,
+ `type` char(30) NOT NULL DEFAULT '1',
+ `auto` varchar(10) NOT NULL DEFAULT 'no',
+ `frame` varchar(10) NOT NULL DEFAULT '',
+ `stage` varchar(255) NOT NULL DEFAULT '',
+ `howRun` varchar(30) NOT NULL DEFAULT '',
+ `script` longtext DEFAULT NULL,
+ `scriptedBy` varchar(30) NOT NULL DEFAULT '',
+ `scriptedDate` date DEFAULT NULL,
+ `scriptStatus` varchar(30) NOT NULL DEFAULT '',
+ `scriptLocation` varchar(255) NOT NULL DEFAULT '',
+ `status` char(30) NOT NULL DEFAULT '1',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL DEFAULT '',
+ `frequency` enum('1','2','3') NOT NULL DEFAULT '1',
+ `order` tinyint(30) unsigned NOT NULL DEFAULT 0,
+ `openedBy` char(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `reviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `reviewedDate` date DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `version` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `linkCase` varchar(255) NOT NULL DEFAULT '',
+ `fromBug` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromCaseID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromCaseVersion` mediumint(8) unsigned NOT NULL DEFAULT 1,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `lastRunner` varchar(30) NOT NULL DEFAULT '',
+ `lastRunDate` datetime DEFAULT NULL,
+ `lastRunResult` char(30) NOT NULL DEFAULT '',
+ `scene` int(11) NOT NULL DEFAULT 0,
+ `sort` int(11) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `story` (`story`),
+ KEY `fromBug` (`fromBug`),
+ KEY `module` (`module`),
+ KEY `scene` (`scene`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_casestep` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `type` varchar(10) NOT NULL DEFAULT 'step',
+ `desc` text DEFAULT NULL,
+ `expect` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `case` (`case`),
+ KEY `version` (`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_cfd` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `execution` int(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ `name` char(30) NOT NULL DEFAULT '',
+ `count` smallint(6) NOT NULL DEFAULT 0,
+ `date` date DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_chart` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `dimension` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `group` varchar(255) NOT NULL DEFAULT '',
+ `dataset` varchar(30) NOT NULL DEFAULT '0',
+ `desc` text DEFAULT NULL,
+ `settings` mediumtext DEFAULT NULL,
+ `filters` mediumtext DEFAULT NULL,
+ `step` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `fields` mediumtext DEFAULT NULL,
+ `langs` text DEFAULT NULL,
+ `sql` mediumtext DEFAULT NULL,
+ `stage` enum('draft','published') NOT NULL DEFAULT 'draft',
+ `builtin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `objects` mediumtext DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_charter` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `level` int(8) NOT NULL DEFAULT 0,
+ `category` char(30) NOT NULL DEFAULT '',
+ `market` varchar(30) NOT NULL DEFAULT '',
+ `check` enum('0','1') NOT NULL DEFAULT '0',
+ `appliedBy` char(30) NOT NULL DEFAULT '',
+ `appliedDate` datetime DEFAULT NULL,
+ `budget` char(30) NOT NULL DEFAULT '',
+ `budgetUnit` char(30) NOT NULL DEFAULT '',
+ `product` mediumint(8) NOT NULL DEFAULT 0,
+ `roadmap` mediumint(8) NOT NULL DEFAULT 0,
+ `spec` mediumtext DEFAULT NULL,
+ `status` char(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `charterFiles` text DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(255) NOT NULL DEFAULT '',
+ `activatedBy` char(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `reviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `reviewedResult` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `meetingDate` date DEFAULT NULL,
+ `meetingLocation` varchar(255) NOT NULL DEFAULT '',
+ `meetingMinutes` mediumtext DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_cmcl` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` char(30) NOT NULL DEFAULT '',
+ `projectType` varchar(255) NOT NULL DEFAULT '',
+ `title` int(11) NOT NULL DEFAULT 0,
+ `contents` text DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `order` int(11) NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_company` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(120) DEFAULT NULL,
+ `phone` char(20) DEFAULT NULL,
+ `fax` char(20) DEFAULT NULL,
+ `address` char(120) DEFAULT NULL,
+ `zipcode` char(10) DEFAULT NULL,
+ `website` char(120) DEFAULT NULL,
+ `backyard` char(120) DEFAULT NULL,
+ `guest` enum('1','0') NOT NULL DEFAULT '0',
+ `admins` char(255) DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_compile` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `job` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `queue` mediumint(8) NOT NULL DEFAULT 0,
+ `status` varchar(255) NOT NULL DEFAULT '',
+ `logs` text DEFAULT NULL,
+ `atTime` varchar(10) NOT NULL DEFAULT '',
+ `testtask` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `tag` varchar(255) NOT NULL DEFAULT '',
+ `times` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `updateDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_config` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `vision` varchar(10) NOT NULL DEFAULT '',
+ `owner` char(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `section` char(30) NOT NULL DEFAULT '',
+ `key` char(30) NOT NULL DEFAULT '',
+ `value` longtext DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`vision`,`owner`,`module`,`section`,`key`),
+ KEY `vision` (`vision`),
+ KEY `owner` (`owner`),
+ KEY `module` (`module`),
+ KEY `key` (`key`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_cron` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `m` varchar(20) NOT NULL DEFAULT '',
+ `h` varchar(20) NOT NULL DEFAULT '',
+ `dom` varchar(20) NOT NULL DEFAULT '',
+ `mon` varchar(20) NOT NULL DEFAULT '',
+ `dow` varchar(20) NOT NULL DEFAULT '',
+ `command` text DEFAULT NULL,
+ `remark` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT '',
+ `buildin` tinyint(1) NOT NULL DEFAULT 0,
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `lastTime` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `lastTime` (`lastTime`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dashboard` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `dimension` int(8) NOT NULL DEFAULT 0,
+ `module` mediumint(8) NOT NULL DEFAULT 0,
+ `desc` mediumtext DEFAULT NULL,
+ `layout` mediumtext DEFAULT NULL,
+ `filters` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dataset` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(155) NOT NULL DEFAULT '',
+ `sql` text DEFAULT NULL,
+ `fields` mediumtext DEFAULT NULL,
+ `objects` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dataview` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `group` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(155) NOT NULL DEFAULT '',
+ `code` varchar(50) NOT NULL DEFAULT '',
+ `view` varchar(57) NOT NULL DEFAULT '',
+ `sql` text DEFAULT NULL,
+ `fields` mediumtext DEFAULT NULL,
+ `langs` text DEFAULT NULL,
+ `objects` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` tinyint(4) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_demand` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `pool` int(8) NOT NULL DEFAULT 0,
+ `module` int(8) NOT NULL DEFAULT 0,
+ `product` varchar(255) NOT NULL DEFAULT '',
+ `parent` mediumint(8) NOT NULL DEFAULT 0,
+ `pri` char(30) NOT NULL DEFAULT '',
+ `category` char(30) NOT NULL DEFAULT '',
+ `source` char(30) NOT NULL DEFAULT '',
+ `sourceNote` varchar(255) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `feedbackedBy` varchar(255) NOT NULL DEFAULT '',
+ `email` varchar(255) NOT NULL DEFAULT '',
+ `assignedTo` char(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `reviewedBy` text DEFAULT NULL,
+ `reviewedDate` datetime DEFAULT NULL,
+ `status` char(30) NOT NULL DEFAULT '',
+ `duration` char(30) NOT NULL DEFAULT '',
+ `BSA` char(30) NOT NULL DEFAULT '',
+ `story` mediumint(8) NOT NULL DEFAULT 0,
+ `roadmap` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `mailto` text DEFAULT NULL,
+ `duplicateDemand` mediumint(8) DEFAULT NULL,
+ `childDemands` varchar(255) NOT NULL DEFAULT '',
+ `version` varchar(255) NOT NULL DEFAULT '',
+ `vision` varchar(255) NOT NULL DEFAULT 'or',
+ `color` varchar(255) NOT NULL DEFAULT '',
+ `changedBy` char(30) NOT NULL DEFAULT '',
+ `changedDate` datetime DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(30) NOT NULL DEFAULT '',
+ `submitedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `activatedDate` datetime DEFAULT NULL,
+ `distributedBy` varchar(30) NOT NULL DEFAULT '',
+ `distributedDate` datetime DEFAULT NULL,
+ `feedback` mediumint(9) NOT NULL DEFAULT 0,
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_demandpool` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `status` char(30) NOT NULL DEFAULT '',
+ `products` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `owner` text DEFAULT NULL,
+ `reviewer` text DEFAULT NULL,
+ `acl` char(30) DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_demandreview` (
+ `demand` mediumint(9) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `reviewer` varchar(30) NOT NULL DEFAULT '',
+ `result` varchar(30) NOT NULL DEFAULT '',
+ `reviewDate` datetime NOT NULL,
+ UNIQUE KEY `demand` (`demand`,`version`,`reviewer`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_demandspec` (
+ `demand` mediumint(9) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `spec` mediumtext DEFAULT NULL,
+ `verify` mediumtext DEFAULT NULL,
+ `files` text DEFAULT NULL,
+ UNIQUE KEY `demand` (`demand`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_deploy` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `begin` datetime DEFAULT NULL,
+ `end` datetime DEFAULT NULL,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `owner` char(30) NOT NULL DEFAULT '',
+ `members` text DEFAULT NULL,
+ `notify` text DEFAULT NULL,
+ `cases` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `result` varchar(20) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_deployproduct` (
+ `deploy` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `release` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `package` varchar(255) NOT NULL DEFAULT '',
+ UNIQUE KEY `deploy_product_release` (`deploy`,`product`,`release`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_deployscope` (
+ `deploy` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `service` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `hosts` text DEFAULT NULL,
+ `remove` text DEFAULT NULL,
+ `add` text DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_deploystep` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `deploy` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `begin` datetime DEFAULT NULL,
+ `end` datetime DEFAULT NULL,
+ `stage` varchar(30) NOT NULL DEFAULT '',
+ `content` text DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `assignedTo` char(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `finishedBy` char(30) NOT NULL DEFAULT '',
+ `finishedDate` datetime DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dept` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(60) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `order` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `position` char(30) NOT NULL DEFAULT '',
+ `function` char(255) NOT NULL DEFAULT '',
+ `manager` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ KEY `parent` (`parent`),
+ KEY `path` (`path`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_design` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` varchar(255) NOT NULL DEFAULT '',
+ `product` varchar(255) NOT NULL DEFAULT '',
+ `commit` text DEFAULT NULL,
+ `commitedBy` varchar(30) NOT NULL DEFAULT '',
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `story` char(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_designspec` (
+ `design` mediumint(8) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `files` varchar(255) NOT NULL DEFAULT '',
+ UNIQUE KEY `design` (`design`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dimension` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(90) NOT NULL DEFAULT '',
+ `code` varchar(45) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `code` (`code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doc` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `lib` varchar(30) NOT NULL DEFAULT '',
+ `template` varchar(30) NOT NULL DEFAULT '',
+ `templateType` varchar(30) NOT NULL DEFAULT '',
+ `chapterType` varchar(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT 'normal',
+ `parent` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `order` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `views` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `assetLib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `assetLibType` varchar(30) NOT NULL DEFAULT '',
+ `from` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromVersion` smallint(6) NOT NULL DEFAULT 1,
+ `draft` longtext DEFAULT NULL,
+ `collects` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `addedBy` varchar(30) NOT NULL DEFAULT '',
+ `addedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `approvedDate` date DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `editingDate` text DEFAULT NULL,
+ `editedList` text DEFAULT NULL,
+ `mailto` text DEFAULT NULL,
+ `acl` varchar(10) NOT NULL DEFAULT 'open',
+ `groups` varchar(255) NOT NULL DEFAULT '',
+ `users` text DEFAULT NULL,
+ `version` smallint(6) unsigned NOT NULL DEFAULT 1,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `execution` (`execution`),
+ KEY `lib` (`lib`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_docaction` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `doc` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `action` varchar(80) NOT NULL DEFAULT '',
+ `actor` char(30) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `doc` (`doc`),
+ KEY `actor` (`actor`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doccontent` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `doc` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `digest` varchar(255) NOT NULL DEFAULT '',
+ `content` longtext DEFAULT NULL,
+ `files` text DEFAULT NULL,
+ `type` varchar(10) NOT NULL DEFAULT '',
+ `version` smallint(6) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `doc_version` (`doc`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doclib` (
+ `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(60) NOT NULL DEFAULT '',
+ `baseUrl` varchar(255) NOT NULL DEFAULT '',
+ `acl` varchar(10) NOT NULL DEFAULT 'open',
+ `groups` varchar(255) NOT NULL DEFAULT '',
+ `users` text DEFAULT NULL,
+ `main` enum('0','1') NOT NULL DEFAULT '0',
+ `collector` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `order` tinyint(5) unsigned NOT NULL DEFAULT 0,
+ `addedBy` varchar(30) NOT NULL DEFAULT '',
+ `addedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `execution` (`execution`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_domain` (
+ `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `domain` varchar(255) NOT NULL DEFAULT '',
+ `adminURI` varchar(255) NOT NULL DEFAULT '',
+ `resolverURI` varchar(255) NOT NULL DEFAULT '',
+ `register` varchar(255) NOT NULL DEFAULT '',
+ `expiredDate` datetime DEFAULT NULL,
+ `renew` varchar(255) NOT NULL DEFAULT '',
+ `account` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `domain` (`domain`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_durationestimation` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `stage` mediumint(9) NOT NULL DEFAULT 0,
+ `workload` varchar(255) NOT NULL DEFAULT '',
+ `worktimeRate` varchar(255) NOT NULL DEFAULT '',
+ `people` varchar(255) NOT NULL DEFAULT '',
+ `startDate` date DEFAULT NULL,
+ `endDate` date DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_effort` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` text DEFAULT NULL,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `work` text DEFAULT NULL,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `date` date DEFAULT NULL,
+ `left` float NOT NULL DEFAULT 0,
+ `consumed` float NOT NULL DEFAULT 0,
+ `begin` smallint(4) unsigned zerofill NOT NULL DEFAULT 0000,
+ `end` smallint(4) unsigned zerofill NOT NULL DEFAULT 0000,
+ `extra` text DEFAULT NULL,
+ `order` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `execution` (`execution`),
+ KEY `objectID` (`objectID`),
+ KEY `date` (`date`),
+ KEY `account` (`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_entry` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `code` varchar(20) NOT NULL DEFAULT '',
+ `key` varchar(32) NOT NULL DEFAULT '',
+ `freePasswd` enum('0','1') NOT NULL DEFAULT '0',
+ `ip` varchar(100) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `calledTime` int(11) unsigned NOT NULL DEFAULT 0,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_expect` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `userID` mediumint(8) NOT NULL DEFAULT 0,
+ `project` mediumint(8) NOT NULL DEFAULT 0,
+ `expect` text DEFAULT NULL,
+ `progress` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_extension` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(150) NOT NULL DEFAULT '',
+ `code` varchar(30) NOT NULL DEFAULT '',
+ `version` varchar(50) NOT NULL DEFAULT '',
+ `author` varchar(100) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `license` text DEFAULT NULL,
+ `type` varchar(20) NOT NULL DEFAULT 'extension',
+ `site` varchar(150) NOT NULL DEFAULT '',
+ `zentaoCompatible` varchar(100) NOT NULL DEFAULT '',
+ `installedTime` datetime DEFAULT NULL,
+ `depends` varchar(100) NOT NULL DEFAULT '',
+ `dirs` mediumtext DEFAULT NULL,
+ `files` mediumtext DEFAULT NULL,
+ `status` varchar(20) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `code` (`code`),
+ KEY `name` (`name`),
+ KEY `installedTime` (`installedTime`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_faq` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `module` mediumint(9) NOT NULL DEFAULT 0,
+ `product` mediumint(9) NOT NULL DEFAULT 0,
+ `question` varchar(255) NOT NULL DEFAULT '',
+ `answer` text DEFAULT NULL,
+ `addedtime` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_feedback` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `solution` char(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 2,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `public` enum('0','1') NOT NULL DEFAULT '0',
+ `notify` enum('0','1') NOT NULL DEFAULT '0',
+ `notifyEmail` varchar(100) NOT NULL DEFAULT '',
+ `source` varchar(255) NOT NULL DEFAULT '',
+ `likes` text DEFAULT NULL,
+ `result` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `faq` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `openedBy` char(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `reviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `processedBy` char(30) NOT NULL DEFAULT '',
+ `processedDate` datetime DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(30) NOT NULL DEFAULT '',
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(255) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `activatedBy` varchar(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `feedbackBy` varchar(100) NOT NULL DEFAULT '',
+ `repeatFeedback` mediumint(8) NOT NULL DEFAULT 0,
+ `mailto` varchar(255) NOT NULL DEFAULT '',
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_feedbackview` (
+ `account` char(30) NOT NULL DEFAULT '',
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ UNIQUE KEY `account_product` (`account`,`product`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_file` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `pathname` char(100) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `extension` char(30) NOT NULL DEFAULT '',
+ `size` int(11) unsigned NOT NULL DEFAULT 0,
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `addedBy` char(30) NOT NULL DEFAULT '',
+ `addedDate` datetime DEFAULT NULL,
+ `downloads` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `extra` varchar(255) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `objectType` (`objectType`),
+ KEY `objectID` (`objectID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_gapanalysis` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `role` varchar(20) NOT NULL DEFAULT '',
+ `analysis` mediumtext DEFAULT NULL,
+ `needTrain` enum('no','yes') NOT NULL DEFAULT 'no',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `project_account` (`project`,`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_group` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `name` char(30) NOT NULL DEFAULT '',
+ `role` char(30) NOT NULL DEFAULT '',
+ `desc` char(255) NOT NULL DEFAULT '',
+ `acl` text DEFAULT NULL,
+ `developer` enum('0','1') NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_grouppriv` (
+ `group` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` char(30) NOT NULL DEFAULT '',
+ `method` char(30) NOT NULL DEFAULT '',
+ UNIQUE KEY `group` (`group`,`module`,`method`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_history` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `action` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `field` varchar(30) NOT NULL DEFAULT '',
+ `old` text DEFAULT NULL,
+ `new` text DEFAULT NULL,
+ `diff` mediumtext DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `action` (`action`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_holiday` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `type` enum('holiday','working') NOT NULL DEFAULT 'holiday',
+ `desc` text DEFAULT NULL,
+ `year` char(4) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `year` (`year`),
+ KEY `name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_host` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT 'normal',
+ `hostType` varchar(30) NOT NULL DEFAULT '',
+ `mac` varchar(128) NOT NULL DEFAULT '',
+ `memory` varchar(30) NOT NULL DEFAULT '',
+ `diskSize` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(50) NOT NULL DEFAULT '',
+ `secret` varchar(50) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `tokenSN` varchar(50) NOT NULL DEFAULT '',
+ `tokenTime` datetime DEFAULT NULL,
+ `oldTokenSN` varchar(50) NOT NULL DEFAULT '',
+ `vsoft` varchar(30) NOT NULL DEFAULT '',
+ `heartbeat` datetime DEFAULT NULL,
+ `zap` varchar(10) NOT NULL DEFAULT '',
+ `provider` varchar(255) NOT NULL DEFAULT '',
+ `vnc` int(11) NOT NULL DEFAULT 0,
+ `ztf` int(11) NOT NULL DEFAULT 0,
+ `zd` int(11) NOT NULL DEFAULT 0,
+ `ssh` int(11) NOT NULL DEFAULT 0,
+ `parent` int(11) unsigned NOT NULL DEFAULT 0,
+ `image` int(11) unsigned NOT NULL DEFAULT 0,
+ `admin` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `serverRoom` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `serverModel` varchar(256) NOT NULL DEFAULT '',
+ `hardwareType` varchar(64) NOT NULL DEFAULT '',
+ `cpuBrand` varchar(128) NOT NULL DEFAULT '',
+ `cpuModel` varchar(128) NOT NULL DEFAULT '',
+ `cpuNumber` varchar(16) NOT NULL DEFAULT '',
+ `cpuCores` varchar(30) NOT NULL DEFAULT '',
+ `intranet` varchar(128) NOT NULL DEFAULT '',
+ `extranet` varchar(128) NOT NULL DEFAULT '',
+ `osName` varchar(64) NOT NULL DEFAULT '',
+ `osVersion` varchar(64) NOT NULL DEFAULT '',
+ `group` varchar(128) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_chat` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `name` varchar(60) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT 'group',
+ `admins` varchar(255) NOT NULL DEFAULT '',
+ `committers` varchar(255) NOT NULL DEFAULT '',
+ `subject` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `public` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `ownedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `mergedDate` datetime DEFAULT NULL,
+ `lastActiveTime` datetime DEFAULT NULL,
+ `lastMessage` int(11) unsigned NOT NULL DEFAULT 0,
+ `lastMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
+ `dismissDate` datetime DEFAULT NULL,
+ `pinnedMessages` text DEFAULT NULL,
+ `mergedChats` text DEFAULT NULL,
+ `adminInvite` enum('0','1') NOT NULL DEFAULT '0',
+ `avatar` text DEFAULT NULL,
+ `archiveDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `gid` (`gid`),
+ KEY `name` (`name`),
+ KEY `type` (`type`),
+ KEY `public` (`public`),
+ KEY `createdBy` (`createdBy`),
+ KEY `editedBy` (`editedBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_chat_message_index` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `tableName` char(64) NOT NULL DEFAULT '',
+ `start` int(11) unsigned NOT NULL DEFAULT 0,
+ `end` int(11) unsigned NOT NULL DEFAULT 0,
+ `startIndex` int(11) unsigned NOT NULL DEFAULT 0,
+ `endIndex` int(11) unsigned NOT NULL DEFAULT 0,
+ `startDate` datetime DEFAULT NULL,
+ `endDate` datetime DEFAULT NULL,
+ `count` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chattable` (`gid`,`tableName`),
+ KEY `start` (`start`),
+ KEY `end` (`end`),
+ KEY `startDate` (`startDate`),
+ KEY `endDate` (`endDate`),
+ KEY `chatstartindex` (`gid`,`startIndex`),
+ KEY `chatendindex` (`gid`,`endIndex`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_chatuser` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `user` mediumint(8) NOT NULL DEFAULT 0,
+ `order` smallint(5) NOT NULL DEFAULT 0,
+ `star` enum('0','1') NOT NULL DEFAULT '0',
+ `hide` enum('0','1') NOT NULL DEFAULT '0',
+ `mute` enum('0','1') NOT NULL DEFAULT '0',
+ `freeze` enum('0','1') NOT NULL DEFAULT '0',
+ `join` datetime DEFAULT NULL,
+ `quit` datetime DEFAULT NULL,
+ `category` varchar(40) NOT NULL DEFAULT '',
+ `lastReadMessage` int(11) unsigned NOT NULL DEFAULT 0,
+ `lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chatuser` (`cgid`,`user`),
+ KEY `cgid` (`cgid`),
+ KEY `user` (`user`),
+ KEY `order` (`order`),
+ KEY `star` (`star`),
+ KEY `hide` (`hide`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_client` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `version` char(30) NOT NULL DEFAULT '',
+ `desc` varchar(100) NOT NULL DEFAULT '',
+ `changeLog` text DEFAULT NULL,
+ `strategy` varchar(10) NOT NULL DEFAULT '',
+ `downloads` text DEFAULT NULL,
+ `createdDate` datetime DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `status` enum('released','wait') NOT NULL DEFAULT 'wait',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_conference` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `rid` char(40) NOT NULL DEFAULT '',
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `status` enum('closed','open','notStarted') NOT NULL DEFAULT 'closed',
+ `participants` text DEFAULT NULL,
+ `subscribers` text DEFAULT NULL,
+ `invitee` text DEFAULT NULL,
+ `openedBy` mediumint(8) NOT NULL DEFAULT 0,
+ `openedDate` datetime DEFAULT NULL,
+ `topic` text DEFAULT NULL,
+ `startTime` datetime DEFAULT NULL,
+ `endTime` datetime DEFAULT NULL,
+ `password` char(20) NOT NULL DEFAULT '',
+ `type` enum('default','periodic','scheduled') NOT NULL DEFAULT 'default',
+ `number` char(20) NOT NULL DEFAULT '',
+ `note` text DEFAULT NULL,
+ `sentNotify` tinyint(1) NOT NULL DEFAULT 0,
+ `reminderTime` int(11) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_conferenceaction` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `rid` char(40) NOT NULL DEFAULT '',
+ `type` enum('create','invite','join','leave','close','publish') NOT NULL DEFAULT 'create',
+ `data` text DEFAULT NULL,
+ `user` mediumint(8) NOT NULL DEFAULT 0,
+ `date` datetime DEFAULT NULL,
+ `device` char(40) NOT NULL DEFAULT 'default',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_conferenceuser` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `conference` mediumint(8) NOT NULL DEFAULT 0,
+ `user` mediumint(8) NOT NULL DEFAULT 0,
+ `hide` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `conferenceuser` (`conference`,`user`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_message` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `user` varchar(30) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `index` int(11) unsigned NOT NULL DEFAULT 0,
+ `type` enum('normal','broadcast','notify','bulletin','botcommand') NOT NULL DEFAULT 'normal',
+ `content` text DEFAULT NULL,
+ `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text',
+ `data` text DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `mgid` (`gid`),
+ KEY `mcgid` (`cgid`),
+ KEY `muser` (`user`),
+ KEY `mtype` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_message_backup` (
+ `id` int(11) unsigned NOT NULL DEFAULT 0,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `user` varchar(30) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `index` int(11) unsigned NOT NULL DEFAULT 0,
+ `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal',
+ `content` text DEFAULT NULL,
+ `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text',
+ `data` text DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_message_index` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `tableName` char(64) NOT NULL DEFAULT '',
+ `start` int(11) unsigned NOT NULL DEFAULT 0,
+ `end` int(11) unsigned NOT NULL DEFAULT 0,
+ `startDate` datetime DEFAULT NULL,
+ `endDate` datetime DEFAULT NULL,
+ `chats` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `tableName` (`tableName`),
+ KEY `start` (`start`),
+ KEY `end` (`end`),
+ KEY `startDate` (`startDate`),
+ KEY `endDate` (`endDate`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_messagestatus` (
+ `user` mediumint(8) NOT NULL DEFAULT 0,
+ `message` int(11) unsigned NOT NULL DEFAULT 0,
+ `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting',
+ UNIQUE KEY `user` (`user`,`message`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_queue` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` char(30) NOT NULL DEFAULT '',
+ `content` text DEFAULT NULL,
+ `addDate` datetime DEFAULT NULL,
+ `processDate` datetime DEFAULT NULL,
+ `result` text DEFAULT NULL,
+ `status` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_userdevice` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `user` mediumint(8) NOT NULL DEFAULT 0,
+ `device` char(40) NOT NULL DEFAULT 'default',
+ `deviceID` char(40) NOT NULL DEFAULT '',
+ `token` char(64) NOT NULL DEFAULT '',
+ `validUntil` datetime DEFAULT NULL,
+ `lastLogin` datetime DEFAULT NULL,
+ `lastLogout` datetime DEFAULT NULL,
+ `online` tinyint(1) NOT NULL DEFAULT 0,
+ `version` char(10) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `userdevice` (`user`,`device`),
+ KEY `user` (`user`),
+ KEY `lastLogin` (`lastLogin`),
+ KEY `lastLogout` (`lastLogout`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_image` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `host` int(11) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(64) NOT NULL DEFAULT '',
+ `localName` varchar(64) NOT NULL DEFAULT '',
+ `address` varchar(64) NOT NULL DEFAULT '',
+ `path` varchar(64) NOT NULL DEFAULT '',
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `osName` varchar(32) NOT NULL DEFAULT '',
+ `from` varchar(10) NOT NULL DEFAULT 'zentao',
+ `memory` float unsigned NOT NULL DEFAULT 0,
+ `disk` float unsigned NOT NULL DEFAULT 0,
+ `fileSize` float unsigned NOT NULL DEFAULT 0,
+ `md5` varchar(64) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `restoreDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_instance` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `space` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `solution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` char(50) NOT NULL DEFAULT '',
+ `appID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `appName` char(50) NOT NULL DEFAULT '',
+ `appVersion` char(20) NOT NULL DEFAULT '',
+ `chart` char(50) NOT NULL DEFAULT '',
+ `logo` varchar(255) NOT NULL DEFAULT '',
+ `version` char(50) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `introduction` text DEFAULT NULL,
+ `source` char(20) NOT NULL DEFAULT '',
+ `channel` char(20) NOT NULL DEFAULT '',
+ `k8name` char(64) NOT NULL DEFAULT '',
+ `status` char(20) NOT NULL DEFAULT '',
+ `pinned` enum('0','1') NOT NULL DEFAULT '0',
+ `domain` char(255) NOT NULL DEFAULT '',
+ `smtpSnippetName` char(30) NOT NULL DEFAULT '',
+ `ldapSnippetName` char(30) NOT NULL DEFAULT '',
+ `ldapSettings` text DEFAULT NULL,
+ `dbSettings` text DEFAULT NULL,
+ `autoBackup` tinyint(1) NOT NULL DEFAULT 0,
+ `backupKeepDays` int(10) unsigned NOT NULL DEFAULT 1,
+ `autoRestore` tinyint(1) NOT NULL DEFAULT 0,
+ `env` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdAt` datetime DEFAULT NULL,
+ `deleted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `space` (`space`),
+ KEY `k8name` (`k8name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_intervention` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `activity` mediumint(8) NOT NULL DEFAULT 0,
+ `status` char(30) NOT NULL DEFAULT '',
+ `partake` text DEFAULT NULL,
+ `begin` date DEFAULT NULL,
+ `realBegin` date DEFAULT NULL,
+ `situation` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `project` (`project`,`activity`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_issue` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `project` varchar(255) NOT NULL DEFAULT '',
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `pri` char(30) NOT NULL DEFAULT '',
+ `severity` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `activity` varchar(255) NOT NULL DEFAULT '',
+ `deadline` date DEFAULT NULL,
+ `resolution` char(30) NOT NULL DEFAULT '',
+ `resolutionComment` text DEFAULT NULL,
+ `objectID` varchar(255) NOT NULL DEFAULT '',
+ `resolvedDate` date DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `owner` varchar(255) NOT NULL DEFAULT '',
+ `lib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `from` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `activateBy` varchar(30) NOT NULL DEFAULT '',
+ `activateDate` date DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` date DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `approvedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_job` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `repo` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `frame` varchar(20) NOT NULL DEFAULT '',
+ `engine` varchar(20) NOT NULL DEFAULT '',
+ `server` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `pipeline` varchar(500) NOT NULL DEFAULT '',
+ `triggerType` varchar(255) NOT NULL DEFAULT '',
+ `sonarqubeServer` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `projectKey` varchar(255) NOT NULL DEFAULT '',
+ `svnDir` varchar(255) NOT NULL DEFAULT '',
+ `atDay` varchar(255) NOT NULL DEFAULT '',
+ `atTime` varchar(10) NOT NULL DEFAULT '',
+ `customParam` text DEFAULT NULL,
+ `comment` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `lastExec` datetime DEFAULT NULL,
+ `lastStatus` varchar(255) NOT NULL DEFAULT '',
+ `lastTag` varchar(255) NOT NULL DEFAULT '',
+ `lastSyncDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanban` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `space` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `team` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `acl` char(30) NOT NULL DEFAULT 'open',
+ `whitelist` text DEFAULT NULL,
+ `archived` enum('0','1') NOT NULL DEFAULT '1',
+ `performable` enum('0','1') NOT NULL DEFAULT '0',
+ `status` enum('active','closed') NOT NULL DEFAULT 'active',
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `displayCards` smallint(6) NOT NULL DEFAULT 0,
+ `showWIP` enum('0','1') NOT NULL DEFAULT '1',
+ `fluidBoard` enum('0','1') NOT NULL DEFAULT '0',
+ `colWidth` smallint(4) NOT NULL DEFAULT 264,
+ `minColWidth` smallint(4) NOT NULL DEFAULT 200,
+ `maxColWidth` smallint(4) NOT NULL DEFAULT 384,
+ `object` varchar(255) NOT NULL DEFAULT '',
+ `alignment` varchar(10) NOT NULL DEFAULT 'center',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `activatedBy` char(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbancard` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `kanban` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `region` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `group` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromType` varchar(30) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT 'doing',
+ `pri` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `assignedTo` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `estimate` float unsigned NOT NULL DEFAULT 0,
+ `progress` float unsigned NOT NULL DEFAULT 0,
+ `color` char(7) NOT NULL DEFAULT '',
+ `acl` char(30) NOT NULL DEFAULT 'open',
+ `whitelist` text DEFAULT NULL,
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `archived` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `archivedBy` char(30) NOT NULL DEFAULT '',
+ `archivedDate` datetime DEFAULT NULL,
+ `assignedBy` char(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbancell` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `kanban` mediumint(8) NOT NULL DEFAULT 0,
+ `lane` mediumint(8) NOT NULL DEFAULT 0,
+ `column` mediumint(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ `cards` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `card_group` (`kanban`,`type`,`lane`,`column`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbancolumn` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `parent` mediumint(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ `region` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `group` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `color` char(30) NOT NULL DEFAULT '',
+ `limit` smallint(6) NOT NULL DEFAULT -1,
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `archived` enum('0','1') NOT NULL DEFAULT '0',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbangroup` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `kanban` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `region` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `order` smallint(6) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbanlane` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `execution` mediumint(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ `region` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `group` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `groupby` char(30) NOT NULL DEFAULT '',
+ `extra` char(30) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `color` char(30) NOT NULL DEFAULT '',
+ `order` smallint(6) NOT NULL DEFAULT 0,
+ `lastEditedTime` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbanregion` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `space` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `kanban` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_kanbanspace` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(50) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `team` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `acl` char(30) NOT NULL DEFAULT 'open',
+ `whitelist` text DEFAULT NULL,
+ `status` enum('active','closed') NOT NULL DEFAULT 'active',
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `activatedBy` char(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_lang` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `lang` varchar(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `section` varchar(50) NOT NULL DEFAULT '',
+ `key` varchar(60) NOT NULL DEFAULT '',
+ `value` text DEFAULT NULL,
+ `system` enum('0','1') NOT NULL DEFAULT '1',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`,`vision`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_leave` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `year` char(4) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `start` time DEFAULT NULL,
+ `finish` time DEFAULT NULL,
+ `hours` float(4,1) unsigned NOT NULL DEFAULT 0.0,
+ `backDate` datetime DEFAULT NULL,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `reviewedBy` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `level` tinyint(3) NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `reviewers` text DEFAULT NULL,
+ `backReviewers` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `year` (`year`),
+ KEY `type` (`type`),
+ KEY `status` (`status`),
+ KEY `createdBy` (`createdBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_lieu` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `year` char(4) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `start` time DEFAULT NULL,
+ `finish` time DEFAULT NULL,
+ `hours` float(4,1) unsigned NOT NULL DEFAULT 0.0,
+ `overtime` char(255) NOT NULL DEFAULT '',
+ `trip` char(255) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `reviewedBy` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `level` tinyint(3) NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `reviewers` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `year` (`year`),
+ KEY `status` (`status`),
+ KEY `createdBy` (`createdBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_log` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `action` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `date` datetime DEFAULT NULL,
+ `url` varchar(255) NOT NULL DEFAULT '',
+ `contentType` varchar(30) NOT NULL DEFAULT '',
+ `data` text DEFAULT NULL,
+ `result` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `objectType` (`objectType`),
+ KEY `obejctID` (`objectID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_market` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `industry` char(255) NOT NULL DEFAULT '',
+ `scale` decimal(10,2) NOT NULL DEFAULT 0.00,
+ `maturity` char(255) NOT NULL DEFAULT '',
+ `speed` varchar(255) NOT NULL DEFAULT '',
+ `competition` char(255) NOT NULL DEFAULT '',
+ `strategy` varchar(255) NOT NULL DEFAULT '',
+ `ppm` varchar(20) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_marketreport` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `market` mediumint(8) NOT NULL DEFAULT 0,
+ `research` mediumint(8) NOT NULL DEFAULT 0,
+ `maturity` varchar(30) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `participants` char(255) NOT NULL DEFAULT '',
+ `source` varchar(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `publishedBy` varchar(30) NOT NULL DEFAULT '',
+ `publishedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_measqueue` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `mid` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `status` varchar(255) NOT NULL DEFAULT '',
+ `logs` text DEFAULT NULL,
+ `execTime` varchar(10) NOT NULL DEFAULT '',
+ `params` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `updateDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_measrecords` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `mid` mediumint(8) NOT NULL DEFAULT 0,
+ `measCode` char(50) NOT NULL DEFAULT '',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `params` text DEFAULT NULL,
+ `year` char(4) NOT NULL DEFAULT '',
+ `month` char(6) NOT NULL DEFAULT '',
+ `week` char(8) NOT NULL DEFAULT '',
+ `day` char(8) NOT NULL DEFAULT '',
+ `value` varchar(255) NOT NULL DEFAULT '',
+ `date` date DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `time` (`year`,`month`,`day`,`week`),
+ KEY `product` (`product`),
+ KEY `project` (`project`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_meastemplate` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `model` char(30) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `content` mediumtext DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_meeting` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) NOT NULL DEFAULT 0,
+ `execution` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `begin` time DEFAULT NULL,
+ `end` time DEFAULT NULL,
+ `dept` mediumint(8) NOT NULL DEFAULT 0,
+ `mode` varchar(255) NOT NULL DEFAULT '',
+ `host` varchar(30) NOT NULL DEFAULT '',
+ `participant` text DEFAULT NULL,
+ `date` date DEFAULT NULL,
+ `room` int(11) NOT NULL DEFAULT 0,
+ `minutes` text DEFAULT NULL,
+ `minutedBy` varchar(30) NOT NULL DEFAULT '',
+ `minutedDate` datetime DEFAULT NULL,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_meetingroom` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `position` varchar(30) NOT NULL DEFAULT '',
+ `seats` int(11) NOT NULL DEFAULT 0,
+ `equipment` varchar(255) NOT NULL DEFAULT '',
+ `openTime` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_metric` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `purpose` varchar(50) NOT NULL DEFAULT '',
+ `scope` char(30) NOT NULL DEFAULT '',
+ `object` char(30) NOT NULL DEFAULT '',
+ `stage` enum('wait','released') DEFAULT 'wait',
+ `type` enum('php','sql') DEFAULT 'php',
+ `name` varchar(90) NOT NULL DEFAULT '',
+ `code` varchar(90) NOT NULL DEFAULT '',
+ `unit` varchar(10) NOT NULL DEFAULT '',
+ `dateType` varchar(50) NOT NULL DEFAULT '',
+ `collector` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `definition` text DEFAULT NULL,
+ `when` varchar(30) NOT NULL DEFAULT '',
+ `event` varchar(30) NOT NULL DEFAULT '',
+ `cronCFG` varchar(30) NOT NULL DEFAULT '',
+ `time` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `implementedBy` varchar(30) NOT NULL DEFAULT '',
+ `implementedDate` datetime DEFAULT NULL,
+ `delistedBy` varchar(30) NOT NULL DEFAULT '',
+ `delistedDate` datetime DEFAULT NULL,
+ `builtin` enum('0','1') NOT NULL DEFAULT '0',
+ `fromID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `order` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `lastCalcRows` int(11) NOT NULL DEFAULT 0,
+ `lastCalcTime` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_metriclib` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `metricID` mediumint(8) NOT NULL DEFAULT 0,
+ `metricCode` varchar(100) NOT NULL DEFAULT '',
+ `system` char(30) NOT NULL DEFAULT '0',
+ `program` char(30) NOT NULL DEFAULT '',
+ `project` char(30) NOT NULL DEFAULT '',
+ `product` char(30) NOT NULL DEFAULT '',
+ `execution` char(30) NOT NULL DEFAULT '',
+ `code` char(30) NOT NULL DEFAULT '',
+ `pipeline` char(30) NOT NULL DEFAULT '',
+ `user` text DEFAULT NULL,
+ `dept` char(30) NOT NULL DEFAULT '',
+ `year` char(4) NOT NULL DEFAULT '0',
+ `month` char(2) NOT NULL DEFAULT '0',
+ `week` char(2) NOT NULL DEFAULT '0',
+ `day` char(2) NOT NULL DEFAULT '0',
+ `value` varchar(100) NOT NULL DEFAULT '0',
+ `date` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `metricID` (`metricID`),
+ KEY `metricCode` (`metricCode`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_module` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `root` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` char(60) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT '',
+ `from` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `collector` text DEFAULT NULL,
+ `short` varchar(30) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `root` (`root`),
+ KEY `type` (`type`),
+ KEY `path` (`path`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_mr` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `hostID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `sourceProject` varchar(50) NOT NULL DEFAULT '',
+ `sourceBranch` varchar(100) NOT NULL DEFAULT '',
+ `targetProject` varchar(50) NOT NULL DEFAULT '',
+ `targetBranch` varchar(100) NOT NULL DEFAULT '',
+ `mriid` int(10) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `description` text DEFAULT NULL,
+ `assignee` varchar(255) NOT NULL DEFAULT '',
+ `reviewer` varchar(255) NOT NULL DEFAULT '',
+ `approver` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `status` char(30) NOT NULL DEFAULT '',
+ `mergeStatus` char(30) NOT NULL DEFAULT '',
+ `approvalStatus` char(30) NOT NULL DEFAULT '',
+ `needApproved` enum('0','1') NOT NULL DEFAULT '0',
+ `needCI` enum('0','1') NOT NULL DEFAULT '0',
+ `repoID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `jobID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `executionID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `compileID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `compileStatus` char(30) NOT NULL DEFAULT '',
+ `removeSourceBranch` enum('0','1') NOT NULL DEFAULT '0',
+ `squash` enum('0','1') NOT NULL DEFAULT '0',
+ `synced` enum('0','1') NOT NULL DEFAULT '1',
+ `syncError` varchar(255) NOT NULL DEFAULT '',
+ `hasNoConflict` enum('0','1') NOT NULL DEFAULT '0',
+ `diffs` longtext DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_mrapproval` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `mrID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` varchar(255) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `action` char(30) NOT NULL DEFAULT '',
+ `comment` text DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_nc` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `auditplan` mediumint(8) NOT NULL DEFAULT 0,
+ `listID` mediumint(8) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `type` char(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT 'active',
+ `severity` char(30) NOT NULL DEFAULT '',
+ `deadline` date DEFAULT NULL,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `resolution` char(30) NOT NULL DEFAULT '',
+ `resolvedDate` date DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` date DEFAULT NULL,
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` date DEFAULT NULL,
+ `activateDate` date DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_notify` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(50) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `action` mediumint(8) NOT NULL DEFAULT 0,
+ `toList` text DEFAULT NULL,
+ `ccList` text DEFAULT NULL,
+ `subject` text DEFAULT NULL,
+ `data` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `sendTime` datetime DEFAULT NULL,
+ `status` varchar(10) NOT NULL DEFAULT 'wait',
+ `failReason` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `objectType` (`objectType`),
+ KEY `status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_oauth` (
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `openID` varchar(255) NOT NULL DEFAULT '',
+ `providerType` varchar(30) NOT NULL DEFAULT '',
+ `providerID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ KEY `account` (`account`),
+ KEY `providerType` (`providerType`),
+ KEY `providerID` (`providerID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_object` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) NOT NULL DEFAULT 0,
+ `from` mediumint(8) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `category` char(30) NOT NULL DEFAULT '',
+ `version` varchar(255) NOT NULL DEFAULT '',
+ `type` enum('reviewed','taged') NOT NULL DEFAULT 'reviewed',
+ `range` text DEFAULT NULL,
+ `data` text DEFAULT NULL,
+ `storyEst` char(30) NOT NULL DEFAULT '',
+ `taskEst` char(30) NOT NULL DEFAULT '',
+ `requestEst` char(30) NOT NULL DEFAULT '',
+ `testEst` char(30) NOT NULL DEFAULT '',
+ `devEst` char(30) NOT NULL DEFAULT '',
+ `designEst` char(30) NOT NULL DEFAULT '',
+ `end` date DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_opportunity` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `source` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `strategy` char(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT 'active',
+ `impact` mediumint(8) NOT NULL DEFAULT 0,
+ `chance` mediumint(8) NOT NULL DEFAULT 0,
+ `ratio` mediumint(8) NOT NULL DEFAULT 0,
+ `pri` char(30) NOT NULL DEFAULT '',
+ `identifiedDate` date DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` date DEFAULT NULL,
+ `approvedDate` date DEFAULT NULL,
+ `prevention` mediumtext DEFAULT NULL,
+ `plannedClosedDate` date DEFAULT NULL,
+ `actualClosedDate` date DEFAULT NULL,
+ `lib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `from` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `activatedBy` varchar(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `canceledBy` varchar(30) NOT NULL DEFAULT '',
+ `canceledDate` datetime DEFAULT NULL,
+ `cancelReason` char(30) NOT NULL DEFAULT '',
+ `hangupedBy` varchar(30) NOT NULL DEFAULT '',
+ `hangupedDate` datetime DEFAULT NULL,
+ `resolution` mediumtext DEFAULT NULL,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `resolvedDate` datetime DEFAULT NULL,
+ `lastCheckedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastCheckedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_overtime` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `year` char(4) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `start` time DEFAULT NULL,
+ `finish` time DEFAULT NULL,
+ `hours` float(4,1) unsigned NOT NULL DEFAULT 0.0,
+ `leave` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `rejectReason` varchar(100) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `reviewedBy` char(30) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `level` tinyint(3) NOT NULL DEFAULT 0,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `reviewers` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `year` (`year`),
+ KEY `type` (`type`),
+ KEY `status` (`status`),
+ KEY `createdBy` (`createdBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_pipeline` (
+ `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` char(30) NOT NULL DEFAULT '',
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `url` varchar(255) DEFAULT NULL,
+ `account` varchar(30) DEFAULT NULL,
+ `password` varchar(255) DEFAULT NULL,
+ `token` varchar(255) DEFAULT NULL,
+ `private` char(32) DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_pivot` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `dimension` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `group` varchar(255) NOT NULL DEFAULT '',
+ `name` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `sql` mediumtext DEFAULT NULL,
+ `fields` mediumtext DEFAULT NULL,
+ `langs` mediumtext DEFAULT NULL,
+ `vars` mediumtext DEFAULT NULL,
+ `objects` mediumtext DEFAULT NULL,
+ `settings` mediumtext DEFAULT NULL,
+ `filters` mediumtext DEFAULT NULL,
+ `step` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `stage` enum('draft','published') NOT NULL DEFAULT 'draft',
+ `builtin` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `dimension` (`dimension`),
+ KEY `group` (`group`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_planstory` (
+ `plan` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `order` mediumint(9) NOT NULL DEFAULT 0,
+ UNIQUE KEY `plan_story` (`plan`,`story`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_practice` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `code` char(50) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `labels` varchar(255) NOT NULL DEFAULT '',
+ `summary` varchar(255) NOT NULL DEFAULT '',
+ `content` text DEFAULT NULL,
+ `contributor` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `code` (`code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_priv` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `method` varchar(30) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,',
+ `vision` varchar(30) NOT NULL DEFAULT ',rnd,',
+ `system` enum('0','1') NOT NULL DEFAULT '0',
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `priv` (`module`,`method`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_privlang` (
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `objectType` enum('priv','manager') NOT NULL DEFAULT 'priv',
+ `lang` varchar(30) NOT NULL DEFAULT '',
+ `key` varchar(100) NOT NULL DEFAULT '',
+ `value` varchar(255) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ UNIQUE KEY `objectlang` (`objectID`,`objectType`,`lang`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_privmanager` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `code` varchar(100) NOT NULL DEFAULT '',
+ `type` enum('view','module','package') NOT NULL DEFAULT 'package',
+ `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,',
+ `vision` varchar(30) NOT NULL DEFAULT ',rnd,',
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_privrelation` (
+ `priv` varchar(100) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `relationPriv` varchar(100) NOT NULL DEFAULT '',
+ UNIQUE KEY `privrelation` (`priv`,`type`,`relationPriv`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_process` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `model` char(30) NOT NULL DEFAULT 'waterfall',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `abbr` char(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `order` mediumint(9) NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_product` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `program` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(110) NOT NULL DEFAULT '',
+ `code` varchar(45) NOT NULL DEFAULT '',
+ `shadow` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `bind` enum('0','1') NOT NULL DEFAULT '0',
+ `line` mediumint(8) NOT NULL DEFAULT 0,
+ `type` varchar(30) NOT NULL DEFAULT 'normal',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `PO` varchar(30) NOT NULL DEFAULT '',
+ `QD` varchar(30) NOT NULL DEFAULT '',
+ `RD` varchar(30) NOT NULL DEFAULT '',
+ `feedback` varchar(30) NOT NULL DEFAULT '',
+ `ticket` varchar(30) NOT NULL DEFAULT '',
+ `acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
+ `groups` text DEFAULT NULL,
+ `whitelist` text DEFAULT NULL,
+ `reviewer` text DEFAULT NULL,
+ `PMT` text DEFAULT NULL,
+ `draftStories` mediumint(8) NOT NULL DEFAULT 0,
+ `activeStories` mediumint(8) NOT NULL DEFAULT 0,
+ `changingStories` mediumint(8) NOT NULL DEFAULT 0,
+ `reviewingStories` mediumint(8) NOT NULL DEFAULT 0,
+ `finishedStories` mediumint(8) NOT NULL DEFAULT 0,
+ `closedStories` mediumint(8) NOT NULL DEFAULT 0,
+ `totalStories` mediumint(8) NOT NULL DEFAULT 0,
+ `unresolvedBugs` mediumint(8) NOT NULL DEFAULT 0,
+ `closedBugs` mediumint(8) NOT NULL DEFAULT 0,
+ `fixedBugs` mediumint(8) NOT NULL DEFAULT 0,
+ `totalBugs` mediumint(8) NOT NULL DEFAULT 0,
+ `plans` mediumint(8) NOT NULL DEFAULT 0,
+ `releases` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `createdVersion` varchar(20) NOT NULL DEFAULT '',
+ `closedDate` date DEFAULT NULL,
+ `order` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `acl` (`acl`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_productplan` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` varchar(255) NOT NULL DEFAULT '0',
+ `parent` mediumint(9) NOT NULL DEFAULT 0,
+ `title` varchar(90) NOT NULL DEFAULT '',
+ `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
+ `desc` mediumtext DEFAULT NULL,
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `finishedDate` datetime DEFAULT NULL,
+ `closedDate` datetime DEFAULT NULL,
+ `order` text DEFAULT NULL,
+ `closedReason` varchar(20) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `end` (`end`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_programactivity` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `process` mediumint(8) NOT NULL DEFAULT 0,
+ `activity` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `content` text DEFAULT NULL,
+ `reason` varchar(255) NOT NULL DEFAULT '',
+ `result` char(30) NOT NULL DEFAULT '',
+ `linkedBy` char(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_programoutput` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `process` mediumint(8) NOT NULL DEFAULT 0,
+ `activity` mediumint(8) NOT NULL DEFAULT 0,
+ `output` mediumint(8) NOT NULL DEFAULT 0,
+ `content` text DEFAULT NULL,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `reason` varchar(255) NOT NULL DEFAULT '',
+ `result` char(30) NOT NULL DEFAULT '',
+ `linkedBy` char(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_programprocess` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `process` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `abbr` char(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `reason` varchar(255) NOT NULL DEFAULT '',
+ `linkedBy` char(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_programreport` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `template` mediumint(8) NOT NULL DEFAULT 0,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `params` text DEFAULT NULL,
+ `content` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_project` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) NOT NULL DEFAULT 0,
+ `charter` mediumint(8) NOT NULL DEFAULT 0,
+ `model` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT 'sprint',
+ `category` char(30) NOT NULL DEFAULT '',
+ `lifetime` char(30) NOT NULL DEFAULT '',
+ `budget` varchar(30) NOT NULL DEFAULT '0',
+ `budgetUnit` char(30) NOT NULL DEFAULT 'CNY',
+ `attribute` varchar(30) NOT NULL DEFAULT '',
+ `percent` float unsigned NOT NULL DEFAULT 0,
+ `milestone` enum('0','1') NOT NULL DEFAULT '0',
+ `output` text DEFAULT NULL,
+ `auth` char(30) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(90) NOT NULL DEFAULT '',
+ `code` varchar(45) NOT NULL DEFAULT '',
+ `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1,
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `firstEnd` date DEFAULT NULL,
+ `realBegan` date DEFAULT NULL,
+ `realEnd` date DEFAULT NULL,
+ `days` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `status` varchar(10) NOT NULL DEFAULT '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `pri` enum('1','2','3','4') NOT NULL DEFAULT '1',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `parentVersion` smallint(6) NOT NULL DEFAULT 0,
+ `planDuration` int(11) NOT NULL DEFAULT 0,
+ `realDuration` int(11) NOT NULL DEFAULT 0,
+ `progress` decimal(5,2) NOT NULL DEFAULT 0.00,
+ `estimate` float NOT NULL DEFAULT 0,
+ `left` float NOT NULL DEFAULT 0,
+ `consumed` float NOT NULL DEFAULT 0,
+ `teamCount` int(11) NOT NULL DEFAULT 0,
+ `market` mediumint(8) NOT NULL DEFAULT 0,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `openedVersion` varchar(20) NOT NULL DEFAULT '',
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(20) NOT NULL DEFAULT '',
+ `canceledBy` varchar(30) NOT NULL DEFAULT '',
+ `canceledDate` datetime DEFAULT NULL,
+ `suspendedDate` date DEFAULT NULL,
+ `PO` varchar(30) NOT NULL DEFAULT '',
+ `PM` varchar(30) NOT NULL DEFAULT '',
+ `QD` varchar(30) NOT NULL DEFAULT '',
+ `RD` varchar(30) NOT NULL DEFAULT '',
+ `team` varchar(90) NOT NULL DEFAULT '',
+ `acl` char(30) NOT NULL DEFAULT 'open',
+ `whitelist` text DEFAULT NULL,
+ `order` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `stageBy` enum('project','product') NOT NULL DEFAULT 'product',
+ `displayCards` smallint(6) NOT NULL DEFAULT 0,
+ `fluidBoard` enum('0','1') NOT NULL DEFAULT '0',
+ `multiple` enum('0','1') NOT NULL DEFAULT '1',
+ `parallel` mediumint(9) NOT NULL DEFAULT 0,
+ `colWidth` smallint(6) NOT NULL DEFAULT 264,
+ `minColWidth` smallint(6) NOT NULL DEFAULT 200,
+ `maxColWidth` smallint(6) NOT NULL DEFAULT 384,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `parent` (`parent`),
+ KEY `begin` (`begin`),
+ KEY `end` (`end`),
+ KEY `status` (`status`),
+ KEY `acl` (`acl`),
+ KEY `order` (`order`),
+ KEY `project` (`project`),
+ KEY `type_order` (`type`,`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectadmin` (
+ `group` smallint(6) NOT NULL DEFAULT 0,
+ `account` char(30) NOT NULL DEFAULT '',
+ `programs` text DEFAULT NULL,
+ `projects` text DEFAULT NULL,
+ `products` text DEFAULT NULL,
+ `executions` text DEFAULT NULL,
+ UNIQUE KEY `group_account` (`group`,`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectcase` (
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `count` mediumint(8) unsigned NOT NULL DEFAULT 1,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `order` smallint(6) unsigned NOT NULL DEFAULT 0,
+ UNIQUE KEY `project` (`project`,`case`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectproduct` (
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `plan` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`project`,`product`,`branch`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectspec` (
+ `project` mediumint(8) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `milestone` enum('0','1') NOT NULL DEFAULT '0',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ UNIQUE KEY `project` (`project`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectstory` (
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `order` smallint(6) unsigned NOT NULL DEFAULT 0,
+ UNIQUE KEY `project` (`project`,`story`),
+ KEY `story` (`story`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_queue` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `cron` mediumint(9) NOT NULL,
+ `type` varchar(255) NOT NULL,
+ `command` text NOT NULL,
+ `status` enum('wait','doing','done') NOT NULL DEFAULT 'wait',
+ `execId` int(11) DEFAULT NULL,
+ `createdDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_relation` (
+ `id` int(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) NOT NULL DEFAULT 0,
+ `product` mediumint(8) NOT NULL DEFAULT 0,
+ `execution` mediumint(8) NOT NULL DEFAULT 0,
+ `AType` char(30) NOT NULL DEFAULT '',
+ `AID` mediumint(8) NOT NULL DEFAULT 0,
+ `AVersion` char(30) NOT NULL DEFAULT '',
+ `relation` char(30) NOT NULL DEFAULT '',
+ `BType` char(30) NOT NULL DEFAULT '',
+ `BID` mediumint(8) NOT NULL DEFAULT 0,
+ `BVersion` char(30) NOT NULL DEFAULT '',
+ `extra` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `relation` (`product`,`relation`,`AType`,`BType`,`AID`,`BID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_relationoftasks` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `execution` mediumint(8) unsigned NOT NULL,
+ `pretask` mediumint(8) unsigned NOT NULL,
+ `condition` enum('begin','end') NOT NULL,
+ `task` mediumint(8) unsigned NOT NULL,
+ `action` enum('begin','end') NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `relationoftasks` (`execution`,`task`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_release` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` varchar(255) NOT NULL DEFAULT '0',
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` varchar(255) NOT NULL DEFAULT '0',
+ `shadow` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `build` varchar(255) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `marker` enum('0','1') NOT NULL DEFAULT '0',
+ `date` date DEFAULT NULL,
+ `stories` text DEFAULT NULL,
+ `bugs` text DEFAULT NULL,
+ `leftBugs` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `mailto` text DEFAULT NULL,
+ `notify` varchar(255) NOT NULL DEFAULT '',
+ `status` varchar(20) NOT NULL DEFAULT 'normal',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `build` (`build`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_repo` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `product` varchar(255) NOT NULL DEFAULT '',
+ `projects` varchar(255) NOT NULL DEFAULT '',
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `prefix` varchar(100) NOT NULL DEFAULT '',
+ `encoding` varchar(20) NOT NULL DEFAULT '',
+ `SCM` varchar(10) NOT NULL DEFAULT '',
+ `client` varchar(100) NOT NULL DEFAULT '',
+ `serviceHost` varchar(50) NOT NULL DEFAULT '',
+ `serviceProject` varchar(100) NOT NULL DEFAULT '',
+ `commits` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `password` varchar(30) NOT NULL DEFAULT '',
+ `encrypt` varchar(30) NOT NULL DEFAULT 'plain',
+ `acl` text DEFAULT NULL,
+ `synced` tinyint(1) NOT NULL DEFAULT 0,
+ `lastSync` datetime DEFAULT NULL,
+ `lastCommit` datetime DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `extra` char(30) NOT NULL DEFAULT '',
+ `preMerge` enum('0','1') NOT NULL DEFAULT '0',
+ `job` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fileServerUrl` text DEFAULT NULL,
+ `fileServerAccount` varchar(40) NOT NULL DEFAULT '',
+ `fileServerPassword` varchar(100) NOT NULL DEFAULT '',
+ `deleted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_repobranch` (
+ `repo` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `revision` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` varchar(255) NOT NULL DEFAULT '',
+ UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`),
+ KEY `branch` (`branch`),
+ KEY `revision` (`revision`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_repofiles` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `repo` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `revision` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` varchar(255) NOT NULL DEFAULT '',
+ `oldPath` varchar(255) NOT NULL DEFAULT '',
+ `parent` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT '',
+ `action` char(1) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ KEY `path` (`path`),
+ KEY `parent` (`parent`),
+ KEY `repo` (`repo`),
+ KEY `revision` (`revision`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_repohistory` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `repo` mediumint(9) NOT NULL DEFAULT 0,
+ `revision` varchar(40) NOT NULL DEFAULT '',
+ `commit` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `comment` text DEFAULT NULL,
+ `committer` varchar(100) NOT NULL DEFAULT '',
+ `time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `repo` (`repo`),
+ KEY `revision` (`revision`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_report` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `code` varchar(100) NOT NULL DEFAULT '',
+ `name` text DEFAULT NULL,
+ `dimension` int(8) NOT NULL DEFAULT 0,
+ `module` varchar(100) NOT NULL DEFAULT '',
+ `sql` text DEFAULT NULL,
+ `vars` text DEFAULT NULL,
+ `langs` text DEFAULT NULL,
+ `params` text DEFAULT NULL,
+ `step` tinyint(1) NOT NULL DEFAULT 2,
+ `desc` text DEFAULT NULL,
+ `addedBy` char(30) NOT NULL DEFAULT '',
+ `addedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `code` (`code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_researchplan` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `customer` varchar(255) NOT NULL DEFAULT '',
+ `stakeholder` varchar(255) NOT NULL DEFAULT '',
+ `objective` varchar(255) NOT NULL DEFAULT '',
+ `begin` datetime DEFAULT NULL,
+ `end` datetime DEFAULT NULL,
+ `location` varchar(255) NOT NULL DEFAULT '',
+ `team` varchar(255) NOT NULL DEFAULT '',
+ `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL DEFAULT '',
+ `outline` mediumtext DEFAULT NULL,
+ `schedule` mediumtext DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_researchreport` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `relatedPlan` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `author` varchar(30) NOT NULL DEFAULT '',
+ `content` mediumtext DEFAULT NULL,
+ `customer` varchar(255) NOT NULL DEFAULT '',
+ `researchObjects` varchar(255) NOT NULL DEFAULT '',
+ `begin` datetime DEFAULT NULL,
+ `end` datetime DEFAULT NULL,
+ `location` varchar(255) NOT NULL DEFAULT '',
+ `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_review` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `object` mediumint(8) NOT NULL DEFAULT 0,
+ `template` mediumint(8) NOT NULL DEFAULT 0,
+ `doc` varchar(255) NOT NULL DEFAULT '',
+ `docVersion` varchar(255) NOT NULL DEFAULT '',
+ `status` char(30) NOT NULL DEFAULT '',
+ `reviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `auditedBy` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `begin` date DEFAULT NULL,
+ `deadline` date DEFAULT NULL,
+ `lastReviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `lastReviewedDate` date DEFAULT NULL,
+ `lastAuditedBy` varchar(255) NOT NULL DEFAULT '',
+ `lastAuditedDate` date DEFAULT NULL,
+ `lastEditedBy` varchar(255) NOT NULL DEFAULT '',
+ `lastEditedDate` date DEFAULT NULL,
+ `result` char(30) NOT NULL DEFAULT '',
+ `auditResult` char(30) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_reviewcl` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `object` char(30) NOT NULL DEFAULT '',
+ `category` char(30) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `order` mediumint(8) DEFAULT 0,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_reviewissue` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `review` mediumint(8) NOT NULL DEFAULT 0,
+ `approval` mediumint(8) NOT NULL DEFAULT 0,
+ `injection` mediumint(8) NOT NULL DEFAULT 0,
+ `identify` mediumint(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT 'review',
+ `listID` mediumint(8) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `opinion` mediumtext DEFAULT NULL,
+ `opinionDate` date DEFAULT NULL,
+ `status` char(30) NOT NULL DEFAULT '',
+ `resolution` char(30) NOT NULL DEFAULT '',
+ `resolutionBy` char(30) NOT NULL DEFAULT '',
+ `resolutionDate` date DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_reviewlist` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `object` char(30) NOT NULL DEFAULT '',
+ `category` char(30) NOT NULL DEFAULT '',
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_reviewresult` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `review` mediumint(8) NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT 'review',
+ `result` char(30) NOT NULL DEFAULT '',
+ `opinion` text DEFAULT NULL,
+ `reviewer` char(30) NOT NULL DEFAULT '',
+ `remainIssue` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `consumed` float NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `reviewer` (`review`,`reviewer`,`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_risk` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` varchar(255) NOT NULL DEFAULT '',
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `source` char(30) NOT NULL DEFAULT '',
+ `category` char(30) NOT NULL DEFAULT '',
+ `strategy` char(30) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT 'active',
+ `impact` char(30) NOT NULL DEFAULT '',
+ `probability` char(30) NOT NULL DEFAULT '',
+ `rate` char(30) NOT NULL DEFAULT '',
+ `pri` char(30) NOT NULL DEFAULT '',
+ `identifiedDate` date DEFAULT NULL,
+ `prevention` mediumtext DEFAULT NULL,
+ `remedy` mediumtext DEFAULT NULL,
+ `plannedClosedDate` date DEFAULT NULL,
+ `actualClosedDate` date DEFAULT NULL,
+ `lib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `from` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `resolution` mediumtext DEFAULT NULL,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `activateBy` varchar(30) NOT NULL DEFAULT '',
+ `activateDate` date DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` date DEFAULT NULL,
+ `cancelBy` varchar(30) NOT NULL DEFAULT '',
+ `cancelDate` date DEFAULT NULL,
+ `cancelReason` char(30) NOT NULL DEFAULT '',
+ `hangupBy` varchar(30) NOT NULL DEFAULT '',
+ `hangupDate` date DEFAULT NULL,
+ `trackedBy` varchar(30) NOT NULL DEFAULT '',
+ `trackedDate` date DEFAULT NULL,
+ `assignedDate` date DEFAULT NULL,
+ `approvedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_riskissue` (
+ `risk` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `issue` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ UNIQUE KEY `risk_issue` (`risk`,`issue`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_roadmap` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) NOT NULL DEFAULT 0,
+ `branch` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `status` char(30) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `desc` longtext DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `closedBy` char(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` enum('done','canceled') DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_roadmapstory` (
+ `roadmap` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `order` mediumint(8) unsigned NOT NULL,
+ UNIQUE KEY `roadmap_story` (`roadmap`,`story`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_scene` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `sort` int(11) unsigned NOT NULL DEFAULT 0,
+ `openedBy` char(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `parent` int(11) NOT NULL DEFAULT 0,
+ `grade` tinyint(3) NOT NULL DEFAULT 0,
+ `path` varchar(1000) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_score` (
+ `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `method` varchar(30) NOT NULL DEFAULT '',
+ `desc` varchar(250) NOT NULL DEFAULT '',
+ `before` int(11) NOT NULL DEFAULT 0,
+ `score` int(11) NOT NULL DEFAULT 0,
+ `after` int(11) NOT NULL DEFAULT 0,
+ `time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `module` (`module`),
+ KEY `method` (`method`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_screen` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `dimension` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `cover` mediumtext DEFAULT NULL,
+ `scheme` mediumtext DEFAULT NULL,
+ `status` enum('draft','published') NOT NULL DEFAULT 'draft',
+ `builtin` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_searchdict` (
+ `key` smallint(6) unsigned NOT NULL DEFAULT 0,
+ `value` char(3) NOT NULL DEFAULT '',
+ PRIMARY KEY (`key`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_searchindex` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `objectType` char(20) NOT NULL DEFAULT '',
+ `objectID` mediumint(9) NOT NULL DEFAULT 0,
+ `title` text DEFAULT NULL,
+ `content` text DEFAULT NULL,
+ `addedDate` datetime DEFAULT NULL,
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `object` (`objectType`,`objectID`),
+ KEY `addedDate` (`addedDate`),
+ FULLTEXT KEY `title_content` (`title`,`content`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_serverroom` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(128) NOT NULL DEFAULT '',
+ `city` varchar(128) NOT NULL DEFAULT '',
+ `line` varchar(20) NOT NULL DEFAULT '',
+ `bandwidth` varchar(128) NOT NULL DEFAULT '',
+ `provider` varchar(128) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_service` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `external` enum('0','1') NOT NULL DEFAULT '0',
+ `port` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `entry` varchar(255) NOT NULL DEFAULT '',
+ `deploy` varchar(255) NOT NULL DEFAULT '',
+ `version` varchar(64) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `dept` varchar(128) NOT NULL DEFAULT '',
+ `devel` varchar(30) NOT NULL DEFAULT '',
+ `qa` varchar(30) NOT NULL DEFAULT '',
+ `ops` varchar(30) NOT NULL DEFAULT '',
+ `hosts` text DEFAULT NULL,
+ `softName` varchar(128) NOT NULL DEFAULT '',
+ `softVersion` varchar(128) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_session` (
+ `id` varchar(32) NOT NULL,
+ `data` mediumtext DEFAULT NULL,
+ `timestamp` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `timestamp` (`timestamp`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_solution` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(50) NOT NULL DEFAULT '',
+ `appID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `appName` char(50) NOT NULL DEFAULT '',
+ `appVersion` char(20) NOT NULL DEFAULT '',
+ `version` char(50) NOT NULL DEFAULT '',
+ `chart` char(50) NOT NULL DEFAULT '',
+ `cover` varchar(255) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `introduction` varchar(255) NOT NULL DEFAULT '',
+ `source` char(20) NOT NULL DEFAULT '',
+ `channel` char(20) NOT NULL DEFAULT '',
+ `components` text DEFAULT NULL,
+ `status` char(20) NOT NULL DEFAULT '',
+ `deleted` tinyint(1) NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdAt` datetime DEFAULT NULL,
+ `updatedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_solutions` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `contents` text NOT NULL,
+ `support` text NOT NULL,
+ `measures` text NOT NULL,
+ `type` char(30) NOT NULL DEFAULT '',
+ `addedBy` varchar(30) NOT NULL DEFAULT '',
+ `addedDate` date DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_space` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(200) NOT NULL,
+ `k8space` char(64) NOT NULL,
+ `owner` char(30) NOT NULL,
+ `default` tinyint(1) NOT NULL DEFAULT 0,
+ `createdAt` datetime DEFAULT NULL,
+ `deleted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_sqlview` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(90) NOT NULL DEFAULT '',
+ `code` varchar(45) NOT NULL DEFAULT '',
+ `sql` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_stage` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `percent` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `projectType` varchar(255) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_stakeholder` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `objectID` mediumint(8) NOT NULL DEFAULT 0,
+ `objectType` char(30) NOT NULL DEFAULT '',
+ `user` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `key` enum('0','1') NOT NULL DEFAULT '0',
+ `from` char(30) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `objectID` (`objectID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_story` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `parent` mediumint(9) NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `plan` text DEFAULT NULL,
+ `source` varchar(20) NOT NULL DEFAULT '',
+ `sourceNote` varchar(255) NOT NULL DEFAULT '',
+ `fromBug` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `feedback` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT 'story',
+ `category` varchar(30) NOT NULL DEFAULT 'feature',
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 3,
+ `estimate` float unsigned NOT NULL DEFAULT 0,
+ `status` enum('','changing','active','draft','closed','reviewing','launched','developing') NOT NULL DEFAULT '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL DEFAULT '',
+ `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait',
+ `stagedBy` char(30) NOT NULL DEFAULT '',
+ `mailto` text DEFAULT NULL,
+ `lib` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromStory` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromVersion` smallint(6) NOT NULL DEFAULT 1,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `approvedDate` date DEFAULT NULL,
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `changedBy` varchar(30) NOT NULL DEFAULT '',
+ `changedDate` datetime DEFAULT NULL,
+ `reviewedBy` varchar(255) NOT NULL DEFAULT '',
+ `reviewedDate` datetime DEFAULT NULL,
+ `releasedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `toBug` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `childStories` varchar(255) NOT NULL DEFAULT '',
+ `linkStories` varchar(255) NOT NULL DEFAULT '',
+ `linkRequirements` varchar(255) NOT NULL DEFAULT '',
+ `twins` varchar(255) NOT NULL DEFAULT '',
+ `duplicateStory` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 1,
+ `storyChanged` enum('0','1') NOT NULL DEFAULT '0',
+ `feedbackBy` varchar(100) NOT NULL DEFAULT '',
+ `notifyEmail` varchar(100) NOT NULL DEFAULT '',
+ `BSA` char(30) NOT NULL DEFAULT '',
+ `duration` char(30) NOT NULL DEFAULT '',
+ `demand` mediumint(8) NOT NULL DEFAULT 0,
+ `submitedBy` varchar(30) NOT NULL DEFAULT '',
+ `roadmap` varchar(255) NOT NULL DEFAULT '',
+ `URChanged` enum('0','1') NOT NULL DEFAULT '0',
+ `retractedReason` enum('','omit','other') NOT NULL DEFAULT '',
+ `retractedBy` varchar(30) NOT NULL DEFAULT '',
+ `retractedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `status` (`status`),
+ KEY `assignedTo` (`assignedTo`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_storyestimate` (
+ `story` mediumint(9) NOT NULL DEFAULT 0,
+ `round` smallint(6) NOT NULL DEFAULT 0,
+ `estimate` text DEFAULT NULL,
+ `average` float NOT NULL DEFAULT 0,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ UNIQUE KEY `story` (`story`,`round`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_storyreview` (
+ `story` mediumint(9) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `reviewer` varchar(30) NOT NULL DEFAULT '',
+ `result` varchar(30) NOT NULL DEFAULT '',
+ `reviewDate` datetime DEFAULT NULL,
+ UNIQUE KEY `story` (`story`,`version`,`reviewer`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_storyspec` (
+ `story` mediumint(9) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `spec` mediumtext DEFAULT NULL,
+ `verify` mediumtext DEFAULT NULL,
+ `files` text DEFAULT NULL,
+ UNIQUE KEY `story` (`story`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_storystage` (
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `stage` varchar(50) NOT NULL DEFAULT '',
+ `stagedBy` char(30) NOT NULL DEFAULT '',
+ UNIQUE KEY `story_branch` (`story`,`branch`),
+ KEY `story` (`story`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_suitecase` (
+ `suite` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(5) unsigned NOT NULL DEFAULT 0,
+ UNIQUE KEY `suitecase` (`suite`,`case`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_task` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `parent` mediumint(8) NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `design` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `storyVersion` smallint(6) NOT NULL DEFAULT 1,
+ `designVersion` smallint(6) unsigned NOT NULL DEFAULT 1,
+ `fromBug` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `feedback` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `fromIssue` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT '',
+ `mode` varchar(10) NOT NULL DEFAULT '',
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `estimate` float unsigned NOT NULL DEFAULT 0,
+ `consumed` float unsigned NOT NULL DEFAULT 0,
+ `left` float unsigned NOT NULL DEFAULT 0,
+ `deadline` date DEFAULT NULL,
+ `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL DEFAULT '',
+ `mailto` text DEFAULT NULL,
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `estStarted` date DEFAULT NULL,
+ `realStarted` datetime DEFAULT NULL,
+ `finishedBy` varchar(30) NOT NULL DEFAULT '',
+ `finishedDate` datetime DEFAULT NULL,
+ `finishedList` text DEFAULT NULL,
+ `canceledBy` varchar(30) NOT NULL DEFAULT '',
+ `canceledDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `planDuration` int(11) NOT NULL DEFAULT 0,
+ `realDuration` int(11) NOT NULL DEFAULT 0,
+ `closedReason` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `activatedDate` datetime DEFAULT NULL,
+ `order` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `repo` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `mr` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `entry` varchar(255) NOT NULL DEFAULT '',
+ `lines` varchar(10) NOT NULL DEFAULT '',
+ `v1` varchar(40) NOT NULL DEFAULT '',
+ `v2` varchar(40) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ PRIMARY KEY (`id`),
+ KEY `execution` (`execution`),
+ KEY `story` (`story`),
+ KEY `parent` (`parent`),
+ KEY `assignedTo` (`assignedTo`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_taskestimate` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `date` date DEFAULT NULL,
+ `left` float unsigned NOT NULL DEFAULT 0,
+ `consumed` float unsigned NOT NULL DEFAULT 0,
+ `account` char(30) NOT NULL DEFAULT '',
+ `work` text DEFAULT NULL,
+ `order` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `task` (`task`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_taskspec` (
+ `task` mediumint(8) NOT NULL DEFAULT 0,
+ `version` smallint(6) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `estStarted` date DEFAULT NULL,
+ `deadline` date DEFAULT NULL,
+ UNIQUE KEY `task` (`task`,`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_taskteam` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` char(30) NOT NULL DEFAULT '',
+ `estimate` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `consumed` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `left` decimal(12,2) NOT NULL DEFAULT 0.00,
+ `transfer` char(30) NOT NULL DEFAULT '',
+ `status` enum('wait','doing','done') NOT NULL DEFAULT 'wait',
+ `order` tinyint(3) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `task` (`task`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_team` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `root` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `type` enum('project','task','execution') NOT NULL DEFAULT 'project',
+ `account` char(30) NOT NULL DEFAULT '',
+ `role` char(30) NOT NULL DEFAULT '',
+ `position` varchar(30) NOT NULL DEFAULT '',
+ `limited` char(8) NOT NULL DEFAULT 'no',
+ `join` date DEFAULT NULL,
+ `days` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `hours` float(3,1) unsigned NOT NULL DEFAULT 0.0,
+ `estimate` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
+ `consumed` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
+ `left` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
+ `order` tinyint(3) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `team` (`root`,`type`,`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testreport` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `tasks` varchar(255) NOT NULL DEFAULT '',
+ `builds` varchar(255) NOT NULL DEFAULT '',
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `owner` char(30) NOT NULL DEFAULT '',
+ `members` text DEFAULT NULL,
+ `stories` text DEFAULT NULL,
+ `bugs` text DEFAULT NULL,
+ `cases` text DEFAULT NULL,
+ `report` text DEFAULT NULL,
+ `objectType` varchar(20) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testresult` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `run` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `job` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `compile` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `caseResult` char(30) NOT NULL DEFAULT '',
+ `stepResults` text DEFAULT NULL,
+ `ZTFResult` text DEFAULT NULL,
+ `node` int(8) unsigned NOT NULL DEFAULT 0,
+ `lastRunner` varchar(30) NOT NULL DEFAULT '',
+ `date` datetime DEFAULT NULL,
+ `duration` float NOT NULL DEFAULT 0,
+ `xml` text DEFAULT NULL,
+ `deploy` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `case` (`case`),
+ KEY `version` (`version`),
+ KEY `run` (`run`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testrun` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `case` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `version` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `assignedTo` char(30) NOT NULL DEFAULT '',
+ `lastRunner` varchar(30) NOT NULL DEFAULT '',
+ `lastRunDate` datetime DEFAULT NULL,
+ `lastRunResult` char(30) NOT NULL DEFAULT '',
+ `status` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `task` (`task`,`case`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testsuite` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `type` varchar(20) NOT NULL DEFAULT '',
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `addedBy` char(30) NOT NULL DEFAULT '',
+ `addedDate` datetime DEFAULT NULL,
+ `lastEditedBy` char(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testtask` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` char(90) NOT NULL DEFAULT '',
+ `execution` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `build` char(30) NOT NULL DEFAULT '',
+ `type` varchar(255) NOT NULL DEFAULT '',
+ `owner` varchar(30) NOT NULL DEFAULT '',
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `realBegan` date DEFAULT NULL,
+ `realFinishedDate` datetime DEFAULT NULL,
+ `mailto` text DEFAULT NULL,
+ `desc` mediumtext DEFAULT NULL,
+ `report` text DEFAULT NULL,
+ `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
+ `testreport` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `auto` varchar(10) NOT NULL DEFAULT 'no',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `members` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `build` (`build`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ticket` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `module` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `title` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `openedBuild` varchar(255) NOT NULL DEFAULT '',
+ `feedback` mediumint(8) NOT NULL DEFAULT 0,
+ `assignedTo` varchar(255) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `realStarted` datetime DEFAULT NULL,
+ `startedBy` varchar(255) NOT NULL DEFAULT '',
+ `startedDate` datetime DEFAULT NULL,
+ `deadline` date DEFAULT NULL,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `estimate` float unsigned NOT NULL DEFAULT 0,
+ `left` float unsigned NOT NULL DEFAULT 0,
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime DEFAULT NULL,
+ `activatedCount` int(11) NOT NULL DEFAULT 0,
+ `activatedBy` varchar(30) NOT NULL DEFAULT '',
+ `activatedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `closedReason` varchar(30) NOT NULL DEFAULT '',
+ `finishedBy` varchar(30) NOT NULL DEFAULT '',
+ `finishedDate` datetime DEFAULT NULL,
+ `resolvedBy` varchar(30) NOT NULL DEFAULT '',
+ `resolvedDate` datetime DEFAULT NULL,
+ `resolution` text DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `keywords` varchar(255) NOT NULL DEFAULT '',
+ `repeatTicket` mediumint(8) NOT NULL DEFAULT 0,
+ `mailto` varchar(255) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ticketrelation` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `ticketId` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `objectId` mediumint(8) NOT NULL DEFAULT 0,
+ `objectType` varchar(100) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ KEY `ticketId` (`ticketId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_ticketsource` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `ticketId` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `customer` varchar(100) NOT NULL DEFAULT '',
+ `contact` varchar(100) NOT NULL DEFAULT '',
+ `notifyEmail` varchar(100) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `ticketId` (`ticketId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_todo` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `date` date DEFAULT NULL,
+ `begin` smallint(4) unsigned zerofill NOT NULL DEFAULT 0000,
+ `end` smallint(4) unsigned zerofill NOT NULL DEFAULT 0000,
+ `feedback` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `type` char(15) NOT NULL DEFAULT '',
+ `cycle` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT 0,
+ `name` char(150) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
+ `private` tinyint(1) NOT NULL DEFAULT 0,
+ `config` varchar(1000) NOT NULL DEFAULT '',
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `finishedBy` varchar(30) NOT NULL DEFAULT '',
+ `finishedDate` datetime DEFAULT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `assignedTo` (`assignedTo`),
+ KEY `finishedBy` (`finishedBy`),
+ KEY `date` (`date`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_traincategory` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) NOT NULL DEFAULT 0,
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `parent` (`parent`),
+ KEY `path` (`path`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_traincontents` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `code` varchar(50) NOT NULL DEFAULT '',
+ `course` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `path` char(255) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `order` mediumint(8) NOT NULL DEFAULT 0,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_traincourse` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `code` varchar(255) NOT NULL DEFAULT '',
+ `category` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `status` varchar(10) NOT NULL DEFAULT '',
+ `teacher` varchar(30) NOT NULL DEFAULT '',
+ `desc` mediumtext DEFAULT NULL,
+ `importedStatus` enum('','wait','doing','done') NOT NULL DEFAULT '',
+ `lastUpdatedTime` int(10) unsigned NOT NULL DEFAULT 0,
+ `createdBy` varchar(255) NOT NULL DEFAULT '',
+ `createdDate` date DEFAULT NULL,
+ `editedBy` varchar(255) NOT NULL DEFAULT '',
+ `editedDate` date DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_trainplan` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `place` varchar(255) NOT NULL DEFAULT '',
+ `trainee` text DEFAULT NULL,
+ `lecturer` varchar(20) NOT NULL DEFAULT '',
+ `type` enum('inside','outside') NOT NULL DEFAULT 'inside',
+ `status` varchar(20) NOT NULL DEFAULT '',
+ `summary` mediumtext DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_trainrecords` (
+ `user` char(30) NOT NULL DEFAULT '',
+ `objectId` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `objectType` varchar(10) NOT NULL DEFAULT '',
+ `status` varchar(10) NOT NULL DEFAULT '',
+ PRIMARY KEY (`user`,`objectId`,`objectType`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_trip` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` enum('trip','egress') NOT NULL DEFAULT 'trip',
+ `customers` varchar(20) NOT NULL DEFAULT '',
+ `name` char(30) NOT NULL DEFAULT '',
+ `desc` text DEFAULT NULL,
+ `year` char(4) NOT NULL DEFAULT '',
+ `begin` date DEFAULT NULL,
+ `end` date DEFAULT NULL,
+ `start` time DEFAULT NULL,
+ `finish` time DEFAULT NULL,
+ `from` char(50) NOT NULL DEFAULT '',
+ `to` char(50) NOT NULL DEFAULT '',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `year` (`year`),
+ KEY `createdBy` (`createdBy`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_user` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `company` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `type` char(30) NOT NULL DEFAULT 'inside',
+ `dept` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `account` char(30) NOT NULL DEFAULT '',
+ `password` char(32) NOT NULL DEFAULT '',
+ `role` char(10) NOT NULL DEFAULT '',
+ `realname` varchar(100) NOT NULL DEFAULT '',
+ `pinyin` varchar(255) NOT NULL DEFAULT '',
+ `nickname` char(60) NOT NULL DEFAULT '',
+ `commiter` varchar(100) NOT NULL DEFAULT '',
+ `avatar` text DEFAULT NULL,
+ `birthday` date DEFAULT NULL,
+ `gender` enum('f','m') NOT NULL DEFAULT 'f',
+ `email` char(90) NOT NULL DEFAULT '',
+ `skype` char(90) NOT NULL DEFAULT '',
+ `qq` char(20) NOT NULL DEFAULT '',
+ `mobile` char(11) NOT NULL DEFAULT '',
+ `phone` char(20) NOT NULL DEFAULT '',
+ `weixin` varchar(90) NOT NULL DEFAULT '',
+ `dingding` varchar(90) NOT NULL DEFAULT '',
+ `slack` varchar(90) NOT NULL DEFAULT '',
+ `whatsapp` varchar(90) NOT NULL DEFAULT '',
+ `address` char(120) NOT NULL DEFAULT '',
+ `zipcode` char(10) NOT NULL DEFAULT '',
+ `nature` text DEFAULT NULL,
+ `analysis` text DEFAULT NULL,
+ `strategy` text DEFAULT NULL,
+ `join` date DEFAULT NULL,
+ `visits` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `visions` varchar(20) NOT NULL DEFAULT 'rnd,lite',
+ `ip` char(15) NOT NULL DEFAULT '',
+ `last` int(11) unsigned NOT NULL DEFAULT 0,
+ `fails` tinyint(5) NOT NULL DEFAULT 0,
+ `locked` datetime DEFAULT NULL,
+ `feedback` enum('0','1') NOT NULL DEFAULT '0',
+ `ranzhi` char(30) NOT NULL DEFAULT '',
+ `ldap` char(30) NOT NULL DEFAULT '',
+ `score` int(11) NOT NULL DEFAULT 0,
+ `scoreLevel` int(11) NOT NULL DEFAULT 0,
+ `resetToken` varchar(50) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `clientStatus` enum('online','away','busy','offline','meeting') NOT NULL DEFAULT 'offline',
+ `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `account` (`account`),
+ KEY `dept` (`dept`),
+ KEY `email` (`email`),
+ KEY `commiter` (`commiter`),
+ KEY `deleted` (`deleted`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usercontact` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `listName` varchar(60) NOT NULL DEFAULT '',
+ `userList` text DEFAULT NULL,
+ `public` tinyint(1) NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usergroup` (
+ `account` char(30) NOT NULL DEFAULT '',
+ `group` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `project` text DEFAULT NULL,
+ UNIQUE KEY `account` (`account`,`group`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_userquery` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `title` varchar(90) NOT NULL DEFAULT '',
+ `form` text DEFAULT NULL,
+ `sql` text DEFAULT NULL,
+ `shortcut` enum('0','1') NOT NULL DEFAULT '0',
+ `common` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `module` (`module`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usertpl` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL DEFAULT '',
+ `type` char(30) NOT NULL DEFAULT '',
+ `title` varchar(150) NOT NULL DEFAULT '',
+ `content` text DEFAULT NULL,
+ `public` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_userview` (
+ `account` char(30) NOT NULL DEFAULT '',
+ `programs` mediumtext DEFAULT NULL,
+ `products` mediumtext DEFAULT NULL,
+ `projects` mediumtext DEFAULT NULL,
+ `sprints` mediumtext DEFAULT NULL,
+ UNIQUE KEY `account` (`account`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_webhook` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(15) NOT NULL DEFAULT 'default',
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `url` varchar(255) NOT NULL DEFAULT '',
+ `domain` varchar(255) NOT NULL DEFAULT '',
+ `secret` varchar(255) NOT NULL DEFAULT '',
+ `contentType` varchar(30) NOT NULL DEFAULT 'application/json',
+ `sendType` enum('sync','async') NOT NULL DEFAULT 'sync',
+ `products` text DEFAULT NULL,
+ `executions` text DEFAULT NULL,
+ `params` varchar(100) NOT NULL DEFAULT '',
+ `actions` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_weeklyreport` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `weekStart` date DEFAULT NULL,
+ `pv` float(9,2) NOT NULL DEFAULT 0.00,
+ `ev` float(9,2) NOT NULL DEFAULT 0.00,
+ `ac` float(9,2) NOT NULL DEFAULT 0.00,
+ `sv` float(9,2) NOT NULL DEFAULT 0.00,
+ `cv` float(9,2) NOT NULL DEFAULT 0.00,
+ `staff` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `progress` varchar(255) NOT NULL DEFAULT '',
+ `workload` varchar(255) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `week` (`project`,`weekStart`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workestimation` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `scale` decimal(10,2) unsigned NOT NULL DEFAULT 0.00,
+ `productivity` decimal(10,2) unsigned NOT NULL DEFAULT 0.00,
+ `duration` decimal(10,2) unsigned NOT NULL DEFAULT 0.00,
+ `unitLaborCost` decimal(10,2) unsigned NOT NULL DEFAULT 0.00,
+ `totalLaborCost` decimal(10,2) unsigned NOT NULL DEFAULT 0.00,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `dayHour` decimal(10,2) NOT NULL DEFAULT 0.00,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflow` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `parent` varchar(30) NOT NULL DEFAULT '',
+ `child` varchar(30) NOT NULL DEFAULT '',
+ `type` varchar(10) NOT NULL DEFAULT 'flow',
+ `navigator` varchar(10) NOT NULL DEFAULT '',
+ `app` varchar(20) NOT NULL DEFAULT '',
+ `position` varchar(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `table` varchar(50) NOT NULL DEFAULT '',
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `titleField` varchar(30) NOT NULL DEFAULT '',
+ `contentField` text DEFAULT NULL,
+ `flowchart` text DEFAULT NULL,
+ `js` text DEFAULT NULL,
+ `css` text DEFAULT NULL,
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `buildin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `administrator` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `version` varchar(10) NOT NULL DEFAULT '1.0',
+ `status` varchar(10) NOT NULL DEFAULT 'wait',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `approval` enum('enabled','disabled') NOT NULL DEFAULT 'disabled',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`app`,`module`,`vision`),
+ KEY `type` (`type`),
+ KEY `app` (`app`),
+ KEY `module` (`module`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowaction` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `action` varchar(50) NOT NULL DEFAULT '',
+ `method` varchar(50) NOT NULL DEFAULT '',
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `type` enum('single','batch') NOT NULL DEFAULT 'single',
+ `batchMode` enum('same','different') NOT NULL DEFAULT 'different',
+ `extensionType` varchar(10) NOT NULL DEFAULT 'override',
+ `open` varchar(20) NOT NULL DEFAULT '',
+ `position` enum('menu','browseandview','browse','view') NOT NULL DEFAULT 'browseandview',
+ `layout` char(20) NOT NULL DEFAULT '',
+ `show` enum('dropdownlist','direct') NOT NULL DEFAULT 'dropdownlist',
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `buildin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `role` varchar(10) NOT NULL DEFAULT 'custom',
+ `virtual` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `conditions` text DEFAULT NULL,
+ `verifications` text DEFAULT NULL,
+ `hooks` text DEFAULT NULL,
+ `linkages` text DEFAULT NULL,
+ `js` text DEFAULT NULL,
+ `css` text DEFAULT NULL,
+ `toList` char(255) NOT NULL DEFAULT '',
+ `blocks` text DEFAULT NULL,
+ `desc` text DEFAULT NULL,
+ `status` varchar(10) NOT NULL DEFAULT 'enable',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`module`,`action`,`vision`),
+ KEY `module` (`module`),
+ KEY `action` (`action`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowdatasource` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` enum('system','sql','func','option','lang','category') NOT NULL DEFAULT 'option',
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `code` varchar(30) NOT NULL DEFAULT '',
+ `datasource` text DEFAULT NULL,
+ `view` varchar(20) NOT NULL DEFAULT '',
+ `keyField` varchar(50) NOT NULL DEFAULT '',
+ `valueField` varchar(50) NOT NULL DEFAULT '',
+ `buildin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `type` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowfield` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `field` varchar(50) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT 'varchar',
+ `length` varchar(10) NOT NULL DEFAULT '',
+ `name` varchar(50) NOT NULL DEFAULT '',
+ `control` varchar(20) NOT NULL DEFAULT '',
+ `expression` text DEFAULT NULL,
+ `options` text DEFAULT NULL,
+ `default` varchar(100) NOT NULL DEFAULT '',
+ `rules` varchar(255) NOT NULL DEFAULT '',
+ `placeholder` varchar(100) NOT NULL DEFAULT '',
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `searchOrder` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `exportOrder` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `canExport` enum('0','1') NOT NULL DEFAULT '0',
+ `canSearch` enum('0','1') NOT NULL DEFAULT '0',
+ `isValue` enum('0','1') NOT NULL DEFAULT '0',
+ `readonly` enum('0','1') NOT NULL DEFAULT '0',
+ `buildin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `role` varchar(10) NOT NULL DEFAULT 'custom',
+ `desc` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`module`,`field`),
+ KEY `module` (`module`),
+ KEY `field` (`field`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowlabel` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `action` varchar(30) NOT NULL DEFAULT 'browse',
+ `code` varchar(30) NOT NULL DEFAULT '',
+ `label` varchar(255) NOT NULL DEFAULT '',
+ `params` text DEFAULT NULL,
+ `orderBy` text DEFAULT NULL,
+ `order` tinyint(3) NOT NULL DEFAULT 0,
+ `buildin` tinyint(1) unsigned NOT NULL DEFAULT 0,
+ `role` varchar(10) NOT NULL DEFAULT 'custom',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `module` (`module`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowlayout` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `action` varchar(50) NOT NULL DEFAULT '',
+ `field` varchar(50) NOT NULL DEFAULT '',
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `width` varchar(50) NOT NULL DEFAULT '0',
+ `position` text DEFAULT NULL,
+ `readonly` enum('0','1') NOT NULL DEFAULT '0',
+ `mobileShow` enum('0','1') NOT NULL DEFAULT '1',
+ `summary` varchar(20) NOT NULL DEFAULT '',
+ `defaultValue` text DEFAULT NULL,
+ `layoutRules` varchar(255) NOT NULL DEFAULT '',
+ `vision` varchar(10) NOT NULL DEFAULT 'rnd',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`module`,`action`,`field`,`vision`),
+ KEY `module` (`module`),
+ KEY `action` (`action`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowlinkdata` (
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `linkedType` varchar(30) NOT NULL DEFAULT '',
+ `linkedID` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ UNIQUE KEY `unique` (`objectType`,`objectID`,`linkedType`,`linkedID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowrelation` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `prev` varchar(30) NOT NULL DEFAULT '',
+ `next` varchar(30) NOT NULL DEFAULT '',
+ `field` varchar(50) NOT NULL DEFAULT '',
+ `actions` varchar(20) NOT NULL DEFAULT '',
+ `actionCodes` text DEFAULT NULL,
+ `buildin` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowrelationlayout` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `prev` varchar(30) NOT NULL DEFAULT '',
+ `next` varchar(30) NOT NULL DEFAULT '',
+ `action` varchar(50) NOT NULL DEFAULT '',
+ `field` varchar(50) NOT NULL DEFAULT '',
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`prev`,`next`,`action`,`field`),
+ KEY `prev` (`prev`),
+ KEY `next` (`next`),
+ KEY `action` (`action`),
+ KEY `order` (`order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowreport` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `type` enum('pie','line','bar') NOT NULL DEFAULT 'pie',
+ `countType` enum('sum','count') NOT NULL DEFAULT 'sum',
+ `displayType` enum('value','percent') NOT NULL DEFAULT 'value',
+ `dimension` varchar(130) NOT NULL,
+ `fields` text NOT NULL,
+ `order` smallint(5) unsigned NOT NULL DEFAULT 0,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowrule` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` enum('system','regex','func') NOT NULL DEFAULT 'regex',
+ `name` varchar(30) NOT NULL DEFAULT '',
+ `rule` text DEFAULT NULL,
+ `createdBy` char(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` char(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `type` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowsql` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `field` varchar(50) NOT NULL DEFAULT '',
+ `action` varchar(50) NOT NULL DEFAULT '',
+ `sql` text DEFAULT NULL,
+ `vars` text DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `module` (`module`),
+ KEY `field` (`field`),
+ KEY `action` (`action`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_workflowversion` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `version` varchar(10) NOT NULL DEFAULT '',
+ `fields` text DEFAULT NULL,
+ `actions` text DEFAULT NULL,
+ `layouts` text DEFAULT NULL,
+ `sqls` text DEFAULT NULL,
+ `labels` text DEFAULT NULL,
+ `table` text DEFAULT NULL,
+ `datas` text DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `moduleversion` (`module`,`version`),
+ KEY `module` (`module`),
+ KEY `version` (`version`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_zoutput` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `activity` mediumint(8) NOT NULL DEFAULT 0,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `content` mediumtext DEFAULT NULL,
+ `optional` char(20) NOT NULL DEFAULT '',
+ `tailorNorm` varchar(255) NOT NULL DEFAULT '',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime DEFAULT NULL,
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime DEFAULT NULL,
+ `order` mediumint(8) DEFAULT 0,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
\ No newline at end of file
From 57d86daa0016b03321c9517dac96e51b9a6e46e0 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 21:55:07 +0800
Subject: [PATCH 029/276] * Adjust version name.
---
VERSION | 2 +-
module/misc/lang/de.php | 4 ++--
module/misc/lang/en.php | 4 ++--
module/misc/lang/fr.php | 4 ++--
module/misc/lang/zh-cn.php | 4 ++--
module/upgrade/lang/version.php | 2 +-
6 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/VERSION b/VERSION
index bf79c7af7e..9a7c1e503f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-20.0.stable
+20.0
diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php
index 8d7c284f4a..e0947229cc 100644
--- a/module/misc/lang/de.php
+++ b/module/misc/lang/de.php
@@ -113,7 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
-$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
+$lang->misc->releaseDate['20.0'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -224,7 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
-$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
+$lang->misc->feature->all['20.0'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php
index 6b32bdf3b4..6df78b9a6c 100644
--- a/module/misc/lang/en.php
+++ b/module/misc/lang/en.php
@@ -113,7 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
-$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
+$lang->misc->releaseDate['20.0'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -224,7 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
-$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
+$lang->misc->feature->all['20.0'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php
index 9c570f5c58..a945f3d277 100644
--- a/module/misc/lang/fr.php
+++ b/module/misc/lang/fr.php
@@ -113,7 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
-$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
+$lang->misc->releaseDate['20.0'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -224,7 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
-$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
+$lang->misc->feature->all['20.0'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => "We have successfully implemented AI mini-program functionality, integrating measurement metrics and global filtering capabilities into the large-screen display. Additionally, we have added feedback functionality to the OR interface. Furthermore, we have enabled the inclusion of keywords in the Requirement Management Hub, allowing for the redistribution of requirements in the Requirement Management Hub once a user's requirement has been withdrawn.", 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => 'The Requirement Management Hub (RM Hub) now includes notification functionality, supports product line features, and allows for distributing a single requirement to multiple products.', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => 'This release mainly involves a large-scale refactoring of the code and a brand new upgrade to the user interface (UI), bringing better product performance, stronger security, and a more user-friendly experience.', 'desc' => '');
diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php
index 072ecd9692..98190cc1fd 100644
--- a/module/misc/lang/zh-cn.php
+++ b/module/misc/lang/zh-cn.php
@@ -113,7 +113,7 @@ $lang->misc->feature->promptExecImage = 'theme/default/images/main/prompt_exec
$lang->misc->feature->promptLearnMore = 'https://www.zentao.net/book/zentaopms/1097.html';
/* Release Date. */
-$lang->misc->releaseDate['20.0.stable'] = '2024-02-29';
+$lang->misc->releaseDate['20.0'] = '2024-02-29';
$lang->misc->releaseDate['18.11'] = '2024-02-28';
$lang->misc->releaseDate['18.10.1'] = '2024-01-17';
$lang->misc->releaseDate['20.0.beta1'] = '2024-01-26';
@@ -224,7 +224,7 @@ $lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
/* Release Detail. */
-$lang->misc->feature->all['20.0.stable'][] = array('title' => '', 'desc' => '');
+$lang->misc->feature->all['20.0'][] = array('title' => '', 'desc' => '');
$lang->misc->feature->all['18.11'][] = array('title' => '实现AI小程序功能,实现大屏引用度量项、全局筛选器功能,OR界面实现反馈功能,需求池需求增加关键词,撤回用户需求后需求池需求可以再次分发。', 'desc' => '');
$lang->misc->feature->all['18.10.1'][] = array('title' => '需求池增加通知功能,支持产品线功能,支持一个需求分发到多个产品。', 'desc' => '');
$lang->misc->feature->all['20.0.beta1'][] = array('title' => '本次发布主要对代码进行了大规模重构,同时对用户界面(UI)进行了全新升级,带来了更好的产品性能、更强的安全性和更友好的用户体验。', 'desc' => '');
diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php
index 56f5eb043d..ab90261681 100644
--- a/module/upgrade/lang/version.php
+++ b/module/upgrade/lang/version.php
@@ -188,7 +188,7 @@ $lang->upgrade->fromVersions['18_10'] = '18.10';
$lang->upgrade->fromVersions['18_10_1'] = '18.10.1';
$lang->upgrade->fromVersions['18_11'] = '18.11';
$lang->upgrade->fromVersions['20_0_alpha1'] = '20.0.alpha1';
-$lang->upgrade->fromVersions['20_0_stable'] = '20.0.stable'; // pms insert position.
+$lang->upgrade->fromVersions['20_0'] = '20.0'; // pms insert position.
global $config;
/* Lite. */
From c8289646b8dc9fa49719c1630df708dfe328414c Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 21:56:22 +0800
Subject: [PATCH 030/276] * Adjust version name.
---
doc/CHANGELOG | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index 750f2ccb5f..866286c2ac 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -1,4 +1,4 @@
-2024-02-29 20.0.stable
+2024-02-29 20.0
2024-02-20 18.11
完成的需求
From c7d9dd2142c0f1ac46d7f0ee0ad1fe90ee32247f Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Thu, 29 Feb 2024 22:06:37 +0800
Subject: [PATCH 031/276] * Adjust from version for update.
---
module/upgrade/lang/version.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php
index ab90261681..afede75f57 100644
--- a/module/upgrade/lang/version.php
+++ b/module/upgrade/lang/version.php
@@ -188,6 +188,7 @@ $lang->upgrade->fromVersions['18_10'] = '18.10';
$lang->upgrade->fromVersions['18_10_1'] = '18.10.1';
$lang->upgrade->fromVersions['18_11'] = '18.11';
$lang->upgrade->fromVersions['20_0_alpha1'] = '20.0.alpha1';
+$lang->upgrade->fromVersions['20_0_beta1'] = '20.0.beta1';
$lang->upgrade->fromVersions['20_0'] = '20.0'; // pms insert position.
global $config;
From de20833068636a6836df57172d37da6b62463766 Mon Sep 17 00:00:00 2001
From: sunhao
Date: Fri, 1 Mar 2024 10:12:17 +0800
Subject: [PATCH 032/276] * zui: update zui3 lib.
---
www/js/zui3/zui.zentao.css | 2 +-
www/js/zui3/zui.zentao.js | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/www/js/zui3/zui.zentao.css b/www/js/zui3/zui.zentao.css
index 08ff2f9a16..3ef3fc5295 100644
--- a/www/js/zui3/zui.zentao.css
+++ b/www/js/zui3/zui.zentao.css
@@ -1 +1 @@
-/*! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgb(var(--color-gray-200-rgb));border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgb(var(--color-gray-400-rgb));opacity:1}input::placeholder,textarea::placeholder{color:rgb(var(--color-gray-400-rgb));opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}:root{--screen-2xl:1720px;--color-gray-50:#fcfdfe;--color-gray-100:#eff1f3;--color-gray-200:#ebedf3;--color-gray-300:#d2d6e5;--color-gray-400:#b2b9c5;--color-gray-500:#64758b;--color-gray-600:#4a577f;--color-gray-700:#3d4667;--color-gray-800:#353d57;--color-gray-900:#30394a;--color-gray-950:#0b0f18;--color-gray-50-rgb:252,253,254;--color-gray-100-rgb:239,241,243;--color-gray-200-rgb:235,237,243;--color-gray-300-rgb:210,214,229;--color-gray-400-rgb:178,185,197;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:74,87,127;--color-gray-700-rgb:61,70,103;--color-gray-800-rgb:53,61,87;--color-gray-900-rgb:48,57,74;--color-gray-950-rgb:11,15,24;--color-primary-50:#eef6ff;--color-primary-100:#d9eaff;--color-primary-200:#bcdcff;--color-primary-300:#8ec6ff;--color-primary-400:#59a5ff;--color-primary-500:#3883fa;--color-primary-600:#2b67e5;--color-primary-700:#144ce1;--color-primary-800:#173db6;--color-primary-900:#19388f;--color-primary-950:#142457;--color-primary-50-rgb:238,246,255;--color-primary-100-rgb:217,234,255;--color-primary-200-rgb:188,220,255;--color-primary-300-rgb:142,198,255;--color-primary-400-rgb:89,165,255;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:43,103,229;--color-primary-700-rgb:20,76,225;--color-primary-800-rgb:23,61,182;--color-primary-900-rgb:25,56,143;--color-primary-950-rgb:20,36,87;--color-secondary-50:#e7f6ff;--color-secondary-100:#cdecff;--color-secondary-200:#9bd9ff;--color-secondary-300:#77cbff;--color-secondary-400:#60c2ff;--color-secondary-500:#37b2fe;--color-secondary-600:#18a6fd;--color-secondary-700:#1099ed;--color-secondary-800:#078ada;--color-secondary-900:#046bab;--color-secondary-950:#062a4b;--color-secondary-50-rgb:231,246,255;--color-secondary-100-rgb:205,236,255;--color-secondary-200-rgb:155,217,255;--color-secondary-300-rgb:119,203,255;--color-secondary-400-rgb:96,194,255;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:24,166,253;--color-secondary-700-rgb:16,153,237;--color-secondary-800-rgb:7,138,218;--color-secondary-900-rgb:4,107,171;--color-secondary-950-rgb:6,42,75;--color-success-50:#ecfff8;--color-success-100:#d0f6e8;--color-success-200:#b1ecd6;--color-success-300:#7adfba;--color-success-400:#48d1a0;--color-success-500:#22c98d;--color-success-600:#0dbb7d;--color-success-700:#0ca76f;--color-success-800:#0e8d60;--color-success-900:#186c4e;--color-success-50-rgb:236,255,248;--color-success-100-rgb:208,246,232;--color-success-200-rgb:177,236,214;--color-success-300-rgb:122,223,186;--color-success-400-rgb:72,209,160;--color-success-500-rgb:34,201,141;--color-success-600-rgb:13,187,125;--color-success-700-rgb:12,167,111;--color-success-800-rgb:14,141,96;--color-success-900-rgb:24,108,78;--color-warning-50:#fff4ea;--color-warning-100:#ffecdb;--color-warning-200:#ffd2a9;--color-warning-300:#ffbc7e;--color-warning-400:#ffaf65;--color-warning-500:#ff9f46;--color-warning-600:#f38f19;--color-warning-700:#ed8307;--color-warning-800:#d17100;--color-warning-900:#af5f01;--color-warning-50-rgb:255,244,234;--color-warning-100-rgb:255,236,219;--color-warning-200-rgb:255,210,169;--color-warning-300-rgb:255,188,126;--color-warning-400-rgb:255,175,101;--color-warning-500-rgb:255,159,70;--color-warning-600-rgb:243,143,25;--color-warning-700-rgb:237,131,7;--color-warning-800-rgb:209,113,0;--color-warning-900-rgb:175,95,1;--color-danger-50:#ffebeb;--color-danger-100:#ffd5d5;--color-danger-200:#ffb1b1;--color-danger-300:#ff9292;--color-danger-400:#ff7c7c;--color-danger-500:#fc5959;--color-danger-600:#fb2b2b;--color-danger-700:#d91b1b;--color-danger-800:#ba1313;--color-danger-900:#a20606;--color-danger-50-rgb:255,235,235;--color-danger-100-rgb:255,213,213;--color-danger-200-rgb:255,177,177;--color-danger-300-rgb:255,146,146;--color-danger-400-rgb:255,124,124;--color-danger-500-rgb:252,89,89;--color-danger-600-rgb:251,43,43;--color-danger-700-rgb:217,27,27;--color-danger-800-rgb:186,19,19;--color-danger-900-rgb:162,6,6;--color-important-50:#fff8f5;--color-important-100:#ffe2d9;--color-important-200:#ffcebf;--color-important-300:#ffb29b;--color-important-400:#ff8c68;--color-important-500:#ff8058;--color-important-600:#ff6f42;--color-important-700:#ff4912;--color-important-800:#c83509;--color-important-900:#611700;--color-important-50-rgb:255,248,245;--color-important-100-rgb:255,226,217;--color-important-200-rgb:255,206,191;--color-important-300-rgb:255,178,155;--color-important-400-rgb:255,140,104;--color-important-500-rgb:255,128,88;--color-important-600-rgb:255,111,66;--color-important-700-rgb:255,73,18;--color-important-800-rgb:200,53,9;--color-important-900-rgb:97,23,0;--color-special-50:#efecfa;--color-special-100:#e4dff7;--color-special-200:#c4b6ff;--color-special-300:#a38cff;--color-special-400:#8a6ff5;--color-special-500:#8166ee;--color-special-600:#7055df;--color-special-700:#513baa;--color-special-800:#452da5;--color-special-900:#30216e;--color-special-50-rgb:239,236,250;--color-special-100-rgb:228,223,247;--color-special-200-rgb:196,182,255;--color-special-300-rgb:163,140,255;--color-special-400-rgb:138,111,245;--color-special-500-rgb:129,102,238;--color-special-600-rgb:112,85,223;--color-special-700-rgb:81,59,170;--color-special-800-rgb:69,45,165;--color-special-900-rgb:48,33,110;--color-inherit:inherit;--color-transparent:transparent;--color-current:currentColor;--color-black:#000;--color-white:#fff;--color-canvas:#fff;--color-canvas-light:#fff;--color-canvas-dark:#fcfdfe;--color-inverse:#000;--color-surface:#eff1f3;--color-surface-light:#fcfdfe;--color-surface-strong:#ebedf3;--color-fore:#30394a;--color-fore-in-light:#30394a;--color-fore-in-dark:#fff;--color-focus:#bcdcff;--color-link:#2b47a2;--color-link-hover:#144ce1;--color-link-visited:#6328a4;--color-link-active:#144ce1;--color-placeholder:#b2b9c5;--color-border:#ebedf3;--color-border-strong:#d2d6e5;--color-border-light:#eff1f3;--color-black-rgb:0,0,0;--color-white-rgb:255,255,255;--color-canvas-rgb:255,255,255;--color-canvas-light-rgb:255,255,255;--color-canvas-dark-rgb:252,253,254;--color-inverse-rgb:0,0,0;--color-surface-rgb:239,241,243;--color-surface-light-rgb:252,253,254;--color-surface-strong-rgb:235,237,243;--color-fore-rgb:48,57,74;--color-fore-in-light-rgb:48,57,74;--color-fore-in-dark-rgb:255,255,255;--color-focus-rgb:188,220,255;--color-link-rgb:43,71,162;--color-link-hover-rgb:20,76,225;--color-link-visited-rgb:99,40,164;--color-link-active-rgb:20,76,225;--color-placeholder-rgb:178,185,197;--color-border-rgb:235,237,243;--color-border-strong-rgb:210,214,229;--color-border-light-rgb:239,241,243;--radius-none:0px;--radius-sm:0.0625rem;--radius:0.125rem;--radius-md:0.25rem;--radius-lg:0.375rem;--radius-xl:0.5rem;--radius-2xl:0.75rem;--radius-3xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--shadow-md:0 2px 6px -1px rgba(0,0,0,.2),0 1px 4px -2px rgba(0,0,0,.15);--shadow-lg:0 5px 15px -3px rgba(0,0,0,.2),0 2px 6px -4px rgba(0,0,0,.15);--shadow-xl:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--shadow-2xl:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--shadow-inner:inset 0 2px 4px 0 rgba(0,0,0,.05);--shadow-none:none;--space:0.25rem;--font-size-root:16px;--font-size-page-lineHeight:1.5384615385}.dark{--color-gray-50:#0b0f18;--color-gray-100:#30394a;--color-gray-200:#353d57;--color-gray-300:#3d4667;--color-gray-400:#4a577f;--color-gray-500:#64758b;--color-gray-600:#b2b9c5;--color-gray-700:#d2d6e5;--color-gray-800:#ebedf3;--color-gray-900:#eff1f3;--color-gray-950:#fcfdfe;--color-gray-50-rgb:11,15,24;--color-gray-100-rgb:48,57,74;--color-gray-200-rgb:53,61,87;--color-gray-300-rgb:61,70,103;--color-gray-400-rgb:74,87,127;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:178,185,197;--color-gray-700-rgb:210,214,229;--color-gray-800-rgb:235,237,243;--color-gray-900-rgb:239,241,243;--color-gray-950-rgb:252,253,254;--color-primary-50:#142457;--color-primary-100:#19388f;--color-primary-200:#173db6;--color-primary-300:#144ce1;--color-primary-400:#2b67e5;--color-primary-500:#3883fa;--color-primary-600:#59a5ff;--color-primary-700:#8ec6ff;--color-primary-800:#bcdcff;--color-primary-900:#d9eaff;--color-primary-950:#eef6ff;--color-primary-50-rgb:20,36,87;--color-primary-100-rgb:25,56,143;--color-primary-200-rgb:23,61,182;--color-primary-300-rgb:20,76,225;--color-primary-400-rgb:43,103,229;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:89,165,255;--color-primary-700-rgb:142,198,255;--color-primary-800-rgb:188,220,255;--color-primary-900-rgb:217,234,255;--color-primary-950-rgb:238,246,255;--color-secondary-50:#062a4b;--color-secondary-100:#046bab;--color-secondary-200:#078ada;--color-secondary-300:#1099ed;--color-secondary-400:#18a6fd;--color-secondary-500:#37b2fe;--color-secondary-600:#60c2ff;--color-secondary-700:#77cbff;--color-secondary-800:#9bd9ff;--color-secondary-900:#cdecff;--color-secondary-950:#e7f6ff;--color-secondary-50-rgb:6,42,75;--color-secondary-100-rgb:4,107,171;--color-secondary-200-rgb:7,138,218;--color-secondary-300-rgb:16,153,237;--color-secondary-400-rgb:24,166,253;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:96,194,255;--color-secondary-700-rgb:119,203,255;--color-secondary-800-rgb:155,217,255;--color-secondary-900-rgb:205,236,255;--color-secondary-950-rgb:231,246,255;--color-success-50:#186c4e;--color-success-100:#0e8d60;--color-success-200:#0ca76f;--color-success-300:#0dbb7d;--color-success-400:#22c98d;--color-success-500:#48d1a0;--color-success-600:#7adfba;--color-success-700:#b1ecd6;--color-success-800:#d0f6e8;--color-success-900:#ecfff8;--color-success-50-rgb:24,108,78;--color-success-100-rgb:14,141,96;--color-success-200-rgb:12,167,111;--color-success-300-rgb:13,187,125;--color-success-400-rgb:34,201,141;--color-success-500-rgb:72,209,160;--color-success-600-rgb:122,223,186;--color-success-700-rgb:177,236,214;--color-success-800-rgb:208,246,232;--color-success-900-rgb:236,255,248;--color-warning-50:#af5f01;--color-warning-100:#d17100;--color-warning-200:#ed8307;--color-warning-300:#f38f19;--color-warning-400:#ff9f46;--color-warning-500:#ffaf65;--color-warning-600:#ffbc7e;--color-warning-700:#ffd2a9;--color-warning-800:#ffecdb;--color-warning-900:#fff4ea;--color-warning-50-rgb:175,95,1;--color-warning-100-rgb:209,113,0;--color-warning-200-rgb:237,131,7;--color-warning-300-rgb:243,143,25;--color-warning-400-rgb:255,159,70;--color-warning-500-rgb:255,175,101;--color-warning-600-rgb:255,188,126;--color-warning-700-rgb:255,210,169;--color-warning-800-rgb:255,236,219;--color-warning-900-rgb:255,244,234;--color-danger-50:#a20606;--color-danger-100:#ba1313;--color-danger-200:#d91b1b;--color-danger-300:#fb2b2b;--color-danger-400:#fc5959;--color-danger-500:#ff7c7c;--color-danger-600:#ff9292;--color-danger-700:#ffb1b1;--color-danger-800:#ffd5d5;--color-danger-900:#ffebeb;--color-danger-50-rgb:162,6,6;--color-danger-100-rgb:186,19,19;--color-danger-200-rgb:217,27,27;--color-danger-300-rgb:251,43,43;--color-danger-400-rgb:252,89,89;--color-danger-500-rgb:255,124,124;--color-danger-600-rgb:255,146,146;--color-danger-700-rgb:255,177,177;--color-danger-800-rgb:255,213,213;--color-danger-900-rgb:255,235,235;--color-important-50:#611700;--color-important-100:#c83509;--color-important-200:#ff4912;--color-important-300:#ff6f42;--color-important-400:#ff8058;--color-important-500:#ff8c68;--color-important-600:#ffb29b;--color-important-700:#ffcebf;--color-important-800:#ffe2d9;--color-important-900:#fff8f5;--color-important-50-rgb:97,23,0;--color-important-100-rgb:200,53,9;--color-important-200-rgb:255,73,18;--color-important-300-rgb:255,111,66;--color-important-400-rgb:255,128,88;--color-important-500-rgb:255,140,104;--color-important-600-rgb:255,178,155;--color-important-700-rgb:255,206,191;--color-important-800-rgb:255,226,217;--color-important-900-rgb:255,248,245;--color-special-50:#30216e;--color-special-100:#452da5;--color-special-200:#513baa;--color-special-300:#7055df;--color-special-400:#8166ee;--color-special-500:#8a6ff5;--color-special-600:#a38cff;--color-special-700:#c4b6ff;--color-special-800:#e4dff7;--color-special-900:#efecfa;--color-special-50-rgb:48,33,110;--color-special-100-rgb:69,45,165;--color-special-200-rgb:81,59,170;--color-special-300-rgb:112,85,223;--color-special-400-rgb:129,102,238;--color-special-500-rgb:138,111,245;--color-special-600-rgb:163,140,255;--color-special-700-rgb:196,182,255;--color-special-800-rgb:228,223,247;--color-special-900-rgb:239,236,250;--color-canvas:#0b0f18;--color-inverse:#fff;--color-surface:#353d57;--color-surface-light:#30394a;--color-surface-strong:#3d4667;--color-fore:#ebedf3;--color-focus:#173db6;--color-link:#59a5ff;--color-link-hover:#3883fa;--color-link-visited:#bcdcff;--color-link-active:#bcdcff;--color-placeholder:#4a577f;--color-border:#353d57;--color-border-strong:#3d4667;--color-border-light:#30394a;--color-canvas-rgb:11,15,24;--color-inverse-rgb:255,255,255;--color-surface-rgb:53,61,87;--color-surface-light-rgb:48,57,74;--color-surface-strong-rgb:61,70,103;--color-fore-rgb:235,237,243;--color-focus-rgb:23,61,182;--color-link-rgb:89,165,255;--color-link-hover-rgb:56,131,250;--color-link-visited-rgb:188,220,255;--color-link-active-rgb:188,220,255;--color-placeholder-rgb:74,87,127;--color-border-rgb:53,61,87;--color-border-strong-rgb:61,70,103;--color-border-light-rgb:48,57,74}.light-in-dark{--color-gray-50:#fcfdfe;--color-gray-100:#eff1f3;--color-gray-200:#ebedf3;--color-gray-300:#d2d6e5;--color-gray-400:#b2b9c5;--color-gray-500:#64758b;--color-gray-600:#4a577f;--color-gray-700:#3d4667;--color-gray-800:#353d57;--color-gray-900:#30394a;--color-gray-950:#0b0f18;--color-gray-50-rgb:252,253,254;--color-gray-100-rgb:239,241,243;--color-gray-200-rgb:235,237,243;--color-gray-300-rgb:210,214,229;--color-gray-400-rgb:178,185,197;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:74,87,127;--color-gray-700-rgb:61,70,103;--color-gray-800-rgb:53,61,87;--color-gray-900-rgb:48,57,74;--color-gray-950-rgb:11,15,24;--color-primary-50:#eef6ff;--color-primary-100:#d9eaff;--color-primary-200:#bcdcff;--color-primary-300:#8ec6ff;--color-primary-400:#59a5ff;--color-primary-500:#3883fa;--color-primary-600:#2b67e5;--color-primary-700:#144ce1;--color-primary-800:#173db6;--color-primary-900:#19388f;--color-primary-950:#142457;--color-primary-50-rgb:238,246,255;--color-primary-100-rgb:217,234,255;--color-primary-200-rgb:188,220,255;--color-primary-300-rgb:142,198,255;--color-primary-400-rgb:89,165,255;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:43,103,229;--color-primary-700-rgb:20,76,225;--color-primary-800-rgb:23,61,182;--color-primary-900-rgb:25,56,143;--color-primary-950-rgb:20,36,87;--color-secondary-50:#e7f6ff;--color-secondary-100:#cdecff;--color-secondary-200:#9bd9ff;--color-secondary-300:#77cbff;--color-secondary-400:#60c2ff;--color-secondary-500:#37b2fe;--color-secondary-600:#18a6fd;--color-secondary-700:#1099ed;--color-secondary-800:#078ada;--color-secondary-900:#046bab;--color-secondary-950:#062a4b;--color-secondary-50-rgb:231,246,255;--color-secondary-100-rgb:205,236,255;--color-secondary-200-rgb:155,217,255;--color-secondary-300-rgb:119,203,255;--color-secondary-400-rgb:96,194,255;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:24,166,253;--color-secondary-700-rgb:16,153,237;--color-secondary-800-rgb:7,138,218;--color-secondary-900-rgb:4,107,171;--color-secondary-950-rgb:6,42,75;--color-success-50:#ecfff8;--color-success-100:#d0f6e8;--color-success-200:#b1ecd6;--color-success-300:#7adfba;--color-success-400:#48d1a0;--color-success-500:#22c98d;--color-success-600:#0dbb7d;--color-success-700:#0ca76f;--color-success-800:#0e8d60;--color-success-900:#186c4e;--color-success-50-rgb:236,255,248;--color-success-100-rgb:208,246,232;--color-success-200-rgb:177,236,214;--color-success-300-rgb:122,223,186;--color-success-400-rgb:72,209,160;--color-success-500-rgb:34,201,141;--color-success-600-rgb:13,187,125;--color-success-700-rgb:12,167,111;--color-success-800-rgb:14,141,96;--color-success-900-rgb:24,108,78;--color-warning-50:#fff4ea;--color-warning-100:#ffecdb;--color-warning-200:#ffd2a9;--color-warning-300:#ffbc7e;--color-warning-400:#ffaf65;--color-warning-500:#ff9f46;--color-warning-600:#f38f19;--color-warning-700:#ed8307;--color-warning-800:#d17100;--color-warning-900:#af5f01;--color-warning-50-rgb:255,244,234;--color-warning-100-rgb:255,236,219;--color-warning-200-rgb:255,210,169;--color-warning-300-rgb:255,188,126;--color-warning-400-rgb:255,175,101;--color-warning-500-rgb:255,159,70;--color-warning-600-rgb:243,143,25;--color-warning-700-rgb:237,131,7;--color-warning-800-rgb:209,113,0;--color-warning-900-rgb:175,95,1;--color-danger-50:#ffebeb;--color-danger-100:#ffd5d5;--color-danger-200:#ffb1b1;--color-danger-300:#ff9292;--color-danger-400:#ff7c7c;--color-danger-500:#fc5959;--color-danger-600:#fb2b2b;--color-danger-700:#d91b1b;--color-danger-800:#ba1313;--color-danger-900:#a20606;--color-danger-50-rgb:255,235,235;--color-danger-100-rgb:255,213,213;--color-danger-200-rgb:255,177,177;--color-danger-300-rgb:255,146,146;--color-danger-400-rgb:255,124,124;--color-danger-500-rgb:252,89,89;--color-danger-600-rgb:251,43,43;--color-danger-700-rgb:217,27,27;--color-danger-800-rgb:186,19,19;--color-danger-900-rgb:162,6,6;--color-important-50:#fff8f5;--color-important-100:#ffe2d9;--color-important-200:#ffcebf;--color-important-300:#ffb29b;--color-important-400:#ff8c68;--color-important-500:#ff8058;--color-important-600:#ff6f42;--color-important-700:#ff4912;--color-important-800:#c83509;--color-important-900:#611700;--color-important-50-rgb:255,248,245;--color-important-100-rgb:255,226,217;--color-important-200-rgb:255,206,191;--color-important-300-rgb:255,178,155;--color-important-400-rgb:255,140,104;--color-important-500-rgb:255,128,88;--color-important-600-rgb:255,111,66;--color-important-700-rgb:255,73,18;--color-important-800-rgb:200,53,9;--color-important-900-rgb:97,23,0;--color-special-50:#efecfa;--color-special-100:#e4dff7;--color-special-200:#c4b6ff;--color-special-300:#a38cff;--color-special-400:#8a6ff5;--color-special-500:#8166ee;--color-special-600:#7055df;--color-special-700:#513baa;--color-special-800:#452da5;--color-special-900:#30216e;--color-special-50-rgb:239,236,250;--color-special-100-rgb:228,223,247;--color-special-200-rgb:196,182,255;--color-special-300-rgb:163,140,255;--color-special-400-rgb:138,111,245;--color-special-500-rgb:129,102,238;--color-special-600-rgb:112,85,223;--color-special-700-rgb:81,59,170;--color-special-800-rgb:69,45,165;--color-special-900-rgb:48,33,110;--color-inherit:inherit;--color-transparent:transparent;--color-current:currentColor;--color-black:#000;--color-white:#fff;--color-canvas:#fff;--color-canvas-light:#fff;--color-canvas-dark:#fcfdfe;--color-inverse:#000;--color-surface:#eff1f3;--color-surface-light:#fcfdfe;--color-surface-strong:#ebedf3;--color-fore:#30394a;--color-fore-in-light:#30394a;--color-fore-in-dark:#fff;--color-focus:#bcdcff;--color-link:#2b47a2;--color-link-hover:#144ce1;--color-link-visited:#6328a4;--color-link-active:#144ce1;--color-placeholder:#b2b9c5;--color-border:#ebedf3;--color-border-strong:#d2d6e5;--color-border-light:#eff1f3;--color-black-rgb:0,0,0;--color-white-rgb:255,255,255;--color-canvas-rgb:255,255,255;--color-canvas-light-rgb:255,255,255;--color-canvas-dark-rgb:252,253,254;--color-inverse-rgb:0,0,0;--color-surface-rgb:239,241,243;--color-surface-light-rgb:252,253,254;--color-surface-strong-rgb:235,237,243;--color-fore-rgb:48,57,74;--color-fore-in-light-rgb:48,57,74;--color-fore-in-dark-rgb:255,255,255;--color-focus-rgb:188,220,255;--color-link-rgb:43,71,162;--color-link-hover-rgb:20,76,225;--color-link-visited-rgb:99,40,164;--color-link-active-rgb:20,76,225;--color-placeholder-rgb:178,185,197;--color-border-rgb:235,237,243;--color-border-strong-rgb:210,214,229;--color-border-light-rgb:239,241,243}body{--btn-bg:var(--color-gray-50)}@media (prefers-color-scheme:dark){.dark-auto{--color-gray-50:#0b0f18;--color-gray-100:#30394a;--color-gray-200:#353d57;--color-gray-300:#3d4667;--color-gray-400:#4a577f;--color-gray-500:#64758b;--color-gray-600:#b2b9c5;--color-gray-700:#d2d6e5;--color-gray-800:#ebedf3;--color-gray-900:#eff1f3;--color-gray-950:#fcfdfe;--color-gray-50-rgb:11,15,24;--color-gray-100-rgb:48,57,74;--color-gray-200-rgb:53,61,87;--color-gray-300-rgb:61,70,103;--color-gray-400-rgb:74,87,127;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:178,185,197;--color-gray-700-rgb:210,214,229;--color-gray-800-rgb:235,237,243;--color-gray-900-rgb:239,241,243;--color-gray-950-rgb:252,253,254;--color-primary-50:#142457;--color-primary-100:#19388f;--color-primary-200:#173db6;--color-primary-300:#144ce1;--color-primary-400:#2b67e5;--color-primary-500:#3883fa;--color-primary-600:#59a5ff;--color-primary-700:#8ec6ff;--color-primary-800:#bcdcff;--color-primary-900:#d9eaff;--color-primary-950:#eef6ff;--color-primary-50-rgb:20,36,87;--color-primary-100-rgb:25,56,143;--color-primary-200-rgb:23,61,182;--color-primary-300-rgb:20,76,225;--color-primary-400-rgb:43,103,229;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:89,165,255;--color-primary-700-rgb:142,198,255;--color-primary-800-rgb:188,220,255;--color-primary-900-rgb:217,234,255;--color-primary-950-rgb:238,246,255;--color-secondary-50:#062a4b;--color-secondary-100:#046bab;--color-secondary-200:#078ada;--color-secondary-300:#1099ed;--color-secondary-400:#18a6fd;--color-secondary-500:#37b2fe;--color-secondary-600:#60c2ff;--color-secondary-700:#77cbff;--color-secondary-800:#9bd9ff;--color-secondary-900:#cdecff;--color-secondary-950:#e7f6ff;--color-secondary-50-rgb:6,42,75;--color-secondary-100-rgb:4,107,171;--color-secondary-200-rgb:7,138,218;--color-secondary-300-rgb:16,153,237;--color-secondary-400-rgb:24,166,253;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:96,194,255;--color-secondary-700-rgb:119,203,255;--color-secondary-800-rgb:155,217,255;--color-secondary-900-rgb:205,236,255;--color-secondary-950-rgb:231,246,255;--color-success-50:#186c4e;--color-success-100:#0e8d60;--color-success-200:#0ca76f;--color-success-300:#0dbb7d;--color-success-400:#22c98d;--color-success-500:#48d1a0;--color-success-600:#7adfba;--color-success-700:#b1ecd6;--color-success-800:#d0f6e8;--color-success-900:#ecfff8;--color-success-50-rgb:24,108,78;--color-success-100-rgb:14,141,96;--color-success-200-rgb:12,167,111;--color-success-300-rgb:13,187,125;--color-success-400-rgb:34,201,141;--color-success-500-rgb:72,209,160;--color-success-600-rgb:122,223,186;--color-success-700-rgb:177,236,214;--color-success-800-rgb:208,246,232;--color-success-900-rgb:236,255,248;--color-warning-50:#af5f01;--color-warning-100:#d17100;--color-warning-200:#ed8307;--color-warning-300:#f38f19;--color-warning-400:#ff9f46;--color-warning-500:#ffaf65;--color-warning-600:#ffbc7e;--color-warning-700:#ffd2a9;--color-warning-800:#ffecdb;--color-warning-900:#fff4ea;--color-warning-50-rgb:175,95,1;--color-warning-100-rgb:209,113,0;--color-warning-200-rgb:237,131,7;--color-warning-300-rgb:243,143,25;--color-warning-400-rgb:255,159,70;--color-warning-500-rgb:255,175,101;--color-warning-600-rgb:255,188,126;--color-warning-700-rgb:255,210,169;--color-warning-800-rgb:255,236,219;--color-warning-900-rgb:255,244,234;--color-danger-50:#a20606;--color-danger-100:#ba1313;--color-danger-200:#d91b1b;--color-danger-300:#fb2b2b;--color-danger-400:#fc5959;--color-danger-500:#ff7c7c;--color-danger-600:#ff9292;--color-danger-700:#ffb1b1;--color-danger-800:#ffd5d5;--color-danger-900:#ffebeb;--color-danger-50-rgb:162,6,6;--color-danger-100-rgb:186,19,19;--color-danger-200-rgb:217,27,27;--color-danger-300-rgb:251,43,43;--color-danger-400-rgb:252,89,89;--color-danger-500-rgb:255,124,124;--color-danger-600-rgb:255,146,146;--color-danger-700-rgb:255,177,177;--color-danger-800-rgb:255,213,213;--color-danger-900-rgb:255,235,235;--color-important-50:#611700;--color-important-100:#c83509;--color-important-200:#ff4912;--color-important-300:#ff6f42;--color-important-400:#ff8058;--color-important-500:#ff8c68;--color-important-600:#ffb29b;--color-important-700:#ffcebf;--color-important-800:#ffe2d9;--color-important-900:#fff8f5;--color-important-50-rgb:97,23,0;--color-important-100-rgb:200,53,9;--color-important-200-rgb:255,73,18;--color-important-300-rgb:255,111,66;--color-important-400-rgb:255,128,88;--color-important-500-rgb:255,140,104;--color-important-600-rgb:255,178,155;--color-important-700-rgb:255,206,191;--color-important-800-rgb:255,226,217;--color-important-900-rgb:255,248,245;--color-special-50:#30216e;--color-special-100:#452da5;--color-special-200:#513baa;--color-special-300:#7055df;--color-special-400:#8166ee;--color-special-500:#8a6ff5;--color-special-600:#a38cff;--color-special-700:#c4b6ff;--color-special-800:#e4dff7;--color-special-900:#efecfa;--color-special-50-rgb:48,33,110;--color-special-100-rgb:69,45,165;--color-special-200-rgb:81,59,170;--color-special-300-rgb:112,85,223;--color-special-400-rgb:129,102,238;--color-special-500-rgb:138,111,245;--color-special-600-rgb:163,140,255;--color-special-700-rgb:196,182,255;--color-special-800-rgb:228,223,247;--color-special-900-rgb:239,236,250;--color-canvas:#0b0f18;--color-inverse:#fff;--color-surface:#353d57;--color-surface-light:#30394a;--color-surface-strong:#3d4667;--color-fore:#ebedf3;--color-focus:#173db6;--color-link:#59a5ff;--color-link-hover:#3883fa;--color-link-visited:#bcdcff;--color-link-active:#bcdcff;--color-placeholder:#4a577f;--color-border:#353d57;--color-border-strong:#3d4667;--color-border-light:#30394a;--color-canvas-rgb:11,15,24;--color-inverse-rgb:255,255,255;--color-surface-rgb:53,61,87;--color-surface-light-rgb:48,57,74;--color-surface-strong-rgb:61,70,103;--color-fore-rgb:235,237,243;--color-focus-rgb:23,61,182;--color-link-rgb:89,165,255;--color-link-hover-rgb:56,131,250;--color-link-visited-rgb:188,220,255;--color-link-active-rgb:188,220,255;--color-placeholder-rgb:74,87,127;--color-border-rgb:53,61,87;--color-border-strong-rgb:61,70,103;--color-border-light-rgb:48,57,74}}*,:after,:before{--tw-border-opacity:1;--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity))}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }html{font-size:var(--font-size-root)}body{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));font-size:.8125rem;line-height:1.5384615385}.dark,body{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}:root{--font-h1-size:2.25rem}a,a.disabled:hover{--tw-text-opacity:1;color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}a:hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}a:focus-visible{outline-color:rgb(var(--color-focus-rgb));outline-offset:2px;outline-width:2px}.code,code{--tw-text-opacity:1;background-color:rgba(var(--color-important-500-rgb),.1);border-radius:var(--radius);color:rgba(var(--color-important-500-rgb),var(--tw-text-opacity));padding-left:.25rem;padding-right:.25rem}pre{font-size:.75rem;line-height:1rem;overflow:auto;padding:.5rem}pre code{background-color:transparent;color:inherit;padding:0}samp,var{font-weight:700}.blockquote,blockquote{text-wrap:balance;border-left-width:4px;font-size:.875rem;line-height:1.3rem;padding-left:.75rem}.blockquote figcaption,blockquote figcaption{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{text-wrap:balance;font-weight:700;line-height:1.5}.h1,h1{font-size:1.75rem}.h2,h2{font-size:1.5rem}.h3,h3{font-size:1.25rem}.h4,h4{font-size:1rem}.h5,h5{font-size:.875rem}.h6,h6{font-size:.75rem}ul{list-style-type:disc}ol,ul{padding-left:1.5em}ol{list-style-type:decimal}dt{font-weight:700}dd{padding-left:2em}.article{font-size:.875rem;line-height:1.75}.article audio,.article blockquote,.article figure,.article h1,.article h2,.article h3,.article h4,.article img,.article ol,.article p,.article table,.article ul,.article video{margin-bottom:.5em;margin-top:.5em}.article hr{margin-bottom:1.5em;margin-top:1.5em}.article table{border-width:1px}.article td,.article th{border-bottom-width:1px;padding:.25rem .75rem}.article thead{background-color:var(--table-head-bg,var(--color-gray-100))}.article ol *,.article table *,.article ul *{margin-bottom:0;margin-top:0}.article pre{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));border-radius:var(--radius);border-width:1px}:root{--alert-bg:var(--color-surface)}.alert{align-items:center;background-color:var(--alert-bg);border-radius:var(--radius);display:flex;gap:.75rem;padding:.5rem .75rem}.alert-content{display:flex;flex:1 1 auto;flex-direction:column;gap:1rem}.alert-close{margin-bottom:-.375rem;margin-right:-.5rem;margin-top:-.375rem}.alert-link{color:inherit;font-weight:700}.alert-link:hover{color:inherit;text-decoration-line:underline}.alert-heading{font-weight:700;margin:0}.alert-text{flex:1 1 auto;white-space:pre-line}.alert-actions{align-items:center;display:flex;gap:.5rem}:root{--breadcrumb-divider:"/";--breadcrumb-divider-color:var(--color-gray-500);--breadcrumb-color-active:var(--color-gray-500)}.breadcrumb{display:flex;gap:1.25rem;list-style-type:none;padding-left:0}.breadcrumb>li{position:relative}.breadcrumb>li+li:before{color:var(--breadcrumb-divider-color);content:var(--breadcrumb-divider);display:block;left:-1.25rem;position:absolute;text-align:center;width:1.25rem}.breadcrumb>.active{color:var(--breadcrumb-color-active)}:root{--btn-radius:var(--radius);--btn-bg:var(--color-surface);--btn-border-color:var(--color-gray-300)}.btn{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--btn-border-color);--state-active-opacity:1;align-items:center;background-color:var(--btn-bg);border-radius:var(--btn-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;gap:.375rem;height:2rem;justify-content:center;padding-left:.75rem;padding-right:.75rem;white-space:nowrap}.btn,.btn-default:hover{color:inherit}.btn-link{--tw-text-opacity:1;--tw-ring-color:transparent;color:rgba(var(--color-link-rgb),var(--tw-text-opacity));text-decoration-line:underline;text-underline-offset:2px}.btn-link:visited{color:rgba(var(--color-link-visited-rgb),var(--tw-text-opacity))}.btn-link:hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}.btn-link{--btn-bg:transparent}.btn.size-xs,.size-xs>.btn{font-size:.75rem;height:1.25rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem}.btn.size-sm,.size-sm>.btn{font-size:.75rem;height:1.5rem;line-height:1rem}.btn.size-md,.btn.size-sm,.size-md>.btn,.size-sm>.btn{padding-left:.5rem;padding-right:.5rem}.btn.size-md,.size-md>.btn{height:1.75rem}.btn.size-lg,.size-lg>.btn{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:1rem;padding-right:1rem}.btn.size-xl,.size-xl>.btn{font-size:1.125rem;height:3rem;line-height:1.75rem;padding-left:1.25rem;padding-right:1.25rem}.btn.square{aspect-ratio:1/1;gap:.125rem;padding-left:0;padding-right:0}.btn.btn-caret{padding-left:.25rem;padding-right:.25rem}.btn.btn-wide{min-width:80px}:root{--checkbox-size:12px;--checkbox-color:var(--color-primary-500)}.checkbox,.radio{align-items:center;cursor:pointer;display:flex;gap:.375rem;min-height:20px}.checkbox>input[type=checkbox],.radio>input[type=radio]{accent-color:rgb(var(--color-primary-500-rgb));border-radius:var(--radius-lg)}.checkbox-primary,.radio-primary{display:flex;gap:.375rem;min-height:20px;position:relative}.checkbox-primary>input[type=checkbox],.radio-primary>input[type=radio]{inset:0;opacity:0;position:absolute}.checkbox-primary>label,.radio-primary>label{cursor:pointer;padding-left:calc(var(--checkbox-size) + 8px);position:relative}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{--tw-content:"";content:var(--tw-content);display:block;height:var(--checkbox-size);left:0;position:absolute;top:calc((20px - var(--checkbox-size))/2);transition-duration:.15s;transition-property:transform,background-color,color,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--checkbox-size)}.checkbox-primary>label:before{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius-sm);border-width:1px}.checkbox-primary>label:after{--tw-scale-x:.9;--tw-scale-y:.9;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTkgMjAuNDItNi4yMS02LjIxIDIuODMtMi44M0w5IDE0Ljc3bDkuODgtOS44OSAyLjgzIDIuODN6Ii8+PC9zdmc+");transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.radio-primary>label:before{--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius-full);border-width:1px}.radio-primary>label:after{--checkbox-radio-size:calc(var(--checkbox-size)*2/3);background-color:var(--checkbox-color);border-radius:var(--radius-full);height:var(--checkbox-radio-size);left:calc((var(--checkbox-size) - var(--checkbox-radio-size))/2);opacity:0;top:calc((20px - var(--checkbox-radio-size))/2);width:var(--checkbox-radio-size)}.checkbox-primary>label:hover:before,.radio-primary>label:hover:before{border-color:var(--checkbox-color)}.checkbox-primary.focus>label:before,.checkbox-primary>input[type=checkbox]:focus+label:before,.radio-primary.focus>label:before,.radio-primary>input[type=radio]:focus+label:before{border-color:var(--checkbox-color);outline-color:rgb(var(--color-focus-rgb));outline-style:solid;outline-width:2px}.checkbox-primary.checked>label:before,.checkbox-primary>input[type=checkbox]:checked+label:before{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.radio-primary.checked>label:before,.radio-primary>input[type=radio]:checked+label:before{border-color:var(--checkbox-color)}.checkbox-primary.checked>label:after,.checkbox-primary>input[type=checkbox]:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input[type=radio]:checked+label:after{opacity:1}.checkbox-primary.disabled>label,.checkbox-primary>input[type=checkbox]:disabled+label,.radio-primary.disabled>label,.radio-primary>input[type=radio]:disabled+label{--tw-grayscale:grayscale(100%);cursor:not-allowed;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:.7;pointer-events:none}.checkbox-primary.indeterminate>label:after,.checkbox-primary>input[type=checkbox]:indeterminate+label:after{--tw-border-opacity:1;background-color:var(--checkbox-color);background-image:none;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));border-width:calc((var(--checkbox-size) - 2px)/2) 2px;opacity:1}.check-list{flex-direction:column;gap:.5rem}.check-list,.check-list-inline{display:flex;padding-bottom:.375rem;padding-top:.375rem}.check-list-inline{align-items:center;-moz-column-gap:1rem;column-gap:1rem;flex-direction:row;flex-wrap:wrap;row-gap:.5rem}.switch{display:flex;gap:.375rem;min-height:20px;padding-left:2.5rem;position:relative}.switch>input{inset:0;opacity:0;position:absolute}.switch>label:after,.switch>label:before{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-border-strong-rgb),var(--tw-border-opacity));border-radius:var(--radius-full);border-width:1px;content:var(--tw-content);height:1rem;left:0;position:absolute;top:.125rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.switch>label:before{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer}.switch>label:hover:before{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity))}.switch>label:after{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);height:.75rem;left:.125rem;top:.25rem;width:.75rem}.switch>input:checked+label:before{background-color:var(--checkbox-color);border-color:rgba(var(--color-inverse-rgb),.2)}.switch>input:checked+label:after{color:var(--checkbox-color);left:18px}.switch.focus>label:before,.switch>input:focus+label:before{border-color:var(--checkbox-color);outline-color:rgb(var(--color-focus-rgb));outline-style:solid;outline-width:2px}.switch.disabled>label:before,.switch>input:disabled+label:before{--tw-grayscale:grayscale(100%);cursor:not-allowed;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:.7;pointer-events:none}:root{--form-control-radius:var(--radius);--form-control-border:var(--color-border);--form-control-focus:var(--color-primary-500);--form-control-disabled:var(--color-surface);--form-control-readonly:var(--color-surface)}.dark{--form-control-border:var(--color-border-strong)}input::-moz-placeholder,textarea::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-placeholder-opacity))}input::placeholder,textarea::placeholder{--tw-placeholder-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-placeholder-opacity))}.form-control{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--form-control-border);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--form-control-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:block;height:2rem;outline-color:transparent;outline-style:solid;outline-width:1px;padding:.25rem .5rem;transition-duration:.15s;transition-property:outline,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.form-control.focus,.form-control:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-focus-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.3;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline-color:var(--form-control-focus)}.form-control.disabled,.form-control[disabled]{background-color:var(--form-control-disabled);opacity:1}.form-control.readonly,.form-control[readonly]{background-color:var(--form-control-readonly)}select{-webkit-appearance:none;background-image:url("data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==");background-position:right 8px top 50%;background-repeat:no-repeat;background-size:8px auto;padding-right:1rem}select.form-control[multiple]{background-image:none}textarea.form-control{height:auto;min-height:32px}input[type=file].form-control{padding:.125rem}input[type=file].form-control::-webkit-file-upload-button{-webkit-appearance:none;appearance:none;border-radius:inherit;border-style:none;cursor:pointer;height:1.75rem;padding-left:.5rem;padding-right:.5rem}input[type=file].form-control::-webkit-file-upload-button:hover{background-color:rgba(var(--color-black-rgb),.1)}.has-error .form-control,.has-error.form-control{--tw-ring-color:rgba(var(--color-danger-500-rgb),0.6)}.has-error .form-control.focus,.has-error .form-control:focus,.has-error.form-control.focus,.has-error.form-control:focus{--tw-ring-color:rgba(var(--color-danger-500-rgb),0.1);outline-color:rgb(var(--color-danger-500-rgb))}.has-warning .form-control,.has-warning.form-control{--tw-ring-color:rgba(var(--color-warning-500-rgb),0.6)}.has-warning .form-control.focus,.has-warning .form-control:focus,.has-warning.form-control.focus,.has-warning.form-control:focus{--tw-ring-color:rgba(var(--color-warning-500-rgb),0.2);outline-color:rgb(var(--color-warning-500-rgb))}.has-success .form-control,.has-success.form-control{--tw-ring-color:rgba(var(--color-success-500-rgb),0.6)}.has-success .form-control.focus,.has-success .form-control:focus,.has-success.form-control.focus,.has-success.form-control:focus{--tw-ring-color:rgba(var(--color-success-500-rgb),0.2);outline-color:rgb(var(--color-success-500-rgb))}.form-control.size-sm,.size-sm>.form-control{font-size:.75rem;height:1.5rem;line-height:1rem;padding-left:.5rem;padding-right:.5rem}.form-control.size-md,.size-md>.form-control{height:1.75rem;padding-left:.5rem;padding-right:.5rem}.form-control.size-lg,.size-lg>.form-control{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:.75rem;padding-right:.75rem}:root{--input-group-addon-bg:var(--color-gray-50)}.input-group{align-items:stretch;display:flex}.input-group>.form-control,.input-group>.input-control{flex:1 1 auto;z-index:1}.input-group-addon{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--form-control-border);align-items:center;background-color:var(--input-group-addon-bg);border-radius:var(--form-control-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;flex:none;height:2rem;padding-left:.5rem;padding-right:.5rem;z-index:0}.size-sm>.input-group-addon{font-size:.75rem;height:1.5rem;line-height:1rem;padding-left:.5rem;padding-right:.5rem}.size-lg>.input-group-addon{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:.75rem;padding-right:.75rem}.input-group-control{flex:1 1 auto}.input-group>*+*,.input-group>*+* .form-control{border-bottom-left-radius:var(--radius-none);border-top-left-radius:var(--radius-none)}.input-group>:not(:last-child),.input-group>:not(:last-child) .form-control{border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none)}.input-group .btn:focus-visible,.input-group .form-control:focus{z-index:2}:root{--form-tip-color:var(--color-gray-400);--form-label-color:var(--color-gray-700);--form-horz-label-width:6rem;--form-grid-gap-x:1.25rem;--form-grid-gap-y:.75rem}.form{flex-direction:column;gap:1rem}.form,.form-label{display:flex}.form-label{align-items:center;color:var(--form-label-color);flex-direction:row;gap:.25rem;height:2rem;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.form-label.required:after{--tw-translate-y:0.125rem;--tw-scale-x:1.25;--tw-scale-y:1.25;--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity));content:"*";display:inline-block;margin-left:.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.no-required .form-label.required:after{display:none}.form-label-actions{flex:1 1 auto;justify-content:flex-end}.form-label>.checkbox-primary{margin-left:.75rem}.form-tip{color:var(--form-tip-color);display:block;margin-top:.25rem}.has-error .form-tip{--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity))}.has-warning .form-tip{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.has-success .form-tip{--tw-text-opacity:1;color:rgba(var(--color-success-500-rgb),var(--tw-text-opacity))}.form-actions{display:flex;flex-direction:row;gap:1rem;justify-content:center}.form-grid{--form-grid-gap-x-half:calc(var(--form-grid-gap-x)/2);--form-grid-gap-y-half:calc(var(--form-grid-gap-y)/2);align-items:flex-start;flex-direction:row;flex-wrap:wrap;gap:0}.form-grid .form-group{padding:var(--form-grid-gap-y-half) var(--form-grid-gap-x-half)}.form-grid .form-label.required:after{margin-left:0;order:-9999}.form-grid .form-label .checkbox{margin-left:.75rem;margin-right:.75rem}.form-grid .has-wrap-after:after{--tw-content:"";content:var(--tw-content);display:block;width:100%}.form-grid-wrap{width:100%}.form-grid-row{display:flex;flex-direction:row;padding-bottom:var(--form-grid-gap-y-half);padding-top:var(--form-grid-gap-y-half);position:relative;width:100%}.form-grid-col{padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half)}.form-grid .form-actions{gap:1.5rem;justify-content:center;padding:var(--form-grid-gap-y) var(--form-grid-gap-x-half);width:100%}.form-grid .form-actions.is-pinned{border-top-width:1px}.form-horz .form-group,.form-horz .form-row{align-items:flex-start;display:flex;flex-direction:row}.form-horz .form-group{flex-grow:1;flex-wrap:wrap;min-height:32px;min-width:0;padding-left:var(--form-horz-label-width);position:relative}.form-horz .form-group[class*=" w-"],.form-horz .form-group[class^=w-]{flex:none}.form-horz .form-group>*{min-width:0}.form-horz .form-group.no-label{padding-left:0}.form-horz .form-group.no-label>.check-list-inline{padding-left:1rem;padding-right:1rem}.form-horz .form-label{justify-content:flex-end;left:0;padding-left:1rem;padding-right:.5rem;position:absolute;top:0;width:var(--form-horz-label-width)}.form-horz .form-label.required:after{margin-left:0;order:-9999}.form-horz .form-tip{width:100%}.form-horz .form-tip,.form-horz .input-control,.form-horz .input-group{flex:1 1 auto}.form .form-group-wrapper,.form-horz .form-group-wrapper{flex:1 1 auto;min-width:0;width:100%;z-index:1}.form .form-group-wrapper.flex-none,.form-horz .form-group-wrapper.flex-none{flex:none}.form fieldset>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.form fieldset{padding-bottom:1rem;padding-left:1rem}.form-grid fieldset>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.form legend{--tw-border-opacity:1;border-bottom-color:rgba(var(--color-primary-100-rgb),var(--tw-border-opacity));border-bottom-width:1px;display:flex;justify-content:flex-start;margin-left:-1rem;width:100%;width:calc(100% + 1rem)}.form-title{align-items:center;background-color:rgba(var(--color-primary-50-rgb),.5);display:flex;font-weight:700;height:1.75rem;padding-left:.75rem;padding-right:.75rem}:root{--input-control-fix-width-sm:2rem;--input-control-fix-width:4.375rem;--input-control-fix-width-lg:6.75rem}.input-control{--input-control-prefix:8px;--input-control-suffix:8px;position:relative}.input-control-prefix,.input-control-suffix{align-items:center;display:flex;height:100%;left:0;opacity:.5;padding-left:.5rem;padding-right:.5rem;position:absolute;top:0;white-space:nowrap;width:var(--input-control-prefix);z-index:1}.input-control-suffix{justify-content:flex-end;left:auto;right:0;width:var(--input-control-suffix)}.form-control:focus+.input-control-prefix,.form-control:focus+.input-control-suffix{opacity:1}.input-control>.form-control{padding-left:var(--input-control-prefix);padding-right:var(--input-control-suffix)}.input-control>select.form-control{background-position-x:calc(100% - var(--input-control-suffix) - 8px);padding-right:calc(var(--input-control-suffix) + 20px)}.has-prefix{--input-control-prefix:var(--input-control-fix-width)}.has-suffix{--input-control-suffix:var(--input-control-fix-width)}.has-prefix-sm{--input-control-prefix:var(--input-control-fix-width-sm)}.has-suffix-sm{--input-control-suffix:var(--input-control-fix-width-sm)}.has-prefix-lg{--input-control-prefix:var(--input-control-fix-width-lg)}.has-suffix-lg{--input-control-suffix:var(--input-control-fix-width-lg)}.has-prefix-icon{--input-control-prefix:32px}.has-suffix-icon{--input-control-suffix:32px}.input-control.has-prefix-icon{--input-control-prefix:32px}.input-control.has-suffix-icon{--input-control-suffix:32px}.input-control.has-prefix-icon>.input-control-prefix,.input-control.has-suffix-icon>.input-control-suffix{justify-content:center;padding:0}.input-control.size-sm>.form-control,.input-control.size-sm>.input-control-prefix,.input-control.size-sm>.input-control-suffix{font-size:.75rem;line-height:1rem}.input-control.size-lg>.form-control,.input-control.size-lg>.input-control-prefix,.input-control.size-lg>.input-control-suffix{font-size:1rem;line-height:1.5rem}:root{--label-bg:var(--color-gray-50);--label-border-color:var(--color-gray-500);--label-color:var(--color-gray-500);--label-radius:var(--radius)}.label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--label-border-color);align-items:center;background-color:var(--label-bg);border-radius:var(--label-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--label-color);display:inline-flex;font-size:.75rem;height:1.25rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem;white-space:pre-line}.label.size-lg{font-size:.8125rem;height:1.5rem;line-height:1.25rem;padding-left:.5rem;padding-right:.5rem}.label.size-sm{height:1rem}.label-dot{aspect-ratio:1/1;border-radius:var(--radius-full);height:.5rem;padding-left:0;padding-right:0}.caret,.caret-down,.caret-left,.caret-right,.caret-up{border:var(--caret-size,4px) solid transparent;display:inline-block;height:0;opacity:var(--caret-opacity,.5);width:0}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.caret,.caret-down{border-bottom-width:0;border-top-color:currentColor}.caret-up{border-bottom-color:currentColor;border-top-width:0}.caret-right{border-left-color:currentColor;border-right-width:0}.caret-left{border-left-width:0;border-right-color:currentColor}.listitem{align-items:center;border-radius:var(--radius);display:flex;flex-direction:row;flex-wrap:nowrap;gap:.5rem;padding:.25rem}.listitem.selected{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.listitem.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.item-actions,.item-avatar,.item-icon,.item-trailing,.item-trailing-icon{flex:none}.item-icon.icon-EMPTY{display:none}.item-subtitle{font-size:.75rem;line-height:1rem;opacity:.8}.item-content,.item-text{flex:1 1 auto;min-width:0}.item-leading,.item-trailing{align-items:center;display:flex;flex:none;gap:.5rem}.item-checkbox{margin-right:-.5rem}.item-content{align-items:center;display:flex;gap:.5rem}.multiline>.item-content{align-items:flex-start;flex-direction:column;gap:.25rem}.list{list-style-type:none;padding-left:0}.list-heading-inner .item-title{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-weight:700}.list.is-nested-sub{padding-left:var(--list-indent)}.is-nested-collapsed{display:none}.nested-toggle-icon{align-items:center;border-radius:var(--radius);display:flex;height:1rem;justify-content:center;margin-right:-.25rem;width:1rem}.magnifier{display:inline-block;height:1em;position:relative;width:1em}.magnifier:after,.magnifier:before{border-radius:var(--radius-full);content:"";display:block;position:absolute}.magnifier:before{border:1px solid;height:.75em;width:.75em}.magnifier:after{--tw-rotate:45deg;background-color:currentColor;height:1px;left:.55em;top:.7em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5em}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.search-box.compact.has-prefix-icon{--input-control-prefix:24px}.search-box.compact.has-suffix-icon{--input-control-suffix:24px}:root{--menu-bg:var(--color-canvas);--menu-active-bg:var(--color-primary-500);--menu-active-color:var(--color-canvas);--menu-selected-bg:var(--color-primary-50);--menu-selected-color:var(--color-primary-500);--menu-icon-opacity:.5;--menu-icon-margin:1.75rem;--menu-min-width:3rem;--menu-heading-color:var(--color-gray-500)}.menu{background:var(--menu-bg);max-width:var(--menu-max-width);min-width:var(--menu-min-width);padding:.5rem}.menu-wrapper{display:flex;flex-direction:column;min-height:0}.menu-wrapper>.menu{flex:1 1 auto;min-height:0;overflow:auto}.menu-item>.item-inner,.menu-item>a{align-items:center;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;gap:.5rem;justify-content:space-between;overflow:hidden;padding:.25rem .5rem;position:relative;text-overflow:ellipsis;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap}.menu-item>.selected{background:var(--menu-selected-bg);color:var(--menu-selected-color)}.menu-item>.active,.menu-item>a.hover,.menu-item>a:hover{background:var(--menu-active-bg);color:var(--menu-active-color)}.menu-item.disabled>a:hover,.menu-item>a.disabled:hover{background-color:inherit;color:inherit}.menu-item>a>.item-title{flex:1 1 auto}.menu>.divider{margin:.5rem .25rem}.menu-heading{align-items:center;color:var(--menu-heading-color);display:flex;font-size:.75rem;font-weight:700;height:2rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem}.has-icons>.menu-item>a>.item-icon{align-items:center;display:flex;height:1rem;justify-content:center;opacity:var(--menu-icon-opacity);width:1rem}.menu-nested{--menu-indent:10px}.menu-nested .menu{background-color:transparent;margin-bottom:-.5rem;margin-left:var(--menu-indent);margin-top:-.5rem;padding-right:0}.menu-nested .menu-item>.item-inner{padding-left:0}.menu.compact .menu-item>a{padding-bottom:.125rem;padding-top:.125rem}.menu.compact .menu-heading{height:1.75rem}.search-menu-header{padding:.5rem .5rem .125rem}.search-menu-footer{padding:.125rem .5rem .5rem}.search-menu .item.is-not-match{display:none}.search-menu .item.is-not-match.has-match-child{display:list-item}.search-menu .item.is-not-match.has-match-child>.item-inner{opacity:.5;pointer-events:none}.search-menu.no-toggle-on-search .nested-toggle-icon{pointer-events:none}.search-menu .is-match-keys{font-weight:700;text-decoration-line:underline}.search-menu-no-match-hint{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));display:none;font-size:.75rem;line-height:1rem;padding:.5rem}.no-match-child .search-menu-no-match-hint{display:block}.no-match-child>.menu{display:none}:root{--alert-bg:var(--color-surface)}.alert{align-items:center;background-color:var(--alert-bg);border-radius:var(--radius);display:flex;gap:.75rem;padding:.5rem .75rem}.alert-content{display:flex;flex:1 1 auto;flex-direction:column;gap:1rem}.alert-close{margin-bottom:-.375rem;margin-right:-.5rem;margin-top:-.375rem}.alert-link{color:inherit;font-weight:700}.alert-link:hover{color:inherit;text-decoration-line:underline}.alert-heading{font-weight:700;margin:0}.alert-text{flex:1 1 auto;white-space:pre-line}.alert-actions{align-items:center;display:flex;gap:.5rem}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.messagers{align-items:flex-end;display:flex;flex-direction:column;gap:.5rem;inset:0;justify-content:flex-end;padding:1rem;pointer-events:none;position:fixed;z-index:1900}.messagers-top-left,.messagers-top-right{justify-content:flex-start}.messagers-bottom-left,.messagers-top-left{align-items:flex-start}.messagers-bottom,.messagers-center,.messagers-top{align-items:center}.messagers-top,.messagers-top-left,.messagers-top-right{justify-content:flex-start}.messagers-center{justify-content:center}.messager{--tw-text-opacity:1;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-inverse-rgb),.8);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));pointer-events:auto;transition-duration:.3s}:root{--progress-radius:var(--radius);--progress-striped-size:40px;--progress-bg:var(--color-surface);--progress-bar-color:var(--color-primary-500)}.progress{background:var(--progress-bg);border-radius:var(--progress-radius);display:flex;height:1.25rem}.progress-bar{background:var(--progress-bar-color);height:100%}.progress-striped>.progress-bar{background-image:linear-gradient(45deg,rgba(var(--color-canvas-rgb),.15) 25%,transparent 25%,transparent 50%,rgba(var(--color-canvas-rgb),.15) 50%,rgba(var(--color-canvas-rgb),.15) 75%,transparent 75%,transparent);background-size:var(--progress-striped-size) var(--progress-striped-size)}.progress>.progress-bar:first-child{border-bottom-left-radius:inherit;border-top-left-radius:inherit}.progress>.progress-bar:last-child{border-bottom-right-radius:inherit;border-top-right-radius:inherit}.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}:root{--scrollbar-size:10px;--scrollbar-opacity:.6;--scrollbar-bg:rgba(var(--color-inverse-rgb),.15);--scrollbar-inset:inset 0 0 0 1px rgba(var(--color-inverse-rgb),.05);--scrollbar-bar-bg:rgba(var(--color-inverse-rgb),.3);--scrollbar-hover-bg:rgba(var(--color-inverse-rgb),.4);--scrollbar-drag-bg:rgba(var(--color-inverse-rgb),.5);--scrollbar-radius:var(--radius-sm);--scrollbar-duration:.7s}::-webkit-scrollbar{height:var(--scrollbar-size);width:var(--scrollbar-size)}::-webkit-scrollbar-track{box-shadow:var(--scrollbar-shadow);-webkit-transition:background-color var(--scrollbar-duration);transition:background-color var(--scrollbar-duration)}::-webkit-scrollbar-track:hover,:hover::-webkit-scrollbar-track{background:var(--scrollbar-bg)}::-webkit-scrollbar-thumb{background:var(--scrollbar-bar-bg);border-radius:var(--scrollbar-radius);min-height:var(--scrollbar-size);-webkit-transition:var(--scrollbar-duration);transition:var(--scrollbar-duration);-webkit-transition-property:background-color;transition-property:background-color}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover-bg)}::-webkit-scrollbar-thumb:active{background:var(--scrollbar-drag-bg)}.scrollbar-thin::-webkit-scrollbar{height:calc(var(--scrollbar-size)/2);width:calc(var(--scrollbar-size)/2)}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(./icons/ZentaoIcon.eot);src:url(./icons/ZentaoIcon.woff) format("woff"),url(./icons/ZentaoIcon.ttf) format("truetype"),url(./icons/ZentaoIcon.svg#regular) format("svg")}.icon,[class*=" icon-"],[class^=icon-]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon:before{display:inline-block;min-width:14px;text-align:center}.icon-xs:before{font-size:.7em}.icon-sm:before{font-size:.8em}.icon-lg:before{font-size:1.25em;vertical-align:-10%}.icon-2x{font-size:28px}.icon-3x{font-size:42px}.icon-4x{font-size:56px}.icon-5x{font-size:70px}.icon-run{position:relative}.icon-run:before{opacity:.5}.icon-run:after{bottom:0;content:"\ea07";display:block;left:0;position:absolute;right:0;text-align:center;top:0}.icon-guihua:before{content:"\ea02"}.icon-memory:before{content:"\e9fd"}.icon-cpu:before{content:"\e9fe"}.icon-pause-pure:before{content:"\e9ff"}.icon-exclamation-pure:before{content:"\ea00"}.icon-zentao:before{content:"\e901"}.icon-zentao-alt:before{content:"\e900"}.icon-safe:before{content:"\ea06"}.icon-ai:before{content:"\e983"}.icon-kanban:before{content:"\e997"}.icon-college:before{content:"\e9c8"}.icon-home:before,.icon-menu-my:before{content:"\e97a"}.icon-program:before{content:"\e9aa"}.icon-lightbulb-alt:before,.icon-product:before{content:"\e98f"}.icon-project:before,.icon-rocket:before{content:"\e99c"}.icon-run:before{content:"\e9a9"}.icon-run-alt:before{content:"\ea07"}.icon-test:before{content:"\e956"}.icon-devops:before,.icon-infinite:before{content:"\e9a3"}.icon-doc:before,.icon-menu-doc:before{content:"\e99b"}.icon-statistic:before{content:"\e999"}.icon-group:before,.icon-menu-users:before,.icon-persons:before,.icon-team:before{content:"\e97e"}.icon-assets:before,.icon-diamond:before{content:"\e9ae"}.icon-flow:before{content:"\e994"}.icon-backend:before,.icon-cog-outline:before{content:"\ea05"}.icon-help:before{content:"\e968"}.icon-download:before,.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-lightbulb:before{content:"\e91c"}.icon-close:before{content:"\e936"}.icon-check:before{content:"\e5ca"}.icon-minus:before{content:"\e926"}.icon-expand-alt:before{content:"\e6f1"}.icon-collapse-alt:before{content:"\e6f2"}.icon-fullscreen:before{content:"\e96b"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-exclamation-sign:before{content:"\e930"}.icon-info-sign:before{content:"\e9d5"}.icon-flag:before{content:"\e937"}.icon-check-circle:before{content:"\e92f"}.icon-check-sign:before{content:"\e938"}.icon-chart-pie:before{content:"\e95b"}.icon-history:before{content:"\e95f"}.icon-pencil:before{content:"\e254"}.icon-search:before{content:"\e928"}.icon-restart:before{content:"\e95e"}.icon-cog:before{content:"\e93b"}.icon-chart-line:before{content:"\e95c"}.icon-bar-chart:before,.icon-chart-bar:before{content:"\e95d"}.icon-exchange:before{content:"\e927"}.icon-severity:before{content:"\e973"}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-severity-solid:before{content:"\e902"}.icon-chat-line:before{content:"\e998"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-chat:before,.icon-message:before{content:"\e940"}.icon-more:before{content:"\e744"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-columns:before{content:"\f0db"}.icon-envelope-o:before{content:"\e92a"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-angle-double-right:before{content:"\f101"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-text:before{content:"\e929"}.icon-share:before{content:"\f064"}.icon-format-list-bulleted:before{content:"\e9a8"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-productplan:before{content:"\e9fc"}.icon-aiux:before{content:"\e99e"}.icon-qc:before{content:"\e986"}.icon-qc-q:before{content:"\e985"}.icon-qc-c:before{content:"\e987"}.icon-sonarqube:before{content:"\e9ba"}.icon-market:before{content:"\ea01"}.icon-ztool:before{content:"\e9c1"}.icon-contacts:before{content:"\e9c3"}.icon-chats:before{content:"\e9c4"}.icon-ops:before{content:"\e903"}.icon-menu-backend:before{content:"\e993"}.icon-feedback:before{content:"\e991"}.icon-oa:before{content:"\e9a1"}.icon-more-circle:before{content:"\e988"}.icon-controls:before{content:"\e995"}.icon-account:before{content:"\e992"}.icon-about:before,.icon-info:before{content:"\e996"}.icon-exclamation:before{content:"\e9fa"}.icon-exit:before{content:"\e99a"}.icon-theme:before{content:"\e9a0"}.icon-globe:before,.icon-lang:before{content:"\f0ac"}.icon-template:before{content:"\e9fb"}.icon-seal:before{content:"\e9f8"}.icon-menu-arrow-left:before{content:"\e9f0"}.icon-menu-arrow-right:before{content:"\e9f1"}.icon-add-directory:before{content:"\e9ef"}.icon-design:before{content:"\e9ec"}.icon-download-alt:before{content:"\e9ea"}.icon-blame:before{content:"\e9e0"}.icon-draft-edit:before{content:"\e9dc"}.icon-sub-review-user:before{content:"\e9db"}.icon-sub-review:before{content:"\e9df"}.icon-ztf:before{content:"\e9dd"}.icon-save:before{content:"\e9d8"}.icon-list-box:before{content:"\e9b4"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-customer:before{content:"\e9d9"}.icon-or:before{content:"\ea0b"}.icon-manager:before{content:"\ea0c"}.icon-target:before{content:"\ea0a"}.icon-ipd:before{content:"\e9f9"}.icon-wiki-lib:before{content:"\e9f5"}.icon-annex-lib:before{content:"\e9f6"}.icon-interface-lib:before{content:"\e9f7"}.icon-has-authority-pack:before{content:"\e9f3"}.icon-without-authority-pack:before{content:"\e9f4"}.icon-data-structure:before{content:"\e9f2"}.icon-waterfallplus:before{content:"\e9ed"}.icon-agileplus:before{content:"\e9ee"}.icon-horn:before{content:"\e9eb"}.icon-resume:before{content:"\e9e9"}.icon-mirror:before{content:"\e9e6"}.icon-remote:before{content:"\e9e7"}.icon-moon:before{content:"\e9e8"}.icon-ticket:before{content:"\e9e1"}.icon-gantt-alt:before{content:"\e9e2"}.icon-tree:before{content:"\e9c9"}.icon-list:before{content:"\e9cb"}.icon-gantt:before{content:"\e9cc"}.icon-group-view:before{content:"\e9cd"}.icon-inherit-space:before{content:"\e9c2"}.icon-card-archive:before{content:"\e9b8"}.icon-col-archive:before{content:"\e9b9"}.icon-col-add-right:before{content:"\e9bb"}.icon-col-add-left:before{content:"\e9bc"}.icon-col-split:before{content:"\e9bd"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-lane:before{content:"\e9b1"}.icon-unpinned:before{content:"\ea08"}.icon-pinned:before{content:"\ea09"}.icon-support-ticket:before{content:"\ea04"}.icon-snap-house:before{content:"\e9e3"}.icon-wrench:before{content:"\e9e4"}.icon-desktop:before{content:"\e9e5"}.icon-back-circle:before{content:"\e9da"}.icon-back:before{content:"\e9d3"}.icon-shield:before{content:"\e9ca"}.icon-meh:before{content:"\e9ce"}.icon-frown:before{content:"\e9cf"}.icon-smile:before{content:"\e9d0"}.icon-unlock-solid:before{content:"\e9d1"}.icon-lock-solid:before{content:"\e9d2"}.icon-ver:before{content:"\e9c6"}.icon-publish:before,.icon-send:before{content:"\e9c7"}.icon-tag:before{content:"\e9be"}.icon-tag-lock:before{content:"\e9bf"}.icon-code-fork:before{content:"\f126"}.icon-branch-lock:before{content:"\e9c0"}.icon-groups:before{content:"\e9af"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-thumbs-up-solid:before{content:"\e9d6"}.icon-thumbs-down-solid:before{content:"\e9d7"}.icon-hash:before,.icon-version:before{content:"\e9ab"}.icon-p-square:before{content:"\e97b"}.icon-video-play:before{content:"\e97f"}.icon-plus-solid-circle:before{content:"\e974"}.icon-minuse-solid-circle:before{content:"\e9b6"}.icon-s:before{content:"\e975"}.icon-c:before{content:"\e976"}.icon-t:before{content:"\e977"}.icon-guide:before{content:"\e978"}.icon-todo:before{content:"\e979"}.icon-plus:before{content:"\e925"}.icon-side-left:before{content:"\e9b3"}.icon-side-right:before{content:"\e9b2"}.icon-fullscreen-exit:before{content:"\e972"}.icon-alert:before{content:"\e99f"}.icon-undo:before{content:"\e93f"}.icon-redo:before{content:"\e9d4"}.icon-swap:before{content:"\e9b0"}.icon-chat-solid:before{content:"\e9b5"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-size-height:before{content:"\e9c5"}.icon-upload-file:before{content:"\ea03"}.icon-file-log:before{content:"\e9de"}.icon-rich-text:before{content:"\e913"}.icon-markdown:before{content:"\e916"}.icon-excel:before{content:"\e933"}.icon-text-link:before{content:"\e94d"}.icon-ppt:before{content:"\e957"}.icon-word:before{content:"\e958"}.icon-doc-lib:before{content:"\e96f"}.icon-file-empty:before,.icon-file:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-menu-collapse:before{content:"\e980"}.icon-menu-expand:before{content:"\e981"}.icon-estimate:before{content:"\e9ac"}.icon-sprint:before{content:"\e9a2"}.icon-shield-check:before{content:"\e9a5"}.icon-ok:before{content:"\e9a6"}.icon-printer:before{content:"\e906"}.icon-bullhorn:before{content:"\e910"}.icon-person:before{content:"\e941"}.icon-fields:before{content:"\e989"}.icon-trigger:before{content:"\e98a"}.icon-layout:before{content:"\e98b"}.icon-audit:before{content:"\e98c"}.icon-ban-circle:before,.icon-cancel:before{content:"\e951"}.icon-eye:before{content:"\e94e"}.icon-eye-off:before{content:"\e96e"}.icon-unlock:before{content:"\e94f"}.icon-lock:before,.icon-private:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-hand-right:before{content:"\e907"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-play:before,.icon-start:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-alter:before,.icon-change:before{content:"\e970"}.icon-glasses:before,.icon-review:before{content:"\e914"}.icon-sitemap:before,.icon-testcase:before{content:"\e915"}.icon-pluses:before{content:"\e917"}.icon-report-list:before{content:"\e918"}.icon-active:before,.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-split:before{content:"\e98e"}.icon-calendar:before,.icon-delay:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-diff:before{content:"\e9b7"}.status-active,.status-asked,.status-normal,.status-unconfirmed,.status-wait{color:#313c52}.status-active.status-issue,.status-checking,.status-commenting,.status-confirmed,.status-doing{color:#ff6f42}.status-blocked,.status-hangup,.status-pause,.status-suspended{color:#b89664}.status-clarify,.status-draft{color:#8166ee}.status-noreview,.status-reviewing,.status-wait.status-testcase{color:#18a6fd}.status-active.status-risk,.status-changed,.status-changing,.status-fail{color:#fb2b2b}.status-checked,.status-done,.status-pass,.status-replied,.status-resolved,.status-success{color:#0dbb7d}.status-cancel,.status-canceled,.status-investigate{color:#838a9d}.status-canceled,.status-closed,.status-testtask.status-done{color:#9ea3b0}.pri,[class*=" pri-"],[class^=pri-]{--tw-text-opacity:1;border-color:currentColor;border-radius:var(--radius-full);border-width:1px;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity));display:inline-block;font-size:.75rem;height:1rem;line-height:1rem;line-height:14px;max-width:54px;min-width:16px;overflow:hidden;padding-left:.125rem;padding-right:.125rem;text-align:center;white-space:nowrap}.pri-1{color:rgb(255 73 18/var(--tw-text-opacity))}.pri-1,.pri-2{--tw-text-opacity:1}.pri-2{color:rgba(var(--color-warning-600-rgb),var(--tw-text-opacity))}.pri-3{color:rgb(59 130 246/var(--tw-text-opacity))}.pri-3,.pri-4{--tw-text-opacity:1}.pri-4{color:rgb(149 211 224/var(--tw-text-opacity))}.severity{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity));display:inline-block;font-size:.75rem;height:1rem;line-height:1rem;line-height:14px;max-width:54px;min-width:16px;overflow:hidden;padding-left:.125rem;padding-right:.125rem;position:relative;text-align:center;white-space:nowrap}.severity:before{--tw-content:attr(data-severity);background-color:currentColor;background-repeat:no-repeat;content:var(--tw-content);height:100%;left:0;-webkit-mask:url('data:image/svg+xml;charset=utf-8, ');mask:url('data:image/svg+xml;charset=utf-8, ');-webkit-mask-size:100% 100%;mask-size:100% 100%;position:absolute;top:0;width:100%;z-index:0}.severity:after,.severity:before{display:inline-block}.severity:after{--tw-scale-x:.75;--tw-scale-y:.75;content:attr(data-severity);line-height:20px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.severity[data-severity="1"]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.severity[data-severity="2"]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.severity[data-severity="3"]{--tw-text-opacity:1;color:rgb(250 174 26/var(--tw-text-opacity))}.severity[data-severity="4"]{--tw-text-opacity:1;color:rgb(184 150 100/var(--tw-text-opacity))}.severity[data-severity="5"]{--tw-text-opacity:1;color:rgb(158 163 176/var(--tw-text-opacity))}.severity-label{background-color:transparent}.severity-label:after,.severity-label:before{--tw-content:none;content:var(--tw-content)}.risk-high{color:rgb(220 38 38/var(--tw-text-opacity))}.risk-high,.risk-middle{--tw-text-opacity:1}.risk-middle{color:rgb(234 179 8/var(--tw-text-opacity))}.nav-feature{--nav-active-bg:rgba(var(--color-primary-800-rgb),.07)}.nav-feature .nav-checkbox>.checkbox,.nav-feature .nav-checkbox>.checkbox-primary,.nav-feature .nav-item>a{align-items:center;border-radius:var(--radius);height:2rem;padding-left:.625rem;padding-right:.625rem}.nav-feature .nav-item>a>.icon{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.sortable-list .listitem{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));cursor:move;padding-left:.5rem;padding-right:.5rem}.sortable-list .sortable-ghost>.listitem{--tw-bg-opacity:1;background-color:rgba(var(--color-warning-50-rgb),var(--tw-bg-opacity))}:root{--avatar-radius:12.5%;--avatar-bg:var(--color-surface)}.avatar{align-items:center;aspect-ratio:1/1;background:var(--avatar-bg);border-radius:var(--avatar-radius);display:inline-flex;justify-content:center;overflow:hidden;width:2rem}.avatar>img{height:100%;margin:0;-o-object-fit:cover;object-fit:cover;width:100%}.avatar.size-xs{width:1.25rem}.avatar.size-sm,.avatar.size-xs{font-size:.75rem;line-height:1rem}.avatar.size-sm{width:1.5rem}.avatar.size-lg{font-size:1.5rem;line-height:2rem;width:3rem}.avatar.size-xl{font-size:2.25rem;line-height:2.5rem;width:5rem}.avatar-group{display:flex;gap:.625rem}.avatar-group>.avatar{box-shadow:0 0 0 1px var(--color-canvas)}.avatar-group>*+*{margin-left:-1rem}.avatar-group.size-xs>*+*{margin-left:-.75rem}.avatar-group.size-sm>*+*{margin-left:-.875rem}.avatar-group.size-lg>*+*{margin-left:-1.25rem}.avatar-group.size-xl>*+*{margin-left:-1.5rem}.btn-group{display:flex;gap:1px}.btn-group>.btn.active{z-index:1}.btn-group>.btn:focus-within,.btn-group>.btn:hover{z-index:2}.btn-group>.btn.disabled,.btn-group>.btn:disabled{z-index:-1}.btn-group>.btn:not(:first-child){border-bottom-left-radius:var(--radius-none);border-left-color:rgba(var(--color-canvas-rgb),.2);border-left-width:1px;border-top-left-radius:var(--radius-none)}.btn-group>.btn:not(:first-child):before{left:-1px}.btn-group>.btn:not(:last-child){border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none)}.color-picker-heading{align-items:center;font-weight:700;justify-content:space-between;margin-bottom:-.25rem;padding:.5rem}.color-picker-heading,.color-picker-row{display:flex;flex-direction:row}.color-picker-row{flex-wrap:wrap;gap:.5rem;padding:.75rem}.color-picker-item{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;border-radius:var(--radius-full);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));display:flex;height:1.25rem;justify-content:center;padding-left:.125rem;padding-right:.125rem;width:1.25rem}.pick-container{left:0;pointer-events:none;position:absolute;top:0;z-index:1600}.pick-pop{display:flex;flex-direction:column;opacity:0;pointer-events:auto;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:1200}.pick-pop.in{opacity:1}.date-picker-menu{--menu-bg:none}.date-picker-menu .mini-calendar{margin-top:-.75rem}.date-pick-menu-month,.date-pick-menu-years{display:flex;flex-direction:row;flex-wrap:wrap;gap:1px;max-height:237px;padding-bottom:.5rem;padding-left:.5rem;padding-right:.5rem}.date-pick-menu-years>.btn{width:2.5rem}.date-pick-menu-years>.btn.is-current{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.date-pick-menu-month>.btn.active,.date-pick-menu-years>.btn.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.date-pick-menu-month>.btn{width:3rem}.date-picker-menu-footer{border-top-width:1px;display:flex;flex-direction:row;padding:.25rem}.date-picker-menu-footer>.toolbar{flex:1 1 auto;justify-content:center}.date-picker-menu>.menu{border-right-width:1px}.date-picker-menu .menu-item{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.time-picker-menu{max-height:inherit}.time-picker-menu .menu-item>a{justify-content:center}.datetime-picker-menu{max-height:inherit}.mini-calendar{padding:.5rem}.mini-calendar>.row>.col{align-items:center;justify-content:center;width:14.2857%}.mini-calendar-day{height:2rem}.mini-calendar-day.disabled{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-200-rgb),var(--tw-bg-opacity));opacity:.5;pointer-events:none}.mini-calendar-day>.btn{width:2rem}.mini-calendar-day.is-weekend>.btn{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.mini-calendar-day.active>.btn,.mini-calendar-day.is-today>.btn{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.mini-calendar-day.selected>.btn{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.mini-calendar-day.is-out-month{opacity:.5}.i-time{border-color:currentColor;border-radius:50%;border-width:.08em;display:inline-block;height:1em;position:relative;width:1em}.i-time:after{--tw-content:"";border-color:currentColor;border-width:0 0 .08em .08em;content:var(--tw-content);height:.385em;left:.3846em;position:absolute;top:.08em;width:.385em}.chevron-down,.chevron-left,.chevron-right,.chevron-up{align-items:center;display:inline-flex;height:1em;justify-content:center;position:relative;width:1em}.chevron-down:before,.chevron-left:before,.chevron-right:before,.chevron-up:before{--tw-translate-y:-0.125rem;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.6923077em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform-origin:center;width:.6923077em}.chevron-left:before{--tw-translate-y:0px;--tw-translate-x:0.125rem;--tw-rotate:135deg}.chevron-left:before,.chevron-right:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-right:before{--tw-translate-y:0px;--tw-translate-x:-0.125rem;--tw-rotate:-45deg}.chevron-up:before{--tw-translate-y:0.125rem;--tw-rotate:225deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.i-calendar{border-radius:2px;display:inline-block;height:.79em;margin-top:.16em;position:relative;width:1em}.i-calendar,.i-calendar:after,.i-calendar:before{border-color:currentColor;border-width:.08em}.i-calendar:after,.i-calendar:before{--tw-content:"";content:var(--tw-content);position:absolute}.i-calendar:before{border-bottom-width:0;left:.15em;top:.307em;width:.6em}.i-calendar:after{border-bottom-width:0;border-top-width:0;height:.3077em;left:.17em;top:-.154em;width:.538em}:root{--modal-radius:var(--radius-lg);--modal-bg:rgba(var(--color-inverse-rgb),.4);--modal-sm:37.5rem;--modal-base:50rem;--modal-lg:75rem;--modal-xl:90rem}.modal{align-items:center;background-color:var(--modal-bg);display:none;inset:0;justify-content:center;overflow:hidden;position:fixed;z-index:1500}.modal.load-indicator:before{background-color:transparent;transition-property:none}.modal.loading:after{--tw-text-opacity:1;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.modal.loading .modal-dialog{opacity:0!important}.modal.show{display:flex}.modal-no-backdrop{background-color:transparent;pointer-events:none}.modal-hide{opacity:0!important}.modal-dialog{--tw-bg-opacity:0.9;--tw-shadow:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--tw-shadow-colored:0 10px 50px -10px var(--tw-shadow-color),0 8px 20px -10px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--modal-radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);pointer-events:auto;position:relative;width:var(--modal-base)}.modal-content,.modal-dialog{max-height:100vh}.modal-content{display:flex;flex-direction:column;height:100%}.loading>.modal-dialog>.modal-content{opacity:0;visibility:hidden}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.modal-header{align-items:center;display:flex;flex:none;flex-wrap:nowrap;gap:1rem;padding:1rem 1.25rem;position:relative}.modal-title{flex:1 1 auto;font-size:1rem;font-weight:700;line-height:1.5rem}.modal-actions{position:absolute;right:.75rem;top:.75rem;z-index:10}.modal-body{flex:1 1 auto;overflow:auto;padding:1rem 1.25rem}.modal-footer{align-items:center;display:flex;flex:none;gap:.75rem;padding:1.25rem}.modal-dialog.size-full,.modal-dialog[data-size=full]{height:100vh;width:100vw}.modal-dialog.size-sm,.modal-dialog[data-size=sm]{width:var(--modal-sm)}.modal-dialog.size-lg,.modal-dialog[data-size=lg]{width:var(--modal-lg)}.modal-dialog.size-xl,.modal-dialog[data-size=xl]{width:var(--modal-xl)}.modal-iframe{flex:1 1 auto;width:100%}.modal-trans{opacity:0;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.modal-trans.in{opacity:1}.modal-trans>.modal-dialog{--tw-scale-x:.95;--tw-scale-y:.95;opacity:0;transition-duration:.3s;transition-property:transform,opacity}.modal-trans.in>.modal-dialog,.modal-trans>.modal-dialog{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.modal-trans.in>.modal-dialog{--tw-scale-x:1;--tw-scale-y:1;opacity:1}.modal-alert .modal-footer{justify-content:flex-end}.modal-alert .modal-header{margin-bottom:-1rem}.modal-alert .modal-body{white-space:pre-line}.modal-alert .modal-actions+.modal-body{padding-right:3rem}.modal-alert .modal-header+.modal-actions+.modal-body{padding-right:1.25rem}.file-selector{gap:.5rem;width:100%}.file-selector,.file-selector-box{display:flex;flex-direction:column}.file-selector-box{--tw-border-opacity:1;--tw-ring-color:transparent;--state-color:rgba(var(--color-primary-500-rgb),.05);background-color:rgba(var(--color-primary-50-rgb),.3);border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-style:dashed;border-width:1px;gap:0;height:auto;justify-content:center;padding:.5rem .75rem;position:relative}.file-selector-box .text{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.is-dragging .file-selector-box{border-style:solid}.file-selector-btn{align-items:center;display:flex;gap:.5rem;position:relative}.is-dragging .file-selector-btn{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.file-selector-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;inset:0;opacity:.1;position:absolute}.file-selector-tip{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.file-selector.is-mode-button{flex-direction:column-reverse}.file-selector-list.is-empty{display:none}.file-selector-item .item-avatar{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.file-selector-item .item-subtitle{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.file-selector-item .item-content{flex:none;margin-right:.25rem;max-width:100%}.file-selector-item>.listitem:hover{background-color:rgba(var(--color-gray-500-rgb),.05)}.file-selector-item.is-renaming .item-avatar+.item-content{max-width:calc(100% - 32px)}.file-selector-rename-text{max-width:100%;min-width:100px;position:relative}.file-selector-rename-text>div{overflow:hidden;pointer-events:none;visibility:hidden;white-space:nowrap}.file-selector-rename-input{inset:0;position:absolute}.file-selector-grid{--tw-bg-opacity:1;align-items:flex-start;background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity));border-color:transparent;border-radius:var(--radius);border-width:1px;display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--file-selector-grid-gap);padding:.5rem}.file-selector-grid-item{height:var(--file-selector-grid-height)}.file-selector-grid-btn,.file-selector-grid-item{width:var(--file-selector-grid-width)}.file-selector-grid-btn{--tw-border-opacity:1;--tw-ring-color:transparent;--state-color:rgba(var(--color-primary-500-rgb),.05);aspect-ratio:1/1;background-color:rgba(var(--color-primary-50-rgb),.3);border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-style:dashed;border-width:1px;display:flex;flex-direction:column;gap:0;height:auto;justify-content:center;padding:.5rem}.file-selector-grid-btn .text{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.file-selector-grid-item .listitem{flex-direction:column;height:100%;padding:0;position:relative;width:100%}.file-selector-grid-item .item-avatar{--tw-text-opacity:1;border-radius:var(--radius);border-width:1px;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));width:100%}.file-selector-grid-item .item-avatar.has-icon>.icon{font-size:calc(var(--file-selector-grid-width)/2)}.file-selector-grid-item .item-content,.file-selector-grid-item .toolbar{aspect-ratio:1/1;left:0;position:absolute;right:0;top:0;width:100%}.file-selector-grid-item .item-title{bottom:-1.25rem;font-size:.75rem;left:0;line-height:1rem;overflow:hidden;position:absolute;right:1.5rem;white-space:nowrap}.file-selector-grid-item .item-subtitle{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);bottom:.25rem;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));font-size:.75rem;left:.25rem;line-height:1rem;opacity:0;padding-left:.25rem;padding-right:.25rem;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-selector-grid-item:hover .item-subtitle{opacity:1}.file-selector-grid-item .toolbar .btn[data-remove-file]{--tw-text-opacity:1;background-color:rgba(var(--color-inverse-rgb),.5);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));padding:.375rem;position:absolute;right:1px;top:1px}.file-selector-grid-item .toolbar .btn[data-rename-file]{bottom:-1.5rem;padding:0;position:absolute;right:0}.file-selector-grid .file-selector-rename{bottom:0;height:1.5rem;position:absolute;top:auto}.file-selector-grid .file-selector-rename-text{width:100%}.is-dragging .file-selector-grid{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-width:1px}:root{--nav-radius:var(--radius);--nav-active-color:var(--color-primary-500);--nav-active-bg:var(--color-inherit);--nav-heading-color:var(--color-gray-500)}.nav{list-style-type:none;padding-left:0}.nav,.nav-item{align-items:center;display:flex;position:relative}.nav-item{gap:.75rem}.nav-item>a{align-items:center;color:inherit;cursor:pointer;display:flex;gap:.25rem;height:2rem;justify-content:center;padding-left:1rem;padding-right:1rem}.nav-item>.active{background:var(--nav-active-bg);color:var(--nav-active-color);font-weight:700}.nav-item>.disabled{opacity:1}.nav-item>.disabled>*{opacity:var(--disabled-opacity)}.nav-divider,.nav>.divider{margin:.5rem}.nav-heading{align-items:center;color:var(--nav-heading-color);display:flex;font-weight:700;gap:.25rem;height:2rem;justify-content:center;padding-left:1rem;padding-right:1rem}.nav-space{flex:1 1 auto;width:1rem}.nav-primary>.nav-item{position:relative}.nav-primary>.nav-item:hover{z-index:10}.nav-primary>.nav-item+.nav-item{margin-left:-1px}.nav-primary>.nav-item>a{border-radius:var(--radius-none);border-width:1px}.nav-primary>.nav-item:first-child>a,.nav-primary>.nav-item:has(.nav-heading)+.nav-item>a{border-bottom-left-radius:var(--nav-radius);border-top-left-radius:var(--nav-radius)}.nav-primary>.nav-item:last-child>a{border-bottom-right-radius:var(--nav-radius);border-top-right-radius:var(--nav-radius)}.nav-primary>.nav-item>.active{--tw-text-opacity:1;background:var(--nav-active-color);border-color:var(--nav-active-color);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.nav-primary>.nav-divider{display:none}.nav-secondary>.nav-item>a{border-radius:var(--radius-none);position:relative}.nav-secondary>.nav-item>a:after{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:-2px;content:var(--tw-content);display:block;height:2px;left:0;position:absolute;right:0}.nav-secondary>.nav-item>.active:after{background-color:currentColor}.nav-secondary>.nav-divider{margin:0 0 0 -1px}.nav-tabs>.nav-item>a{border-bottom-left-radius:var(--radius-none);border-bottom-right-radius:var(--radius-none);position:relative}.nav-tabs>.nav-item>a:after{--tw-border-opacity:1;--tw-content:"";border-color:transparent;border-bottom-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-top-left-radius:inherit;border-top-right-radius:inherit;border-width:1px;content:var(--tw-content);display:block;inset:-1px;pointer-events:none;position:absolute}.nav-tabs>.nav-item>.active:after{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-bottom-color:transparent}.nav-tabs>.nav-divider{margin:0 0 0 -1px}.nav-pills>.nav-item>a{border-radius:var(--radius-full)}.nav-pills>.nav-item>.active{--tw-text-opacity:1;background:var(--nav-active-color);border-color:var(--nav-active-color);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.nav-stacked{flex-direction:column}.nav-stacked>.nav-item{width:100%}.nav-stacked>.nav-heading,.nav-stacked>.nav-item>a{justify-content:flex-start;width:100%}.nav-stacked>.nav-divider{height:1px;margin:.5rem 0;width:100%}.nav-primary.nav-stacked>.nav-item>a{height:2.5rem}.nav-primary.nav-stacked>.nav-item+.nav-item{margin-left:0;margin-top:-1px}.nav-primary.nav-stacked>.nav-item:first-child>a{border-bottom-left-radius:0;border-top-left-radius:var(--nav-radius);border-top-right-radius:var(--nav-radius)}.nav-primary.nav-stacked>.nav-item:last-child>a{border-bottom-left-radius:var(--nav-radius);border-bottom-right-radius:var(--nav-radius);border-top-right-radius:0}.nav-secondary.nav-stacked>.nav-item>a:after{--tw-bg-opacity:1;background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:0;height:100%;left:auto;right:0;top:0;width:2px}.nav-secondary.nav-stacked>.nav-item>.active:after{background-color:currentColor}.nav-secondary.nav-stacked>.nav-divider{margin:0}.nav-tabs.nav-stacked>.nav-item>a{border-bottom-left-radius:var(--nav-radius);border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none);position:relative}.nav-tabs.nav-stacked>.nav-item>a:after{--tw-border-opacity:1;border-bottom-color:transparent;border-bottom-left-radius:inherit;border-right-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-top-left-radius:inherit}.nav-tabs.nav-stacked>.nav-item>a.active:after{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-right-color:transparent}.nav-tabs.nav-stacked>.nav-divider{margin:0}.nav-pills.nav-stacked>.nav-item+.nav-item{margin-top:.25rem}.nav-justified>.nav-item:not(.flex-none,.nav-divider){flex:1 1 auto}.nav-justified>.nav-item>a{width:100%}.arrow,.arrow:before{background:inherit;height:calc(var(--arrow-size)*1.4142);position:absolute;width:calc(var(--arrow-size)*1.4142)}.arrow{--arrow-size:5px;visibility:hidden}.arrow:before{--tw-rotate:45deg;border:inherit;content:"";transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));visibility:visible}.arrow-top,.arrow-up{border-bottom:inherit;border-right:inherit;border-width:1px 0 0 1px;top:calc(1px - var(--arrow-size))}.white>.arrow-top,.white>.arrow-up{top:calc(0px - var(--arrow-size))}.arrow-bottom,.arrow-down{border-left:inherit;border-top:inherit;border-width:0 1px 1px 0;bottom:calc(1px - var(--arrow-size))}.white>.arrow-bottom,.white>.arrow-down{bottom:calc(0px - var(--arrow-size))}.arrow-left{border-right:inherit;border-top:inherit;border-width:0 0 1px 1px;left:calc(1px - var(--arrow-size))}.white>.arrow-left{left:calc(0px - var(--arrow-size))}.arrow-right{border-bottom:inherit;border-left:inherit;border-width:1px 1px 0 0;right:calc(1px - var(--arrow-size))}.white>.arrow-right{right:calc(0px - var(--arrow-size))}.popover{display:none;position:absolute;width:-moz-max-content;width:max-content}.popover.show{display:block}.popover-heading{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-top-left-radius:inherit;border-top-right-radius:inherit;display:flex;gap:1rem;height:2.5rem;justify-content:space-between;padding-left:.75rem;padding-right:.5rem}.popover-title{flex:1 1 auto;font-weight:700}.popover-content{padding:.75rem}.popover-arrow.arrow-top,.popover-arrow.arrow-up{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.popover>.btn-close{position:absolute;right:.5rem;top:.625rem}.btn-close+.popover-content{padding-right:3rem}.btn.with-popover-show{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.with-popover-show[data-pop-placement=top]>.caret{--tw-rotate:180deg}.with-popover-show[data-pop-placement=left]>.caret,.with-popover-show[data-pop-placement=top]>.caret{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.with-popover-show[data-pop-placement=left]>.caret{--tw-rotate:90deg}.with-popover-show[data-pop-placement=right]>.caret{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pager{align-items:center;display:flex;gap:.25rem;white-space:nowrap}.menu.pager-size-menu{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));text-align:center}.menu.pager-size-menu>.menu-item>a{margin:.125rem}.pager .pager-goto-group>.form-control{width:3rem}.pager .pager-goto-group>.input-group-addon{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-300-rgb),var(--tw-border-opacity));border-width:1px}.pager>.pager-nav.active{--tw-text-opacity:1;box-shadow:0 0 0 1px var(--color-primary-500);color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.panel{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);overflow:hidden}.panel-heading{background-color:var(--panel-heading-bg);flex-wrap:nowrap;gap:1rem;justify-content:space-between;padding:.5rem 1rem}.panel-heading,.panel-title{align-items:center;display:flex}.panel-title{font-weight:700;gap:.5rem;margin:0}.panel-actions{align-items:center;display:flex;margin-right:-.5rem}.panel-body{padding:.75rem 1rem}.panel-footer{align-items:center;background-color:var(--panel-footer-bg);display:flex;gap:.5rem;padding:.5rem 1rem}.size-sm .panel-body,.size-sm .panel-footer,.size-sm .panel-heading{padding:.375rem .75rem}.size-lg .panel-body,.size-lg .panel-footer,.size-lg .panel-heading{padding:1rem 1.25rem}.picker{position:relative}.picker-select{align-items:center;gap:.25rem;justify-content:space-between}.picker-select,.picker-select.form-control{display:flex}.picker-select-placeholder{--tw-text-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-text-opacity));flex:1 1 auto}.picker-select-multi .picker-select-placeholder{padding-left:.25rem;padding-right:.25rem}.picker-single-selection{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap}.picker-deselect-btn{border-radius:var(--radius-full);padding:.25rem}.picker-deselect-btn:not(:hover){opacity:.7}.picker-select-multi.form-control{height:auto;min-height:32px;padding-left:.25rem}.picker-multi-selections{display:flex;flex-wrap:wrap;gap:.25rem;min-width:0}.picker-multi-selection{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);border-width:1px;display:flex;max-width:100%;padding-left:.5rem}.readonly .picker-multi-selection{padding-right:.5rem}.picker-multi-selection>.text{max-width:180px;overflow:clip;white-space:nowrap}.picker-menu-list{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-style:none;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);flex:1 1 auto;min-height:0;overflow-y:auto}.picker-menu-search+.picker-menu-list.menu{margin-top:-.125rem;padding-top:0}.picker-menu-list.tree{padding:.5rem}.picker-menu .search-menu-footer{border-top-width:1px;padding-bottom:.25rem;padding-top:.25rem}.picker-search-input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;border-color:transparent;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;height:1.75rem;outline-width:0!important;padding-left:0;padding-right:2rem}.picker-search{flex:none;position:relative;width:100%}.picker-search>.magnifier{opacity:.5;position:absolute;right:0;top:.5rem}.picker-search-clear.btn{cursor:pointer;height:1.25rem;position:absolute;right:0;top:.25rem;width:1.25rem}.picker-search.is-inline{min-width:64px;width:4rem}.is-inline>.picker-search-input{height:1.25rem;min-width:64px;padding-left:.25rem;padding-right:.25rem}.picker-search-measure{height:0;left:0;overflow:hidden;position:absolute;top:0;white-space:nowrap}.split{display:flex;flex-direction:row}.split-vert{flex-direction:column}.split-cell{min-height:0;min-width:0}.has-animation>.split-cell{transition-duration:.15s;transition-property:width,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter{align-items:stretch;border-radius:var(--radius);cursor:col-resize;display:flex;flex:none;flex-direction:row;justify-content:center;position:relative}.gutter-vert{cursor:row-resize;flex-direction:column}.gutter:before{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));content:var(--tw-content);display:block;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter-horz:before{width:1px}.gutter-vert:before{height:1px}.gutter-horz:hover:before{width:75%}.gutter-vert:hover:before{height:75%}.gutter-resize-handler,.gutter-toggle{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-radius:var(--radius-lg);border-width:1px;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity));display:flex;height:1.75rem;justify-content:center;margin-top:-.875rem;position:absolute;top:50%;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.gutter-toggle>span{--tw-scale-x:.75;--tw-scale-y:.75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter:hover .gutter-toggle{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-500-rgb),var(--tw-border-opacity));color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.gutter .gutter-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.is-last>.gutter-toggle{--tw-scale-x:-1}.is-first>.gutter-toggle,.is-last>.gutter-toggle{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.is-first>.gutter-toggle{--tw-scale-x:1}.gutter-vert .gutter-toggle{--tw-rotate:90deg;left:50%;margin-left:-.375rem;margin-top:0;top:auto}.gutter-vert .gutter-toggle,.gutter.is-next-collapsed>.gutter-toggle{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.gutter.is-next-collapsed>.gutter-toggle{--tw-scale-x:1}.gutter.is-prev-collapsed>.gutter-toggle{--tw-scale-x:-1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.gutter-horz.is-first.is-prev-collapsed{transform:translateX(calc(-1px - var(--split-gutter-size)/2))}.gutter-horz.is-last.is-next-collapsed{transform:translateX(calc(1px + var(--split-gutter-size)/2))}.gutter-vert.is-first.is-prev-collapsed{transform:translateY(calc(-1px - var(--split-gutter-size)/2))}.gutter-vert.is-last.is-next-collapsed{transform:translateY(calc(1px + var(--split-gutter-size)/2))}.gutter-resize-handler{background-color:transparent;border-width:0}.gutter-resize-handler:before{--tw-content:"";border-left-width:1px;border-right-width:1px;bottom:0;content:var(--tw-content);left:.25rem;position:absolute;right:.25rem;top:0}.sidebar{--gutter-width:1px;flex:none!important;position:relative}.has-sidebar-animation .sidebar{transition-duration:.15s;transition-property:width,margin;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sidebar-left.is-collapsed{margin-left:calc(var(--gutter-width)*-1)}.sidebar-right.is-collapsed{margin-right:calc(var(--gutter-width)*-1)}.sidebar.is-collapsed>*{display:none}.sidebar.is-collapsed>.sidebar-gutter{display:flex}.sidebar-gutter{bottom:0;left:100%;position:absolute;top:0;width:var(--gutter-width)}.sidebar-right>.sidebar-gutter{left:auto;right:100%}.is-collapsed>.gutter>.gutter-toggle>span{--tw-rotate:-180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sidebar-gutter:before{border-radius:var(--radius-full);opacity:0}.sidebar-gutter:hover:before{opacity:1;width:.5rem}.is-expanded .sidebar-gutter.gutter-border:before{opacity:1}.is-sidebar-resizing{cursor:col-resize}:root{--table-head-bg:var(--color-surface);--table-striped-color:var(--color-gray-50);--table-hover-color:rgba(var(--color-primary-500-rgb),.05);--table-border-color:var(--color-border)}.table{border-color:var(--table-border-color);width:100%}.table>thead{background-color:var(--table-head-bg)}.table>*>tr{border-bottom-width:1px}.table>*>tr>*{padding:.5rem 1rem}.table-striped>tbody>tr:nth-child(2n){background:var(--table-striped-color)}.table-hover>tbody>tr:hover>*{background:var(--table-hover-color)}.table.bordered>*>tr>*{border-width:1px}.table.borderless>*>tr,.table.borderless>*>tr>*{border-style:none}.condensed>*>tr>*{padding:.375rem .75rem}.table-fixed{table-layout:fixed}.table-fixed>*>tr>*{overflow:hidden;white-space:nowrap}.toolbar{align-items:center;display:flex;position:relative}.toolbar>.divider{--tw-bg-opacity:1;background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));margin:.5rem;width:1px}.toolbar-space{flex:1 1 auto;height:1px;width:1px}.toolbar>.dropdown.show{align-items:center;display:flex;position:relative}.tooltip{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-inverse-rgb),var(--tw-border-opacity));border-radius:var(--radius);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem;max-width:28rem;padding:.25rem .5rem;z-index:1800}.tooltip:not(.white)>.arrow{border-width:0}.tooltip.white>.arrow{border-color:inherit}.tooltip-has-title{--tw-bg-opacity:0.8;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:.5rem .75rem .75rem}.tooltip-has-title>.arrow{opacity:.75}.tooltip-heading{align-items:center;display:flex;font-size:.8125rem;font-weight:700;gap:1rem;justify-content:space-between;line-height:1.25rem;padding:.25rem}.tooltip-heading>.btn-close{margin-right:-.25rem}.tooltip-content{padding:.25rem}.tree-item-inner{flex-direction:row;min-height:24px;padding-left:var(--list-nested-indent)}.tree-item-inner,.tree-toggle{align-items:center;display:flex}.tree-toggle{--caret-size:5px;--caret-opacity:.3;border-radius:var(--radius);flex:none;height:1rem;justify-content:center;margin-right:-.375rem;width:1rem}.tree-item-inner>.item-icon{opacity:.5;width:1rem}.tree-item-inner:hover>.item-icon{opacity:.8}.tree-item-inner.has-hover{border-radius:var(--radius)}.tree-item-inner .item-title:not(:hover),.tree-item-inner>a.item-title:not(:hover){color:inherit}.tree-item-inner>.toolbar{margin-left:1rem;opacity:.6}.tree-item-inner:hover>.toolbar{opacity:1}.tree-item>.active{background:var(--menu-active-bg);color:var(--menu-active-color)}.tree-item>.selected{background:var(--menu-selected-bg)}.tree-item>.selected .item-content{color:var(--menu-selected-color);font-weight:700}.tree.search-menu-on-top>.search-box{left:0;right:0}.upload .upload-tip{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.upload .draggable-area{background-color:rgba(var(--color-primary-50-rgb),.2);border:1px dashed var(--color-primary-300)}.upload .draggable-area.dragover{background-color:rgba(var(--color-primary-500-rgb),.1);border-style:solid}.upload .upload-tip{color:var(--color-slate-500)}.file-item>.img{height:120px;width:120px}.upload .file-item:hover .file-size{display:flex!important}.panel-body>.form-batch{margin-top:-1rem}.form-batch-container{overflow-y:auto}.form-batch-table{--table-head-bg:var(--color-canvas);min-width:100%;table-layout:fixed}.form-batch-table>*>tr>*{padding-left:.375rem;padding-right:.375rem;vertical-align:top}.form-batch-table>*>tr>th{text-align:left;vertical-align:middle}.form-batch-head[data-name=ACTIONS]{width:5rem}.form-batch-label{display:inline}.form-batch-control>textarea.form-control{height:2rem}.form-batch-btn+.btn{margin-left:.25rem}.form-batch-table>tbody[data-count="1"] .form-batch-btn[data-type=delete]{display:none}.form-batch-ditto{position:relative}.form-batch-ditto-btn{bottom:0;height:auto;opacity:.5;padding-left:.5rem;padding-right:.5rem;position:absolute!important;right:0;top:0}.form-batch-ditto-btn:after{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:.5rem;content:var(--tw-content);left:-1px;position:absolute;top:.5rem;width:1px}[data-ditto=on] .form-batch-ditto-btn{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));opacity:1}.form-batch-row-actions{padding-bottom:.75rem!important;padding-top:.75rem!important}.form-batch-ditto-control .form-control{padding-right:calc(var(--form-batch-ditto-width) + 8px)}.form-batch-ditto-control .input-control>.input-control-suffix{right:var(--form-batch-ditto-width)}.form-batch-ditto-control .input-control>.form-control{padding-right:calc(var(--form-batch-ditto-width) + var(--input-control-suffix))}.form-batch-ditto-control .pick-pri>.caret{right:calc(var(--form-batch-ditto-width) + 8px)}.dropmenu-btn{gap:.25rem;padding-left:.5rem;padding-right:.5rem}.dropmenu-btn>.text{max-width:180px;overflow:hidden}.dropmenu-btn>.is-leading{left:-.625rem;position:absolute}.dropmenu-btn>.is-caret{align-items:center;background-color:rgba(var(--color-canvas-rgb),.2);border-radius:var(--radius);display:flex;height:1rem;justify-content:center;width:1rem}.dropmenu-nav{border-bottom-width:1px;margin-left:.75rem;margin-right:.75rem;margin-top:.25rem}.has-search .dropmenu-nav{margin-top:-.5rem}.dropmenu-nav>.nav-secondary{gap:.5rem}.dropmenu-nav>.nav-secondary>.nav-item>a{border-radius:var(--radius);padding-left:.5rem;padding-right:.5rem}.dropmenu-nav>.nav-secondary>.nav-item>a:after{bottom:-1px;left:1rem;opacity:0;right:1rem}.dropmenu-nav>.nav-secondary>.nav-item>.active:after{left:.5rem;opacity:1;right:.5rem;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dropmenu-title{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;font-weight:700;line-height:1rem;margin-bottom:-.5rem;padding:.75rem}.dropmenu-list{min-height:0;overflow-x:hidden;overflow-y:auto;padding:.5rem .75rem}.dropmenu.loading>*{opacity:0}.dropmenu-item .tree-item-inner{border-radius:var(--radius);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dropmenu-item.is-item.active>.tree-item-inner{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.tree-item-inner.is-link:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.tree-item-inner.is-link:hover .item-content,.tree-item-inner.is-link:hover .item-trailing-icon{color:inherit}.tree-item-inner.is-toggle:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity))}.dropmenu-item+.tree-item{margin-top:.125rem}.dropmenu-item .is-match{font-weight:700;text-decoration-line:underline}.dropmenu-item .item-title,.dropmenu-item .label{overflow:hidden;white-space:nowrap}.dropmenu-item .item-content{padding-left:.375rem;padding-right:.375rem}.dropmenu-item *+.item-content{padding-left:0}.tree-item-inner.is-toggle .item-title{opacity:.6}.tree-item-inner.is-toggle:hover .item-title{opacity:1}.dropmenu-item-check{align-items:center;display:flex;flex:1 1 auto;justify-content:flex-end;padding-right:.5rem}.dropmenu-item .nested-toggle-icon.is-empty{width:.25rem}.dropmenu-item .item-icon{margin-right:-.25rem}:root{--form-control-border:var(--color-border-strong)}.checkbox-primary.disabled,.checkbox-primary.disabled>label,.checkbox-primary>input[type=checkbox]:disabled,.checkbox-primary>input[type=checkbox]:disabled+label,.radio-primary.disabled,.radio-primary.disabled>label,.radio-primary>input[type=radio],.radio-primary>input[type=radio]:disabled+label{filter:none!important}.checkbox-primary.disabled>label,.radio-primary.disabled>label{opacity:1}.form-actions{gap:1rem;justify-content:center}.form-actions .btn{min-width:96px}.form-control-static{min-height:32px;padding-bottom:.375rem;padding-top:.375rem}:root{--zt-panel-form-max-width:1000px}.size-sm{--zt-panel-form-max-width:800px}.size-lg{--zt-panel-form-max-width:1200px}.panel-body>.container,.panel-heading>.container{max-width:var(--panel-container-width);min-width:0;padding-left:var(--panel-container-padding);padding-right:var(--panel-container-padding)}.panel-heading>.container{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:1rem;justify-content:space-between;min-height:48px}.panel-form{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius-md);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:1rem;margin-left:auto;margin-right:auto;max-width:var(--zt-panel-form-max-width);min-width:var(--zt-panel-form-min-width);overflow:visible;padding-bottom:1rem;padding-left:1rem;padding-right:1rem}.panel-form .form-actions{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),.8);bottom:0;padding-bottom:1rem;padding-top:1rem;position:sticky;z-index:1}.panel-form .form-grid{margin:calc(0px - var(--form-grid-gap-y-half)) calc(0px - var(--form-grid-gap-x-half))}.panel-form-toolbar{padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half);width:100%}.panel-form-toolbar>.toolbar{gap:1rem;padding-bottom:.75rem;padding-top:.75rem}.panel-form-divider{margin-bottom:.75rem;margin-top:1rem;padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half);width:100%}.panel-form-divider:before{--tw-content:"";background-color:rgba(var(--color-border-rgb),.7);content:var(--tw-content);display:block;height:1px}.is-full .btn-full-form,.is-lite .btn-lite-form{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-300-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));z-index:1}.btn-toggle-fold:after{content:attr(data-expand-text)}.show-fold-items .btn-toggle-fold:after{content:attr(data-collapse-text)}.is-foldable,.is-full .full\:hidden,.is-full .lite\:visible,.is-full .panel-form-divider,.is-full .panel-form-toolbar,.is-lite .full\:visible,.is-lite .lite\:hidden{display:none}.is-foldable.is-pinned,.is-full .full\:visible,.is-full .is-foldable,.is-full .lite\:hidden,.is-lite .full\:hidden,.is-lite .lite\:visible,.show-fold-items .is-foldable{display:block}.is-full .full\:w-1\/2,.is-lite .lite\:w-1\/2{width:50%}.is-full .full\:w-1\/3,.is-lite .lite\:w-1\/3{width:33.333333%}.is-full .full\:w-2\/3,.is-lite .lite\:w-2\/3{width:66.666667%}.is-full .full\:w-1\/4,.is-lite .lite\:w-1\/4{width:25%}.is-full .full\:w-2\/4,.is-lite .lite\:w-2\/4{width:50%}.is-full .full\:w-3\/4,.is-lite .lite\:w-3\/4{width:75%}.is-full .full\:w-1\/5,.is-lite .lite\:w-1\/5{width:20%}.is-full .full\:w-2\/5,.is-lite .lite\:w-2\/5{width:40%}.is-full .full\:w-3\/5,.is-lite .lite\:w-3\/5{width:60%}.is-full .full\:w-4\/5,.is-lite .lite\:w-4\/5{width:80%}.is-full .full\:w-1\/6,.is-lite .lite\:w-1\/6{width:16.666667%}.is-full .full\:w-2\/6,.is-lite .lite\:w-2\/6{width:33.333333%}.is-full .full\:w-3\/6,.is-lite .lite\:w-3\/6{width:50%}.is-full .full\:w-4\/6,.is-lite .lite\:w-4\/6{width:66.666667%}.is-full .full\:w-5\/6,.is-lite .lite\:w-5\/6{width:83.333333%}.is-full .full\:w-full,.is-lite .lite\:w-full{width:100%}.page-form{--panel-container-width:960px;--panel-container-padding:20px;--zt-panel-form-max-width:1200px;--zt-panel-form-min-width:1040px;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding-left:0;padding-right:0}.page-form .panel-heading{--tw-border-opacity:0.7;border-bottom-width:1px;padding:0}.page-form .panel-title{font-size:1rem;line-height:1.5rem}@media (max-width:1240px){.page-form{--zt-panel-form-max-width:1100px}}@media (max-width:1110px){.page-form{--zt-panel-form-max-width:1040px}}.modal-body>.page-form{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);margin:-1.5rem -2rem!important}.modal-body>.page-form>.panel-heading{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);padding-bottom:.375rem;padding-top:.375rem;position:sticky;top:-1.5rem;z-index:2}.modal-body>.panel-form .form-actions{bottom:-1.5rem}.dropdown.popover{display:flex;flex-direction:column;position:absolute;z-index:1200}.dropdown.show{display:flex}.dropdown-menu{--menu-min-width:7rem;--menu-max-width:20rem;display:none}.dropdown-menu.show,.menu-wrapper>.dropdown-menu,.show>.dropdown-menu{display:block}.dropdown>.dropdown-menu,.menu-wrapper .dropdown-menu{position:relative}.show>.menu-wrapper{display:flex}.dropdown>.menu-wrapper{height:100%}.dropdown>.menu-wrapper .menu-wrapper{position:absolute}.is-contextmenu .is-nested-show>a:not(:hover){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity))}.is-contextmenu .menu-item.is-nested>.item-inner>.nested-toggle-icon{position:absolute;right:.25rem;top:.375rem}.is-contextmenu .menu-nested .menu-item>.item-inner{padding-left:.5rem;padding-right:1.25rem}.is-contextmenu .menu-nested .menu-item>.item-inner>.item-content{overflow:hidden}.dropdown>.arrow{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.global-search-panel li:not(.order-first):hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.global-search-panel li a{width:100%}.global-search-panel li{cursor:pointer}.history-panel>.panel-heading+.panel-body{margin-top:-.75rem}.history-panel-action{position:relative}.history-panel-action:before{--tw-border-opacity:1;--tw-content:"";border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-left-width:1px;bottom:-.375rem;content:var(--tw-content);left:.5rem;position:absolute;top:22px}.col-reverse>.history-panel-action:first-child:before,.col>.history-panel-action:last-child:before{display:none}.history-panel-action>.item-inner{padding-left:1.5rem}.history-panel-action>.item-inner>.avatar{left:0;position:absolute;top:.375rem}.img-cutter{background:var(--color-gray-100);border:1px solid #ddd;margin-bottom:20px;padding:10px}.img-cutter .canvas{margin:0 auto;max-width:100%;min-width:50px;position:relative}.img-cutter .cover{inset:0;position:absolute;z-index:1}.img-cutter .controller{background:none;border:1px dashed hsla(0,0%,100%,.7);cursor:move;position:absolute;z-index:5}.img-cutter .control{background:#000;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.6);height:6px;position:absolute;width:6px}.img-cutter .control[data-type=left]{cursor:w-resize;left:-4px;margin-top:-3px;top:50%}.img-cutter .control[data-type=top]{cursor:n-resize;left:50%;margin-left:-3px;top:-4px}.img-cutter .control[data-type=right]{cursor:e-resize;margin-top:-3px;right:-4px;top:50%}.img-cutter .control[data-type=bottom]{bottom:-4px;cursor:s-resize;left:50%;margin-left:-3px}.img-cutter .control[data-type=top-left]{cursor:nw-resize;left:-4px;top:-4px}.img-cutter .control[data-type=top-right]{cursor:ne-resize;right:-4px;top:-4px}.img-cutter .control[data-type=bottom-left]{bottom:-4px;cursor:sw-resize;left:-4px}.img-cutter .control[data-type=bottom-right]{bottom:-4px;cursor:se-resize;right:-4px}.img-cutter .cliper{inset:0;position:absolute;z-index:2}.messager-fail .toolbar,.messager-success .toolbar{padding-left:72px}.modal-reconfirm .modal-body{font-size:14px;font-weight:700;padding:24px 32px}.modal-reconfirm .modal-footer{justify-content:center;padding:24px}.picker-deselect-btn{opacity:.6;transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.picker-multi-selection{cursor:pointer;padding-right:.5rem;position:relative}.picker-multi-selection .picker-deselect-btn{--tw-scale-x:0;--tw-scale-y:0;background-color:rgba(var(--color-surface-rgb),.8);inset:0;opacity:0;position:absolute}.picker-deselect-btn:hover,.picker-multi-selection .picker-deselect-btn,.picker-multi-selection:hover .picker-deselect-btn{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.picker-deselect-btn:hover,.picker-multi-selection:hover .picker-deselect-btn{--tw-scale-x:1;--tw-scale-y:1;--state-color:rgba(var(--color-surface-rgb),.9);opacity:1}.pick-pri{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;position:relative}.pick-pri>.caret{position:absolute;right:.5rem;top:.875rem}.pick-pri .placeholder{--tw-text-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-text-opacity))}.pick-pri-list>.btn{justify-content:flex-start}.disabled.pick-pri,.disabled.pick-pri>*{filter:none}.search-form{--gutter-width:12px;padding-bottom:.75rem}.search-form-container{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-height:116px;position:relative}.is-simple .search-form-container{min-height:56px}.search-form-field td{padding:.375rem}.search-form .sidebar-right.is-collapsed{margin-right:-.375rem}.search-form-toggle.active,.show-search-form #featureBar .search-form-toggle{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.show-search-form #featureBar .search-form-toggle{font-weight:700}.is-simple .search-form-wrapper{display:flex}.is-simple .search-form-wrapper>.row{flex:1 1 auto}.is-simple .search-form-wrapper>.toolbar{flex:none;margin-top:0}.zinbar [data-hint]{position:relative}.zinbar [data-hint]:after{--tw-bg-opacity:0.9;--tw-text-opacity:1;--tw-content:attr(data-hint);background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);bottom:100%;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));content:var(--tw-content);display:block;font-size:.75rem;line-height:1rem;opacity:0;padding:.125rem .25rem;pointer-events:none;position:absolute;right:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:50}.zinbar [data-hint]:hover:after{opacity:1}.zin-perf-btn-list .text-danger{color:var(--color-danger-400)}.zinbar .state{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.zinbar .state:active{--tw-scale-x:1.05;--tw-scale-y:1.05}.zinbar .state:active,.zinbar.collapse{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.zinbar.collapse{--tw-translate-x:100%}.zinbar.collapse>div{pointer-events:none}.zinbar{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.7s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);min-height:28px;position:relative;transition-duration:.15s;transition-property:shadow,border,color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.card:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.card-content,.card-footer,.card-header,.card-heading{padding:.25rem .5rem}.card-heading{align-items:center;display:flex;gap:.5rem}.card-icon{opacity:.5}.card-header{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.card-content{display:flex;flex-direction:column;gap:.25rem}.card-actions{position:absolute;right:.125rem;top:.125rem}.card-actions+.card-heading{padding-right:1.75rem}.card-subtitle{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem}.card-list{--list-gap:.625rem;--list-count-per-row:1}.card-list,.card-list-item{padding:calc(var(--list-gap)/2)}.card-list-item{width:calc(100%/var(--list-count-per-row))}.card-grid{display:flex;flex-wrap:wrap}.card-grid .card{height:100%}.contextmenu{display:none}.contextmenu.show{display:block}.contextmenu .popup .popup,.contextmenu.popup{position:absolute}.more,.more-vert{margin:.5rem;position:relative}.more,.more-vert,.more-vert:after,.more-vert:before,.more:after,.more:before{background-color:currentColor;border-radius:var(--radius-full);height:.125rem;width:.125rem}.more-vert:after,.more-vert:before,.more:after,.more:before{--tw-content:"";content:var(--tw-content);display:block;left:-5px;position:absolute;top:0}.more-vert:after,.more:after{left:5px}.more-vert{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dashboard-blocks{position:relative}.dashboard-block-cell{position:absolute;transition-duration:.15s;transition-property:left,top;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-block{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);inset:.5rem;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-block.is-dragging{opacity:0;z-index:1600}.dashboard-block-header{align-items:center;border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);display:flex;flex-direction:row;justify-content:space-between;left:0;padding:.75rem;pointer-events:none;position:absolute;right:0;top:0;z-index:10}.dashboard-block-header>*{pointer-events:auto}.dashboard-block-title{font-size:.875rem;font-weight:700;line-height:1.3rem}.dashboard-block-body{inset:0;position:absolute}.dashboard-block-body>.panel{--tw-shadow:0px 6px 16px rgba(202,215,235,.25);display:flex;flex-direction:column;height:100%;width:100%}.dashboard-block-body .panel-heading{cursor:move;flex:none}.dashboard-block-body .panel-body{flex:1 1 auto;overflow-y:auto}.has-more-menu>.dashboard-block-body .panel-heading{padding-right:3rem}.dashboard-block-body .panel-title{font-size:.875rem;height:2rem;line-height:1.3rem}.dashboard-block-actions .btn{opacity:.6}.dashboard-block-actions .btn:hover{opacity:1}.dashboard-drop-shadow{position:absolute;transition-duration:.15s;transition-property:left,top;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-drop-shadow:before{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);--tw-content:"";background-color:rgba(var(--color-inverse-rgb),.05);border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);content:var(--tw-content);inset:.5rem;position:absolute}:root{--scrollbar-size:10px;--scrollbar-opacity:.6;--scrollbar-bg:rgba(var(--color-inverse-rgb),.15);--scrollbar-inset:inset 0 0 0 1px rgba(var(--color-inverse-rgb),.05);--scrollbar-bar-bg:rgba(var(--color-inverse-rgb),.3);--scrollbar-hover-bg:rgba(var(--color-inverse-rgb),.4);--scrollbar-drag-bg:rgba(var(--color-inverse-rgb),.5);--scrollbar-radius:var(--radius-sm);--scrollbar-duration:.7s}.scrollbar{background:var(--scrollbar-bg);box-shadow:var(--scrollbar-shadow);opacity:var(--scrollbar-opacity);position:absolute;transition-duration:.15s;transition-duration:var(--scrollbar-duration);transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.scrollbar-hover .scrollbar{opacity:0}.scrollbar-hover:hover .scrollbar{opacity:var(--scrollbar-opacity)}.scrollbar.is-dragging,.scrollbar:hover{opacity:1!important}.scrollbar-bar{background:var(--scrollbar-bar-bg);border-radius:var(--scrollbar-radius);position:absolute}.scrollbar-bar:hover{background:var(--scrollbar-hover-bg)}.is-dragging>.scrollbar-bar{background:var(--scrollbar-drag-bg)}.is-horz>.scrollbar-bar{height:100%;z-index:20}.is-vert>.scrollbar-bar{width:100%;z-index:20}:root{--dtable-checked-bg:var(--color-warning-50);--dtable-checked-bg-hover:var(--color-warning-100);--dtable-checked-border:var(--color-border-strong)}.dtable-cell.is-checked,.dtable-striped .dtable-cell.is-odd-row.is-checked{background-color:var(--dtable-checked-bg)}.checkbox-primary.dtable-checkbox{margin-right:-.375rem}.dtable-checkbox{order:-5}.dtable-hover-col .dtable-cell.is-hover-col.is-checked,.dtable-hover-row .dtable-cell.is-hover-row.is-checked{background-color:var(--dtable-checked-bg-hover)}.dtable-cell.is-checked{--dtable-border-color:var(--dtable-checked-border)}.dtable-check-info{flex-shrink:1;margin-right:.5rem;overflow:hidden;white-space:nowrap}:root{--toggle-icon-size:calc(var(--font-size-root)*3/4 + 1px)}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-color:currentColor;border-width:1px;display:block;opacity:.5;position:relative}.toggle-icon-collapse:hover,.toggle-icon-expand:hover,.toggle-icon:hover{opacity:.9}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-radius:inherit;height:var(--toggle-icon-size);width:var(--toggle-icon-size)}.is-collapsed .toggle-icon:after,.is-collapsed .toggle-icon:before,.is-expanded .toggle-icon:before,.toggle-icon-collapse:after,.toggle-icon-collapse:before,.toggle-icon-expand:before{background-color:currentColor;content:" ";display:block;height:1px;left:2px;position:absolute;right:2px;top:calc((var(--toggle-icon-size) - 3px)/2)}.is-collapsed .toggle-icon:after,.toggle-icon-collapse:after{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:root{--dtable-nt-size:calc(var(--font-size-root)*3/4 + 1px)}.dtable-nested-indent{flex:none;margin-right:-.25rem;order:-100}.dtable-nested-toggle{align-items:center;border-radius:var(--radius-sm);display:flex;flex:none;height:1.25rem;justify-content:center;margin-left:-.25rem;order:-6;width:1.25rem}.dtable-nested-toggle.is-no-child{margin-right:-.25rem;opacity:0;pointer-events:none}.dtable-header-group{align-items:center;background:var(--dtable-header-bg);cursor:default;display:flex;justify-content:center;left:0;position:absolute;top:1px;z-index:30}.dtable-bordered .dtable-header-group{border-bottom:1px solid var(--dtable-border-color);border-left:1px solid var(--dtable-border-color)}.dtable-header-as-group{contain:style;content-visibility:visible;overflow:visible!important}.dtable-sorting{cursor:move}.dtable-cell.is-sorting-from{background-color:var(--dtable-bg);z-index:20}.dtable-cell.is-sorting-from:before{border-top-width:1px}.dtable-sorting .dtable-cell.is-sorting-after{--tw-translate-y:-100%}.dtable-sorting .dtable-cell.is-sorting-after,.dtable-sorting .dtable-cell.is-sorting-before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dtable-sorting .dtable-cell.is-sorting-before{--tw-translate-y:100%}.dtable-cell.is-sorting-before:before,.dtable-cell.is-sorting-from:before{border-bottom-width:1px;border-top-width:1px}:root{--dtable-bg:var(--color-canvas);--dtable-striped-bg:var(--color-gray-50);--dtable-hover-bg:rgba(var(--color-primary-500-rgb),.05);--dtable-header-bg:var(--color-surface);--dtable-footer-bg:var(--color-surface);--dtable-border-color:var(--color-border);--dtable-sorter-size:0.3125rem}.dtable{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));position:relative}.dtable.no-animation *{transition-property:none!important}.dtable-block{overflow:hidden;position:absolute;width:100%}.dtable-header{background-color:var(--dtable-header-bg);border-top-left-radius:inherit;border-top-right-radius:inherit}.dtable-body{overflow:hidden}.dtable-cells{background-color:var(--dtable-bg);height:100%;position:absolute;z-index:0}.dtable-cells-container{height:100%;position:absolute;width:100%}.dtable-header .dtable-cells{background-color:var(--dtable-header-bg)}.dtable-cells.dtable-fixed-left,.dtable-cells.dtable-fixed-right{z-index:10}.dtable-cell{position:absolute;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-cell:after,.dtable-cell:before{bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:-1px;z-index:2}.dtable-cell:before{border-bottom-width:1px;border-color:var(--dtable-border-color);opacity:1}.dtable-header .dtable-cell{align-items:center;display:flex;font-weight:700}.dtable-header .dtable-cell:after,.dtable-header .dtable-cell:before{top:0}.dtable-cell-content{align-items:center;display:flex;gap:.25rem;height:100%;overflow:hidden;padding-left:.75rem;padding-right:.75rem;position:relative;white-space:nowrap;width:100%;z-index:5}.dtable-body .dtable-cell.is-last-row:before{border-bottom-width:0}.dtable-footer{align-items:center;background-color:var(--dtable-footer-bg);border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-color:var(--dtable-border-color);border-top-width:1px;display:flex;padding-left:.75rem;padding-right:.75rem;position:absolute;width:100%;z-index:10}.dtable-empty-tip{align-items:center;display:flex;height:100%;justify-content:center}.dtable .scrollbar{z-index:20}.dtable-header{transition-duration:1s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-scrolled-down .dtable-header{border-bottom-color:rgba(var(--color-inverse-rgb),.2);border-bottom-width:1px}.dtable-scroll-shadow{background-image:linear-gradient(90deg,rgba(0,0,0,.03),transparent),linear-gradient(90deg,rgba(0,0,0,.03),transparent 50%);opacity:0;pointer-events:none;position:absolute;top:0;transition-duration:1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:8px;z-index:20}.dtable:hover .dtable-scroll-shadow{opacity:1}.dtable-scroll-shadow.is-right{--tw-rotate:180deg;margin-left:-7px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dtable-scroll-shadow.is-left,.dtable-scrolled-end .dtable-scroll-shadow.is-right{visibility:hidden}.dtable-scroll-shadow.is-right,.dtable-scrolled-right .dtable-scroll-shadow.is-left{visibility:visible}.dtable-sort{display:inline-flex;height:calc(var(--dtable-sorter-size)*12/5);margin-left:.25rem;opacity:.8;position:relative}.dtable-cell:hover .dtable-sort{opacity:1}.dtable-sort:after,.dtable-sort:before{--tw-content:"";border-color:transparent;border-style:solid;border-width:var(--dtable-sorter-size);content:var(--tw-content);height:0;left:0;opacity:.4;position:absolute;width:0}.dtable-sort:before{border-bottom-color:currentColor;border-top-width:0;top:0}.dtable-sort:after{border-bottom-width:0;border-top-color:currentColor;bottom:0}.dtable-sort.dtable-sort-asc:before,.dtable-sort.dtable-sort-desc:after{opacity:.9}.dtable-sort-link{align-items:center;cursor:pointer;display:inline-flex}.dtable-cells.dtable-fixed-left:before,.dtable-cells.dtable-fixed-right:before{border-color:var(--dtable-border-color);content:"";height:100%;pointer-events:none;position:absolute;width:100%;z-index:5}.dtable-cells.dtable-fixed-left:before{border-right-width:1px;right:-1px}.dtable-cells.dtable-fixed-right:before{border-left-width:1px;left:0}.dtable-bordered:before{border-color:var(--dtable-border-color);border-radius:inherit;border-width:1px;content:"";display:block;inset:0;pointer-events:none;position:absolute;z-index:15}.dtable-bordered .dtable-cell:before{border-width:1px;right:-1px}.dtable-cell.has-border-left:before{border-left-width:1px}.dtable-cell.has-border-right:before{border-right-width:1px;right:-1px}.dtable-striped .dtable-cell.is-odd-row{background-color:var(--dtable-striped-bg)}.dtable-hover-cell .dtable-cell:hover:after,.dtable-hover-col .dtable-cell.is-hover-col:before,.dtable-hover-row .dtable-body .dtable-cell.is-hover-row:before{background-color:var(--dtable-hover-bg)}:root{--kanban-lane-name-width:20px;--kanban-col-width:280px;--kanban-cols-gap:8px;--kanban-lanes-gap:8px;--kanban-header-height:32px;--kanban-lane-height:auto;--kanban-lane-color:var(--color-primary-500);--kanban-link-color:var(--color-secondary-500)}.kanban{align-items:flex-start;display:flex;flex-direction:column;min-width:-moz-fit-content;min-width:fit-content;position:relative}.kanban-header{display:flex;flex-direction:row;height:var(--kanban-header-height)}.kanban.has-sub-cols .kanban-header{height:calc(var(--kanban-header-height)*2)}.kanban-header-lane-name{background-color:rgba(var(--color-fore-rgb),.05);flex:none;width:var(--kanban-lane-name-width)}.kanban-header-cols,.kanban-header-sub-cols{display:flex;flex:1 1 0%;flex-direction:row;gap:var(--kanban-cols-gap)}.kanban-header-sub-cols{--tw-border-opacity:1;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));border-top-width:2px}.kanban-header-col{align-items:center;border-bottom-width:1px;display:flex;flex:1 1 0%;flex-direction:column;height:100%;width:var(--kanban-col-width)}.kanban-header-col.has-subs{width:auto}.kanban-header-col-wrapper{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));display:flex;flex:1 1 0%;flex-direction:row;padding-left:3.5rem;padding-right:3.5rem;position:relative;width:100%}.kanban-header-col-wrapper.is-align-left{justify-content:flex-start;padding-left:.5rem}.kanban-header-col-wrapper.is-align-left>.kanban-header-title{justify-content:flex-start}.kanban-header-title{align-items:center;display:flex;flex:1 1 auto;flex-direction:row;justify-content:center;overflow:hidden}.kanban-header-title>.as-title{color:var(--kanban-col-color);font-weight:700;overflow:hidden;white-space:nowrap}.kanban-header-col-actions{bottom:.25rem;position:absolute;right:.25rem;top:.25rem}.kanban-header-col-actions>.btn{opacity:.6}.kanban-header-col-actions>.btn:hover{opacity:1}.kanban-body{display:flex;flex-direction:column;gap:var(--kanban-lanes-gap)}.kanban-lane{flex-direction:row;height:var(--kanban-lane-height);min-height:96px}.kanban-lane,.kanban-lane-name{display:flex}.kanban-lane-name{--tw-text-opacity:1;align-items:center;background-color:var(--kanban-lane-color);color:rgba(var(--color-white-rgb),var(--tw-text-opacity));flex:none;justify-content:center;position:relative;width:var(--kanban-lane-name-width);writing-mode:vertical-rl}.kanban-lane-title{max-height:8rem;overflow:hidden;white-space:nowrap}.kanban-lane-cols{display:flex;flex-direction:row;gap:var(--kanban-cols-gap)}.kanban-lane-col{background-color:rgba(var(--color-inverse-rgb),.05);display:flex;flex-direction:column;height:100%;width:var(--kanban-col-width)}.kanban-header-col,.kanban-lane-col{margin-left:calc(var(--kanban-col-gap-left) - var(--kanban-cols-gap));margin-right:calc(var(--kanban-col-gap-right) - var(--kanban-cols-gap))}.kanban-col-content{position:relative;z-index:5}.kanban-lane.is-first>.kanban-lane-name:before{--tw-content:"";background-color:var(--kanban-lane-color);bottom:100%;content:var(--tw-content);display:block;height:var(--kanban-header-height);left:0;position:absolute;right:0}.kanban.has-sub-cols .kanban-lane.is-first>.kanban-lane-name:before{height:calc(var(--kanban-header-height)*2)}.kanban-items{flex:1 1 auto;overflow:auto;scrollbar-gutter:both-edges stable}.kanban-lane.is-auto-height .kanban-items{scrollbar-gutter:auto}.kanban-item .card-actions{z-index:5}.kanban-heading{width:100%}.kanban-heading .listitem{height:2.25rem}.kanban-heading .item-title{font-weight:700}.kanban.has-dragging{cursor:move}.kanban-item.is-dragging{cursor:move;opacity:.1}.kanban-sticky .kanban-header{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));position:sticky;top:0;z-index:10}.kanban-sticky .kanban-lane-name{left:0;position:sticky;z-index:10}.kanban-region{--tw-bg-opacity:1;--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-width:-moz-fit-content;min-width:fit-content;padding:.75rem}.kanban-region>.kanban+.kanban{margin-top:.75rem}.kanban-region.has-heading{padding-top:0}.kanban-heading>.listitem{left:.75rem;position:sticky;width:calc(var(--kanban-list-width) - 24px)}.kanban-list{display:flex;flex-direction:column;gap:.75rem;height:100vh;overflow:auto;scrollbar-gutter:stable}.kanban-list.is-moving{cursor:grabbing}.kanban-items.is-dropping{position:relative}.kanban-item.is-dropping{position:relative;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.kanban-item.is-dropping:after,.kanban-items.is-dropping>.card-list:after{--tw-content:"";background-color:rgba(var(--color-warning-500-rgb),.5);border-radius:var(--radius-full);content:var(--tw-content);display:block;height:.25rem}.kanban-item.is-dropping:after{left:.25rem;position:absolute;right:.25rem;top:-.25rem}.kanban-item.is-dropping[z-drop-side=before]{--tw-translate-y:0.25rem}.kanban-item.is-dropping[z-drop-side=after],.kanban-item.is-dropping[z-drop-side=before]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-item.is-dropping[z-drop-side=after]{--tw-translate-y:-0.25rem}.kanban-item.is-dropping[z-drop-side=after]:after{bottom:-.25rem;top:auto}.kanban-links{inset:0;pointer-events:none;position:absolute;z-index:20}.kanban-link{align-items:center;color:var(--kanban-link-color);display:flex;justify-content:center}.kanban-link,.kanban-link>svg{position:absolute}.kanban-link-text{border-radius:var(--radius);height:1em;line-height:1;padding-left:.125rem;padding-right:.125rem;pointer-events:auto;position:relative;text-align:center;white-space:nowrap}.kanban-link-start-point{--tw-translate-x:-0.25rem;--tw-translate-y:-0.25rem;height:.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5rem}.kanban-link-start-point,.kanban-link-start-point:before{background-color:currentColor;border-radius:var(--radius-full);position:absolute}.kanban-link-start-point:before{--tw-content:"";content:var(--tw-content);display:block;inset:-.25rem;opacity:.2}.kanban-link path{pointer-events:auto}.kanban-link path+path{opacity:.6}.kanban-link.is-hover path+path{opacity:1}.kanban-link-delete-btn{--tw-scale-x:.75;--tw-scale-y:.75;opacity:0;pointer-events:auto;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.is-hover .kanban-link-delete-btn,.kanban-link-delete-btn{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.is-hover .kanban-link-delete-btn{--tw-scale-x:1;--tw-scale-y:1;opacity:1}.kanban.is-adding-link{cursor:crosshair}.kanban-link-editor{inset:0;pointer-events:none;position:absolute;z-index:20}.kanban-link-editor-from,.kanban-link-editor-to{--tw-shadow-color:rgb(var(--color-primary-500-rgb));--tw-shadow:var(--tw-shadow-colored);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-500-rgb),var(--tw-ring-opacity));border-radius:var(--radius)}.kanban-link-editor-from,.kanban-link-editor-point,.kanban-link-editor-to{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);position:absolute}.kanban-link-editor-point{--tw-translate-x:-0.25rem;--tw-translate-y:-0.25rem;--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-primary-500-rgb),0.1);background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);cursor:move;height:.5rem;opacity:.5;pointer-events:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.5rem}.kanban-link-editor-point.is-left{left:0;top:50%}.kanban-link-editor-point.is-right{--tw-translate-x:0.25rem;right:0;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-link-editor-point.is-top{left:50%;top:0}.kanban-link-editor-point.is-bottom{--tw-translate-y:0.25rem;bottom:0;left:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-link-editor-point:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-primary-500-rgb),0.5);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:1}.tab-pane{display:none}.tab-pane.active{display:block}:root{--dtable-header-bg:var(--color-surface-light);--dtable-footer-bg:var(--color-surface-light);--dtable-border-color:var(--color-border-light);--dtable-checked-border:var(--color-border);--dtable-link-color:var(--color-link);--dtable-link-hover-color:var(--color-link-hover);--dtable-link-visited-color:var(--color-link-visited)}.dtable-header .dtable-cell{font-weight:400}.dtable-cell-content[style*="--color-link"]{--dtable-link-hover-color:var(--color-link);--dtable-link-visited-color:var(--color-link)}.dtable-body .dtable-cell a:not(.btn){color:var(--dtable-link-color)}.dtable-body .dtable-cell a:not(.btn):visited{color:var(--dtable-link-visited-color)}.dtable-body .dtable-cell a:not(.btn):hover{color:var(--dtable-link-hover-color)}.dtable .btn-avatar{--tw-bg-opacity:1;--tw-ring-color:transparent;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);gap:.25rem;height:1.25rem;padding-left:0;padding-right:.5rem}.dtable .btn-avatar:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dtable .toggle-icon{border-radius:var(--radius-full)}.dtable .toggle-icon:after,.dtable .toggle-icon:before{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity))}.dtable-footer>.toolbar{margin-right:.5rem}.dtable-header .dtable-cell[data-sort]>.dtable-cell-content>a:not(:hover){color:inherit}.dtable-assign-btn{align-items:center;border-radius:var(--radius-full);display:flex;flex-direction:row;height:1.25rem;padding-left:.375rem;padding-right:.375rem}.dtable-assign-btn:not(:hover){color:inherit}.dtable-assign-btn.is-me{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.dtable-assign-btn:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.dtable-assign-btn>span{border-radius:var(--radius-full);line-height:20px;padding-left:.375rem;padding-right:.375rem}.dtable-assign-btn.is-unassigned>span{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}.dtable-assign-btn.is-unassigned:hover>span{background-color:inherit}.dtable-assign-btn>.icon{opacity:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-assign-btn:not(.disabled):hover>.icon{opacity:1}.dtable-header .dtable-cell[data-type=assign]{padding-left:1.5rem}.dtable-cell-icon{order:-5}.dtable-custom-cell[data-type=control]{align-items:center;display:flex;justify-content:center;padding-left:.125rem;padding-right:.125rem;z-index:1}.dtable-empty-tip{min-height:212px}.menu.menu-dtable-actions{--menu-icon-opacity:1;display:flex;gap:.25rem;min-width:auto}.menu.menu-dtable-actions>.menu-item>a{padding-left:.25rem;padding-right:.25rem}.menu.menu-dtable-actions>.menu-item>a>.item-content{display:none}:root{--zt-page-bg:var(--color-gray-100);--zt-header-bg:var(--color-canvas);--zt-header-color:var(--color-fore);--zt-sidebar-width:160px;--zt-navbar-active-color:var(--color-primary-500)}body{background-color:var(--zt-page-bg)}.page-app{overflow:overlay}.container{min-width:1200px}#header{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background:var(--zt-header-bg);border-bottom:1px solid var(--zt-header-border,rgba(var(--color-inverse-rgb),.05));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--zt-header-color);height:3rem}#header>.container{height:100%;position:relative}#heading{align-items:center;bottom:0;display:flex;gap:.25rem;left:1rem;position:absolute;top:0}#heading>.toolbar{margin-left:-.75rem}#heading .dropmenu-btn>.text{max-width:142px}#heading>[data-zui-dropmenu]+div .dropmenu-btn>.text,#heading>[data-zui-dropmenu]+div+div .dropmenu-btn>.text{max-width:78px}#navbar{align-items:center;display:flex;font-size:.875rem;height:100%;justify-content:center;line-height:1.3rem}#navbar>.nav{--nav-active-color:var(--zt-navbar-active-color,var(--color-current));--nav-item-padding:12px;--nav-divider-margin:8px;margin-left:var(--nav-offset-left)}#navbar>.nav>.nav-item>a{height:3rem;padding-left:var(--nav-item-padding);padding-right:var(--nav-item-padding)}#navbar>.nav>.nav-item>a:after{--tw-scale-x:.5;background-color:currentColor;bottom:.5rem;content:"";height:.125rem;left:.75rem;opacity:0;position:absolute;right:.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#navbar>.nav>.nav-item>a:hover:after{opacity:.5}#navbar>.nav>.nav-item>a.active:after,#navbar>.nav>.nav-item>a:hover:after{--tw-scale-x:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#navbar>.nav>.nav-item>a.active:after{opacity:.9}#navbar>.nav>.divider{align-self:center;height:1.25rem;margin-left:var(--nav-divider-margin);margin-right:var(--nav-divider-margin)}#navbar>.nav.compact{font-size:.8125rem;line-height:1.25rem}#navbar>.nav.compact-extra{font-size:.75rem;line-height:1rem}#toolbar{align-items:center;bottom:0;display:flex;gap:.25rem;position:absolute;right:1rem;top:0}#main{min-height:100vh}#header+#main{min-height:calc(100vh - 3rem)}#main>.container{padding-left:1rem;padding-right:1rem;position:relative}@media (min-width:1400px){#header>.container,#main>.container,#mainNavbar>.container{padding-left:2.5rem;padding-right:2.5rem}#heading{left:2.5rem}#toolbar{right:2.5rem}}#mainNavbar{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));height:2.75rem}#mainNavbar>.container{position:relative}#mainNavbar .nav{height:2.75rem;inset:0;justify-content:center;position:absolute}#mainNavbar .nav-item{font-size:.875rem;line-height:1.3rem}#mainNavbar .nav-item>a{border-radius:var(--radius)}#mainMenu{gap:1rem;justify-content:space-between;padding-bottom:.75rem;padding-top:.75rem}#featureBar,#mainMenu{align-items:center;display:flex}#featureBar{flex:1 1 auto;gap:.5rem}#featureBar .nav .btn>.icon{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}#actionBar{gap:.5rem}#actionBar>.nav-divider{margin-left:-.25rem;margin-right:-.25rem}#mainContent{padding-top:.75rem}#mainMenu+#mainContent{padding-top:0}#mainContent.row{align-items:stretch;display:flex;gap:1rem;justify-content:space-between}#mainContent.row>*{flex:1 1 auto;min-width:0}#mainContainer.has-sidebar-left{--gutter-left-size:16px}#mainContainer.is-sidebar-left-collapsed{--gutter-left-size:0}.has-sidebar-animation.has-sidebar-left #mainMenu{transition-duration:.15s;transition-property:padding-left;transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--modal-radius:var(--radius);--avatar-bg:var(--color-gray-200)}.modal-alert .modal-footer{justify-content:center}.modal-dialog{--tw-bg-opacity:1}.modal-body,.modal-footer,.modal-header{padding:1.5rem 2rem}.modal-header{padding-right:3rem}.modal-actions{top:1rem}.modal-body+.modal-footer,.modal-header+.modal-actions+.modal-body,.modal-header+.modal-body{padding-top:0}.modal-condensed .modal-body,.modal-condensed .modal-header{padding:1rem 1.25rem}.modal-condensed .modal-actions{top:.75rem}:root{--label-bg:var(--color-gray-100);--label-color:var(--color-gray-800)}.label[class$=-pale],.label[class*="-pale "]{--tw-bg-opacity:0.4;--tw-ring-opacity:0.4}.tree{--tree-indent:14px}.body-modal .panel-form,.modal .panel-form{margin:0;padding:0}.modal .panel-body{padding:1px}.modal-body>.form{padding-top:1px}.modal .history,.modal .panel-body>.form{padding:0}.arrow,.arrow:before{background:inherit;height:calc(var(--arrow-size)*1.4142);position:absolute;width:calc(var(--arrow-size)*1.4142)}.arrow{--arrow-size:5px;visibility:hidden}.arrow:before{--tw-rotate:45deg;border:inherit;content:"";transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));visibility:visible}.arrow-top,.arrow-up{border-bottom:inherit;border-right:inherit;border-width:1px 0 0 1px;top:calc(1px - var(--arrow-size))}.white>.arrow-top,.white>.arrow-up{top:calc(0px - var(--arrow-size))}.arrow-bottom,.arrow-down{border-left:inherit;border-top:inherit;border-width:0 1px 1px 0;bottom:calc(1px - var(--arrow-size))}.white>.arrow-bottom,.white>.arrow-down{bottom:calc(0px - var(--arrow-size))}.arrow-left{border-right:inherit;border-top:inherit;border-width:0 0 1px 1px;left:calc(1px - var(--arrow-size))}.white>.arrow-left{left:calc(0px - var(--arrow-size))}.arrow-right{border-bottom:inherit;border-left:inherit;border-width:1px 1px 0 0;right:calc(1px - var(--arrow-size))}.white>.arrow-right{right:calc(0px - var(--arrow-size))}.caret,.caret-down,.caret-left,.caret-right,.caret-up{border:var(--caret-size,4px) solid transparent;display:inline-block;height:0;opacity:var(--caret-opacity,.5);width:0}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.caret,.caret-down{border-bottom-width:0;border-top-color:currentColor}.caret-up{border-bottom-color:currentColor;border-top-width:0}.caret-right{border-left-color:currentColor;border-right-width:0}.caret-left{border-left-width:0;border-right-color:currentColor}:root{--toggle-icon-size:calc(var(--font-size-root)*3/4 + 1px)}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-color:currentColor;border-width:1px;display:block;opacity:.5;position:relative}.toggle-icon-collapse:hover,.toggle-icon-expand:hover,.toggle-icon:hover{opacity:.9}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-radius:inherit;height:var(--toggle-icon-size);width:var(--toggle-icon-size)}.is-collapsed .toggle-icon:after,.is-collapsed .toggle-icon:before,.is-expanded .toggle-icon:before,.toggle-icon-collapse:after,.toggle-icon-collapse:before,.toggle-icon-expand:before{background-color:currentColor;content:" ";display:block;height:1px;left:2px;position:absolute;right:2px;top:calc((var(--toggle-icon-size) - 3px)/2)}.is-collapsed .toggle-icon:after,.toggle-icon-collapse:after{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.spinner,.spinner:after,.spinner:before{display:block;height:1em;position:relative;width:1em}.spinner:after,.spinner:before{border-radius:var(--radius-full);content:" ";position:absolute}.spinner:before{animation:-spin 1s cubic-bezier(.6,0,.4,1) infinite;border:.16667em solid transparent;border-top-color:currentcolor}.spinner:after{border:.16667em solid;opacity:.2}.magnifier{display:inline-block;height:1em;position:relative;width:1em}.magnifier:after,.magnifier:before{border-radius:var(--radius-full);content:"";display:block;position:absolute}.magnifier:before{border:1px solid;height:.75em;width:.75em}.magnifier:after{--tw-rotate:45deg;background-color:currentColor;height:1px;left:.55em;top:.7em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5em}.more,.more-vert{margin:.5rem;position:relative}.more,.more-vert,.more-vert:after,.more-vert:before,.more:after,.more:before{background-color:currentColor;border-radius:var(--radius-full);height:.125rem;width:.125rem}.more-vert:after,.more-vert:before,.more:after,.more:before{--tw-content:"";content:var(--tw-content);display:block;left:-5px;position:absolute;top:0}.more-vert:after,.more:after{left:5px}.more-vert{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-down,.chevron-left,.chevron-right,.chevron-up{align-items:center;display:inline-flex;height:1em;justify-content:center;position:relative;width:1em}.chevron-down:before,.chevron-left:before,.chevron-right:before,.chevron-up:before{--tw-translate-y:-0.125rem;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.6923077em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform-origin:center;width:.6923077em}.chevron-left:before{--tw-translate-y:0px;--tw-translate-x:0.125rem;--tw-rotate:135deg}.chevron-left:before,.chevron-right:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-right:before{--tw-translate-y:0px;--tw-translate-x:-0.125rem;--tw-rotate:-45deg}.chevron-up:before{--tw-translate-y:0.125rem;--tw-rotate:225deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.i-time{border-color:currentColor;border-radius:50%;border-width:.08em;display:inline-block;height:1em;position:relative;width:1em}.i-time:after{--tw-content:"";border-color:currentColor;border-width:0 0 .08em .08em;content:var(--tw-content);height:.385em;left:.3846em;position:absolute;top:.08em;width:.385em}.i-calendar{border-color:currentColor;border-radius:2px;border-width:.08em;display:inline-block;height:.79em;margin-top:.16em;position:relative;width:1em}.i-calendar:after,.i-calendar:before{--tw-content:"";border-color:currentColor;border-width:.08em;content:var(--tw-content);position:absolute}.i-calendar:before{border-bottom-width:0;left:.15em;top:.307em;width:.6em}.i-calendar:after{border-bottom-width:0;border-top-width:0;height:.3077em;left:.17em;top:-.154em;width:.538em}:root{--state-color:rgba(0,0,0,.05);--state-scale:.9;--opacity-disabled:.65;--opacity-muted:.5}.btn,.item>a,.state{cursor:pointer;position:relative}.btn:before,.item>a:before,.state:before{background:var(--state-color);border-radius:inherit;content:" ";display:block;inset:0;opacity:0;pointer-events:none;position:absolute;transform:scale(var(--state-scale));transition-duration:.2s;transition-property:opacity,transform,box-shadow,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.btn.active:not(:hover,:focus-visible,:focus-within,:active):before,.item>a.active:not(:hover,:focus-visible,:focus-within,:active):before,.state.active:not(:hover,:focus-visible,:focus-within,:active):before{--tw-scale-x:1;--tw-scale-y:1;--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);background:var(--state-active-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);opacity:var(--state-active-opacity,0);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.7s}.btn.selected:not(:hover,:focus-visible,:focus-within,:active):before,.item>a.selected:not(:hover,:focus-visible,:focus-within,:active):before,.state.selected:not(:hover,:focus-visible,:focus-within,:active):before{--tw-scale-x:1;--tw-scale-y:1;background:var(--state-selected-color,var(--state-scale));opacity:var(--state-selected-opacity,.1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn:focus-visible,.item>a:focus-visible,.state:focus-visible{outline:2px solid transparent;outline-offset:2px}.btn:active:before,.btn:focus-visible:before,.btn:hover:before,.item>a:active:before,.item>a:focus-visible:before,.item>a:hover:before,.state:active:before,.state:focus-visible:before,.state:hover:before{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn:hover:before,.item>a:hover:before,.state:hover:before{opacity:var(--state-hover-opacity,1)}.btn:active:before,.item>a:active:before,.state:active:before{--tw-ring-color:var(--state-ring-color,currentColor);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);background:var(--state-pressed-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:var(--state-pressed-opacity,.6);transition-duration:.7s}.btn:focus-visible:before,.item>a:focus-visible:before,.state:focus-visible:before{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-focus-rgb),var(--tw-ring-opacity));background:var(--state-focus-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:var(--state-focus-opacity,1)}.btn.disabled:before,.btn[disabled]:before,.item>a.disabled:before,.item>a[disabled]:before,.state.disabled:before,.state[disabled]:before{display:none}.disabled,.disabled *,[disabled],[disabled] *{--tw-grayscale:grayscale(100%);cursor:not-allowed!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:var(--opacity-disabled)}.load-indicator:after,.load-indicator:before{display:block;opacity:0;position:absolute;transition-delay:0s;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden}.load-indicator:before{--tw-content:attr(data-loading);align-items:center;background-color:rgba(var(--color-canvas-rgb),.7);border-radius:inherit;content:var(--tw-content);display:flex;font-size:.75rem;inset:0;justify-content:center;line-height:1rem;z-index:99}.load-indicator[data-loading]:before{padding-top:3.5rem}.load-indicator:after{--tw-content:"";border-color:transparent currentcolor currentcolor;border-radius:var(--radius-full);border-style:dotted;border-width:4px 3px 4px 4px;content:var(--tw-content);height:2rem;left:50%;margin-left:-1rem;margin-top:-1rem;top:50%;width:2rem;z-index:100}.load-indicator.loading:after,.load-indicator.loading:before{opacity:1;transition-delay:.5s;visibility:visible}@keyframes -spin{to{transform:rotate(1turn)}}.load-indicator.loading:after{animation:-spin 1s linear infinite;opacity:.5}.events-none,.pointer-events-none{pointer-events:none}.events-auto,.pointer-events-auto{pointer-events:auto}.scroll-auto{scroll-behavior:auto}.scroll-smooth{scroll-behavior:smooth}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.active\:opacity-100.active,.active\:opacity-100:active,.group.active .group-active\:opacity-100,.group:active .group-active\:opacity-100,.group:hover .group-hover\:opacity-100,.hover\:opacity-100:hover{opacity:1}.active\:text-primary.active,.active\:text-primary:active,.group.active .group-active\:text-primary,.group:active .group-active\:text-primary,.group:hover .group-hover\:text-primary,.hover\:text-primary:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.active\:border-primary.active,.active\:border-primary:active,.group.active .group-active\:border-primary,.group:active .group-active\:border-primary,.group:hover .group-hover\:border-primary,.hover\:border-primary:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity))}.active\:primary-pale.active,.active\:primary-pale:active,.group.active .group-active\:primary-pale,.group:active .group-active\:primary-pale,.group:hover .group-hover\:primary-pale,.hover\:primary-pale:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.active\:primary.active,.active\:primary:active,.group.active .group-active\:primary,.group:active .group-active\:primary,.group:hover .group-hover\:primary,.hover\:primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.active\:canvas.active,.active\:canvas:active,.group.active .group-active\:canvas,.group:active .group-active\:canvas,.group:hover .group-hover\:canvas,.hover\:canvas:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.active\:font-bold.active,.active\:font-bold:active,.group.active .group-active\:font-bold,.group:active .group-active\:font-bold,.group:hover .group-hover\:font-bold,.hover\:font-bold:hover{font-weight:700}.active\:shadow.active,.active\:shadow:active,.group.active .group-active\:shadow,.group:active .group-active\:shadow,.group:hover .group-hover\:shadow,.hover\:shadow:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.container{width:100%}@media (min-width:1720px){.container{max-width:1720px}}.container{margin-left:auto;margin-right:auto}.popup{--tw-bg-opacity:0.85;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;--tw-backdrop-blur:blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.hidden{display:none!important}.pull-right{float:right}.pull-left{float:left}.clearfix:after{clear:both;content:"";display:block}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-bottom{-o-object-position:bottom;object-position:bottom}.object-center{-o-object-position:center;object-position:center}.object-left{-o-object-position:left;object-position:left}.object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.object-left-top{-o-object-position:left top;object-position:left top}.object-right{-o-object-position:right;object-position:right}.object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.object-right-top{-o-object-position:right top;object-position:right top}.object-top{-o-object-position:top;object-position:top}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-clip{overflow-y:clip}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.overflow-overlay{overflow:overlay}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-auto{inset:auto}.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-full{top:100%}.right-full{right:100%}.bottom-full{bottom:100%}.left-full{left:100%}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.top-px{top:1px}.right-px{right:1px}.bottom-px{bottom:1px}.left-px{left:1px}.top-0\.5{top:.125rem}.right-0\.5{right:.125rem}.bottom-0\.5{bottom:.125rem}.left-0\.5{left:.125rem}.top-1{top:.25rem}.right-1{right:.25rem}.bottom-1{bottom:.25rem}.left-1{left:.25rem}.top-1\.5{top:.375rem}.right-1\.5{right:.375rem}.bottom-1\.5{bottom:.375rem}.left-1\.5{left:.375rem}.top-2{top:.5rem}.right-2{right:.5rem}.bottom-2{bottom:.5rem}.left-2{left:.5rem}.top-2\.5{top:.625rem}.right-2\.5{right:.625rem}.bottom-2\.5{bottom:.625rem}.left-2\.5{left:.625rem}.top-3{top:.75rem}.right-3{right:.75rem}.bottom-3{bottom:.75rem}.left-3{left:.75rem}.top-3\.5{top:.875rem}.right-3\.5{right:.875rem}.bottom-3\.5{bottom:.875rem}.left-3\.5{left:.875rem}.top-4{top:1rem}.right-4{right:1rem}.bottom-4{bottom:1rem}.left-4{left:1rem}.top-5{top:1.25rem}.right-5{right:1.25rem}.bottom-5{bottom:1.25rem}.left-5{left:1.25rem}.top-6{top:1.5rem}.right-6{right:1.5rem}.bottom-6{bottom:1.5rem}.left-6{left:1.5rem}.top-7{top:1.75rem}.right-7{right:1.75rem}.bottom-7{bottom:1.75rem}.left-7{left:1.75rem}.top-8{top:2rem}.right-8{right:2rem}.bottom-8{bottom:2rem}.left-8{left:2rem}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.m-0{margin:0}.mx-0{margin-left:0;margin-right:0}.my-0{margin-bottom:0}.mt-0,.my-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-auto{margin-bottom:auto}.mt-auto,.my-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.m-px{margin:1px}.mx-px{margin-left:1px;margin-right:1px}.my-px{margin-bottom:1px}.mt-px,.my-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.m-0\.5{margin:.125rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.my-0\.5{margin-bottom:.125rem}.mt-0\.5,.my-0\.5{margin-top:.125rem}.mr-0\.5{margin-right:.125rem}.mb-0\.5{margin-bottom:.125rem}.ml-0\.5{margin-left:.125rem}.m-1{margin:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-1{margin-bottom:.25rem}.mt-1,.my-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.m-1\.5{margin:.375rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.my-1\.5{margin-bottom:.375rem}.mt-1\.5,.my-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mb-1\.5{margin-bottom:.375rem}.ml-1\.5{margin-left:.375rem}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-2{margin-bottom:.5rem}.mt-2,.my-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.m-2\.5{margin:.625rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.my-2\.5{margin-bottom:.625rem}.mt-2\.5,.my-2\.5{margin-top:.625rem}.mr-2\.5{margin-right:.625rem}.mb-2\.5{margin-bottom:.625rem}.ml-2\.5{margin-left:.625rem}.m-3{margin:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-3{margin-bottom:.75rem}.mt-3,.my-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.m-3\.5{margin:.875rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.my-3\.5{margin-bottom:.875rem}.mt-3\.5,.my-3\.5{margin-top:.875rem}.mr-3\.5{margin-right:.875rem}.mb-3\.5{margin-bottom:.875rem}.ml-3\.5{margin-left:.875rem}.m-4{margin:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-4{margin-bottom:1rem}.mt-4,.my-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.m-5{margin:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-5{margin-bottom:1.25rem}.mt-5,.my-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.m-6{margin:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-6{margin-bottom:1.5rem}.mt-6,.my-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.m-7{margin:1.75rem}.mx-7{margin-left:1.75rem;margin-right:1.75rem}.my-7{margin-bottom:1.75rem}.mt-7,.my-7{margin-top:1.75rem}.mr-7{margin-right:1.75rem}.mb-7{margin-bottom:1.75rem}.ml-7{margin-left:1.75rem}.m-8{margin:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-8{margin-bottom:2rem}.mt-8,.my-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.m-9{margin:2.25rem}.mx-9{margin-left:2.25rem;margin-right:2.25rem}.my-9{margin-bottom:2.25rem}.mt-9,.my-9{margin-top:2.25rem}.mr-9{margin-right:2.25rem}.mb-9{margin-bottom:2.25rem}.ml-9{margin-left:2.25rem}.m-10{margin:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-10{margin-bottom:2.5rem}.mt-10,.my-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.p-0{padding:0}.p-px{padding:1px}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.p-9{padding:2.25rem}.p-10{padding:2.5rem}.px-0{padding-left:0;padding-right:0}.py-0{padding-bottom:0}.pt-0,.py-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.px-px{padding-left:1px;padding-right:1px}.py-px{padding-bottom:1px}.pt-px,.py-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.py-0\.5{padding-bottom:.125rem}.pt-0\.5,.py-0\.5{padding-top:.125rem}.pr-0\.5{padding-right:.125rem}.pb-0\.5{padding-bottom:.125rem}.pl-0\.5{padding-left:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-1{padding-bottom:.25rem}.pt-1,.py-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.py-1\.5{padding-bottom:.375rem}.pt-1\.5,.py-1\.5{padding-top:.375rem}.pr-1\.5{padding-right:.375rem}.pb-1\.5{padding-bottom:.375rem}.pl-1\.5{padding-left:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-bottom:.5rem}.pt-2,.py-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-2\.5{padding-bottom:.625rem}.pt-2\.5,.py-2\.5{padding-top:.625rem}.pr-2\.5{padding-right:.625rem}.pb-2\.5{padding-bottom:.625rem}.pl-2\.5{padding-left:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem}.pt-3,.py-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.py-3\.5{padding-bottom:.875rem}.pt-3\.5,.py-3\.5{padding-top:.875rem}.pr-3\.5{padding-right:.875rem}.pb-3\.5{padding-bottom:.875rem}.pl-3\.5{padding-left:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-bottom:1rem}.pt-4,.py-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-5{padding-bottom:1.25rem}.pt-5,.py-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-6{padding-bottom:1.5rem}.pt-6,.py-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-7{padding-bottom:1.75rem}.pt-7,.py-7{padding-top:1.75rem}.pr-7{padding-right:1.75rem}.pb-7{padding-bottom:1.75rem}.pl-7{padding-left:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-8{padding-bottom:2rem}.pt-8,.py-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-9{padding-bottom:2.25rem}.pt-9,.py-9{padding-top:2.25rem}.pr-9{padding-right:2.25rem}.pb-9{padding-bottom:2.25rem}.pl-9{padding-left:2.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-10{padding-bottom:2.5rem}.pt-10,.py-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.375rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.375rem*var(--tw-space-x-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.625rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.625rem*var(--tw-space-x-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-x-3\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.875rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.875rem*var(--tw-space-x-reverse))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.25rem*var(--tw-space-x-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.75rem*var(--tw-space-x-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.75rem*var(--tw-space-y-reverse));margin-top:calc(1.75rem*(1 - var(--tw-space-y-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.space-x-9>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2.25rem*var(--tw-space-x-reverse))}.space-y-9>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.25rem*var(--tw-space-y-reverse));margin-top:calc(2.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2.5rem*var(--tw-space-x-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.5rem*var(--tw-space-y-reverse));margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-px>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1px*(1 - var(--tw-space-x-reverse)));margin-right:calc(1px*var(--tw-space-x-reverse))}.space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1px*var(--tw-space-y-reverse));margin-top:calc(1px*(1 - var(--tw-space-y-reverse)))}.w-0{width:0}.w-px{width:1px}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-32{width:8rem}.w-36{width:9rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-52{width:13rem}.w-56{width:14rem}.w-60{width:15rem}.w-64{width:16rem}.w-72{width:18rem}.w-80{width:20rem}.w-96{width:24rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.666667%}.w-2\/6{width:33.333333%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.w-min{width:-moz-min-content;width:min-content}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.min-w-0{min-width:0}.min-w-full{min-width:100%}.min-w-min{min-width:-moz-min-content;min-width:min-content}.min-w-max{min-width:-moz-max-content;min-width:max-content}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.max-w-0{max-width:0}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.h-0{height:0}.h-px{height:1px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-32{height:8rem}.h-36{height:9rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-52{height:13rem}.h-56{height:14rem}.h-60{height:15rem}.h-64{height:16rem}.h-72{height:18rem}.h-80{height:20rem}.h-96{height:24rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-2\/3{height:66.666667%}.h-1\/4{height:25%}.h-2\/4{height:50%}.h-3\/4{height:75%}.h-1\/5{height:20%}.h-2\/5{height:40%}.h-3\/5{height:60%}.h-4\/5{height:80%}.h-1\/6{height:16.666667%}.h-2\/6{height:33.333333%}.h-3\/6{height:50%}.h-4\/6{height:66.666667%}.h-5\/6{height:83.333333%}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.h-min{height:-moz-min-content;height:min-content}.h-max{height:-moz-max-content;height:max-content}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-min{min-height:-moz-min-content;min-height:min-content}.min-h-max{min-height:-moz-max-content;min-height:max-content}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.max-h-0{max-height:0}.max-h-px{max-height:1px}.max-h-none{max-height:none}.max-h-full{max-height:100%}.max-h-min{max-height:-moz-min-content;max-height:min-content}.max-h-max{max-height:-moz-max-content;max-height:max-content}.max-h-fit{max-height:-moz-fit-content;max-height:fit-content}.canvas,.surface,.surface-light,.surface-strong{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}.canvas{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.surface-light{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-light-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity))}.surface{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.surface-strong{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-strong-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-strong-rgb),var(--tw-bg-opacity))}.inverse{background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.inverse,.white{--tw-bg-opacity:1;--tw-text-opacity:1}.white{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-white-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-white-rgb),var(--tw-bg-opacity));color:rgba(var(--color-fore-in-light-rgb),var(--tw-text-opacity))}.black{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-black-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-black-rgb),var(--tw-bg-opacity));color:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity))}.transparent{--tw-ring-color:transparent;background-color:transparent}.skin{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.skin:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger,.darken,.darker,.darkest,.gray,.gray-100,.gray-200,.gray-300,.gray-400,.gray-50,.gray-500,.gray-600,.gray-700,.gray-800,.gray-900,.gray-950,.important,.lighten,.lighter,.lightest,.primary,.secondary,.special,.success,.warning{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger:hover,.darken:hover,.darker:hover,.darkest:hover,.gray-100:hover,.gray-200:hover,.gray-300:hover,.gray-400:hover,.gray-500:hover,.gray-50:hover,.gray-600:hover,.gray-700:hover,.gray-800:hover,.gray-900:hover,.gray-950:hover,.gray:hover,.important:hover,.lighten:hover,.lighter:hover,.lightest:hover,.primary:hover,.secondary:hover,.special:hover,.success:hover,.warning:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger,.darken,.darker,.darkest,.gray,.gray-100,.gray-200,.gray-300,.gray-400,.gray-50,.gray-500,.gray-600,.gray-700,.gray-800,.gray-900,.gray-950,.important,.lighten,.lighter,.lightest,.primary,.secondary,.special,.success,.warning{--skin-text:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity));--skin-color:rgba(var(--skin-solid-rgb),1);--state-ring-color:var(--skin-color);--state-active-color:rgba(0,0,0,.1);--state-pressed-color:rgba(0,0,0,.1);--state-color:hsla(0,0%,100%,.1);--state-focus-color:rgba(0,0,0,.1)}.primary{--skin-solid-rgb:var(--color-primary-500-rgb)}.secondary{--skin-solid-rgb:var(--color-secondary-500-rgb)}.success{--skin-solid-rgb:var(--color-success-500-rgb)}.warning{--skin-solid-rgb:var(--color-warning-500-rgb)}.danger{--skin-solid-rgb:var(--color-danger-500-rgb)}.important{--skin-solid-rgb:var(--color-important-500-rgb)}.special{--skin-solid-rgb:var(--color-special-500-rgb)}.gray-50{--skin-bg:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-100{--skin-solid-rgb:var(--color-gray-100-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-200,.lightest{--skin-solid-rgb:var(--color-gray-200-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-300,.lighter{--skin-solid-rgb:var(--color-gray-300-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-400,.lighten{--skin-solid-rgb:var(--color-gray-400-rgb)}.gray,.gray-500{--skin-solid-rgb:var(--color-gray-500-rgb)}.darken,.gray-600{--skin-solid-rgb:var(--color-gray-600-rgb)}.darker,.gray-700{--skin-solid-rgb:var(--color-gray-700-rgb)}.darkest,.gray-800{--skin-solid-rgb:var(--color-gray-800-rgb)}.gray-900{--skin-solid-rgb:var(--color-gray-900-rgb)}.gray-950{--skin-solid-rgb:var(--color-gray-950-rgb)}.danger-pale,.gray-100-pale,.gray-200-pale,.gray-300-pale,.gray-400-pale,.gray-50-pale,.gray-500-pale,.gray-600-pale,.gray-700-pale,.gray-800-pale,.gray-900-pale,.gray-950-pale,.gray-pale,.important-pale,.pale,.primary-pale,.secondary-pale,.special-pale,.success-pale,.warning-pale{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-pale:hover,.gray-100-pale:hover,.gray-200-pale:hover,.gray-300-pale:hover,.gray-400-pale:hover,.gray-50-pale:hover,.gray-500-pale:hover,.gray-600-pale:hover,.gray-700-pale:hover,.gray-800-pale:hover,.gray-900-pale:hover,.gray-950-pale:hover,.gray-pale:hover,.important-pale:hover,.pale:hover,.primary-pale:hover,.secondary-pale:hover,.special-pale:hover,.success-pale:hover,.warning-pale:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-pale,.gray-100-pale,.gray-200-pale,.gray-300-pale,.gray-400-pale,.gray-50-pale,.gray-500-pale,.gray-600-pale,.gray-700-pale,.gray-800-pale,.gray-900-pale,.gray-950-pale,.gray-pale,.important-pale,.pale,.primary-pale,.secondary-pale,.special-pale,.success-pale,.warning-pale{--skin-color:rgba(var(--skin-pale-rgb),.1);--skin-text:rgba(var(--skin-pale-rgb),1);--state-color:rgba(var(--skin-pale-rgb),.1)}.pale{--skin-pale-rgb:var(--color-gray-500-rgb)}.primary-pale{--skin-pale-rgb:var(--color-primary-500-rgb)}.secondary-pale{--skin-pale-rgb:var(--color-secondary-500-rgb)}.success-pale{--skin-pale-rgb:var(--color-success-500-rgb)}.warning-pale{--skin-pale-rgb:var(--color-warning-500-rgb)}.danger-pale{--skin-pale-rgb:var(--color-danger-500-rgb)}.important-pale{--skin-pale-rgb:var(--color-important-500-rgb)}.special-pale{--skin-pale-rgb:var(--color-special-500-rgb)}.gray-50-pale{--skin-pale-rgb:var(--color-gray-50-rgb);--skin-text:var(--color-gray-400)}.gray-100-pale{--skin-pale-rgb:var(--color-gray-100-rgb);--skin-text:var(--color-gray-400)}.gray-200-pale{--skin-pale-rgb:var(--color-gray-200-rgb);--skin-text:var(--color-gray-400)}.gray-300-pale{--skin-pale-rgb:var(--color-gray-300-rgb);--skin-text:var(--color-gray-500)}.gray-400-pale{--skin-pale-rgb:var(--color-gray-400-rgb);--skin-text:var(--color-gray-500)}.gray-500-pale,.gray-pale{--skin-pale-rgb:var(--color-gray-500-rgb)}.gray-600-pale{--skin-pale-rgb:var(--color-gray-600-rgb)}.gray-700-pale{--skin-pale-rgb:var(--color-gray-700-rgb)}.gray-800-pale{--skin-pale-rgb:var(--color-gray-800-rgb)}.gray-900-pale{--skin-pale-rgb:var(--color-gray-900-rgb)}.gray-950-pale{--skin-pale-rgb:var(--color-gray-950-rgb)}.danger-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.outline,.primary-outline,.secondary-outline,.special-outline,.success-outline,.warning-outline{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-outline:hover,.gray-300-outline:hover,.gray-400-outline:hover,.gray-600-outline:hover,.gray-outline:hover,.important-outline:hover,.outline:hover,.primary-outline:hover,.secondary-outline:hover,.special-outline:hover,.success-outline:hover,.warning-outline:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.outline,.primary-outline,.secondary-outline,.special-outline,.success-outline,.warning-outline{--skin-text:var(--skin-color,inherit);--skin-bg:transparent;--skin-color:rgba(var(--skin-outline-rgb),1);--state-color:rgba(var(--skin-outline-rgb),.1)}.outline{--skin-outline-rgb:var(--color-fore-rgb)}.primary-outline{--skin-outline-rgb:var(--color-primary-500-rgb)}.secondary-outline{--skin-outline-rgb:var(--color-secondary-500-rgb)}.success-outline{--skin-outline-rgb:var(--color-success-500-rgb)}.warning-outline{--skin-outline-rgb:var(--color-warning-500-rgb)}.danger-outline{--skin-outline-rgb:var(--color-danger-500-rgb)}.important-outline{--skin-outline-rgb:var(--color-important-500-rgb)}.special-outline{--skin-outline-rgb:var(--color-special-500-rgb)}.gray-300-outline{--skin-text:var(--color-gray-500);--skin-outline-rgb:var(--color-gray-300-rgb)}.gray-400-outline{--skin-text:var(--color-gray-500);--skin-outline-rgb:var(--color-gray-400-rgb)}.gray-outline{--skin-outline-rgb:var(--color-gray-500-rgb)}.gray-600-outline{--skin-outline-rgb:var(--color-gray-600-rgb)}.danger-ghost,.ghost,.important-ghost,.primary-ghost,.secondary-ghost,.special-ghost,.success-ghost,.warning-ghost{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-ghost:hover,.ghost:hover,.important-ghost:hover,.primary-ghost:hover,.secondary-ghost:hover,.special-ghost:hover,.success-ghost:hover,.warning-ghost:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-ghost,.ghost,.important-ghost,.primary-ghost,.secondary-ghost,.special-ghost,.success-ghost,.warning-ghost{--tw-ring-opacity:0;--tw-bg-opacity:0;--skin-text:var(--skin-color,inherit);--skin-bg:transparent;--skin-ring:transparent;--skin-color:rgba(var(--skin-ghost-rgb),1);--state-color:rgba(var(--skin-ghost-rgb),.1)}.ghost{--skin-ghost-rgb:var(--color-fore-rgb);--skin-text:inherit}.primary-ghost{--skin-ghost-rgb:var(--color-primary-500-rgb)}.secondary-ghost{--skin-ghost-rgb:var(--color-secondary-500-rgb)}.success-ghost{--skin-ghost-rgb:var(--color-success-500-rgb)}.warning-ghost{--skin-ghost-rgb:var(--color-warning-500-rgb)}.danger-ghost{--skin-ghost-rgb:var(--color-danger-500-rgb)}.important-ghost{--skin-ghost-rgb:var(--color-important-500-rgb)}.special-ghost{--skin-ghost-rgb:var(--color-special-500-rgb)}.font-sans{font-family:-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif}.font-serif{font-family:Nimbus Roman No9 L,Songti SC,Noto Serif CJK SC,Source Han Serif SC,Source Han Serif CN,STSong,AR PL New Sung,AR PL SungtiL GB,NSimSun,SimSun,TW-Sung,WenQuanYi Bitmap Song,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR PL UMing TW MBE,PMingLiU,MingLiU,serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-root{font-size:16px}.text-sm{font-size:.75rem;line-height:1rem}.text-base{font-size:.8125rem;line-height:1.25rem}.text-md{font-size:.875rem;line-height:1.3rem}.text-lg{font-size:1rem;line-height:1.5rem}.text-xl{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-thin{font-weight:100}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-black{font-weight:900}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-10{line-height:2.5rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.line-1{-webkit-line-clamp:1}.line-1,.line-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-2{-webkit-line-clamp:2}.line-3{-webkit-line-clamp:3}.line-3,.line-4{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-4{-webkit-line-clamp:4}.line-5{-webkit-line-clamp:5}.line-5,.line-6{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-6{-webkit-line-clamp:6}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.align-bottom{vertical-align:bottom}.align-sub{vertical-align:sub}.align-super{vertical-align:super}.text-primary{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.text-secondary{--tw-text-opacity:1;color:rgba(var(--color-secondary-500-rgb),var(--tw-text-opacity))}.text-success{--tw-text-opacity:1;color:rgba(var(--color-success-500-rgb),var(--tw-text-opacity))}.text-warning{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.text-danger{--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity))}.text-important{--tw-text-opacity:1;color:rgba(var(--color-important-500-rgb),var(--tw-text-opacity))}.text-special{--tw-text-opacity:1;color:rgba(var(--color-special-500-rgb),var(--tw-text-opacity))}.text-primary-50{--tw-text-opacity:1;color:rgba(var(--color-primary-50-rgb),var(--tw-text-opacity))}.text-primary-100{--tw-text-opacity:1;color:rgba(var(--color-primary-100-rgb),var(--tw-text-opacity))}.text-primary-200{--tw-text-opacity:1;color:rgba(var(--color-primary-200-rgb),var(--tw-text-opacity))}.text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300-rgb),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400-rgb),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600-rgb),var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700-rgb),var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgba(var(--color-primary-800-rgb),var(--tw-text-opacity))}.text-primary-900{--tw-text-opacity:1;color:rgba(var(--color-primary-900-rgb),var(--tw-text-opacity))}.text-primary-950{--tw-text-opacity:1;color:rgba(var(--color-primary-950-rgb),var(--tw-text-opacity))}.text-secondary-50{--tw-text-opacity:1;color:rgba(var(--color-secondary-50-rgb),var(--tw-text-opacity))}.text-secondary-100{--tw-text-opacity:1;color:rgba(var(--color-secondary-100-rgb),var(--tw-text-opacity))}.text-secondary-200{--tw-text-opacity:1;color:rgba(var(--color-secondary-200-rgb),var(--tw-text-opacity))}.text-secondary-300{--tw-text-opacity:1;color:rgba(var(--color-secondary-300-rgb),var(--tw-text-opacity))}.text-secondary-400{--tw-text-opacity:1;color:rgba(var(--color-secondary-400-rgb),var(--tw-text-opacity))}.text-secondary-500{--tw-text-opacity:1;color:rgba(var(--color-secondary-500-rgb),var(--tw-text-opacity))}.text-secondary-600{--tw-text-opacity:1;color:rgba(var(--color-secondary-600-rgb),var(--tw-text-opacity))}.text-secondary-700{--tw-text-opacity:1;color:rgba(var(--color-secondary-700-rgb),var(--tw-text-opacity))}.text-secondary-800{--tw-text-opacity:1;color:rgba(var(--color-secondary-800-rgb),var(--tw-text-opacity))}.text-secondary-900{--tw-text-opacity:1;color:rgba(var(--color-secondary-900-rgb),var(--tw-text-opacity))}.text-secondary-950{--tw-text-opacity:1;color:rgba(var(--color-secondary-950-rgb),var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgba(var(--color-gray-50-rgb),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--color-gray-100-rgb),var(--tw-text-opacity))}.text-gray-200,.text-lightest{--tw-text-opacity:1;color:rgba(var(--color-gray-200-rgb),var(--tw-text-opacity))}.text-gray-300,.text-lighter{--tw-text-opacity:1;color:rgba(var(--color-gray-300-rgb),var(--tw-text-opacity))}.text-gray-400,.text-lighten{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.text-gray,.text-gray-500{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.text-darken,.text-gray-600{--tw-text-opacity:1;color:rgba(var(--color-gray-600-rgb),var(--tw-text-opacity))}.text-darker,.text-gray-700{--tw-text-opacity:1;color:rgba(var(--color-gray-700-rgb),var(--tw-text-opacity))}.text-darkest,.text-gray-800{--tw-text-opacity:1;color:rgba(var(--color-gray-800-rgb),var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(var(--color-gray-900-rgb),var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--color-gray-950-rgb),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(var(--color-white-rgb),var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgba(var(--color-black-rgb),var(--tw-text-opacity))}.text-transparent{color:transparent}.text-canvas{--tw-text-opacity:1;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.text-surface-light{--tw-text-opacity:1;color:rgba(var(--color-surface-light-rgb),var(--tw-text-opacity))}.text-surface{--tw-text-opacity:1;color:rgba(var(--color-surface-rgb),var(--tw-text-opacity))}.text-surface-strong{--tw-text-opacity:1;color:rgba(var(--color-surface-strong-rgb),var(--tw-text-opacity))}.text-inverse{--tw-text-opacity:1;color:rgba(var(--color-inverse-rgb),var(--tw-text-opacity))}.text-fore-in-light{--tw-text-opacity:1;color:rgba(var(--color-fore-in-light-rgb),var(--tw-text-opacity))}.text-fore-in-dark{--tw-text-opacity:1;color:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity))}.text-fore{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}.text-focus{--tw-text-opacity:1;color:rgba(var(--color-focus-rgb),var(--tw-text-opacity))}.text-link{--tw-text-opacity:1;color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}.text-link-hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}.text-current{color:currentColor}.text-inherit{color:inherit}.clip,.ellipsis,.text-clip,.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.clip,.text-clip{text-overflow:clip}.nowrap,.whitespace-nowrap{white-space:nowrap}.pre,.whitespace-pre{white-space:pre}.pre-line,.whitespace-pre-line{white-space:pre-line}.pre-wrap,.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-opacity-0{--tw-text-opacity:0}.text-opacity-5{--tw-text-opacity:.05}.text-opacity-10{--tw-text-opacity:.1}.text-opacity-20{--tw-text-opacity:.2}.text-opacity-25{--tw-text-opacity:.25}.text-opacity-30{--tw-text-opacity:.3}.text-opacity-40{--tw-text-opacity:.4}.text-opacity-50{--tw-text-opacity:.5}.text-opacity-60{--tw-text-opacity:.6}.text-opacity-70{--tw-text-opacity:.7}.text-opacity-80{--tw-text-opacity:.8}.text-opacity-90{--tw-text-opacity:.9}.text-opacity-95{--tw-text-opacity:.95}.text-opacity-100{--tw-text-opacity:1}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.list-unstyled{list-style-type:none;padding-left:0}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.bg-primary{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-500-rgb),var(--tw-bg-opacity))}.bg-success{--tw-bg-opacity:1;background-color:rgba(var(--color-success-500-rgb),var(--tw-bg-opacity))}.bg-warning{--tw-bg-opacity:1;background-color:rgba(var(--color-warning-500-rgb),var(--tw-bg-opacity))}.bg-danger{--tw-bg-opacity:1;background-color:rgba(var(--color-danger-500-rgb),var(--tw-bg-opacity))}.bg-important{--tw-bg-opacity:1;background-color:rgba(var(--color-important-500-rgb),var(--tw-bg-opacity))}.bg-special{--tw-bg-opacity:1;background-color:rgba(var(--color-special-500-rgb),var(--tw-bg-opacity))}.bg-primary-50{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200-rgb),var(--tw-bg-opacity))}.bg-primary-300{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-300-rgb),var(--tw-bg-opacity))}.bg-primary-400{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400-rgb),var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600-rgb),var(--tw-bg-opacity))}.bg-primary-700{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-700-rgb),var(--tw-bg-opacity))}.bg-primary-800{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800-rgb),var(--tw-bg-opacity))}.bg-primary-900{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900-rgb),var(--tw-bg-opacity))}.bg-primary-950{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-950-rgb),var(--tw-bg-opacity))}.bg-secondary-50{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-50-rgb),var(--tw-bg-opacity))}.bg-secondary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-100-rgb),var(--tw-bg-opacity))}.bg-secondary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-200-rgb),var(--tw-bg-opacity))}.bg-secondary-300{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-300-rgb),var(--tw-bg-opacity))}.bg-secondary-400{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-400-rgb),var(--tw-bg-opacity))}.bg-secondary-500{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-500-rgb),var(--tw-bg-opacity))}.bg-secondary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-600-rgb),var(--tw-bg-opacity))}.bg-secondary-700{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-700-rgb),var(--tw-bg-opacity))}.bg-secondary-800{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-800-rgb),var(--tw-bg-opacity))}.bg-secondary-900{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-900-rgb),var(--tw-bg-opacity))}.bg-secondary-950{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-950-rgb),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity))}.bg-gray-200,.bg-lightest{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-200-rgb),var(--tw-bg-opacity))}.bg-gray-300,.bg-lighter{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-300-rgb),var(--tw-bg-opacity))}.bg-gray-400,.bg-light{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-400-rgb),var(--tw-bg-opacity))}.bg-gray,.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-500-rgb),var(--tw-bg-opacity))}.bg-darken,.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-600-rgb),var(--tw-bg-opacity))}.bg-darker,.bg-gray-700{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-700-rgb),var(--tw-bg-opacity))}.bg-darkest,.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-800-rgb),var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-900-rgb),var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-950-rgb),var(--tw-bg-opacity))}.bg-canvas{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.bg-surface-light{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity))}.bg-surface{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.bg-surface-strong{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-strong-rgb),var(--tw-bg-opacity))}.bg-inverse{--tw-bg-opacity:1;background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity))}.bg-fore-in-light{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-in-light-rgb),var(--tw-bg-opacity))}.bg-fore-in-dark{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-in-dark-rgb),var(--tw-bg-opacity))}.bg-fore{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity))}.bg-focus{--tw-bg-opacity:1;background-color:rgba(var(--color-focus-rgb),var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(var(--color-white-rgb),var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgba(var(--color-black-rgb),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-current{background-color:currentColor}.bg-inherit{background-color:inherit}.bg-none{background-image:none}.bg-opacity-0{--tw-bg-opacity:0}.bg-opacity-5{--tw-bg-opacity:.05}.bg-opacity-10{--tw-bg-opacity:.1}.bg-opacity-20{--tw-bg-opacity:.2}.bg-opacity-30{--tw-bg-opacity:.3}.bg-opacity-40{--tw-bg-opacity:.4}.bg-opacity-50{--tw-bg-opacity:.5}.bg-opacity-60{--tw-bg-opacity:.6}.bg-opacity-70{--tw-bg-opacity:.7}.bg-opacity-80{--tw-bg-opacity:.8}.bg-opacity-90{--tw-bg-opacity:.9}.bg-opacity-100{--tw-bg-opacity:1}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-bottom{background-position:bottom}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-left-bottom{background-position:0 100%}.bg-left-top{background-position:0 0}.bg-right{background-position:100%}.bg-right-bottom{background-position:100% 100%}.bg-right-top{background-position:100% 0}.bg-top{background-position:top}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.divider{align-self:stretch;border-color:currentColor;border-left-width:1px;border-top-width:1px;opacity:.1}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-t{border-top-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-l-2{border-left-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-t-4{border-top-width:4px}.border-l-4{border-left-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-light{--tw-border-opacity:1;border-color:rgba(var(--color-border-light-rgb),var(--tw-border-opacity))}.border-strong{--tw-border-opacity:1;border-color:rgba(var(--color-border-strong-rgb),var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity))}.border-secondary{--tw-border-opacity:1;border-color:rgba(var(--color-secondary-500-rgb),var(--tw-border-opacity))}.border-success{--tw-border-opacity:1;border-color:rgba(var(--color-success-500-rgb),var(--tw-border-opacity))}.border-warning{--tw-border-opacity:1;border-color:rgba(var(--color-warning-500-rgb),var(--tw-border-opacity))}.border-danger{--tw-border-opacity:1;border-color:rgba(var(--color-danger-500-rgb),var(--tw-border-opacity))}.border-important{--tw-border-opacity:1;border-color:rgba(var(--color-important-500-rgb),var(--tw-border-opacity))}.border-special{--tw-border-opacity:1;border-color:rgba(var(--color-special-500-rgb),var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgba(var(--color-gray-50-rgb),var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--color-gray-100-rgb),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--color-gray-200-rgb),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--color-gray-300-rgb),var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity))}.border-gray,.border-gray-500{--tw-border-opacity:1;border-color:rgba(var(--color-gray-500-rgb),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--color-gray-600-rgb),var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(var(--color-gray-700-rgb),var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgba(var(--color-gray-800-rgb),var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgba(var(--color-gray-900-rgb),var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgba(var(--color-gray-950-rgb),var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgba(var(--color-white-rgb),var(--tw-border-opacity))}.border-black{--tw-border-opacity:1;border-color:rgba(var(--color-black-rgb),var(--tw-border-opacity))}.border-canvas{--tw-border-opacity:1;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity))}.border-surface-light{--tw-border-opacity:1;border-color:rgba(var(--color-surface-light-rgb),var(--tw-border-opacity))}.border-surface{--tw-border-opacity:1;border-color:rgba(var(--color-surface-rgb),var(--tw-border-opacity))}.border-surface-strong{--tw-border-opacity:1;border-color:rgba(var(--color-surface-strong-rgb),var(--tw-border-opacity))}.border-inverse{--tw-border-opacity:1;border-color:rgba(var(--color-inverse-rgb),var(--tw-border-opacity))}.border-fore-in-light{--tw-border-opacity:1;border-color:rgba(var(--color-fore-in-light-rgb),var(--tw-border-opacity))}.border-fore-in-dark{--tw-border-opacity:1;border-color:rgba(var(--color-fore-in-dark-rgb),var(--tw-border-opacity))}.border-fore{--tw-border-opacity:1;border-color:rgba(var(--color-fore-rgb),var(--tw-border-opacity))}.border-focus{--tw-border-opacity:1;border-color:rgba(var(--color-focus-rgb),var(--tw-border-opacity))}.border-link{--tw-border-opacity:1;border-color:rgba(var(--color-link-rgb),var(--tw-border-opacity))}.border-link-hover{--tw-border-opacity:1;border-color:rgba(var(--color-link-hover-rgb),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-current{border-color:currentColor}.border-inherit{border-color:inherit}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-hidden{border-style:hidden}.border-none{border-style:none}.border-opacity-0{--tw-border-opacity:0}.border-opacity-5{--tw-border-opacity:.05}.border-opacity-10{--tw-border-opacity:.1}.border-opacity-20{--tw-border-opacity:.2}.border-opacity-25{--tw-border-opacity:.25}.border-opacity-30{--tw-border-opacity:.3}.border-opacity-40{--tw-border-opacity:.4}.border-opacity-50{--tw-border-opacity:.5}.border-opacity-60{--tw-border-opacity:.6}.border-opacity-70{--tw-border-opacity:.7}.border-opacity-80{--tw-border-opacity:.8}.border-opacity-90{--tw-border-opacity:.9}.border-opacity-95{--tw-border-opacity:.95}.border-opacity-100{--tw-border-opacity:1}.rounded-none{border-radius:var(--radius-none)}.rounded-sm{border-radius:var(--radius-sm)}.rounded{border-radius:var(--radius)}.rounded-md{border-radius:var(--radius-md)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.circle,.rounded-full{border-radius:var(--radius-full)}.rounded-l-none{border-bottom-left-radius:var(--radius-none);border-top-left-radius:var(--radius-none)}.rounded-t-none{border-top-left-radius:var(--radius-none)}.rounded-r-none,.rounded-t-none{border-top-right-radius:var(--radius-none)}.rounded-b-none,.rounded-r-none{border-bottom-right-radius:var(--radius-none)}.rounded-b-none{border-bottom-left-radius:var(--radius-none)}.rounded-br-none{border-bottom-right-radius:var(--radius-none)}.rounded-bl-none{border-bottom-left-radius:var(--radius-none)}.rounded-tr-none{border-top-right-radius:var(--radius-none)}.rounded-tl-none{border-top-left-radius:var(--radius-none)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-border-light{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-light-rgb),var(--tw-ring-opacity))}.ring-border{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity))}.ring-border-strong{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity))}.ring-light{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05}.ring-gray{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.1}.ring-dark{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.2}.ring-darker{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.3}.ring-darkest{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.5}.ring-primary{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-500-rgb),var(--tw-ring-opacity))}.ring-secondary{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-secondary-500-rgb),var(--tw-ring-opacity))}.ring-warning{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-warning-500-rgb),var(--tw-ring-opacity))}.ring-success{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-success-500-rgb),var(--tw-ring-opacity))}.ring-danger{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-danger-500-rgb),var(--tw-ring-opacity))}.ring-important{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-important-500-rgb),var(--tw-ring-opacity))}.ring-special{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-special-500-rgb),var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-50-rgb),var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-100-rgb),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-200-rgb),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-300-rgb),var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-400-rgb),var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-500-rgb),var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-600-rgb),var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-700-rgb),var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-800-rgb),var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-900-rgb),var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-950-rgb),var(--tw-ring-opacity))}.ring-inverse{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity))}.ring-canvas{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-canvas-rgb),var(--tw-ring-opacity))}.ring-surface{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-rgb),var(--tw-ring-opacity))}.ring-fore{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-fore-rgb),var(--tw-ring-opacity))}.ring-transparent{--tw-ring-color:transparent}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-black-rgb),var(--tw-ring-opacity))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-white-rgb),var(--tw-ring-opacity))}.ring-inherit{--tw-ring-color:inherit}.ring-current{--tw-ring-color:currentColor}.ring-opacity-0{--tw-ring-opacity:0}.ring-opacity-5{--tw-ring-opacity:.05}.ring-opacity-10{--tw-ring-opacity:.1}.ring-opacity-20{--tw-ring-opacity:.2}.ring-opacity-30{--tw-ring-opacity:.3}.ring-opacity-40{--tw-ring-opacity:.4}.ring-opacity-50{--tw-ring-opacity:.5}.ring-opacity-60{--tw-ring-opacity:.6}.ring-opacity-70{--tw-ring-opacity:.7}.ring-opacity-80{--tw-ring-opacity:.8}.ring-opacity-90{--tw-ring-opacity:.9}.ring-opacity-100{--tw-ring-opacity:1}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-3{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-3,.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-8{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-offset-0{--tw-ring-offset-width:0px}.ring-offset-1{--tw-ring-offset-width:1px}.ring-offset-2{--tw-ring-offset-width:2px}.ring-offset-4{--tw-ring-offset-width:4px}.ring-offset-8{--tw-ring-offset-width:8px}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 2px 6px -1px rgba(0,0,0,.2),0 1px 4px -2px rgba(0,0,0,.15);--tw-shadow-colored:0 2px 6px -1px var(--tw-shadow-color),0 1px 4px -2px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 5px 15px -3px rgba(0,0,0,.2),0 2px 6px -4px rgba(0,0,0,.15);--tw-shadow-colored:0 5px 15px -3px var(--tw-shadow-color),0 2px 6px -4px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color)}.shadow-2xl,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--tw-shadow-colored:0 10px 50px -10px var(--tw-shadow-color),0 8px 20px -10px var(--tw-shadow-color)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-inner,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.muted{opacity:var(--opacity-muted)}.opacity-0{opacity:0}.opacity-5{opacity:.05}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.blur-none{--tw-blur:blur(0)}.blur-none,.blur-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-sm{--tw-blur:blur(4px)}.blur{--tw-blur:blur(8px)}.blur,.blur-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-md{--tw-blur:blur(12px)}.blur-lg{--tw-blur:blur(16px)}.blur-lg,.blur-xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-xl{--tw-blur:blur(24px)}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.filter-none{filter:none!important}.drop-shadow-none{--tw-drop-shadow:drop-shadow(0 0 #0000)}.drop-shadow-none,.drop-shadow-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.drop-shadow,.drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}.drop-shadow-lg,.drop-shadow-xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-xl{--tw-drop-shadow:drop-shadow(0 20px 13px rgba(0,0,0,.03)) drop-shadow(0 8px 5px rgba(0,0,0,.08))}.drop-shadow-2xl{--tw-drop-shadow:drop-shadow(0 25px 25px rgba(0,0,0,.15));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-none{--tw-backdrop-blur:blur(0)}.backdrop-blur-none,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-md{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-lg,.backdrop-blur-xl{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(40px)}.backdrop-blur-2xl,.backdrop-blur-3xl{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-3xl{--tw-backdrop-blur:blur(64px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fade,.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{opacity:0;transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{--tw-scale-x:.9;--tw-scale-y:.9}.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-bottom{--tw-translate-y:25%}.fade-from-top{--tw-translate-y:-25%}.fade-from-left,.fade-from-top{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-left{--tw-translate-x:-25%}.fade-from-right{--tw-translate-x:25%}.fade-from-bottom.in,.fade-from-center.in,.fade-from-left.in,.fade-from-right,.fade-from-right.in,.fade-from-top.in,.fade.in{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-bottom.in,.fade-from-center.in,.fade-from-left.in,.fade-from-right.in,.fade-from-top.in,.fade.in{--tw-translate-x:0px;--tw-translate-y:0px;--tw-scale-x:1;--tw-scale-y:1;opacity:1}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-1000{transition-duration:1s}@keyframes -spin{to{transform:rotate(1turn)}}.animate-spin,.spin{animation:-spin 1s linear infinite}@keyframes -ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping,.ping{animation:-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes -pulse{50%{opacity:.5}}.animate-pulse,.pulse{animation:-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes -bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce,.bounce{animation:-bounce 1s infinite}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-0,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75}.scale-75,.scale-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}.scale-125,.scale-150{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-150{--tw-scale-x:1.5;--tw-scale-y:1.5}.flip-x{--tw-scale-x:-1}.flip-x,.flip-y{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flip-y{--tw-scale-y:-1}.rotate-0{--tw-rotate:0deg}.rotate-0,.rotate-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-1{--tw-rotate:1deg}.rotate-2{--tw-rotate:2deg}.rotate-2,.rotate-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-3{--tw-rotate:3deg}.rotate-6{--tw-rotate:6deg}.rotate-12,.rotate-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-45{--tw-rotate:45deg}.rotate-45,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.rotate-135{--tw-rotate:135deg}.rotate-135,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-270{--tw-rotate:270deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.basis-0{flex-basis:0px}.basis-1{flex-basis:0.25rem}.basis-2{flex-basis:0.5rem}.basis-3{flex-basis:0.75rem}.basis-4{flex-basis:1rem}.basis-5{flex-basis:1.25rem}.basis-6{flex-basis:1.5rem}.basis-7{flex-basis:1.75rem}.basis-8{flex-basis:2rem}.basis-9{flex-basis:2.25rem}.basis-10{flex-basis:2.5rem}.basis-11{flex-basis:2.75rem}.basis-12{flex-basis:3rem}.basis-14{flex-basis:3.5rem}.basis-16{flex-basis:4rem}.basis-20{flex-basis:5rem}.basis-24{flex-basis:6rem}.basis-28{flex-basis:7rem}.basis-32{flex-basis:8rem}.basis-36{flex-basis:9rem}.basis-40{flex-basis:10rem}.basis-44{flex-basis:11rem}.basis-48{flex-basis:12rem}.basis-52{flex-basis:13rem}.basis-56{flex-basis:14rem}.basis-60{flex-basis:15rem}.basis-64{flex-basis:16rem}.basis-72{flex-basis:18rem}.basis-80{flex-basis:20rem}.basis-96{flex-basis:24rem}.basis-auto{flex-basis:auto}.basis-px{flex-basis:1px}.basis-0\.5{flex-basis:0.125rem}.basis-1\.5{flex-basis:0.375rem}.basis-2\.5{flex-basis:0.625rem}.basis-3\.5{flex-basis:0.875rem}.basis-1\/2{flex-basis:50%}.basis-1\/3{flex-basis:33.333333%}.basis-2\/3{flex-basis:66.666667%}.basis-1\/4{flex-basis:25%}.basis-2\/4{flex-basis:50%}.basis-3\/4{flex-basis:75%}.basis-1\/5{flex-basis:20%}.basis-2\/5{flex-basis:40%}.basis-3\/5{flex-basis:60%}.basis-4\/5{flex-basis:80%}.basis-1\/6{flex-basis:16.666667%}.basis-2\/6{flex-basis:33.333333%}.basis-3\/6{flex-basis:50%}.basis-4\/6{flex-basis:66.666667%}.basis-5\/6{flex-basis:83.333333%}.basis-1\/12{flex-basis:8.333333%}.basis-2\/12{flex-basis:16.666667%}.basis-3\/12{flex-basis:25%}.basis-4\/12{flex-basis:33.333333%}.basis-5\/12{flex-basis:41.666667%}.basis-6\/12{flex-basis:50%}.basis-7\/12{flex-basis:58.333333%}.basis-8\/12{flex-basis:66.666667%}.basis-9\/12{flex-basis:75%}.basis-10\/12{flex-basis:83.333333%}.basis-11\/12{flex-basis:91.666667%}.basis-full{flex-basis:100%}.row{display:flex;flex-direction:row}.center,.col{display:flex;flex-direction:column}.center,.center-row{align-items:center;justify-content:center}.center-row{display:flex;flex-direction:row}.center-x,.center-y{align-items:center;display:flex}.center-y{flex-direction:column}.row-reverse{display:flex;flex-direction:row-reverse}.col-reverse{display:flex;flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.grow{flex-grow:1!important}.grow-0{flex-grow:0!important}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.gap-0{gap:0}.gap-x-0{-moz-column-gap:0;column-gap:0}.gap-y-0{row-gap:0}.gap-px{gap:1px}.gap-x-px{-moz-column-gap:1px;column-gap:1px}.gap-y-px{row-gap:1px}.gap-0\.5{gap:.125rem}.gap-x-0\.5{-moz-column-gap:.125rem;column-gap:.125rem}.gap-y-0\.5{row-gap:.125rem}.gap-3px{gap:3px}.gap-1{gap:.25rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-y-1{row-gap:.25rem}.gap-1\.5{gap:.375rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-y-1\.5{row-gap:.375rem}.gap-2{gap:.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-2{row-gap:.5rem}.gap-2\.5{gap:.625rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-y-2\.5{row-gap:.625rem}.gap-3{gap:.75rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-3{row-gap:.75rem}.gap-3\.5{gap:.875rem}.gap-x-3\.5{-moz-column-gap:.875rem;column-gap:.875rem}.gap-y-3\.5{row-gap:.875rem}.gap-4{gap:1rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-4{row-gap:1rem}.gap-5{gap:1.25rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-5{row-gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-6{row-gap:1.5rem}.gap-7{gap:1.75rem}.gap-x-7{-moz-column-gap:1.75rem;column-gap:1.75rem}.gap-y-7{row-gap:1.75rem}.gap-8{gap:2rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-8{row-gap:2rem}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}@font-face{font-display:fallback;font-family:D-DIN-PRO;font-weight:400;src:url(./fonts/D-DIN-PRO-400-Regular.otf)}@font-face{font-display:fallback;font-family:D-DIN-PRO;font-weight:500;src:url(./fonts/D-DIN-PRO-700-Bold.otf)}.num{font-family:D-DIN-PRO;font-weight:400}@font-face{font-display:fallback;font-family:Nunito;font-weight:400;src:url(./fonts/Nunito-Regular.ttf)}@font-face{font-display:fallback;font-family:Nunito;font-weight:700;src:url(./fonts/Nunito-bold.ttf)}@font-face{font-display:fallback;font-family:Nunito;font-weight:300;src:url(./fonts/Nunito-Light.ttf)}.font-brand{font-family:Nunito;font-weight:400}
\ No newline at end of file
+/*! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com*/*,:after,:before{border-color:rgb(var(--color-gray-200-rgb));border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-family:-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:rgb(var(--color-gray-400-rgb));opacity:1}input::placeholder,textarea::placeholder{color:rgb(var(--color-gray-400-rgb));opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}:root{--screen-2xl:1720px;--color-gray-50:#fcfdfe;--color-gray-100:#eff1f3;--color-gray-200:#ebedf3;--color-gray-300:#d2d6e5;--color-gray-400:#b2b9c5;--color-gray-500:#64758b;--color-gray-600:#4a577f;--color-gray-700:#3d4667;--color-gray-800:#353d57;--color-gray-900:#30394a;--color-gray-950:#0b0f18;--color-gray-50-rgb:252,253,254;--color-gray-100-rgb:239,241,243;--color-gray-200-rgb:235,237,243;--color-gray-300-rgb:210,214,229;--color-gray-400-rgb:178,185,197;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:74,87,127;--color-gray-700-rgb:61,70,103;--color-gray-800-rgb:53,61,87;--color-gray-900-rgb:48,57,74;--color-gray-950-rgb:11,15,24;--color-primary-50:#eef6ff;--color-primary-100:#d9eaff;--color-primary-200:#bcdcff;--color-primary-300:#8ec6ff;--color-primary-400:#59a5ff;--color-primary-500:#3883fa;--color-primary-600:#2b67e5;--color-primary-700:#144ce1;--color-primary-800:#173db6;--color-primary-900:#19388f;--color-primary-950:#142457;--color-primary-50-rgb:238,246,255;--color-primary-100-rgb:217,234,255;--color-primary-200-rgb:188,220,255;--color-primary-300-rgb:142,198,255;--color-primary-400-rgb:89,165,255;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:43,103,229;--color-primary-700-rgb:20,76,225;--color-primary-800-rgb:23,61,182;--color-primary-900-rgb:25,56,143;--color-primary-950-rgb:20,36,87;--color-secondary-50:#e7f6ff;--color-secondary-100:#cdecff;--color-secondary-200:#9bd9ff;--color-secondary-300:#77cbff;--color-secondary-400:#60c2ff;--color-secondary-500:#37b2fe;--color-secondary-600:#18a6fd;--color-secondary-700:#1099ed;--color-secondary-800:#078ada;--color-secondary-900:#046bab;--color-secondary-950:#062a4b;--color-secondary-50-rgb:231,246,255;--color-secondary-100-rgb:205,236,255;--color-secondary-200-rgb:155,217,255;--color-secondary-300-rgb:119,203,255;--color-secondary-400-rgb:96,194,255;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:24,166,253;--color-secondary-700-rgb:16,153,237;--color-secondary-800-rgb:7,138,218;--color-secondary-900-rgb:4,107,171;--color-secondary-950-rgb:6,42,75;--color-success-50:#ecfff8;--color-success-100:#d0f6e8;--color-success-200:#b1ecd6;--color-success-300:#7adfba;--color-success-400:#48d1a0;--color-success-500:#22c98d;--color-success-600:#0dbb7d;--color-success-700:#0ca76f;--color-success-800:#0e8d60;--color-success-900:#186c4e;--color-success-50-rgb:236,255,248;--color-success-100-rgb:208,246,232;--color-success-200-rgb:177,236,214;--color-success-300-rgb:122,223,186;--color-success-400-rgb:72,209,160;--color-success-500-rgb:34,201,141;--color-success-600-rgb:13,187,125;--color-success-700-rgb:12,167,111;--color-success-800-rgb:14,141,96;--color-success-900-rgb:24,108,78;--color-warning-50:#fff4ea;--color-warning-100:#ffecdb;--color-warning-200:#ffd2a9;--color-warning-300:#ffbc7e;--color-warning-400:#ffaf65;--color-warning-500:#ff9f46;--color-warning-600:#f38f19;--color-warning-700:#ed8307;--color-warning-800:#d17100;--color-warning-900:#af5f01;--color-warning-50-rgb:255,244,234;--color-warning-100-rgb:255,236,219;--color-warning-200-rgb:255,210,169;--color-warning-300-rgb:255,188,126;--color-warning-400-rgb:255,175,101;--color-warning-500-rgb:255,159,70;--color-warning-600-rgb:243,143,25;--color-warning-700-rgb:237,131,7;--color-warning-800-rgb:209,113,0;--color-warning-900-rgb:175,95,1;--color-danger-50:#ffebeb;--color-danger-100:#ffd5d5;--color-danger-200:#ffb1b1;--color-danger-300:#ff9292;--color-danger-400:#ff7c7c;--color-danger-500:#fc5959;--color-danger-600:#fb2b2b;--color-danger-700:#d91b1b;--color-danger-800:#ba1313;--color-danger-900:#a20606;--color-danger-50-rgb:255,235,235;--color-danger-100-rgb:255,213,213;--color-danger-200-rgb:255,177,177;--color-danger-300-rgb:255,146,146;--color-danger-400-rgb:255,124,124;--color-danger-500-rgb:252,89,89;--color-danger-600-rgb:251,43,43;--color-danger-700-rgb:217,27,27;--color-danger-800-rgb:186,19,19;--color-danger-900-rgb:162,6,6;--color-important-50:#fff8f5;--color-important-100:#ffe2d9;--color-important-200:#ffcebf;--color-important-300:#ffb29b;--color-important-400:#ff8c68;--color-important-500:#ff8058;--color-important-600:#ff6f42;--color-important-700:#ff4912;--color-important-800:#c83509;--color-important-900:#611700;--color-important-50-rgb:255,248,245;--color-important-100-rgb:255,226,217;--color-important-200-rgb:255,206,191;--color-important-300-rgb:255,178,155;--color-important-400-rgb:255,140,104;--color-important-500-rgb:255,128,88;--color-important-600-rgb:255,111,66;--color-important-700-rgb:255,73,18;--color-important-800-rgb:200,53,9;--color-important-900-rgb:97,23,0;--color-special-50:#efecfa;--color-special-100:#e4dff7;--color-special-200:#c4b6ff;--color-special-300:#a38cff;--color-special-400:#8a6ff5;--color-special-500:#8166ee;--color-special-600:#7055df;--color-special-700:#513baa;--color-special-800:#452da5;--color-special-900:#30216e;--color-special-50-rgb:239,236,250;--color-special-100-rgb:228,223,247;--color-special-200-rgb:196,182,255;--color-special-300-rgb:163,140,255;--color-special-400-rgb:138,111,245;--color-special-500-rgb:129,102,238;--color-special-600-rgb:112,85,223;--color-special-700-rgb:81,59,170;--color-special-800-rgb:69,45,165;--color-special-900-rgb:48,33,110;--color-inherit:inherit;--color-transparent:transparent;--color-current:currentColor;--color-black:#000;--color-white:#fff;--color-canvas:#fff;--color-canvas-light:#fff;--color-canvas-dark:#fcfdfe;--color-inverse:#000;--color-surface:#eff1f3;--color-surface-light:#fcfdfe;--color-surface-strong:#ebedf3;--color-fore:#30394a;--color-fore-in-light:#30394a;--color-fore-in-dark:#fff;--color-focus:#bcdcff;--color-link:#2b47a2;--color-link-hover:#144ce1;--color-link-visited:#6328a4;--color-link-active:#144ce1;--color-placeholder:#b2b9c5;--color-border:#ebedf3;--color-border-strong:#d2d6e5;--color-border-light:#eff1f3;--color-black-rgb:0,0,0;--color-white-rgb:255,255,255;--color-canvas-rgb:255,255,255;--color-canvas-light-rgb:255,255,255;--color-canvas-dark-rgb:252,253,254;--color-inverse-rgb:0,0,0;--color-surface-rgb:239,241,243;--color-surface-light-rgb:252,253,254;--color-surface-strong-rgb:235,237,243;--color-fore-rgb:48,57,74;--color-fore-in-light-rgb:48,57,74;--color-fore-in-dark-rgb:255,255,255;--color-focus-rgb:188,220,255;--color-link-rgb:43,71,162;--color-link-hover-rgb:20,76,225;--color-link-visited-rgb:99,40,164;--color-link-active-rgb:20,76,225;--color-placeholder-rgb:178,185,197;--color-border-rgb:235,237,243;--color-border-strong-rgb:210,214,229;--color-border-light-rgb:239,241,243;--radius-none:0px;--radius-sm:0.0625rem;--radius:0.125rem;--radius-md:0.25rem;--radius-lg:0.375rem;--radius-xl:0.5rem;--radius-2xl:0.75rem;--radius-3xl:1rem;--radius-full:9999px;--shadow-sm:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--shadow-md:0 2px 6px -1px rgba(0,0,0,.2),0 1px 4px -2px rgba(0,0,0,.15);--shadow-lg:0 5px 15px -3px rgba(0,0,0,.2),0 2px 6px -4px rgba(0,0,0,.15);--shadow-xl:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--shadow-2xl:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--shadow-inner:inset 0 2px 4px 0 rgba(0,0,0,.05);--shadow-none:none;--space:0.25rem;--font-size-root:16px;--font-size-page-lineHeight:1.5384615385}.dark{--color-gray-50:#0b0f18;--color-gray-100:#30394a;--color-gray-200:#353d57;--color-gray-300:#3d4667;--color-gray-400:#4a577f;--color-gray-500:#64758b;--color-gray-600:#b2b9c5;--color-gray-700:#d2d6e5;--color-gray-800:#ebedf3;--color-gray-900:#eff1f3;--color-gray-950:#fcfdfe;--color-gray-50-rgb:11,15,24;--color-gray-100-rgb:48,57,74;--color-gray-200-rgb:53,61,87;--color-gray-300-rgb:61,70,103;--color-gray-400-rgb:74,87,127;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:178,185,197;--color-gray-700-rgb:210,214,229;--color-gray-800-rgb:235,237,243;--color-gray-900-rgb:239,241,243;--color-gray-950-rgb:252,253,254;--color-primary-50:#142457;--color-primary-100:#19388f;--color-primary-200:#173db6;--color-primary-300:#144ce1;--color-primary-400:#2b67e5;--color-primary-500:#3883fa;--color-primary-600:#59a5ff;--color-primary-700:#8ec6ff;--color-primary-800:#bcdcff;--color-primary-900:#d9eaff;--color-primary-950:#eef6ff;--color-primary-50-rgb:20,36,87;--color-primary-100-rgb:25,56,143;--color-primary-200-rgb:23,61,182;--color-primary-300-rgb:20,76,225;--color-primary-400-rgb:43,103,229;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:89,165,255;--color-primary-700-rgb:142,198,255;--color-primary-800-rgb:188,220,255;--color-primary-900-rgb:217,234,255;--color-primary-950-rgb:238,246,255;--color-secondary-50:#062a4b;--color-secondary-100:#046bab;--color-secondary-200:#078ada;--color-secondary-300:#1099ed;--color-secondary-400:#18a6fd;--color-secondary-500:#37b2fe;--color-secondary-600:#60c2ff;--color-secondary-700:#77cbff;--color-secondary-800:#9bd9ff;--color-secondary-900:#cdecff;--color-secondary-950:#e7f6ff;--color-secondary-50-rgb:6,42,75;--color-secondary-100-rgb:4,107,171;--color-secondary-200-rgb:7,138,218;--color-secondary-300-rgb:16,153,237;--color-secondary-400-rgb:24,166,253;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:96,194,255;--color-secondary-700-rgb:119,203,255;--color-secondary-800-rgb:155,217,255;--color-secondary-900-rgb:205,236,255;--color-secondary-950-rgb:231,246,255;--color-success-50:#186c4e;--color-success-100:#0e8d60;--color-success-200:#0ca76f;--color-success-300:#0dbb7d;--color-success-400:#22c98d;--color-success-500:#48d1a0;--color-success-600:#7adfba;--color-success-700:#b1ecd6;--color-success-800:#d0f6e8;--color-success-900:#ecfff8;--color-success-50-rgb:24,108,78;--color-success-100-rgb:14,141,96;--color-success-200-rgb:12,167,111;--color-success-300-rgb:13,187,125;--color-success-400-rgb:34,201,141;--color-success-500-rgb:72,209,160;--color-success-600-rgb:122,223,186;--color-success-700-rgb:177,236,214;--color-success-800-rgb:208,246,232;--color-success-900-rgb:236,255,248;--color-warning-50:#af5f01;--color-warning-100:#d17100;--color-warning-200:#ed8307;--color-warning-300:#f38f19;--color-warning-400:#ff9f46;--color-warning-500:#ffaf65;--color-warning-600:#ffbc7e;--color-warning-700:#ffd2a9;--color-warning-800:#ffecdb;--color-warning-900:#fff4ea;--color-warning-50-rgb:175,95,1;--color-warning-100-rgb:209,113,0;--color-warning-200-rgb:237,131,7;--color-warning-300-rgb:243,143,25;--color-warning-400-rgb:255,159,70;--color-warning-500-rgb:255,175,101;--color-warning-600-rgb:255,188,126;--color-warning-700-rgb:255,210,169;--color-warning-800-rgb:255,236,219;--color-warning-900-rgb:255,244,234;--color-danger-50:#a20606;--color-danger-100:#ba1313;--color-danger-200:#d91b1b;--color-danger-300:#fb2b2b;--color-danger-400:#fc5959;--color-danger-500:#ff7c7c;--color-danger-600:#ff9292;--color-danger-700:#ffb1b1;--color-danger-800:#ffd5d5;--color-danger-900:#ffebeb;--color-danger-50-rgb:162,6,6;--color-danger-100-rgb:186,19,19;--color-danger-200-rgb:217,27,27;--color-danger-300-rgb:251,43,43;--color-danger-400-rgb:252,89,89;--color-danger-500-rgb:255,124,124;--color-danger-600-rgb:255,146,146;--color-danger-700-rgb:255,177,177;--color-danger-800-rgb:255,213,213;--color-danger-900-rgb:255,235,235;--color-important-50:#611700;--color-important-100:#c83509;--color-important-200:#ff4912;--color-important-300:#ff6f42;--color-important-400:#ff8058;--color-important-500:#ff8c68;--color-important-600:#ffb29b;--color-important-700:#ffcebf;--color-important-800:#ffe2d9;--color-important-900:#fff8f5;--color-important-50-rgb:97,23,0;--color-important-100-rgb:200,53,9;--color-important-200-rgb:255,73,18;--color-important-300-rgb:255,111,66;--color-important-400-rgb:255,128,88;--color-important-500-rgb:255,140,104;--color-important-600-rgb:255,178,155;--color-important-700-rgb:255,206,191;--color-important-800-rgb:255,226,217;--color-important-900-rgb:255,248,245;--color-special-50:#30216e;--color-special-100:#452da5;--color-special-200:#513baa;--color-special-300:#7055df;--color-special-400:#8166ee;--color-special-500:#8a6ff5;--color-special-600:#a38cff;--color-special-700:#c4b6ff;--color-special-800:#e4dff7;--color-special-900:#efecfa;--color-special-50-rgb:48,33,110;--color-special-100-rgb:69,45,165;--color-special-200-rgb:81,59,170;--color-special-300-rgb:112,85,223;--color-special-400-rgb:129,102,238;--color-special-500-rgb:138,111,245;--color-special-600-rgb:163,140,255;--color-special-700-rgb:196,182,255;--color-special-800-rgb:228,223,247;--color-special-900-rgb:239,236,250;--color-canvas:#0b0f18;--color-inverse:#fff;--color-surface:#353d57;--color-surface-light:#30394a;--color-surface-strong:#3d4667;--color-fore:#ebedf3;--color-focus:#173db6;--color-link:#59a5ff;--color-link-hover:#3883fa;--color-link-visited:#bcdcff;--color-link-active:#bcdcff;--color-placeholder:#4a577f;--color-border:#353d57;--color-border-strong:#3d4667;--color-border-light:#30394a;--color-canvas-rgb:11,15,24;--color-inverse-rgb:255,255,255;--color-surface-rgb:53,61,87;--color-surface-light-rgb:48,57,74;--color-surface-strong-rgb:61,70,103;--color-fore-rgb:235,237,243;--color-focus-rgb:23,61,182;--color-link-rgb:89,165,255;--color-link-hover-rgb:56,131,250;--color-link-visited-rgb:188,220,255;--color-link-active-rgb:188,220,255;--color-placeholder-rgb:74,87,127;--color-border-rgb:53,61,87;--color-border-strong-rgb:61,70,103;--color-border-light-rgb:48,57,74}.light-in-dark{--color-gray-50:#fcfdfe;--color-gray-100:#eff1f3;--color-gray-200:#ebedf3;--color-gray-300:#d2d6e5;--color-gray-400:#b2b9c5;--color-gray-500:#64758b;--color-gray-600:#4a577f;--color-gray-700:#3d4667;--color-gray-800:#353d57;--color-gray-900:#30394a;--color-gray-950:#0b0f18;--color-gray-50-rgb:252,253,254;--color-gray-100-rgb:239,241,243;--color-gray-200-rgb:235,237,243;--color-gray-300-rgb:210,214,229;--color-gray-400-rgb:178,185,197;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:74,87,127;--color-gray-700-rgb:61,70,103;--color-gray-800-rgb:53,61,87;--color-gray-900-rgb:48,57,74;--color-gray-950-rgb:11,15,24;--color-primary-50:#eef6ff;--color-primary-100:#d9eaff;--color-primary-200:#bcdcff;--color-primary-300:#8ec6ff;--color-primary-400:#59a5ff;--color-primary-500:#3883fa;--color-primary-600:#2b67e5;--color-primary-700:#144ce1;--color-primary-800:#173db6;--color-primary-900:#19388f;--color-primary-950:#142457;--color-primary-50-rgb:238,246,255;--color-primary-100-rgb:217,234,255;--color-primary-200-rgb:188,220,255;--color-primary-300-rgb:142,198,255;--color-primary-400-rgb:89,165,255;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:43,103,229;--color-primary-700-rgb:20,76,225;--color-primary-800-rgb:23,61,182;--color-primary-900-rgb:25,56,143;--color-primary-950-rgb:20,36,87;--color-secondary-50:#e7f6ff;--color-secondary-100:#cdecff;--color-secondary-200:#9bd9ff;--color-secondary-300:#77cbff;--color-secondary-400:#60c2ff;--color-secondary-500:#37b2fe;--color-secondary-600:#18a6fd;--color-secondary-700:#1099ed;--color-secondary-800:#078ada;--color-secondary-900:#046bab;--color-secondary-950:#062a4b;--color-secondary-50-rgb:231,246,255;--color-secondary-100-rgb:205,236,255;--color-secondary-200-rgb:155,217,255;--color-secondary-300-rgb:119,203,255;--color-secondary-400-rgb:96,194,255;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:24,166,253;--color-secondary-700-rgb:16,153,237;--color-secondary-800-rgb:7,138,218;--color-secondary-900-rgb:4,107,171;--color-secondary-950-rgb:6,42,75;--color-success-50:#ecfff8;--color-success-100:#d0f6e8;--color-success-200:#b1ecd6;--color-success-300:#7adfba;--color-success-400:#48d1a0;--color-success-500:#22c98d;--color-success-600:#0dbb7d;--color-success-700:#0ca76f;--color-success-800:#0e8d60;--color-success-900:#186c4e;--color-success-50-rgb:236,255,248;--color-success-100-rgb:208,246,232;--color-success-200-rgb:177,236,214;--color-success-300-rgb:122,223,186;--color-success-400-rgb:72,209,160;--color-success-500-rgb:34,201,141;--color-success-600-rgb:13,187,125;--color-success-700-rgb:12,167,111;--color-success-800-rgb:14,141,96;--color-success-900-rgb:24,108,78;--color-warning-50:#fff4ea;--color-warning-100:#ffecdb;--color-warning-200:#ffd2a9;--color-warning-300:#ffbc7e;--color-warning-400:#ffaf65;--color-warning-500:#ff9f46;--color-warning-600:#f38f19;--color-warning-700:#ed8307;--color-warning-800:#d17100;--color-warning-900:#af5f01;--color-warning-50-rgb:255,244,234;--color-warning-100-rgb:255,236,219;--color-warning-200-rgb:255,210,169;--color-warning-300-rgb:255,188,126;--color-warning-400-rgb:255,175,101;--color-warning-500-rgb:255,159,70;--color-warning-600-rgb:243,143,25;--color-warning-700-rgb:237,131,7;--color-warning-800-rgb:209,113,0;--color-warning-900-rgb:175,95,1;--color-danger-50:#ffebeb;--color-danger-100:#ffd5d5;--color-danger-200:#ffb1b1;--color-danger-300:#ff9292;--color-danger-400:#ff7c7c;--color-danger-500:#fc5959;--color-danger-600:#fb2b2b;--color-danger-700:#d91b1b;--color-danger-800:#ba1313;--color-danger-900:#a20606;--color-danger-50-rgb:255,235,235;--color-danger-100-rgb:255,213,213;--color-danger-200-rgb:255,177,177;--color-danger-300-rgb:255,146,146;--color-danger-400-rgb:255,124,124;--color-danger-500-rgb:252,89,89;--color-danger-600-rgb:251,43,43;--color-danger-700-rgb:217,27,27;--color-danger-800-rgb:186,19,19;--color-danger-900-rgb:162,6,6;--color-important-50:#fff8f5;--color-important-100:#ffe2d9;--color-important-200:#ffcebf;--color-important-300:#ffb29b;--color-important-400:#ff8c68;--color-important-500:#ff8058;--color-important-600:#ff6f42;--color-important-700:#ff4912;--color-important-800:#c83509;--color-important-900:#611700;--color-important-50-rgb:255,248,245;--color-important-100-rgb:255,226,217;--color-important-200-rgb:255,206,191;--color-important-300-rgb:255,178,155;--color-important-400-rgb:255,140,104;--color-important-500-rgb:255,128,88;--color-important-600-rgb:255,111,66;--color-important-700-rgb:255,73,18;--color-important-800-rgb:200,53,9;--color-important-900-rgb:97,23,0;--color-special-50:#efecfa;--color-special-100:#e4dff7;--color-special-200:#c4b6ff;--color-special-300:#a38cff;--color-special-400:#8a6ff5;--color-special-500:#8166ee;--color-special-600:#7055df;--color-special-700:#513baa;--color-special-800:#452da5;--color-special-900:#30216e;--color-special-50-rgb:239,236,250;--color-special-100-rgb:228,223,247;--color-special-200-rgb:196,182,255;--color-special-300-rgb:163,140,255;--color-special-400-rgb:138,111,245;--color-special-500-rgb:129,102,238;--color-special-600-rgb:112,85,223;--color-special-700-rgb:81,59,170;--color-special-800-rgb:69,45,165;--color-special-900-rgb:48,33,110;--color-inherit:inherit;--color-transparent:transparent;--color-current:currentColor;--color-black:#000;--color-white:#fff;--color-canvas:#fff;--color-canvas-light:#fff;--color-canvas-dark:#fcfdfe;--color-inverse:#000;--color-surface:#eff1f3;--color-surface-light:#fcfdfe;--color-surface-strong:#ebedf3;--color-fore:#30394a;--color-fore-in-light:#30394a;--color-fore-in-dark:#fff;--color-focus:#bcdcff;--color-link:#2b47a2;--color-link-hover:#144ce1;--color-link-visited:#6328a4;--color-link-active:#144ce1;--color-placeholder:#b2b9c5;--color-border:#ebedf3;--color-border-strong:#d2d6e5;--color-border-light:#eff1f3;--color-black-rgb:0,0,0;--color-white-rgb:255,255,255;--color-canvas-rgb:255,255,255;--color-canvas-light-rgb:255,255,255;--color-canvas-dark-rgb:252,253,254;--color-inverse-rgb:0,0,0;--color-surface-rgb:239,241,243;--color-surface-light-rgb:252,253,254;--color-surface-strong-rgb:235,237,243;--color-fore-rgb:48,57,74;--color-fore-in-light-rgb:48,57,74;--color-fore-in-dark-rgb:255,255,255;--color-focus-rgb:188,220,255;--color-link-rgb:43,71,162;--color-link-hover-rgb:20,76,225;--color-link-visited-rgb:99,40,164;--color-link-active-rgb:20,76,225;--color-placeholder-rgb:178,185,197;--color-border-rgb:235,237,243;--color-border-strong-rgb:210,214,229;--color-border-light-rgb:239,241,243}body{--btn-bg:var(--color-gray-50)}@media (prefers-color-scheme:dark){.dark-auto{--color-gray-50:#0b0f18;--color-gray-100:#30394a;--color-gray-200:#353d57;--color-gray-300:#3d4667;--color-gray-400:#4a577f;--color-gray-500:#64758b;--color-gray-600:#b2b9c5;--color-gray-700:#d2d6e5;--color-gray-800:#ebedf3;--color-gray-900:#eff1f3;--color-gray-950:#fcfdfe;--color-gray-50-rgb:11,15,24;--color-gray-100-rgb:48,57,74;--color-gray-200-rgb:53,61,87;--color-gray-300-rgb:61,70,103;--color-gray-400-rgb:74,87,127;--color-gray-500-rgb:100,117,139;--color-gray-600-rgb:178,185,197;--color-gray-700-rgb:210,214,229;--color-gray-800-rgb:235,237,243;--color-gray-900-rgb:239,241,243;--color-gray-950-rgb:252,253,254;--color-primary-50:#142457;--color-primary-100:#19388f;--color-primary-200:#173db6;--color-primary-300:#144ce1;--color-primary-400:#2b67e5;--color-primary-500:#3883fa;--color-primary-600:#59a5ff;--color-primary-700:#8ec6ff;--color-primary-800:#bcdcff;--color-primary-900:#d9eaff;--color-primary-950:#eef6ff;--color-primary-50-rgb:20,36,87;--color-primary-100-rgb:25,56,143;--color-primary-200-rgb:23,61,182;--color-primary-300-rgb:20,76,225;--color-primary-400-rgb:43,103,229;--color-primary-500-rgb:56,131,250;--color-primary-600-rgb:89,165,255;--color-primary-700-rgb:142,198,255;--color-primary-800-rgb:188,220,255;--color-primary-900-rgb:217,234,255;--color-primary-950-rgb:238,246,255;--color-secondary-50:#062a4b;--color-secondary-100:#046bab;--color-secondary-200:#078ada;--color-secondary-300:#1099ed;--color-secondary-400:#18a6fd;--color-secondary-500:#37b2fe;--color-secondary-600:#60c2ff;--color-secondary-700:#77cbff;--color-secondary-800:#9bd9ff;--color-secondary-900:#cdecff;--color-secondary-950:#e7f6ff;--color-secondary-50-rgb:6,42,75;--color-secondary-100-rgb:4,107,171;--color-secondary-200-rgb:7,138,218;--color-secondary-300-rgb:16,153,237;--color-secondary-400-rgb:24,166,253;--color-secondary-500-rgb:55,178,254;--color-secondary-600-rgb:96,194,255;--color-secondary-700-rgb:119,203,255;--color-secondary-800-rgb:155,217,255;--color-secondary-900-rgb:205,236,255;--color-secondary-950-rgb:231,246,255;--color-success-50:#186c4e;--color-success-100:#0e8d60;--color-success-200:#0ca76f;--color-success-300:#0dbb7d;--color-success-400:#22c98d;--color-success-500:#48d1a0;--color-success-600:#7adfba;--color-success-700:#b1ecd6;--color-success-800:#d0f6e8;--color-success-900:#ecfff8;--color-success-50-rgb:24,108,78;--color-success-100-rgb:14,141,96;--color-success-200-rgb:12,167,111;--color-success-300-rgb:13,187,125;--color-success-400-rgb:34,201,141;--color-success-500-rgb:72,209,160;--color-success-600-rgb:122,223,186;--color-success-700-rgb:177,236,214;--color-success-800-rgb:208,246,232;--color-success-900-rgb:236,255,248;--color-warning-50:#af5f01;--color-warning-100:#d17100;--color-warning-200:#ed8307;--color-warning-300:#f38f19;--color-warning-400:#ff9f46;--color-warning-500:#ffaf65;--color-warning-600:#ffbc7e;--color-warning-700:#ffd2a9;--color-warning-800:#ffecdb;--color-warning-900:#fff4ea;--color-warning-50-rgb:175,95,1;--color-warning-100-rgb:209,113,0;--color-warning-200-rgb:237,131,7;--color-warning-300-rgb:243,143,25;--color-warning-400-rgb:255,159,70;--color-warning-500-rgb:255,175,101;--color-warning-600-rgb:255,188,126;--color-warning-700-rgb:255,210,169;--color-warning-800-rgb:255,236,219;--color-warning-900-rgb:255,244,234;--color-danger-50:#a20606;--color-danger-100:#ba1313;--color-danger-200:#d91b1b;--color-danger-300:#fb2b2b;--color-danger-400:#fc5959;--color-danger-500:#ff7c7c;--color-danger-600:#ff9292;--color-danger-700:#ffb1b1;--color-danger-800:#ffd5d5;--color-danger-900:#ffebeb;--color-danger-50-rgb:162,6,6;--color-danger-100-rgb:186,19,19;--color-danger-200-rgb:217,27,27;--color-danger-300-rgb:251,43,43;--color-danger-400-rgb:252,89,89;--color-danger-500-rgb:255,124,124;--color-danger-600-rgb:255,146,146;--color-danger-700-rgb:255,177,177;--color-danger-800-rgb:255,213,213;--color-danger-900-rgb:255,235,235;--color-important-50:#611700;--color-important-100:#c83509;--color-important-200:#ff4912;--color-important-300:#ff6f42;--color-important-400:#ff8058;--color-important-500:#ff8c68;--color-important-600:#ffb29b;--color-important-700:#ffcebf;--color-important-800:#ffe2d9;--color-important-900:#fff8f5;--color-important-50-rgb:97,23,0;--color-important-100-rgb:200,53,9;--color-important-200-rgb:255,73,18;--color-important-300-rgb:255,111,66;--color-important-400-rgb:255,128,88;--color-important-500-rgb:255,140,104;--color-important-600-rgb:255,178,155;--color-important-700-rgb:255,206,191;--color-important-800-rgb:255,226,217;--color-important-900-rgb:255,248,245;--color-special-50:#30216e;--color-special-100:#452da5;--color-special-200:#513baa;--color-special-300:#7055df;--color-special-400:#8166ee;--color-special-500:#8a6ff5;--color-special-600:#a38cff;--color-special-700:#c4b6ff;--color-special-800:#e4dff7;--color-special-900:#efecfa;--color-special-50-rgb:48,33,110;--color-special-100-rgb:69,45,165;--color-special-200-rgb:81,59,170;--color-special-300-rgb:112,85,223;--color-special-400-rgb:129,102,238;--color-special-500-rgb:138,111,245;--color-special-600-rgb:163,140,255;--color-special-700-rgb:196,182,255;--color-special-800-rgb:228,223,247;--color-special-900-rgb:239,236,250;--color-canvas:#0b0f18;--color-inverse:#fff;--color-surface:#353d57;--color-surface-light:#30394a;--color-surface-strong:#3d4667;--color-fore:#ebedf3;--color-focus:#173db6;--color-link:#59a5ff;--color-link-hover:#3883fa;--color-link-visited:#bcdcff;--color-link-active:#bcdcff;--color-placeholder:#4a577f;--color-border:#353d57;--color-border-strong:#3d4667;--color-border-light:#30394a;--color-canvas-rgb:11,15,24;--color-inverse-rgb:255,255,255;--color-surface-rgb:53,61,87;--color-surface-light-rgb:48,57,74;--color-surface-strong-rgb:61,70,103;--color-fore-rgb:235,237,243;--color-focus-rgb:23,61,182;--color-link-rgb:89,165,255;--color-link-hover-rgb:56,131,250;--color-link-visited-rgb:188,220,255;--color-link-active-rgb:188,220,255;--color-placeholder-rgb:74,87,127;--color-border-rgb:53,61,87;--color-border-strong-rgb:61,70,103;--color-border-light-rgb:48,57,74}}*,:after,:before{--tw-border-opacity:1;--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity))}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }html{font-size:var(--font-size-root)}body{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));font-size:.8125rem;line-height:1.5384615385}.dark,body{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}:root{--font-h1-size:2.25rem}a,a.disabled:hover{--tw-text-opacity:1;color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}a:hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}a:focus-visible{outline-color:rgb(var(--color-focus-rgb));outline-offset:2px;outline-width:2px}.code,code{--tw-text-opacity:1;background-color:rgba(var(--color-important-500-rgb),.1);border-radius:var(--radius);color:rgba(var(--color-important-500-rgb),var(--tw-text-opacity));padding-left:.25rem;padding-right:.25rem}pre{font-size:.75rem;line-height:1rem;overflow:auto;padding:.5rem}pre code{background-color:transparent;color:inherit;padding:0}samp,var{font-weight:700}.blockquote,blockquote{text-wrap:balance;border-left-width:4px;font-size:.875rem;line-height:1.3rem;padding-left:.75rem}.blockquote figcaption,blockquote figcaption{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{text-wrap:balance;font-weight:700;line-height:1.5}.h1,h1{font-size:1.75rem}.h2,h2{font-size:1.5rem}.h3,h3{font-size:1.25rem}.h4,h4{font-size:1rem}.h5,h5{font-size:.875rem}.h6,h6{font-size:.75rem}ul{list-style-type:disc}ol,ul{padding-left:1.5em}ol{list-style-type:decimal}dt{font-weight:700}dd{padding-left:2em}.article{font-size:.875rem;line-height:1.75}.article audio,.article blockquote,.article figure,.article h1,.article h2,.article h3,.article h4,.article img,.article ol,.article p,.article table,.article ul,.article video{margin-bottom:.5em;margin-top:.5em}.article hr{margin-bottom:1.5em;margin-top:1.5em}.article table{border-width:1px}.article td,.article th{border-bottom-width:1px;padding:.25rem .75rem}.article thead{background-color:var(--table-head-bg,var(--color-gray-100))}.article ol *,.article table *,.article ul *{margin-bottom:0;margin-top:0}.article pre{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));border-radius:var(--radius);border-width:1px}:root{--alert-bg:var(--color-surface)}.alert{align-items:center;background-color:var(--alert-bg);border-radius:var(--radius);display:flex;gap:.75rem;padding:.5rem .75rem}.alert-content{display:flex;flex:1 1 auto;flex-direction:column;gap:1rem}.alert-close{margin-bottom:-.375rem;margin-right:-.5rem;margin-top:-.375rem}.alert-link{color:inherit;font-weight:700}.alert-link:hover{color:inherit;text-decoration-line:underline}.alert-heading{font-weight:700;margin:0}.alert-text{flex:1 1 auto;white-space:pre-line}.alert-actions{align-items:center;display:flex;gap:.5rem}:root{--breadcrumb-divider:"/";--breadcrumb-divider-color:var(--color-gray-500);--breadcrumb-color-active:var(--color-gray-500)}.breadcrumb{display:flex;gap:1.25rem;list-style-type:none;padding-left:0}.breadcrumb>li{position:relative}.breadcrumb>li+li:before{color:var(--breadcrumb-divider-color);content:var(--breadcrumb-divider);display:block;left:-1.25rem;position:absolute;text-align:center;width:1.25rem}.breadcrumb>.active{color:var(--breadcrumb-color-active)}:root{--btn-radius:var(--radius);--btn-bg:var(--color-surface);--btn-border-color:var(--color-gray-300)}.btn{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--btn-border-color);--state-active-opacity:1;align-items:center;background-color:var(--btn-bg);border-radius:var(--btn-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:inline-flex;gap:.375rem;height:2rem;justify-content:center;padding-left:.75rem;padding-right:.75rem;white-space:nowrap}.btn,.btn-default:hover{color:inherit}.btn-link{--tw-text-opacity:1;--tw-ring-color:transparent;color:rgba(var(--color-link-rgb),var(--tw-text-opacity));text-decoration-line:underline;text-underline-offset:2px}.btn-link:visited{color:rgba(var(--color-link-visited-rgb),var(--tw-text-opacity))}.btn-link:hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}.btn-link{--btn-bg:transparent}.btn.size-xs,.size-xs>.btn{font-size:.75rem;height:1.25rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem}.btn.size-sm,.size-sm>.btn{font-size:.75rem;height:1.5rem;line-height:1rem}.btn.size-md,.btn.size-sm,.size-md>.btn,.size-sm>.btn{padding-left:.5rem;padding-right:.5rem}.btn.size-md,.size-md>.btn{height:1.75rem}.btn.size-lg,.size-lg>.btn{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:1rem;padding-right:1rem}.btn.size-xl,.size-xl>.btn{font-size:1.125rem;height:3rem;line-height:1.75rem;padding-left:1.25rem;padding-right:1.25rem}.btn.square{aspect-ratio:1/1;gap:.125rem;padding-left:0;padding-right:0}.btn.btn-caret{padding-left:.25rem;padding-right:.25rem}.btn.btn-wide{min-width:80px}:root{--checkbox-size:12px;--checkbox-color:var(--color-primary-500)}.checkbox,.radio{align-items:center;cursor:pointer;display:flex;gap:.375rem;min-height:20px}.checkbox>input[type=checkbox],.radio>input[type=radio]{accent-color:rgb(var(--color-primary-500-rgb));border-radius:var(--radius-lg)}.checkbox-primary,.radio-primary{display:flex;gap:.375rem;min-height:20px;position:relative}.checkbox-primary>input[type=checkbox],.radio-primary>input[type=radio]{inset:0;opacity:0;position:absolute}.checkbox-primary>label,.radio-primary>label{cursor:pointer;padding-left:calc(var(--checkbox-size) + 8px);position:relative}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{--tw-content:"";content:var(--tw-content);display:block;height:var(--checkbox-size);left:0;position:absolute;top:calc((20px - var(--checkbox-size))/2);transition-duration:.15s;transition-property:transform,background-color,color,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--checkbox-size)}.checkbox-primary>label:before{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius-sm);border-width:1px}.checkbox-primary>label:after{--tw-scale-x:.9;--tw-scale-y:.9;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTkgMjAuNDItNi4yMS02LjIxIDIuODMtMi44M0w5IDE0Ljc3bDkuODgtOS44OSAyLjgzIDIuODN6Ii8+PC9zdmc+");transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.radio-primary>label:before{--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius-full);border-width:1px}.radio-primary>label:after{--checkbox-radio-size:calc(var(--checkbox-size)*2/3);background-color:var(--checkbox-color);border-radius:var(--radius-full);height:var(--checkbox-radio-size);left:calc((var(--checkbox-size) - var(--checkbox-radio-size))/2);opacity:0;top:calc((20px - var(--checkbox-radio-size))/2);width:var(--checkbox-radio-size)}.checkbox-primary>label:hover:before,.radio-primary>label:hover:before{border-color:var(--checkbox-color)}.checkbox-primary.focus>label:before,.checkbox-primary>input[type=checkbox]:focus+label:before,.radio-primary.focus>label:before,.radio-primary>input[type=radio]:focus+label:before{border-color:var(--checkbox-color);outline-color:rgb(var(--color-focus-rgb));outline-style:solid;outline-width:2px}.checkbox-primary.checked>label:before,.checkbox-primary>input[type=checkbox]:checked+label:before{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.radio-primary.checked>label:before,.radio-primary>input[type=radio]:checked+label:before{border-color:var(--checkbox-color)}.checkbox-primary.checked>label:after,.checkbox-primary>input[type=checkbox]:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input[type=radio]:checked+label:after{opacity:1}.checkbox-primary.disabled>label,.checkbox-primary>input[type=checkbox]:disabled+label,.radio-primary.disabled>label,.radio-primary>input[type=radio]:disabled+label{--tw-grayscale:grayscale(100%);cursor:not-allowed;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:.7;pointer-events:none}.checkbox-primary.indeterminate>label:after,.checkbox-primary>input[type=checkbox]:indeterminate+label:after{--tw-border-opacity:1;background-color:var(--checkbox-color);background-image:none;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));border-width:calc((var(--checkbox-size) - 2px)/2) 2px;opacity:1}.check-list{flex-direction:column;gap:.5rem}.check-list,.check-list-inline{display:flex;padding-bottom:.375rem;padding-top:.375rem}.check-list-inline{align-items:center;-moz-column-gap:1rem;column-gap:1rem;flex-direction:row;flex-wrap:wrap;row-gap:.5rem}.switch{display:flex;gap:.375rem;min-height:20px;padding-left:2.5rem;position:relative}.switch>input{inset:0;opacity:0;position:absolute}.switch>label:after,.switch>label:before{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-border-strong-rgb),var(--tw-border-opacity));border-radius:var(--radius-full);border-width:1px;content:var(--tw-content);height:1rem;left:0;position:absolute;top:.125rem;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:2rem}.switch>label:before{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);cursor:pointer}.switch>label:hover:before{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity))}.switch>label:after{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);height:.75rem;left:.125rem;top:.25rem;width:.75rem}.switch>input:checked+label:before{background-color:var(--checkbox-color);border-color:rgba(var(--color-inverse-rgb),.2)}.switch>input:checked+label:after{color:var(--checkbox-color);left:18px}.switch.focus>label:before,.switch>input:focus+label:before{border-color:var(--checkbox-color);outline-color:rgb(var(--color-focus-rgb));outline-style:solid;outline-width:2px}.switch.disabled>label:before,.switch>input:disabled+label:before{--tw-grayscale:grayscale(100%);cursor:not-allowed;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:.7;pointer-events:none}:root{--form-control-radius:var(--radius);--form-control-border:var(--color-border);--form-control-focus:var(--color-primary-500);--form-control-disabled:var(--color-surface);--form-control-readonly:var(--color-surface)}.dark{--form-control-border:var(--color-border-strong)}input::-moz-placeholder,textarea::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-placeholder-opacity))}input::placeholder,textarea::placeholder{--tw-placeholder-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-placeholder-opacity))}.form-control{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--form-control-border);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--form-control-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:block;height:2rem;outline-color:transparent;outline-style:solid;outline-width:1px;padding:.25rem .5rem;transition-duration:.15s;transition-property:outline,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);width:100%}.form-control.focus,.form-control:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-focus-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.3;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);outline-color:var(--form-control-focus)}.form-control.disabled,.form-control[disabled]{background-color:var(--form-control-disabled);opacity:1}.form-control.readonly,.form-control[readonly]{background-color:var(--form-control-readonly)}select{-webkit-appearance:none;background-image:url("data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==");background-position:right 8px top 50%;background-repeat:no-repeat;background-size:8px auto;padding-right:1rem}select.form-control[multiple]{background-image:none}textarea.form-control{height:auto;min-height:32px}input[type=file].form-control{padding:.125rem}input[type=file].form-control::-webkit-file-upload-button{-webkit-appearance:none;appearance:none;border-radius:inherit;border-style:none;cursor:pointer;height:1.75rem;padding-left:.5rem;padding-right:.5rem}input[type=file].form-control::-webkit-file-upload-button:hover{background-color:rgba(var(--color-black-rgb),.1)}.has-error .form-control,.has-error.form-control{--tw-ring-color:rgba(var(--color-danger-500-rgb),0.6)}.has-error .form-control.focus,.has-error .form-control:focus,.has-error.form-control.focus,.has-error.form-control:focus{--tw-ring-color:rgba(var(--color-danger-500-rgb),0.1);outline-color:rgb(var(--color-danger-500-rgb))}.has-warning .form-control,.has-warning.form-control{--tw-ring-color:rgba(var(--color-warning-500-rgb),0.6)}.has-warning .form-control.focus,.has-warning .form-control:focus,.has-warning.form-control.focus,.has-warning.form-control:focus{--tw-ring-color:rgba(var(--color-warning-500-rgb),0.2);outline-color:rgb(var(--color-warning-500-rgb))}.has-success .form-control,.has-success.form-control{--tw-ring-color:rgba(var(--color-success-500-rgb),0.6)}.has-success .form-control.focus,.has-success .form-control:focus,.has-success.form-control.focus,.has-success.form-control:focus{--tw-ring-color:rgba(var(--color-success-500-rgb),0.2);outline-color:rgb(var(--color-success-500-rgb))}.form-control.size-sm,.size-sm>.form-control{font-size:.75rem;height:1.5rem;line-height:1rem;padding-left:.5rem;padding-right:.5rem}.form-control.size-md,.size-md>.form-control{height:1.75rem;padding-left:.5rem;padding-right:.5rem}.form-control.size-lg,.size-lg>.form-control{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:.75rem;padding-right:.75rem}:root{--input-group-addon-bg:var(--color-gray-50)}.input-group{align-items:stretch;display:flex}.input-group>.form-control,.input-group>.input-control{flex:1 1 auto;z-index:1}.input-group-addon{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--form-control-border);align-items:center;background-color:var(--input-group-addon-bg);border-radius:var(--form-control-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);display:flex;flex:none;height:2rem;padding-left:.5rem;padding-right:.5rem;z-index:0}.size-sm>.input-group-addon{font-size:.75rem;height:1.5rem;line-height:1rem;padding-left:.5rem;padding-right:.5rem}.size-lg>.input-group-addon{font-size:1rem;height:2.5rem;line-height:1.5rem;padding-left:.75rem;padding-right:.75rem}.input-group-control{flex:1 1 auto}.input-group>*+*,.input-group>*+* .form-control{border-bottom-left-radius:var(--radius-none);border-top-left-radius:var(--radius-none)}.input-group>:not(:last-child),.input-group>:not(:last-child) .form-control{border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none)}.input-group .btn:focus-visible,.input-group .form-control:focus{z-index:2}:root{--form-tip-color:var(--color-gray-400);--form-label-color:var(--color-gray-700);--form-horz-label-width:6rem;--form-grid-gap-x:1.25rem;--form-grid-gap-y:.75rem}.form{flex-direction:column;gap:1rem}.form,.form-label{display:flex}.form-label{align-items:center;color:var(--form-label-color);flex-direction:row;gap:.25rem;height:2rem;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.form-label.required:after{--tw-translate-y:0.125rem;--tw-scale-x:1.25;--tw-scale-y:1.25;--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity));content:"*";display:inline-block;margin-left:.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.no-required .form-label.required:after{display:none}.form-label-actions{flex:1 1 auto;justify-content:flex-end}.form-label>.checkbox-primary{margin-left:.75rem}.form-tip{color:var(--form-tip-color);display:block;margin-top:.25rem}.has-error .form-tip{--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity))}.has-warning .form-tip{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.has-success .form-tip{--tw-text-opacity:1;color:rgba(var(--color-success-500-rgb),var(--tw-text-opacity))}.form-actions{display:flex;flex-direction:row;gap:1rem;justify-content:center}.form-grid{--form-grid-gap-x-half:calc(var(--form-grid-gap-x)/2);--form-grid-gap-y-half:calc(var(--form-grid-gap-y)/2);align-items:flex-start;flex-direction:row;flex-wrap:wrap;gap:0}.form-grid .form-group{padding:var(--form-grid-gap-y-half) var(--form-grid-gap-x-half)}.form-grid .form-label.required:after{margin-left:0;order:-9999}.form-grid .form-label .checkbox{margin-left:.75rem;margin-right:.75rem}.form-grid .has-wrap-after:after{--tw-content:"";content:var(--tw-content);display:block;width:100%}.form-grid-wrap{width:100%}.form-grid-row{display:flex;flex-direction:row;padding-bottom:var(--form-grid-gap-y-half);padding-top:var(--form-grid-gap-y-half);position:relative;width:100%}.form-grid-col{padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half)}.form-grid .form-actions{gap:1.5rem;justify-content:center;padding:var(--form-grid-gap-y) var(--form-grid-gap-x-half);width:100%}.form-grid .form-actions.is-pinned{border-top-width:1px}.form-horz .form-group,.form-horz .form-row{align-items:flex-start;display:flex;flex-direction:row}.form-horz .form-group{flex-grow:1;flex-wrap:wrap;min-height:32px;min-width:0;padding-left:var(--form-horz-label-width);position:relative}.form-horz .form-group[class*=" w-"],.form-horz .form-group[class^=w-]{flex:none}.form-horz .form-group>*{min-width:0}.form-horz .form-group.no-label{padding-left:0}.form-horz .form-group.no-label>.check-list-inline{padding-left:1rem;padding-right:1rem}.form-horz .form-label{justify-content:flex-end;left:0;padding-left:1rem;padding-right:.5rem;position:absolute;top:0;width:var(--form-horz-label-width)}.form-horz .form-label.required:after{margin-left:0;order:-9999}.form-horz .form-tip{width:100%}.form-horz .form-tip,.form-horz .input-control,.form-horz .input-group{flex:1 1 auto}.form .form-group-wrapper,.form-horz .form-group-wrapper{flex:1 1 auto;min-width:0;width:100%;z-index:1}.form .form-group-wrapper.flex-none,.form-horz .form-group-wrapper.flex-none{flex:none}.form fieldset>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.form fieldset{padding-bottom:1rem;padding-left:1rem}.form-grid fieldset>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.form legend{--tw-border-opacity:1;border-bottom-color:rgba(var(--color-primary-100-rgb),var(--tw-border-opacity));border-bottom-width:1px;display:flex;justify-content:flex-start;margin-left:-1rem;width:100%;width:calc(100% + 1rem)}.form-title{align-items:center;background-color:rgba(var(--color-primary-50-rgb),.5);display:flex;font-weight:700;height:1.75rem;padding-left:.75rem;padding-right:.75rem}:root{--input-control-fix-width-sm:2rem;--input-control-fix-width:4.375rem;--input-control-fix-width-lg:6.75rem}.input-control{--input-control-prefix:8px;--input-control-suffix:8px;position:relative}.input-control-prefix,.input-control-suffix{align-items:center;display:flex;height:100%;left:0;opacity:.5;padding-left:.5rem;padding-right:.5rem;position:absolute;top:0;white-space:nowrap;width:var(--input-control-prefix);z-index:1}.input-control-suffix{justify-content:flex-end;left:auto;right:0;width:var(--input-control-suffix)}.form-control:focus+.input-control-prefix,.form-control:focus+.input-control-suffix{opacity:1}.input-control>.form-control{padding-left:var(--input-control-prefix);padding-right:var(--input-control-suffix)}.input-control>select.form-control{background-position-x:calc(100% - var(--input-control-suffix) - 8px);padding-right:calc(var(--input-control-suffix) + 20px)}.has-prefix{--input-control-prefix:var(--input-control-fix-width)}.has-suffix{--input-control-suffix:var(--input-control-fix-width)}.has-prefix-sm{--input-control-prefix:var(--input-control-fix-width-sm)}.has-suffix-sm{--input-control-suffix:var(--input-control-fix-width-sm)}.has-prefix-lg{--input-control-prefix:var(--input-control-fix-width-lg)}.has-suffix-lg{--input-control-suffix:var(--input-control-fix-width-lg)}.has-prefix-icon{--input-control-prefix:32px}.has-suffix-icon{--input-control-suffix:32px}.input-control.has-prefix-icon{--input-control-prefix:32px}.input-control.has-suffix-icon{--input-control-suffix:32px}.input-control.has-prefix-icon>.input-control-prefix,.input-control.has-suffix-icon>.input-control-suffix{justify-content:center;padding:0}.input-control.size-sm>.form-control,.input-control.size-sm>.input-control-prefix,.input-control.size-sm>.input-control-suffix{font-size:.75rem;line-height:1rem}.input-control.size-lg>.form-control,.input-control.size-lg>.input-control-prefix,.input-control.size-lg>.input-control-suffix{font-size:1rem;line-height:1.5rem}:root{--label-bg:var(--color-gray-50);--label-border-color:var(--color-gray-500);--label-color:var(--color-gray-500);--label-radius:var(--radius)}.label{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:var(--label-border-color);align-items:center;background-color:var(--label-bg);border-radius:var(--label-radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--label-color);display:inline-flex;font-size:.75rem;height:1.25rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem;white-space:pre-line}.label.size-lg{font-size:.8125rem;height:1.5rem;line-height:1.25rem;padding-left:.5rem;padding-right:.5rem}.label.size-sm{height:1rem}.label-dot{aspect-ratio:1/1;border-radius:var(--radius-full);height:.5rem;padding-left:0;padding-right:0}.caret,.caret-down,.caret-left,.caret-right,.caret-up{border:var(--caret-size,4px) solid transparent;display:inline-block;height:0;opacity:var(--caret-opacity,.5);width:0}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.caret,.caret-down{border-bottom-width:0;border-top-color:currentColor}.caret-up{border-bottom-color:currentColor;border-top-width:0}.caret-right{border-left-color:currentColor;border-right-width:0}.caret-left{border-left-width:0;border-right-color:currentColor}.listitem{align-items:center;border-radius:var(--radius);display:flex;flex-direction:row;flex-wrap:nowrap;gap:.5rem;padding:.25rem}.listitem.selected{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.listitem.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.item-actions,.item-avatar,.item-icon,.item-trailing,.item-trailing-icon{flex:none}.item-icon.icon-EMPTY{display:none}.item-subtitle{font-size:.75rem;line-height:1rem;opacity:.8}.item-content,.item-text{flex:1 1 auto;min-width:0}.item-leading,.item-trailing{align-items:center;display:flex;flex:none;gap:.5rem}.item-checkbox{margin-right:-.5rem}.item-content{align-items:center;display:flex;gap:.5rem}.multiline>.item-content{align-items:flex-start;flex-direction:column;gap:.25rem}.list{list-style-type:none;padding-left:0}.list-heading-inner .item-title{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-weight:700}.list.is-nested-sub{padding-left:var(--list-indent)}.is-nested-collapsed{display:none}.nested-toggle-icon{align-items:center;border-radius:var(--radius);display:flex;height:1rem;justify-content:center;margin-right:-.25rem;width:1rem}.magnifier{display:inline-block;height:1em;position:relative;width:1em}.magnifier:after,.magnifier:before{border-radius:var(--radius-full);content:"";display:block;position:absolute}.magnifier:before{border:1px solid;height:.75em;width:.75em}.magnifier:after{--tw-rotate:45deg;background-color:currentColor;height:1px;left:.55em;top:.7em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5em}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.search-box.compact.has-prefix-icon{--input-control-prefix:24px}.search-box.compact.has-suffix-icon{--input-control-suffix:24px}:root{--menu-bg:var(--color-canvas);--menu-active-bg:var(--color-primary-500);--menu-active-color:var(--color-canvas);--menu-selected-bg:var(--color-primary-50);--menu-selected-color:var(--color-primary-500);--menu-icon-opacity:.5;--menu-icon-margin:1.75rem;--menu-min-width:3rem;--menu-heading-color:var(--color-gray-500)}.menu{background:var(--menu-bg);max-width:var(--menu-max-width);min-width:var(--menu-min-width);padding:.5rem}.menu-wrapper{display:flex;flex-direction:column;min-height:0}.menu-wrapper>.menu{flex:1 1 auto;min-height:0;overflow:auto}.menu-item>.item-inner,.menu-item>a{align-items:center;border-radius:var(--radius);color:inherit;cursor:pointer;display:flex;gap:.5rem;justify-content:space-between;overflow:hidden;padding:.25rem .5rem;position:relative;text-overflow:ellipsis;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap}.menu-item>.selected{background:var(--menu-selected-bg);color:var(--menu-selected-color)}.menu-item>.active,.menu-item>a.hover,.menu-item>a:hover{background:var(--menu-active-bg);color:var(--menu-active-color)}.menu-item.disabled>a:hover,.menu-item>a.disabled:hover{background-color:inherit;color:inherit}.menu-item>a>.item-title{flex:1 1 auto}.menu>.divider{margin:.5rem .25rem}.menu-heading{align-items:center;color:var(--menu-heading-color);display:flex;font-size:.75rem;font-weight:700;height:2rem;line-height:1rem;padding-left:.25rem;padding-right:.25rem}.has-icons>.menu-item>a>.item-icon{align-items:center;display:flex;height:1rem;justify-content:center;opacity:var(--menu-icon-opacity);width:1rem}.menu-nested{--menu-indent:10px}.menu-nested .menu{background-color:transparent;margin-bottom:-.5rem;margin-left:var(--menu-indent);margin-top:-.5rem;padding-right:0}.menu-nested .menu-item>.item-inner{padding-left:0}.menu.compact .menu-item>a{padding-bottom:.125rem;padding-top:.125rem}.menu.compact .menu-heading{height:1.75rem}.search-menu-header{padding:.5rem .5rem .125rem}.search-menu-footer{padding:.125rem .5rem .5rem}.search-menu .item.is-not-match{display:none}.search-menu .item.is-not-match.has-match-child{display:list-item}.search-menu .item.is-not-match.has-match-child>.item-inner{opacity:.5;pointer-events:none}.search-menu.no-toggle-on-search .nested-toggle-icon{pointer-events:none}.search-menu .is-match-keys{font-weight:700;text-decoration-line:underline}.search-menu-no-match-hint{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));display:none;font-size:.75rem;line-height:1rem;padding:.5rem}.no-match-child .search-menu-no-match-hint{display:block}.no-match-child>.menu{display:none}:root{--alert-bg:var(--color-surface)}.alert{align-items:center;background-color:var(--alert-bg);border-radius:var(--radius);display:flex;gap:.75rem;padding:.5rem .75rem}.alert-content{display:flex;flex:1 1 auto;flex-direction:column;gap:1rem}.alert-close{margin-bottom:-.375rem;margin-right:-.5rem;margin-top:-.375rem}.alert-link{color:inherit;font-weight:700}.alert-link:hover{color:inherit;text-decoration-line:underline}.alert-heading{font-weight:700;margin:0}.alert-text{flex:1 1 auto;white-space:pre-line}.alert-actions{align-items:center;display:flex;gap:.5rem}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.messagers{align-items:flex-end;display:flex;flex-direction:column;gap:.5rem;inset:0;justify-content:flex-end;padding:1rem;pointer-events:none;position:fixed;z-index:1900}.messagers-top-left,.messagers-top-right{justify-content:flex-start}.messagers-bottom-left,.messagers-top-left{align-items:flex-start}.messagers-bottom,.messagers-center,.messagers-top{align-items:center}.messagers-top,.messagers-top-left,.messagers-top-right{justify-content:flex-start}.messagers-center{justify-content:center}.messager{--tw-text-opacity:1;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-inverse-rgb),.8);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));pointer-events:auto;transition-duration:.3s}:root{--progress-radius:var(--radius);--progress-striped-size:40px;--progress-bg:var(--color-surface);--progress-bar-color:var(--color-primary-500)}.progress{background:var(--progress-bg);border-radius:var(--progress-radius);display:flex;height:1.25rem}.progress-bar{background:var(--progress-bar-color);height:100%}.progress-striped>.progress-bar{background-image:linear-gradient(45deg,rgba(var(--color-canvas-rgb),.15) 25%,transparent 25%,transparent 50%,rgba(var(--color-canvas-rgb),.15) 50%,rgba(var(--color-canvas-rgb),.15) 75%,transparent 75%,transparent);background-size:var(--progress-striped-size) var(--progress-striped-size)}.progress>.progress-bar:first-child{border-bottom-left-radius:inherit;border-top-left-radius:inherit}.progress>.progress-bar:last-child{border-bottom-right-radius:inherit;border-top-right-radius:inherit}.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}:root{--scrollbar-size:10px;--scrollbar-opacity:.6;--scrollbar-bg:rgba(var(--color-inverse-rgb),.15);--scrollbar-inset:inset 0 0 0 1px rgba(var(--color-inverse-rgb),.05);--scrollbar-bar-bg:rgba(var(--color-inverse-rgb),.3);--scrollbar-hover-bg:rgba(var(--color-inverse-rgb),.4);--scrollbar-drag-bg:rgba(var(--color-inverse-rgb),.5);--scrollbar-radius:var(--radius-sm);--scrollbar-duration:.7s}::-webkit-scrollbar{height:var(--scrollbar-size);width:var(--scrollbar-size)}::-webkit-scrollbar-track{box-shadow:var(--scrollbar-shadow);-webkit-transition:background-color var(--scrollbar-duration);transition:background-color var(--scrollbar-duration)}::-webkit-scrollbar-track:hover,:hover::-webkit-scrollbar-track{background:var(--scrollbar-bg)}::-webkit-scrollbar-thumb{background:var(--scrollbar-bar-bg);border-radius:var(--scrollbar-radius);min-height:var(--scrollbar-size);-webkit-transition:var(--scrollbar-duration);transition:var(--scrollbar-duration);-webkit-transition-property:background-color;transition-property:background-color}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover-bg)}::-webkit-scrollbar-thumb:active{background:var(--scrollbar-drag-bg)}.scrollbar-thin::-webkit-scrollbar{height:calc(var(--scrollbar-size)/2);width:calc(var(--scrollbar-size)/2)}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(./icons/ZentaoIcon.eot);src:url(./icons/ZentaoIcon.woff) format("woff"),url(./icons/ZentaoIcon.ttf) format("truetype"),url(./icons/ZentaoIcon.svg#regular) format("svg")}.icon,[class*=" icon-"],[class^=icon-]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-display:block;font-family:ZentaoIcon;font-size:14px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon:before{display:inline-block;min-width:14px;text-align:center}.icon-xs:before{font-size:.7em}.icon-sm:before{font-size:.8em}.icon-lg:before{font-size:1.25em;vertical-align:-10%}.icon-2x{font-size:28px}.icon-3x{font-size:42px}.icon-4x{font-size:56px}.icon-5x{font-size:70px}.icon-run{position:relative}.icon-run:before{opacity:.5}.icon-run:after{bottom:0;content:"\ea07";display:block;left:0;position:absolute;right:0;text-align:center;top:0}.icon-guihua:before{content:"\ea02"}.icon-memory:before{content:"\e9fd"}.icon-cpu:before{content:"\e9fe"}.icon-pause-pure:before{content:"\e9ff"}.icon-exclamation-pure:before{content:"\ea00"}.icon-zentao:before{content:"\e901"}.icon-zentao-alt:before{content:"\e900"}.icon-safe:before{content:"\ea06"}.icon-ai:before{content:"\e983"}.icon-kanban:before{content:"\e997"}.icon-college:before{content:"\e9c8"}.icon-home:before,.icon-menu-my:before{content:"\e97a"}.icon-program:before{content:"\e9aa"}.icon-lightbulb-alt:before,.icon-product:before{content:"\e98f"}.icon-project:before,.icon-rocket:before{content:"\e99c"}.icon-run:before{content:"\e9a9"}.icon-run-alt:before{content:"\ea07"}.icon-test:before{content:"\e956"}.icon-devops:before,.icon-infinite:before{content:"\e9a3"}.icon-doc:before,.icon-menu-doc:before{content:"\e99b"}.icon-statistic:before{content:"\e999"}.icon-group:before,.icon-menu-users:before,.icon-persons:before,.icon-team:before{content:"\e97e"}.icon-assets:before,.icon-diamond:before{content:"\e9ae"}.icon-flow:before{content:"\e994"}.icon-backend:before,.icon-cog-outline:before{content:"\ea05"}.icon-help:before{content:"\e968"}.icon-download:before,.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-lightbulb:before{content:"\e91c"}.icon-close:before{content:"\e936"}.icon-check:before{content:"\e5ca"}.icon-minus:before{content:"\e926"}.icon-expand-alt:before{content:"\e6f1"}.icon-collapse-alt:before{content:"\e6f2"}.icon-fullscreen:before{content:"\e96b"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-exclamation-sign:before{content:"\e930"}.icon-info-sign:before{content:"\e9d5"}.icon-flag:before{content:"\e937"}.icon-check-circle:before{content:"\e92f"}.icon-check-sign:before{content:"\e938"}.icon-chart-pie:before{content:"\e95b"}.icon-history:before{content:"\e95f"}.icon-pencil:before{content:"\e254"}.icon-search:before{content:"\e928"}.icon-restart:before{content:"\e95e"}.icon-cog:before{content:"\e93b"}.icon-chart-line:before{content:"\e95c"}.icon-bar-chart:before,.icon-chart-bar:before{content:"\e95d"}.icon-exchange:before{content:"\e927"}.icon-severity:before{content:"\e973"}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-severity-solid:before{content:"\e902"}.icon-chat-line:before{content:"\e998"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-chat:before,.icon-message:before{content:"\e940"}.icon-more:before{content:"\e744"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-columns:before{content:"\f0db"}.icon-envelope-o:before{content:"\e92a"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-angle-double-right:before{content:"\f101"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-text:before{content:"\e929"}.icon-share:before{content:"\f064"}.icon-format-list-bulleted:before{content:"\e9a8"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-productplan:before{content:"\e9fc"}.icon-aiux:before{content:"\e99e"}.icon-qc:before{content:"\e986"}.icon-qc-q:before{content:"\e985"}.icon-qc-c:before{content:"\e987"}.icon-sonarqube:before{content:"\e9ba"}.icon-market:before{content:"\ea01"}.icon-ztool:before{content:"\e9c1"}.icon-contacts:before{content:"\e9c3"}.icon-chats:before{content:"\e9c4"}.icon-ops:before{content:"\e903"}.icon-menu-backend:before{content:"\e993"}.icon-feedback:before{content:"\e991"}.icon-oa:before{content:"\e9a1"}.icon-more-circle:before{content:"\e988"}.icon-controls:before{content:"\e995"}.icon-account:before{content:"\e992"}.icon-about:before,.icon-info:before{content:"\e996"}.icon-exclamation:before{content:"\e9fa"}.icon-exit:before{content:"\e99a"}.icon-theme:before{content:"\e9a0"}.icon-globe:before,.icon-lang:before{content:"\f0ac"}.icon-template:before{content:"\e9fb"}.icon-seal:before{content:"\e9f8"}.icon-menu-arrow-left:before{content:"\e9f0"}.icon-menu-arrow-right:before{content:"\e9f1"}.icon-add-directory:before{content:"\e9ef"}.icon-design:before{content:"\e9ec"}.icon-download-alt:before{content:"\e9ea"}.icon-blame:before{content:"\e9e0"}.icon-draft-edit:before{content:"\e9dc"}.icon-sub-review-user:before{content:"\e9db"}.icon-sub-review:before{content:"\e9df"}.icon-ztf:before{content:"\e9dd"}.icon-save:before{content:"\e9d8"}.icon-list-box:before{content:"\e9b4"}.icon-usecase:before{content:"\e99d"}.icon-code:before{content:"\e990"}.icon-summary:before{content:"\e9ad"}.icon-more-alt:before{content:"\e9a7"}.icon-customer:before{content:"\e9d9"}.icon-or:before{content:"\ea0b"}.icon-manager:before{content:"\ea0c"}.icon-target:before{content:"\ea0a"}.icon-ipd:before{content:"\e9f9"}.icon-wiki-lib:before{content:"\e9f5"}.icon-annex-lib:before{content:"\e9f6"}.icon-interface-lib:before{content:"\e9f7"}.icon-has-authority-pack:before{content:"\e9f3"}.icon-without-authority-pack:before{content:"\e9f4"}.icon-data-structure:before{content:"\e9f2"}.icon-waterfallplus:before{content:"\e9ed"}.icon-agileplus:before{content:"\e9ee"}.icon-horn:before{content:"\e9eb"}.icon-resume:before{content:"\e9e9"}.icon-mirror:before{content:"\e9e6"}.icon-remote:before{content:"\e9e7"}.icon-moon:before{content:"\e9e8"}.icon-ticket:before{content:"\e9e1"}.icon-gantt-alt:before{content:"\e9e2"}.icon-tree:before{content:"\e9c9"}.icon-list:before{content:"\e9cb"}.icon-gantt:before{content:"\e9cc"}.icon-group-view:before{content:"\e9cd"}.icon-inherit-space:before{content:"\e9c2"}.icon-card-archive:before{content:"\e9b8"}.icon-col-archive:before{content:"\e9b9"}.icon-col-add-right:before{content:"\e9bb"}.icon-col-add-left:before{content:"\e9bc"}.icon-col-split:before{content:"\e9bd"}.icon-waterfall:before{content:"\e9a4"}.icon-manual:before{content:"\e98d"}.icon-lane:before{content:"\e9b1"}.icon-unpinned:before{content:"\ea08"}.icon-pinned:before{content:"\ea09"}.icon-support-ticket:before{content:"\ea04"}.icon-snap-house:before{content:"\e9e3"}.icon-wrench:before{content:"\e9e4"}.icon-desktop:before{content:"\e9e5"}.icon-back-circle:before{content:"\e9da"}.icon-back:before{content:"\e9d3"}.icon-shield:before{content:"\e9ca"}.icon-meh:before{content:"\e9ce"}.icon-frown:before{content:"\e9cf"}.icon-smile:before{content:"\e9d0"}.icon-unlock-solid:before{content:"\e9d1"}.icon-lock-solid:before{content:"\e9d2"}.icon-ver:before{content:"\e9c6"}.icon-publish:before,.icon-send:before{content:"\e9c7"}.icon-tag:before{content:"\e9be"}.icon-tag-lock:before{content:"\e9bf"}.icon-code-fork:before{content:"\f126"}.icon-branch-lock:before{content:"\e9c0"}.icon-groups:before{content:"\e9af"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-thumbs-up-solid:before{content:"\e9d6"}.icon-thumbs-down-solid:before{content:"\e9d7"}.icon-hash:before,.icon-version:before{content:"\e9ab"}.icon-p-square:before{content:"\e97b"}.icon-video-play:before{content:"\e97f"}.icon-plus-solid-circle:before{content:"\e974"}.icon-minuse-solid-circle:before{content:"\e9b6"}.icon-s:before{content:"\e975"}.icon-c:before{content:"\e976"}.icon-t:before{content:"\e977"}.icon-guide:before{content:"\e978"}.icon-todo:before{content:"\e979"}.icon-plus:before{content:"\e925"}.icon-side-left:before{content:"\e9b3"}.icon-side-right:before{content:"\e9b2"}.icon-fullscreen-exit:before{content:"\e972"}.icon-alert:before{content:"\e99f"}.icon-undo:before{content:"\e93f"}.icon-redo:before{content:"\e9d4"}.icon-swap:before{content:"\e9b0"}.icon-chat-solid:before{content:"\e9b5"}.icon-clock:before{content:"\e97c"}.icon-cost:before{content:"\e97d"}.icon-pencil-alt:before{content:"\e984"}.icon-size-height:before{content:"\e9c5"}.icon-upload-file:before{content:"\ea03"}.icon-file-log:before{content:"\e9de"}.icon-rich-text:before{content:"\e913"}.icon-markdown:before{content:"\e916"}.icon-excel:before{content:"\e933"}.icon-text-link:before{content:"\e94d"}.icon-ppt:before{content:"\e957"}.icon-word:before{content:"\e958"}.icon-doc-lib:before{content:"\e96f"}.icon-file-empty:before,.icon-file:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-menu-collapse:before{content:"\e980"}.icon-menu-expand:before{content:"\e981"}.icon-estimate:before{content:"\e9ac"}.icon-sprint:before{content:"\e9a2"}.icon-shield-check:before{content:"\e9a5"}.icon-ok:before{content:"\e9a6"}.icon-printer:before{content:"\e906"}.icon-bullhorn:before{content:"\e910"}.icon-person:before{content:"\e941"}.icon-fields:before{content:"\e989"}.icon-trigger:before{content:"\e98a"}.icon-layout:before{content:"\e98b"}.icon-audit:before{content:"\e98c"}.icon-ban-circle:before,.icon-cancel:before{content:"\e951"}.icon-eye:before{content:"\e94e"}.icon-eye-off:before{content:"\e96e"}.icon-unlock:before{content:"\e94f"}.icon-lock:before,.icon-private:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-hand-right:before{content:"\e907"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-play:before,.icon-start:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-alter:before,.icon-change:before{content:"\e970"}.icon-glasses:before,.icon-review:before{content:"\e914"}.icon-sitemap:before,.icon-testcase:before{content:"\e915"}.icon-pluses:before{content:"\e917"}.icon-report-list:before{content:"\e918"}.icon-active:before,.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-split:before{content:"\e98e"}.icon-calendar:before,.icon-delay:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-diff:before{content:"\e9b7"}.status-active,.status-asked,.status-normal,.status-unconfirmed,.status-wait{color:#313c52}.status-active.status-issue,.status-checking,.status-commenting,.status-confirmed,.status-doing{color:#ff6f42}.status-blocked,.status-hangup,.status-pause,.status-suspended{color:#b89664}.status-clarify,.status-draft{color:#8166ee}.status-noreview,.status-reviewing,.status-wait.status-testcase{color:#18a6fd}.status-active.status-risk,.status-changed,.status-changing,.status-fail{color:#fb2b2b}.status-checked,.status-done,.status-pass,.status-replied,.status-resolved,.status-success{color:#0dbb7d}.status-cancel,.status-canceled,.status-investigate{color:#838a9d}.status-canceled,.status-closed,.status-testtask.status-done{color:#9ea3b0}.pri,[class*=" pri-"],[class^=pri-]{--tw-text-opacity:1;border-color:currentColor;border-radius:var(--radius-full);border-width:1px;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity));display:inline-block;font-size:.75rem;height:1rem;line-height:1rem;line-height:14px;max-width:54px;min-width:16px;overflow:hidden;padding-left:.125rem;padding-right:.125rem;text-align:center;white-space:nowrap}.pri-1{color:rgb(255 73 18/var(--tw-text-opacity))}.pri-1,.pri-2{--tw-text-opacity:1}.pri-2{color:rgba(var(--color-warning-600-rgb),var(--tw-text-opacity))}.pri-3{color:rgb(59 130 246/var(--tw-text-opacity))}.pri-3,.pri-4{--tw-text-opacity:1}.pri-4{color:rgb(149 211 224/var(--tw-text-opacity))}.severity{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity));display:inline-block;font-size:.75rem;height:1rem;line-height:1rem;line-height:14px;max-width:54px;min-width:16px;overflow:hidden;padding-left:.125rem;padding-right:.125rem;position:relative;text-align:center;white-space:nowrap}.severity:before{--tw-content:attr(data-severity);background-color:currentColor;background-repeat:no-repeat;content:var(--tw-content);height:100%;left:0;-webkit-mask:url('data:image/svg+xml;charset=utf-8, ');mask:url('data:image/svg+xml;charset=utf-8, ');-webkit-mask-size:100% 100%;mask-size:100% 100%;position:absolute;top:0;width:100%;z-index:0}.severity:after,.severity:before{display:inline-block}.severity:after{--tw-scale-x:.75;--tw-scale-y:.75;content:attr(data-severity);line-height:20px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.severity[data-severity="1"]{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.severity[data-severity="2"]{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.severity[data-severity="3"]{--tw-text-opacity:1;color:rgb(250 174 26/var(--tw-text-opacity))}.severity[data-severity="4"]{--tw-text-opacity:1;color:rgb(184 150 100/var(--tw-text-opacity))}.severity[data-severity="5"]{--tw-text-opacity:1;color:rgb(158 163 176/var(--tw-text-opacity))}.severity-label{background-color:transparent}.severity-label:after,.severity-label:before{--tw-content:none;content:var(--tw-content)}.risk-high{color:rgb(220 38 38/var(--tw-text-opacity))}.risk-high,.risk-middle{--tw-text-opacity:1}.risk-middle{color:rgb(234 179 8/var(--tw-text-opacity))}.nav-feature{--nav-active-bg:rgba(var(--color-primary-800-rgb),.07)}.nav-feature .nav-checkbox>.checkbox,.nav-feature .nav-checkbox>.checkbox-primary,.nav-feature .nav-item>a{align-items:center;border-radius:var(--radius);height:2rem;padding-left:.625rem;padding-right:.625rem}.nav-feature .nav-item>a>.icon{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.sortable-list .listitem{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));cursor:move;padding-left:.5rem;padding-right:.5rem}.sortable-list .sortable-ghost>.listitem{--tw-bg-opacity:1;background-color:rgba(var(--color-warning-50-rgb),var(--tw-bg-opacity))}:root{--avatar-radius:12.5%;--avatar-bg:var(--color-surface)}.avatar{align-items:center;aspect-ratio:1/1;background:var(--avatar-bg);border-radius:var(--avatar-radius);display:inline-flex;justify-content:center;overflow:hidden;width:2rem}.avatar>img{height:100%;margin:0;-o-object-fit:cover;object-fit:cover;width:100%}.avatar.size-xs{width:1.25rem}.avatar.size-sm,.avatar.size-xs{font-size:.75rem;line-height:1rem}.avatar.size-sm{width:1.5rem}.avatar.size-lg{font-size:1.5rem;line-height:2rem;width:3rem}.avatar.size-xl{font-size:2.25rem;line-height:2.5rem;width:5rem}.avatar-group{display:flex;gap:.625rem}.avatar-group>.avatar{box-shadow:0 0 0 1px var(--color-canvas)}.avatar-group>*+*{margin-left:-1rem}.avatar-group.size-xs>*+*{margin-left:-.75rem}.avatar-group.size-sm>*+*{margin-left:-.875rem}.avatar-group.size-lg>*+*{margin-left:-1.25rem}.avatar-group.size-xl>*+*{margin-left:-1.5rem}.btn-group{display:flex;gap:1px}.btn-group>.btn.active{z-index:1}.btn-group>.btn:focus-within,.btn-group>.btn:hover{z-index:2}.btn-group>.btn.disabled,.btn-group>.btn:disabled{z-index:-1}.btn-group>.btn:not(:first-child){border-bottom-left-radius:var(--radius-none);border-left-color:rgba(var(--color-canvas-rgb),.2);border-left-width:1px;border-top-left-radius:var(--radius-none)}.btn-group>.btn:not(:first-child):before{left:-1px}.btn-group>.btn:not(:last-child){border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none)}.color-picker-heading{align-items:center;font-weight:700;justify-content:space-between;margin-bottom:-.25rem;padding:.5rem}.color-picker-heading,.color-picker-row{display:flex;flex-direction:row}.color-picker-row{flex-wrap:wrap;gap:.5rem;padding:.75rem}.color-picker-item{--tw-text-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);align-items:center;border-radius:var(--radius-full);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));display:flex;height:1.25rem;justify-content:center;padding-left:.125rem;padding-right:.125rem;width:1.25rem}.pick-container{left:0;pointer-events:none;position:absolute;top:0;z-index:1600}.pick-pop{display:flex;flex-direction:column;opacity:0;pointer-events:auto;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);z-index:1200}.pick-pop.in{opacity:1}.date-picker-menu{--menu-bg:none}.date-picker-menu .mini-calendar{margin-top:-.75rem}.date-pick-menu-month,.date-pick-menu-years{display:flex;flex-direction:row;flex-wrap:wrap;gap:1px;max-height:237px;padding-bottom:.5rem;padding-left:.5rem;padding-right:.5rem}.date-pick-menu-years>.btn{width:2.5rem}.date-pick-menu-years>.btn.is-current{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.date-pick-menu-month>.btn.active,.date-pick-menu-years>.btn.active{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.date-pick-menu-month>.btn{width:3rem}.date-picker-menu-footer{border-top-width:1px;display:flex;flex-direction:row;padding:.25rem}.date-picker-menu-footer>.toolbar{flex:1 1 auto;justify-content:center}.date-picker-menu>.menu{border-right-width:1px}.date-picker-menu .menu-item{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.time-picker-menu{max-height:inherit}.time-picker-menu .menu-item>a{justify-content:center}.datetime-picker-menu{max-height:inherit}.mini-calendar{padding:.5rem}.mini-calendar>.row>.col{align-items:center;justify-content:center;width:14.2857%}.mini-calendar-day{height:2rem}.mini-calendar-day.disabled{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-200-rgb),var(--tw-bg-opacity));opacity:.5;pointer-events:none}.mini-calendar-day>.btn{width:2rem}.mini-calendar-day.is-weekend>.btn{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.mini-calendar-day.active>.btn,.mini-calendar-day.is-today>.btn{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.mini-calendar-day.selected>.btn{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.mini-calendar-day.is-out-month{opacity:.5}.i-time{border-color:currentColor;border-radius:50%;border-width:.08em;display:inline-block;height:1em;position:relative;width:1em}.i-time:after{--tw-content:"";border-color:currentColor;border-width:0 0 .08em .08em;content:var(--tw-content);height:.385em;left:.3846em;position:absolute;top:.08em;width:.385em}.chevron-down,.chevron-left,.chevron-right,.chevron-up{align-items:center;display:inline-flex;height:1em;justify-content:center;position:relative;width:1em}.chevron-down:before,.chevron-left:before,.chevron-right:before,.chevron-up:before{--tw-translate-y:-0.125rem;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.6923077em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform-origin:center;width:.6923077em}.chevron-left:before{--tw-translate-y:0px;--tw-translate-x:0.125rem;--tw-rotate:135deg}.chevron-left:before,.chevron-right:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-right:before{--tw-translate-y:0px;--tw-translate-x:-0.125rem;--tw-rotate:-45deg}.chevron-up:before{--tw-translate-y:0.125rem;--tw-rotate:225deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.i-calendar{border-radius:2px;display:inline-block;height:.79em;margin-top:.16em;position:relative;width:1em}.i-calendar,.i-calendar:after,.i-calendar:before{border-color:currentColor;border-width:.08em}.i-calendar:after,.i-calendar:before{--tw-content:"";content:var(--tw-content);position:absolute}.i-calendar:before{border-bottom-width:0;left:.15em;top:.307em;width:.6em}.i-calendar:after{border-bottom-width:0;border-top-width:0;height:.3077em;left:.17em;top:-.154em;width:.538em}:root{--modal-radius:var(--radius-lg);--modal-bg:rgba(var(--color-inverse-rgb),.4);--modal-sm:37.5rem;--modal-base:50rem;--modal-lg:75rem;--modal-xl:90rem}.modal{align-items:center;background-color:var(--modal-bg);display:none;inset:0;justify-content:center;overflow:hidden;position:fixed;z-index:1500}.modal.load-indicator:before{background-color:transparent;transition-property:none}.modal.loading:after{--tw-text-opacity:1;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.modal.loading .modal-dialog{opacity:0!important}.modal.show{display:flex}.modal-no-backdrop{background-color:transparent;pointer-events:none}.modal-hide{opacity:0!important}.modal-dialog{--tw-bg-opacity:0.9;--tw-shadow:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--tw-shadow-colored:0 10px 50px -10px var(--tw-shadow-color),0 8px 20px -10px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--modal-radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);pointer-events:auto;position:relative;width:var(--modal-base)}.modal-content,.modal-dialog{max-height:100vh}.modal-content{display:flex;flex-direction:column;height:100%}.loading>.modal-dialog>.modal-content{opacity:0;visibility:hidden}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.modal-header{align-items:center;display:flex;flex:none;flex-wrap:nowrap;gap:1rem;padding:1rem 1.25rem;position:relative}.modal-title{flex:1 1 auto;font-size:1rem;font-weight:700;line-height:1.5rem}.modal-actions{position:absolute;right:.75rem;top:.75rem;z-index:10}.modal-body{flex:1 1 auto;overflow:auto;padding:1rem 1.25rem}.modal-footer{align-items:center;display:flex;flex:none;gap:.75rem;padding:1.25rem}.modal-dialog.size-full,.modal-dialog[data-size=full]{height:100vh;width:100vw}.modal-dialog.size-sm,.modal-dialog[data-size=sm]{width:var(--modal-sm)}.modal-dialog.size-lg,.modal-dialog[data-size=lg]{width:var(--modal-lg)}.modal-dialog.size-xl,.modal-dialog[data-size=xl]{width:var(--modal-xl)}.modal-iframe{flex:1 1 auto;width:100%}.modal-trans{opacity:0;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.modal-trans.in{opacity:1}.modal-trans>.modal-dialog{--tw-scale-x:.95;--tw-scale-y:.95;opacity:0;transition-duration:.3s;transition-property:transform,opacity}.modal-trans.in>.modal-dialog,.modal-trans>.modal-dialog{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.modal-trans.in>.modal-dialog{--tw-scale-x:1;--tw-scale-y:1;opacity:1}.modal-alert .modal-footer{justify-content:flex-end}.modal-alert .modal-header{margin-bottom:-1rem}.modal-alert .modal-body{white-space:pre-line}.modal-alert .modal-actions+.modal-body{padding-right:3rem}.modal-alert .modal-header+.modal-actions+.modal-body{padding-right:1.25rem}.file-selector{gap:.5rem;width:100%}.file-selector,.file-selector-box{display:flex;flex-direction:column}.file-selector-box{--tw-border-opacity:1;--tw-ring-color:transparent;--state-color:rgba(var(--color-primary-500-rgb),.05);background-color:rgba(var(--color-primary-50-rgb),.3);border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-style:dashed;border-width:1px;gap:0;height:auto;justify-content:center;padding:.5rem .75rem;position:relative}.file-selector-box .text{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.is-dragging .file-selector-box{border-style:solid}.file-selector-btn{align-items:center;display:flex;gap:.5rem;position:relative}.is-dragging .file-selector-btn{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.file-selector-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;inset:0;opacity:.1;position:absolute}.file-selector-tip{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.file-selector.is-mode-button{flex-direction:column-reverse}.file-selector-list.is-empty{display:none}.file-selector-item .item-avatar{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.file-selector-item .item-subtitle{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.file-selector-item .item-content{flex:none;margin-right:.25rem;max-width:100%}.file-selector-item>.listitem:hover{background-color:rgba(var(--color-gray-500-rgb),.05)}.file-selector-item.is-renaming .item-avatar+.item-content{max-width:calc(100% - 32px)}.file-selector-rename-text{max-width:100%;min-width:100px;position:relative}.file-selector-rename-text>div{overflow:hidden;pointer-events:none;visibility:hidden;white-space:nowrap}.file-selector-rename-input{inset:0;position:absolute}.file-selector-grid{--tw-bg-opacity:1;align-items:flex-start;background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity));border-color:transparent;border-radius:var(--radius);border-width:1px;display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--file-selector-grid-gap);padding:.5rem}.file-selector-grid-item{height:var(--file-selector-grid-height)}.file-selector-grid-btn,.file-selector-grid-item{width:var(--file-selector-grid-width)}.file-selector-grid-btn{--tw-border-opacity:1;--tw-ring-color:transparent;--state-color:rgba(var(--color-primary-500-rgb),.05);aspect-ratio:1/1;background-color:rgba(var(--color-primary-50-rgb),.3);border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-style:dashed;border-width:1px;display:flex;flex-direction:column;gap:0;height:auto;justify-content:center;padding:.5rem}.file-selector-grid-btn .text{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.file-selector-grid-item .listitem{flex-direction:column;height:100%;padding:0;position:relative;width:100%}.file-selector-grid-item .item-avatar{--tw-text-opacity:1;border-radius:var(--radius);border-width:1px;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));width:100%}.file-selector-grid-item .item-avatar.has-icon>.icon{font-size:calc(var(--file-selector-grid-width)/2)}.file-selector-grid-item .item-content,.file-selector-grid-item .toolbar{aspect-ratio:1/1;left:0;position:absolute;right:0;top:0;width:100%}.file-selector-grid-item .item-title{bottom:-1.25rem;font-size:.75rem;left:0;line-height:1rem;overflow:hidden;position:absolute;right:1.5rem;white-space:nowrap}.file-selector-grid-item .item-subtitle{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);bottom:.25rem;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));font-size:.75rem;left:.25rem;line-height:1rem;opacity:0;padding-left:.25rem;padding-right:.25rem;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.file-selector-grid-item:hover .item-subtitle{opacity:1}.file-selector-grid-item .toolbar .btn[data-remove-file]{--tw-text-opacity:1;background-color:rgba(var(--color-inverse-rgb),.5);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));padding:.375rem;position:absolute;right:1px;top:1px}.file-selector-grid-item .toolbar .btn[data-rename-file]{bottom:-1.5rem;padding:0;position:absolute;right:0}.file-selector-grid .file-selector-rename{bottom:0;height:1.5rem;position:absolute;top:auto}.file-selector-grid .file-selector-rename-text{width:100%}.is-dragging .file-selector-grid{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-primary-400-rgb),var(--tw-border-opacity));border-width:1px}:root{--nav-radius:var(--radius);--nav-active-color:var(--color-primary-500);--nav-active-bg:var(--color-inherit);--nav-heading-color:var(--color-gray-500)}.nav{list-style-type:none;padding-left:0}.nav,.nav-item{align-items:center;display:flex;position:relative}.nav-item{gap:.75rem}.nav-item>a{align-items:center;color:inherit;cursor:pointer;display:flex;gap:.25rem;height:2rem;justify-content:center;padding-left:1rem;padding-right:1rem}.nav-item>.active{background:var(--nav-active-bg);color:var(--nav-active-color);font-weight:700}.nav-item>.disabled{opacity:1}.nav-item>.disabled>*{opacity:var(--disabled-opacity)}.nav-divider,.nav>.divider{margin:.5rem}.nav-heading{align-items:center;color:var(--nav-heading-color);display:flex;font-weight:700;gap:.25rem;height:2rem;justify-content:center;padding-left:1rem;padding-right:1rem}.nav-space{flex:1 1 auto;width:1rem}.nav-primary>.nav-item{position:relative}.nav-primary>.nav-item:hover{z-index:10}.nav-primary>.nav-item+.nav-item{margin-left:-1px}.nav-primary>.nav-item>a{border-radius:var(--radius-none);border-width:1px}.nav-primary>.nav-item:first-child>a,.nav-primary>.nav-item:has(.nav-heading)+.nav-item>a{border-bottom-left-radius:var(--nav-radius);border-top-left-radius:var(--nav-radius)}.nav-primary>.nav-item:last-child>a{border-bottom-right-radius:var(--nav-radius);border-top-right-radius:var(--nav-radius)}.nav-primary>.nav-item>.active{--tw-text-opacity:1;background:var(--nav-active-color);border-color:var(--nav-active-color);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.nav-primary>.nav-divider{display:none}.nav-secondary>.nav-item>a{border-radius:var(--radius-none);position:relative}.nav-secondary>.nav-item>a:after{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:-2px;content:var(--tw-content);display:block;height:2px;left:0;position:absolute;right:0}.nav-secondary>.nav-item>.active:after{background-color:currentColor}.nav-secondary>.nav-divider{margin:0 0 0 -1px}.nav-tabs>.nav-item>a{border-bottom-left-radius:var(--radius-none);border-bottom-right-radius:var(--radius-none);position:relative}.nav-tabs>.nav-item>a:after{--tw-border-opacity:1;--tw-content:"";border-color:transparent;border-bottom-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-top-left-radius:inherit;border-top-right-radius:inherit;border-width:1px;content:var(--tw-content);display:block;inset:-1px;pointer-events:none;position:absolute}.nav-tabs>.nav-item>.active:after{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-bottom-color:transparent}.nav-tabs>.nav-divider{margin:0 0 0 -1px}.nav-pills>.nav-item>a{border-radius:var(--radius-full)}.nav-pills>.nav-item>.active{--tw-text-opacity:1;background:var(--nav-active-color);border-color:var(--nav-active-color);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.nav-stacked{flex-direction:column}.nav-stacked>.nav-item{width:100%}.nav-stacked>.nav-heading,.nav-stacked>.nav-item>a{justify-content:flex-start;width:100%}.nav-stacked>.nav-divider{height:1px;margin:.5rem 0;width:100%}.nav-primary.nav-stacked>.nav-item>a{height:2.5rem}.nav-primary.nav-stacked>.nav-item+.nav-item{margin-left:0;margin-top:-1px}.nav-primary.nav-stacked>.nav-item:first-child>a{border-bottom-left-radius:0;border-top-left-radius:var(--nav-radius);border-top-right-radius:var(--nav-radius)}.nav-primary.nav-stacked>.nav-item:last-child>a{border-bottom-left-radius:var(--nav-radius);border-bottom-right-radius:var(--nav-radius);border-top-right-radius:0}.nav-secondary.nav-stacked>.nav-item>a:after{--tw-bg-opacity:1;background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:0;height:100%;left:auto;right:0;top:0;width:2px}.nav-secondary.nav-stacked>.nav-item>.active:after{background-color:currentColor}.nav-secondary.nav-stacked>.nav-divider{margin:0}.nav-tabs.nav-stacked>.nav-item>a{border-bottom-left-radius:var(--nav-radius);border-bottom-right-radius:var(--radius-none);border-top-right-radius:var(--radius-none);position:relative}.nav-tabs.nav-stacked>.nav-item>a:after{--tw-border-opacity:1;border-bottom-color:transparent;border-bottom-left-radius:inherit;border-right-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-top-left-radius:inherit}.nav-tabs.nav-stacked>.nav-item>a.active:after{--tw-border-opacity:1;border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-right-color:transparent}.nav-tabs.nav-stacked>.nav-divider{margin:0}.nav-pills.nav-stacked>.nav-item+.nav-item{margin-top:.25rem}.nav-justified>.nav-item:not(.flex-none,.nav-divider){flex:1 1 auto}.nav-justified>.nav-item>a{width:100%}.arrow,.arrow:before{background:inherit;height:calc(var(--arrow-size)*1.4142);position:absolute;width:calc(var(--arrow-size)*1.4142)}.arrow{--arrow-size:5px;visibility:hidden}.arrow:before{--tw-rotate:45deg;border:inherit;content:"";transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));visibility:visible}.arrow-top,.arrow-up{border-bottom:inherit;border-right:inherit;border-width:1px 0 0 1px;top:calc(1px - var(--arrow-size))}.white>.arrow-top,.white>.arrow-up{top:calc(0px - var(--arrow-size))}.arrow-bottom,.arrow-down{border-left:inherit;border-top:inherit;border-width:0 1px 1px 0;bottom:calc(1px - var(--arrow-size))}.white>.arrow-bottom,.white>.arrow-down{bottom:calc(0px - var(--arrow-size))}.arrow-left{border-right:inherit;border-top:inherit;border-width:0 0 1px 1px;left:calc(1px - var(--arrow-size))}.white>.arrow-left{left:calc(0px - var(--arrow-size))}.arrow-right{border-bottom:inherit;border-left:inherit;border-width:1px 1px 0 0;right:calc(1px - var(--arrow-size))}.white>.arrow-right{right:calc(0px - var(--arrow-size))}.popover{display:none;position:absolute;width:-moz-max-content;width:max-content}.popover.show{display:block}.popover-heading{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-top-left-radius:inherit;border-top-right-radius:inherit;display:flex;gap:1rem;height:2.5rem;justify-content:space-between;padding-left:.75rem;padding-right:.5rem}.popover-title{flex:1 1 auto;font-weight:700}.popover-content{padding:.75rem}.popover-arrow.arrow-top,.popover-arrow.arrow-up{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.popover>.btn-close{position:absolute;right:.5rem;top:.625rem}.btn-close+.popover-content{padding-right:3rem}.btn.with-popover-show{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.with-popover-show[data-pop-placement=top]>.caret{--tw-rotate:180deg}.with-popover-show[data-pop-placement=left]>.caret,.with-popover-show[data-pop-placement=top]>.caret{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.with-popover-show[data-pop-placement=left]>.caret{--tw-rotate:90deg}.with-popover-show[data-pop-placement=right]>.caret{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pager{align-items:center;display:flex;gap:.25rem;white-space:nowrap}.menu.pager-size-menu{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));text-align:center}.menu.pager-size-menu>.menu-item>a{margin:.125rem}.pager .pager-goto-group>.form-control{width:3rem}.pager .pager-goto-group>.input-group-addon{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-300-rgb),var(--tw-border-opacity));border-width:1px}.pager>.pager-nav.active{--tw-text-opacity:1;box-shadow:0 0 0 1px var(--color-primary-500);color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.panel{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);overflow:hidden}.panel-heading{background-color:var(--panel-heading-bg);flex-wrap:nowrap;gap:1rem;justify-content:space-between;padding:.5rem 1rem}.panel-heading,.panel-title{align-items:center;display:flex}.panel-title{font-weight:700;gap:.5rem;margin:0}.panel-actions{align-items:center;display:flex;margin-right:-.5rem}.panel-body{padding:.75rem 1rem}.panel-footer{align-items:center;background-color:var(--panel-footer-bg);display:flex;gap:.5rem;padding:.5rem 1rem}.size-sm .panel-body,.size-sm .panel-footer,.size-sm .panel-heading{padding:.375rem .75rem}.size-lg .panel-body,.size-lg .panel-footer,.size-lg .panel-heading{padding:1rem 1.25rem}.picker{position:relative}.picker-select{align-items:center;gap:.25rem;justify-content:space-between}.picker-select,.picker-select.form-control{display:flex}.picker-select-placeholder{--tw-text-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-text-opacity));flex:1 1 auto}.picker-select-multi .picker-select-placeholder{padding-left:.25rem;padding-right:.25rem}.picker-single-selection{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap}.picker-deselect-btn{border-radius:var(--radius-full);padding:.25rem}.picker-deselect-btn:not(:hover){opacity:.7}.picker-select-multi.form-control{height:auto;min-height:32px;padding-left:.25rem}.picker-multi-selections{display:flex;flex-wrap:wrap;gap:.25rem;min-width:0}.picker-multi-selection{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);border-width:1px;display:flex;max-width:100%;padding-left:.5rem}.readonly .picker-multi-selection{padding-right:.5rem}.picker-multi-selection>.text{max-width:180px;overflow:clip;white-space:nowrap}.picker-menu-list{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-style:none;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);flex:1 1 auto;min-height:0;overflow-y:auto}.picker-menu-search+.picker-menu-list.menu{margin-top:-.125rem;padding-top:0}.picker-menu-list.tree{padding:.5rem}.picker-menu .search-menu-footer{border-top-width:1px;padding-bottom:.25rem;padding-top:.25rem}.picker-search-input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)!important;border-color:transparent;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;height:1.75rem;outline-width:0!important;padding-left:0;padding-right:2rem}.picker-search{flex:none;position:relative;width:100%}.picker-search>.magnifier{opacity:.5;position:absolute;right:0;top:.5rem}.picker-search-clear.btn{cursor:pointer;height:1.25rem;position:absolute;right:0;top:.25rem;width:1.25rem}.picker-search.is-inline{min-width:64px;width:4rem}.is-inline>.picker-search-input{height:1.25rem;min-width:64px;padding-left:.25rem;padding-right:.25rem}.picker-search-measure{height:0;left:0;overflow:hidden;position:absolute;top:0;white-space:nowrap}.split{display:flex;flex-direction:row}.split-vert{flex-direction:column}.split-cell{min-height:0;min-width:0}.has-animation>.split-cell{transition-duration:.15s;transition-property:width,height;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter{align-items:stretch;border-radius:var(--radius);cursor:col-resize;display:flex;flex:none;flex-direction:row;justify-content:center;position:relative}.gutter-vert{cursor:row-resize;flex-direction:column}.gutter:before{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));content:var(--tw-content);display:block;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter-horz:before{width:1px}.gutter-vert:before{height:1px}.gutter-horz:hover:before{width:75%}.gutter-vert:hover:before{height:75%}.gutter-resize-handler,.gutter-toggle{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;align-items:center;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-radius:var(--radius-lg);border-width:1px;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity));display:flex;height:1.75rem;justify-content:center;margin-top:-.875rem;position:absolute;top:50%;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.75rem}.gutter-toggle>span{--tw-scale-x:.75;--tw-scale-y:.75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.gutter:hover .gutter-toggle{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-gray-500-rgb),var(--tw-border-opacity));color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.gutter .gutter-toggle:hover{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.is-last>.gutter-toggle{--tw-scale-x:-1}.is-first>.gutter-toggle,.is-last>.gutter-toggle{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.is-first>.gutter-toggle{--tw-scale-x:1}.gutter-vert .gutter-toggle{--tw-rotate:90deg;left:50%;margin-left:-.375rem;margin-top:0;top:auto}.gutter-vert .gutter-toggle,.gutter.is-next-collapsed>.gutter-toggle{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.gutter.is-next-collapsed>.gutter-toggle{--tw-scale-x:1}.gutter.is-prev-collapsed>.gutter-toggle{--tw-scale-x:-1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.gutter-horz.is-first.is-prev-collapsed{transform:translateX(calc(-1px - var(--split-gutter-size)/2))}.gutter-horz.is-last.is-next-collapsed{transform:translateX(calc(1px + var(--split-gutter-size)/2))}.gutter-vert.is-first.is-prev-collapsed{transform:translateY(calc(-1px - var(--split-gutter-size)/2))}.gutter-vert.is-last.is-next-collapsed{transform:translateY(calc(1px + var(--split-gutter-size)/2))}.gutter-resize-handler{background-color:transparent;border-width:0}.gutter-resize-handler:before{--tw-content:"";border-left-width:1px;border-right-width:1px;bottom:0;content:var(--tw-content);left:.25rem;position:absolute;right:.25rem;top:0}.sidebar{--gutter-width:1px;flex:none!important;position:relative}.has-sidebar-animation .sidebar{transition-duration:.15s;transition-property:width,margin;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sidebar-left.is-collapsed{margin-left:calc(var(--gutter-width)*-1)}.sidebar-right.is-collapsed{margin-right:calc(var(--gutter-width)*-1)}.sidebar.is-collapsed>*{display:none}.sidebar.is-collapsed>.sidebar-gutter{display:flex}.sidebar-gutter{bottom:0;left:100%;position:absolute;top:0;width:var(--gutter-width)}.sidebar-right>.sidebar-gutter{left:auto;right:100%}.is-collapsed>.gutter>.gutter-toggle>span{--tw-rotate:-180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sidebar-gutter:before{border-radius:var(--radius-full);opacity:0}.sidebar-gutter:hover:before{opacity:1;width:.5rem}.is-expanded .sidebar-gutter.gutter-border:before{opacity:1}.is-sidebar-resizing{cursor:col-resize}:root{--table-head-bg:var(--color-surface);--table-striped-color:var(--color-gray-50);--table-hover-color:rgba(var(--color-primary-500-rgb),.05);--table-border-color:var(--color-border)}.table{border-color:var(--table-border-color);width:100%}.table>thead{background-color:var(--table-head-bg)}.table>*>tr{border-bottom-width:1px}.table>*>tr>*{padding:.5rem 1rem}.table-striped>tbody>tr:nth-child(2n){background:var(--table-striped-color)}.table-hover>tbody>tr:hover>*{background:var(--table-hover-color)}.table.bordered>*>tr>*{border-width:1px}.table.borderless>*>tr,.table.borderless>*>tr>*{border-style:none}.condensed>*>tr>*{padding:.375rem .75rem}.table-fixed{table-layout:fixed}.table-fixed>*>tr>*{overflow:hidden;white-space:nowrap}.toolbar{align-items:center;display:flex;position:relative}.toolbar>.divider{--tw-bg-opacity:1;background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));margin:.5rem;width:1px}.toolbar-space{flex:1 1 auto;height:1px;width:1px}.toolbar>.dropdown.show{align-items:center;display:flex;position:relative}.tooltip{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));border-color:rgba(var(--color-inverse-rgb),var(--tw-border-opacity));border-radius:var(--radius);color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem;max-width:28rem;padding:.25rem .5rem;z-index:1800}.tooltip:not(.white)>.arrow{border-width:0}.tooltip.white>.arrow{border-color:inherit}.tooltip-has-title{--tw-bg-opacity:0.8;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding:.5rem .75rem .75rem}.tooltip-has-title>.arrow{opacity:.75}.tooltip-heading{align-items:center;display:flex;font-size:.8125rem;font-weight:700;gap:1rem;justify-content:space-between;line-height:1.25rem;padding:.25rem}.tooltip-heading>.btn-close{margin-right:-.25rem}.tooltip-content{padding:.25rem}.tree-item-inner{flex-direction:row;min-height:24px;padding-left:var(--list-nested-indent)}.tree-item-inner,.tree-toggle{align-items:center;display:flex}.tree-toggle{--caret-size:5px;--caret-opacity:.3;border-radius:var(--radius);flex:none;height:1rem;justify-content:center;margin-right:-.375rem;width:1rem}.tree-item-inner>.item-icon{opacity:.5;width:1rem}.tree-item-inner:hover>.item-icon{opacity:.8}.tree-item-inner.has-hover{border-radius:var(--radius)}.tree-item-inner .item-title:not(:hover),.tree-item-inner>a.item-title:not(:hover){color:inherit}.tree-item-inner>.toolbar{margin-left:1rem;opacity:.6}.tree-item-inner:hover>.toolbar{opacity:1}.tree-item>.active{background:var(--menu-active-bg);color:var(--menu-active-color)}.tree-item>.selected{background:var(--menu-selected-bg)}.tree-item>.selected .item-content{color:var(--menu-selected-color);font-weight:700}.tree.search-menu-on-top>.search-box{left:0;right:0}.upload .upload-tip{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.upload .draggable-area{background-color:rgba(var(--color-primary-50-rgb),.2);border:1px dashed var(--color-primary-300)}.upload .draggable-area.dragover{background-color:rgba(var(--color-primary-500-rgb),.1);border-style:solid}.upload .upload-tip{color:var(--color-slate-500)}.file-item>.img{height:120px;width:120px}.upload .file-item:hover .file-size{display:flex!important}.panel-body>.form-batch{margin-top:-1rem}.form-batch-container{overflow-y:auto}.form-batch-table{--table-head-bg:var(--color-canvas);min-width:100%;table-layout:fixed}.form-batch-table>*>tr>*{padding-left:.375rem;padding-right:.375rem;vertical-align:top}.form-batch-table>*>tr>th{text-align:left;vertical-align:middle}.form-batch-head[data-name=ACTIONS]{width:5rem}.form-batch-label{display:inline}.form-batch-control>textarea.form-control{height:2rem}.form-batch-btn+.btn{margin-left:.25rem}.form-batch-table>tbody[data-count="1"] .form-batch-btn[data-type=delete]{display:none}.form-batch-ditto{position:relative}.form-batch-ditto-btn{bottom:0;height:auto;opacity:.5;padding-left:.5rem;padding-right:.5rem;position:absolute!important;right:0;top:0}.form-batch-ditto-btn:after{--tw-bg-opacity:1;--tw-content:"";background-color:rgba(var(--color-border-rgb),var(--tw-bg-opacity));bottom:.5rem;content:var(--tw-content);left:-1px;position:absolute;top:.5rem;width:1px}[data-ditto=on] .form-batch-ditto-btn{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));opacity:1}.form-batch-row-actions{padding-bottom:.75rem!important;padding-top:.75rem!important}.form-batch-ditto-control .form-control{padding-right:calc(var(--form-batch-ditto-width) + 8px)}.form-batch-ditto-control .input-control>.input-control-suffix{right:var(--form-batch-ditto-width)}.form-batch-ditto-control .input-control>.form-control{padding-right:calc(var(--form-batch-ditto-width) + var(--input-control-suffix))}.form-batch-ditto-control .pick-pri>.caret{right:calc(var(--form-batch-ditto-width) + 8px)}.dropmenu-btn{gap:.25rem;padding-left:.5rem;padding-right:.5rem}.dropmenu-btn>.text{max-width:180px;overflow:hidden}.dropmenu-btn>.is-leading{left:-.625rem;position:absolute}.dropmenu-btn>.is-caret{align-items:center;background-color:rgba(var(--color-canvas-rgb),.2);border-radius:var(--radius);display:flex;height:1rem;justify-content:center;width:1rem}.dropmenu-nav{border-bottom-width:1px;margin-left:.75rem;margin-right:.75rem;margin-top:.25rem}.has-search .dropmenu-nav{margin-top:-.5rem}.dropmenu-nav>.nav-secondary{gap:.5rem}.dropmenu-nav>.nav-secondary>.nav-item>a{border-radius:var(--radius);padding-left:.5rem;padding-right:.5rem}.dropmenu-nav>.nav-secondary>.nav-item>a:after{bottom:-1px;left:1rem;opacity:0;right:1rem}.dropmenu-nav>.nav-secondary>.nav-item>.active:after{left:.5rem;opacity:1;right:.5rem;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dropmenu-title{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;font-weight:700;line-height:1rem;margin-bottom:-.5rem;padding:.75rem}.dropmenu-list{min-height:0;overflow-x:hidden;overflow-y:auto;padding:.5rem .75rem}.dropmenu.loading>*{opacity:0}.dropmenu-item .tree-item-inner{border-radius:var(--radius);cursor:pointer;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dropmenu-item.is-item.active>.tree-item-inner{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.tree-item-inner.is-link:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.tree-item-inner.is-link:hover .item-content,.tree-item-inner.is-link:hover .item-trailing-icon{color:inherit}.tree-item-inner.is-toggle:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity))}.dropmenu-item+.tree-item{margin-top:.125rem}.dropmenu-item .is-match{font-weight:700;text-decoration-line:underline}.dropmenu-item .item-title,.dropmenu-item .label{overflow:hidden;white-space:nowrap}.dropmenu-item .item-content{padding-left:.375rem;padding-right:.375rem}.dropmenu-item *+.item-content{padding-left:0}.tree-item-inner.is-toggle .item-title{opacity:.6}.tree-item-inner.is-toggle:hover .item-title{opacity:1}.dropmenu-item-check{align-items:center;display:flex;flex:1 1 auto;justify-content:flex-end;padding-right:.5rem}.dropmenu-item .nested-toggle-icon.is-empty{width:.25rem}.dropmenu-item .item-icon{margin-right:-.25rem}:root{--form-control-border:var(--color-border-strong)}.checkbox-primary.disabled,.checkbox-primary.disabled>label,.checkbox-primary>input[type=checkbox]:disabled,.checkbox-primary>input[type=checkbox]:disabled+label,.radio-primary.disabled,.radio-primary.disabled>label,.radio-primary>input[type=radio],.radio-primary>input[type=radio]:disabled+label{filter:none!important}.checkbox-primary.disabled>label,.radio-primary.disabled>label{opacity:1}.form-actions{gap:1rem;justify-content:center}.form-actions .btn{min-width:96px}.form-control-static{min-height:32px;padding-bottom:.375rem;padding-top:.375rem}:root{--zt-panel-form-max-width:1000px}.size-sm{--zt-panel-form-max-width:800px}.size-lg{--zt-panel-form-max-width:1200px}.panel-body>.container,.panel-heading>.container{max-width:var(--panel-container-width);min-width:0;padding-left:var(--panel-container-padding);padding-right:var(--panel-container-padding)}.panel-heading>.container{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:1rem;justify-content:space-between;min-height:48px}.panel-form{--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius-md);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);margin-bottom:1rem;margin-left:auto;margin-right:auto;max-width:var(--zt-panel-form-max-width);min-width:var(--zt-panel-form-min-width);overflow:visible;padding-bottom:1rem;padding-left:1rem;padding-right:1rem}.panel-form .form-actions{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),.8);bottom:0;padding-bottom:1rem;padding-top:1rem;position:sticky;z-index:1}.panel-form .form-grid{margin:calc(0px - var(--form-grid-gap-y-half)) calc(0px - var(--form-grid-gap-x-half))}.panel-form-toolbar{padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half);width:100%}.panel-form-toolbar>.toolbar{gap:1rem;padding-bottom:.75rem;padding-top:.75rem}.panel-form-divider{margin-bottom:.75rem;margin-top:1rem;padding-left:var(--form-grid-gap-x-half);padding-right:var(--form-grid-gap-x-half);width:100%}.panel-form-divider:before{--tw-content:"";background-color:rgba(var(--color-border-rgb),.7);content:var(--tw-content);display:block;height:1px}.is-full .btn-full-form,.is-lite .btn-lite-form{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-300-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity));z-index:1}.btn-toggle-fold:after{content:attr(data-expand-text)}.show-fold-items .btn-toggle-fold:after{content:attr(data-collapse-text)}.is-foldable,.is-full .full\:hidden,.is-full .lite\:visible,.is-full .panel-form-divider,.is-full .panel-form-toolbar,.is-lite .full\:visible,.is-lite .lite\:hidden{display:none}.is-foldable.is-pinned,.is-full .full\:visible,.is-full .is-foldable,.is-full .lite\:hidden,.is-lite .full\:hidden,.is-lite .lite\:visible,.show-fold-items .is-foldable{display:block}.is-full .full\:w-1\/2,.is-lite .lite\:w-1\/2{width:50%}.is-full .full\:w-1\/3,.is-lite .lite\:w-1\/3{width:33.333333%}.is-full .full\:w-2\/3,.is-lite .lite\:w-2\/3{width:66.666667%}.is-full .full\:w-1\/4,.is-lite .lite\:w-1\/4{width:25%}.is-full .full\:w-2\/4,.is-lite .lite\:w-2\/4{width:50%}.is-full .full\:w-3\/4,.is-lite .lite\:w-3\/4{width:75%}.is-full .full\:w-1\/5,.is-lite .lite\:w-1\/5{width:20%}.is-full .full\:w-2\/5,.is-lite .lite\:w-2\/5{width:40%}.is-full .full\:w-3\/5,.is-lite .lite\:w-3\/5{width:60%}.is-full .full\:w-4\/5,.is-lite .lite\:w-4\/5{width:80%}.is-full .full\:w-1\/6,.is-lite .lite\:w-1\/6{width:16.666667%}.is-full .full\:w-2\/6,.is-lite .lite\:w-2\/6{width:33.333333%}.is-full .full\:w-3\/6,.is-lite .lite\:w-3\/6{width:50%}.is-full .full\:w-4\/6,.is-lite .lite\:w-4\/6{width:66.666667%}.is-full .full\:w-5\/6,.is-lite .lite\:w-5\/6{width:83.333333%}.is-full .full\:w-full,.is-lite .lite\:w-full{width:100%}.page-form{--panel-container-width:960px;--panel-container-padding:20px;--zt-panel-form-max-width:1200px;--zt-panel-form-min-width:1040px;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);padding-left:0;padding-right:0}.page-form .panel-heading{--tw-border-opacity:0.7;border-bottom-width:1px;padding:0}.page-form .panel-title{font-size:1rem;line-height:1.5rem}@media (max-width:1240px){.page-form{--zt-panel-form-max-width:1100px}}@media (max-width:1110px){.page-form{--zt-panel-form-max-width:1040px}}.modal-body>.page-form{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);margin:-1.5rem -2rem!important}.modal-body>.page-form>.panel-heading{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);padding-bottom:.375rem;padding-top:.375rem;position:sticky;top:-1.5rem;z-index:2}.modal-body>.panel-form .form-actions{bottom:-1.5rem}.dropdown.popover{display:flex;flex-direction:column;position:absolute;z-index:1200}.dropdown.show{display:flex}.dropdown-menu{--menu-min-width:7rem;--menu-max-width:20rem;display:none}.dropdown-menu.show,.menu-wrapper>.dropdown-menu,.show>.dropdown-menu{display:block}.dropdown>.dropdown-menu,.menu-wrapper .dropdown-menu{position:relative}.show>.menu-wrapper{display:flex}.dropdown>.menu-wrapper{height:100%}.dropdown>.menu-wrapper .menu-wrapper{position:absolute}.is-contextmenu .is-nested-show>a:not(:hover){--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity))}.is-contextmenu .menu-item.is-nested>.item-inner>.nested-toggle-icon{position:absolute;right:.25rem;top:.375rem}.is-contextmenu .menu-nested .menu-item>.item-inner{padding-left:.5rem;padding-right:1.25rem}.is-contextmenu .menu-nested .menu-item>.item-inner>.item-content{overflow:hidden}.dropdown>.arrow{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.global-search-panel li:not(.order-first):hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.global-search-panel li a{width:100%}.global-search-panel li{cursor:pointer}.history-panel>.panel-heading+.panel-body{margin-top:-.75rem}.history-panel-action{position:relative}.history-panel-action:before{--tw-border-opacity:1;--tw-content:"";border-color:rgba(var(--color-border-rgb),var(--tw-border-opacity));border-left-width:1px;bottom:-.375rem;content:var(--tw-content);left:.5rem;position:absolute;top:22px}.col-reverse>.history-panel-action:first-child:before,.col>.history-panel-action:last-child:before{display:none}.history-panel-action>.item-inner{padding-left:1.5rem}.history-panel-action>.item-inner>.avatar{left:0;position:absolute;top:.375rem}.img-cutter{background:var(--color-gray-100);border:1px solid #ddd;margin-bottom:20px;padding:10px}.img-cutter .canvas{margin:0 auto;max-width:100%;min-width:50px;position:relative}.img-cutter .cover{inset:0;position:absolute;z-index:1}.img-cutter .controller{background:none;border:1px dashed hsla(0,0%,100%,.7);cursor:move;position:absolute;z-index:5}.img-cutter .control{background:#000;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.6);height:6px;position:absolute;width:6px}.img-cutter .control[data-type=left]{cursor:w-resize;left:-4px;margin-top:-3px;top:50%}.img-cutter .control[data-type=top]{cursor:n-resize;left:50%;margin-left:-3px;top:-4px}.img-cutter .control[data-type=right]{cursor:e-resize;margin-top:-3px;right:-4px;top:50%}.img-cutter .control[data-type=bottom]{bottom:-4px;cursor:s-resize;left:50%;margin-left:-3px}.img-cutter .control[data-type=top-left]{cursor:nw-resize;left:-4px;top:-4px}.img-cutter .control[data-type=top-right]{cursor:ne-resize;right:-4px;top:-4px}.img-cutter .control[data-type=bottom-left]{bottom:-4px;cursor:sw-resize;left:-4px}.img-cutter .control[data-type=bottom-right]{bottom:-4px;cursor:se-resize;right:-4px}.img-cutter .cliper{inset:0;position:absolute;z-index:2}.messager-fail .toolbar,.messager-success .toolbar{padding-left:72px}.modal-reconfirm .modal-body{font-size:14px;font-weight:700;padding:24px 32px}.modal-reconfirm .modal-footer{justify-content:center;padding:24px}.picker-deselect-btn{opacity:.6;transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.picker-multi-selection{cursor:pointer;padding-right:.5rem;position:relative}.picker-multi-selection .picker-deselect-btn{--tw-scale-x:0;--tw-scale-y:0;background-color:rgba(var(--color-surface-rgb),.8);inset:0;opacity:0;position:absolute}.picker-deselect-btn:hover,.picker-multi-selection .picker-deselect-btn,.picker-multi-selection:hover .picker-deselect-btn{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.picker-deselect-btn:hover,.picker-multi-selection:hover .picker-deselect-btn{--tw-scale-x:1;--tw-scale-y:1;--state-color:rgba(var(--color-surface-rgb),.9);opacity:1}.pick-pri{align-items:center;display:flex;flex-direction:row;justify-content:flex-start;position:relative}.pick-pri>.caret{position:absolute;right:.5rem;top:.875rem}.pick-pri .placeholder{--tw-text-opacity:1;color:rgba(var(--color-placeholder-rgb),var(--tw-text-opacity))}.pick-pri-list>.btn{justify-content:flex-start}.disabled.pick-pri,.disabled.pick-pri>*{filter:none}.search-form{--gutter-width:12px;padding-bottom:.75rem}.search-form-container{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-height:116px;position:relative}.is-simple .search-form-container{min-height:56px}.search-form-field td{padding:.375rem}.search-form .sidebar-right.is-collapsed{margin-right:-.375rem}.search-form-toggle.active,.show-search-form #featureBar .search-form-toggle{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.show-search-form #featureBar .search-form-toggle{font-weight:700}.is-simple .search-form-wrapper{display:flex}.is-simple .search-form-wrapper>.row{flex:1 1 auto}.is-simple .search-form-wrapper>.toolbar{flex:none;margin-top:0}.zinbar [data-hint]{position:relative}.zinbar [data-hint]:after{--tw-bg-opacity:0.9;--tw-text-opacity:1;--tw-content:attr(data-hint);background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);bottom:100%;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity));content:var(--tw-content);display:block;font-size:.75rem;line-height:1rem;opacity:0;padding:.125rem .25rem;pointer-events:none;position:absolute;right:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:50}.zinbar [data-hint]:hover:after{opacity:1}.zin-perf-btn-list .text-danger{color:var(--color-danger-400)}.zinbar .state{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.zinbar .state:active{--tw-scale-x:1.05;--tw-scale-y:1.05}.zinbar .state:active,.zinbar.collapse{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.zinbar.collapse{--tw-translate-x:100%}.zinbar.collapse>div{pointer-events:none}.zinbar{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.7s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.card{--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);min-height:28px;position:relative;transition-duration:.15s;transition-property:shadow,border,color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.card:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.card-content,.card-footer,.card-header,.card-heading{padding:.25rem .5rem}.card-heading{align-items:center;display:flex;gap:.5rem}.card-icon{opacity:.5}.card-header{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.card-content{display:flex;flex-direction:column;gap:.25rem}.card-actions{position:absolute;right:.125rem;top:.125rem}.card-actions+.card-heading{padding-right:1.75rem}.card-subtitle{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity));font-size:.75rem;line-height:1rem}.card-list{--list-gap:.625rem;--list-count-per-row:1}.card-list,.card-list-item{padding:calc(var(--list-gap)/2)}.card-list-item{width:calc(100%/var(--list-count-per-row))}.card-grid{display:flex;flex-wrap:wrap}.card-grid .card{height:100%}.contextmenu{display:none}.contextmenu.show{display:block}.contextmenu .popup .popup,.contextmenu.popup{position:absolute}.more,.more-vert{margin:.5rem;position:relative}.more,.more-vert,.more-vert:after,.more-vert:before,.more:after,.more:before{background-color:currentColor;border-radius:var(--radius-full);height:.125rem;width:.125rem}.more-vert:after,.more-vert:before,.more:after,.more:before{--tw-content:"";content:var(--tw-content);display:block;left:-5px;position:absolute;top:0}.more-vert:after,.more:after{left:5px}.more-vert{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dashboard-blocks{position:relative}.dashboard-block-cell{position:absolute;transition-duration:.15s;transition-property:left,top;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-block{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);inset:.5rem;position:absolute;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-block.is-dragging{opacity:0;z-index:1600}.dashboard-block-header{align-items:center;border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);display:flex;flex-direction:row;justify-content:space-between;left:0;padding:.75rem;pointer-events:none;position:absolute;right:0;top:0;z-index:10}.dashboard-block-header>*{pointer-events:auto}.dashboard-block-title{font-size:.875rem;font-weight:700;line-height:1.3rem}.dashboard-block-body{inset:0;position:absolute}.dashboard-block-body>.panel{--tw-shadow:0px 6px 16px rgba(202,215,235,.25);display:flex;flex-direction:column;height:100%;width:100%}.dashboard-block-body .panel-heading{cursor:move;flex:none}.dashboard-block-body .panel-body{flex:1 1 auto;overflow-y:auto}.has-more-menu>.dashboard-block-body .panel-heading{padding-right:3rem}.dashboard-block-body .panel-title{font-size:.875rem;height:2rem;line-height:1.3rem}.dashboard-block-actions .btn{opacity:.6}.dashboard-block-actions .btn:hover{opacity:1}.dashboard-drop-shadow{position:absolute;transition-duration:.15s;transition-property:left,top;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dashboard-drop-shadow:before{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);--tw-content:"";background-color:rgba(var(--color-inverse-rgb),.05);border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);content:var(--tw-content);inset:.5rem;position:absolute}:root{--scrollbar-size:10px;--scrollbar-opacity:.6;--scrollbar-bg:rgba(var(--color-inverse-rgb),.15);--scrollbar-inset:inset 0 0 0 1px rgba(var(--color-inverse-rgb),.05);--scrollbar-bar-bg:rgba(var(--color-inverse-rgb),.3);--scrollbar-hover-bg:rgba(var(--color-inverse-rgb),.4);--scrollbar-drag-bg:rgba(var(--color-inverse-rgb),.5);--scrollbar-radius:var(--radius-sm);--scrollbar-duration:.7s}.scrollbar{background:var(--scrollbar-bg);box-shadow:var(--scrollbar-shadow);opacity:var(--scrollbar-opacity);position:absolute;transition-duration:.15s;transition-duration:var(--scrollbar-duration);transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.scrollbar-hover .scrollbar{opacity:0}.scrollbar-hover:hover .scrollbar{opacity:var(--scrollbar-opacity)}.scrollbar.is-dragging,.scrollbar:hover{opacity:1!important}.scrollbar-bar{background:var(--scrollbar-bar-bg);border-radius:var(--scrollbar-radius);position:absolute}.scrollbar-bar:hover{background:var(--scrollbar-hover-bg)}.is-dragging>.scrollbar-bar{background:var(--scrollbar-drag-bg)}.is-horz>.scrollbar-bar{height:100%;z-index:20}.is-vert>.scrollbar-bar{width:100%;z-index:20}:root{--dtable-checked-bg:var(--color-warning-50);--dtable-checked-bg-hover:var(--color-warning-100);--dtable-checked-border:var(--color-border-strong)}.dtable-cell.is-checked,.dtable-striped .dtable-cell.is-odd-row.is-checked{background-color:var(--dtable-checked-bg)}.checkbox-primary.dtable-checkbox{margin-right:-.375rem}.dtable-checkbox{order:-5}.dtable-hover-col .dtable-cell.is-hover-col.is-checked,.dtable-hover-row .dtable-cell.is-hover-row.is-checked{background-color:var(--dtable-checked-bg-hover)}.dtable-cell.is-checked{--dtable-border-color:var(--dtable-checked-border)}.dtable-check-info{flex-shrink:1;margin-right:.5rem;overflow:hidden;white-space:nowrap}:root{--toggle-icon-size:calc(var(--font-size-root)*3/4 + 1px)}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-color:currentColor;border-width:1px;display:block;opacity:.5;position:relative}.toggle-icon-collapse:hover,.toggle-icon-expand:hover,.toggle-icon:hover{opacity:.9}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-radius:inherit;height:var(--toggle-icon-size);width:var(--toggle-icon-size)}.is-collapsed .toggle-icon:after,.is-collapsed .toggle-icon:before,.is-expanded .toggle-icon:before,.toggle-icon-collapse:after,.toggle-icon-collapse:before,.toggle-icon-expand:before{background-color:currentColor;content:" ";display:block;height:1px;left:2px;position:absolute;right:2px;top:calc((var(--toggle-icon-size) - 3px)/2)}.is-collapsed .toggle-icon:after,.toggle-icon-collapse:after{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:root{--dtable-nt-size:calc(var(--font-size-root)*3/4 + 1px)}.dtable-nested-indent{flex:none;margin-right:-.25rem;order:-100}.dtable-nested-toggle{align-items:center;border-radius:var(--radius-sm);display:flex;flex:none;height:1.25rem;justify-content:center;margin-left:-.25rem;order:-6;width:1.25rem}.dtable-nested-toggle.is-no-child{margin-right:-.25rem;opacity:0;pointer-events:none}.dtable-header-group{align-items:center;background:var(--dtable-header-bg);cursor:default;display:flex;justify-content:center;left:0;position:absolute;top:1px;z-index:30}.dtable-bordered .dtable-header-group{border-bottom:1px solid var(--dtable-border-color);border-left:1px solid var(--dtable-border-color)}.dtable-header-as-group{contain:style;content-visibility:visible;overflow:visible!important}.dtable-sorting{cursor:move}.dtable-cell.is-sorting-from{background-color:var(--dtable-bg);z-index:20}.dtable-cell.is-sorting-from:before{border-top-width:1px}.dtable-sorting .dtable-cell.is-sorting-after{--tw-translate-y:-100%}.dtable-sorting .dtable-cell.is-sorting-after,.dtable-sorting .dtable-cell.is-sorting-before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dtable-sorting .dtable-cell.is-sorting-before{--tw-translate-y:100%}.dtable-cell.is-sorting-before:before,.dtable-cell.is-sorting-from:before{border-bottom-width:1px;border-top-width:1px}:root{--dtable-bg:var(--color-canvas);--dtable-striped-bg:var(--color-gray-50);--dtable-hover-bg:rgba(var(--color-primary-500-rgb),.05);--dtable-header-bg:var(--color-surface);--dtable-footer-bg:var(--color-surface);--dtable-border-color:var(--color-border);--dtable-sorter-size:0.3125rem}.dtable{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));position:relative}.dtable.no-animation *{transition-property:none!important}.dtable-block{overflow:hidden;position:absolute;width:100%}.dtable-header{background-color:var(--dtable-header-bg);border-top-left-radius:inherit;border-top-right-radius:inherit}.dtable-body{overflow:hidden}.dtable-cells{background-color:var(--dtable-bg);height:100%;position:absolute;z-index:0}.dtable-cells-container{height:100%;position:absolute;width:100%}.dtable-header .dtable-cells{background-color:var(--dtable-header-bg)}.dtable-cells.dtable-fixed-left,.dtable-cells.dtable-fixed-right{z-index:10}.dtable-cell{position:absolute;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-cell:after,.dtable-cell:before{bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:-1px;z-index:2}.dtable-cell:before{border-bottom-width:1px;border-color:var(--dtable-border-color);opacity:1}.dtable-header .dtable-cell{align-items:center;display:flex;font-weight:700}.dtable-header .dtable-cell:after,.dtable-header .dtable-cell:before{top:0}.dtable-cell-content{align-items:center;display:flex;gap:.25rem;height:100%;overflow:hidden;padding-left:.75rem;padding-right:.75rem;position:relative;white-space:nowrap;width:100%;z-index:5}.dtable-body .dtable-cell.is-last-row:before{border-bottom-width:0}.dtable-footer{align-items:center;background-color:var(--dtable-footer-bg);border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;border-color:var(--dtable-border-color);border-top-width:1px;display:flex;padding-left:.75rem;padding-right:.75rem;position:absolute;width:100%;z-index:10}.dtable-empty-tip{align-items:center;display:flex;height:100%;justify-content:center}.dtable .scrollbar{z-index:20}.dtable-header{transition-duration:1s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-scrolled-down .dtable-header{border-bottom-color:rgba(var(--color-inverse-rgb),.2);border-bottom-width:1px}.dtable-scroll-shadow{background-image:linear-gradient(90deg,rgba(0,0,0,.03),transparent),linear-gradient(90deg,rgba(0,0,0,.03),transparent 50%);opacity:0;pointer-events:none;position:absolute;top:0;transition-duration:1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);width:8px;z-index:20}.dtable:hover .dtable-scroll-shadow{opacity:1}.dtable-scroll-shadow.is-right{--tw-rotate:180deg;margin-left:-7px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dtable-scroll-shadow.is-left,.dtable-scrolled-end .dtable-scroll-shadow.is-right{visibility:hidden}.dtable-scroll-shadow.is-right,.dtable-scrolled-right .dtable-scroll-shadow.is-left{visibility:visible}.dtable-sort{display:inline-flex;height:calc(var(--dtable-sorter-size)*12/5);margin-left:.25rem;opacity:.8;position:relative}.dtable-cell:hover .dtable-sort{opacity:1}.dtable-sort:after,.dtable-sort:before{--tw-content:"";border-color:transparent;border-style:solid;border-width:var(--dtable-sorter-size);content:var(--tw-content);height:0;left:0;opacity:.4;position:absolute;width:0}.dtable-sort:before{border-bottom-color:currentColor;border-top-width:0;top:0}.dtable-sort:after{border-bottom-width:0;border-top-color:currentColor;bottom:0}.dtable-sort.dtable-sort-asc:before,.dtable-sort.dtable-sort-desc:after{opacity:.9}.dtable-sort-link{align-items:center;cursor:pointer;display:inline-flex}.dtable-cells.dtable-fixed-left:before,.dtable-cells.dtable-fixed-right:before{border-color:var(--dtable-border-color);content:"";height:100%;pointer-events:none;position:absolute;width:100%;z-index:5}.dtable-cells.dtable-fixed-left:before{border-right-width:1px;right:-1px}.dtable-cells.dtable-fixed-right:before{border-left-width:1px;left:0}.dtable-bordered:before{border-color:var(--dtable-border-color);border-radius:inherit;border-width:1px;content:"";display:block;inset:0;pointer-events:none;position:absolute;z-index:15}.dtable-bordered .dtable-cell:before{border-width:1px;right:-1px}.dtable-cell.has-border-left:before{border-left-width:1px}.dtable-cell.has-border-right:before{border-right-width:1px;right:-1px}.dtable-striped .dtable-cell.is-odd-row{background-color:var(--dtable-striped-bg)}.dtable-hover-cell .dtable-cell:hover:after,.dtable-hover-col .dtable-cell.is-hover-col:before,.dtable-hover-row .dtable-body .dtable-cell.is-hover-row:before{background-color:var(--dtable-hover-bg)}:root{--kanban-lane-name-width:20px;--kanban-col-width:280px;--kanban-cols-gap:8px;--kanban-lanes-gap:8px;--kanban-header-height:32px;--kanban-lane-height:auto;--kanban-lane-color:var(--color-primary-500);--kanban-link-color:var(--color-secondary-500)}.kanban{align-items:flex-start;display:flex;flex-direction:column;min-width:-moz-fit-content;min-width:fit-content;position:relative}.kanban-header{display:flex;flex-direction:row;height:var(--kanban-header-height)}.kanban.has-sub-cols .kanban-header{height:calc(var(--kanban-header-height)*2)}.kanban-header-lane-name{background-color:rgba(var(--color-fore-rgb),.05);flex:none;width:var(--kanban-lane-name-width)}.kanban-header-cols,.kanban-header-sub-cols{display:flex;flex:1 1 0%;flex-direction:row;gap:var(--kanban-cols-gap)}.kanban-header-sub-cols{--tw-border-opacity:1;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity));border-top-width:2px}.kanban-header-col{align-items:center;border-bottom-width:1px;display:flex;flex:1 1 0%;flex-direction:column;height:100%;width:var(--kanban-col-width)}.kanban-header-col.has-subs{width:auto}.kanban-header-col-wrapper{--tw-bg-opacity:1;align-items:center;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity));display:flex;flex:1 1 0%;flex-direction:row;padding-left:3.5rem;padding-right:3.5rem;position:relative;width:100%}.kanban-header-col-wrapper.is-align-left{justify-content:flex-start;padding-left:.5rem}.kanban-header-col-wrapper.is-align-left>.kanban-header-title{justify-content:flex-start}.kanban-header-title{align-items:center;display:flex;flex:1 1 auto;flex-direction:row;justify-content:center;overflow:hidden}.kanban-header-title>.as-title{color:var(--kanban-col-color);font-weight:700;overflow:hidden;white-space:nowrap}.kanban-header-col-actions{bottom:.25rem;position:absolute;right:.25rem;top:.25rem}.kanban-header-col-actions>.btn{opacity:.6}.kanban-header-col-actions>.btn:hover{opacity:1}.kanban-body{display:flex;flex-direction:column;gap:var(--kanban-lanes-gap)}.kanban-lane{display:flex;flex-direction:row;height:var(--kanban-lane-height);min-height:96px}.kanban-lane-name{--tw-text-opacity:1;align-items:center;background-color:var(--kanban-lane-color);color:rgba(var(--color-white-rgb),var(--tw-text-opacity));display:flex;justify-content:center;width:var(--kanban-lane-name-width);writing-mode:vertical-rl}.kanban-lane-actions,.kanban-lane-name{flex:none;position:relative}.kanban-lane.is-first .kanban-lane-actions{margin-top:calc(4px - var(--kanban-header-height))}.has-sub-cols .kanban-lane.is-first .kanban-lane-actions{margin-top:calc(4px - var(--kanban-header-height)*2)}.kanban-lane-actions>.btn.square{width:var(--kanban-lane-name-width)}.kanban-lane-title{align-items:center;display:flex;flex:1 1 auto;justify-content:center;overflow:hidden;white-space:nowrap}.kanban-lane-cols{display:flex;flex-direction:row;gap:var(--kanban-cols-gap)}.kanban-lane-col{background-color:rgba(var(--color-inverse-rgb),.05);display:flex;flex-direction:column;height:100%;width:var(--kanban-col-width)}.kanban-header-col,.kanban-lane-col{margin-left:calc(var(--kanban-col-gap-left) - var(--kanban-cols-gap));margin-right:calc(var(--kanban-col-gap-right) - var(--kanban-cols-gap))}.kanban-col-content{position:relative;z-index:5}.kanban-lane.is-first>.kanban-lane-name:before{--tw-content:"";background-color:var(--kanban-lane-color);bottom:100%;content:var(--tw-content);display:block;height:var(--kanban-header-height);left:0;position:absolute;right:0}.kanban.has-sub-cols .kanban-lane.is-first>.kanban-lane-name:before{height:calc(var(--kanban-header-height)*2)}.kanban-items{flex:1 1 auto;overflow:auto;scrollbar-gutter:both-edges stable}.kanban-lane.is-auto-height .kanban-items{scrollbar-gutter:auto}.kanban-item .card-actions{z-index:5}.kanban-heading{width:100%}.kanban-heading .listitem{height:2.25rem}.kanban-heading .item-title{font-weight:700}.kanban.has-dragging{cursor:move}.kanban-item.is-dragging{cursor:move;opacity:.1}.kanban-sticky .kanban-header{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));position:sticky;top:0;z-index:10}.kanban-sticky .kanban-lane-name{left:0;position:sticky;z-index:10}.kanban-region{--tw-bg-opacity:1;--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);min-width:-moz-fit-content;min-width:fit-content;padding:.75rem}.kanban-region>.kanban+.kanban{margin-top:.75rem}.kanban-region.has-heading{padding-top:0}.kanban-heading>.listitem{left:.75rem;position:sticky;width:calc(var(--kanban-list-width) - 24px)}.kanban-list{display:flex;flex-direction:column;gap:.75rem;height:100vh;overflow:auto;scrollbar-gutter:stable}.kanban-list.is-moving{cursor:grabbing}.kanban-items.is-dropping{position:relative}.kanban-item.is-dropping{position:relative;transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.kanban-item.is-dropping:after,.kanban-items.is-dropping>.card-list:after{--tw-content:"";background-color:rgba(var(--color-warning-500-rgb),.5);border-radius:var(--radius-full);content:var(--tw-content);display:block;height:.25rem}.kanban-item.is-dropping:after{left:.25rem;position:absolute;right:.25rem;top:-.25rem}.kanban-item.is-dropping[z-drop-side=before]{--tw-translate-y:0.25rem}.kanban-item.is-dropping[z-drop-side=after],.kanban-item.is-dropping[z-drop-side=before]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-item.is-dropping[z-drop-side=after]{--tw-translate-y:-0.25rem}.kanban-item.is-dropping[z-drop-side=after]:after{bottom:-.25rem;top:auto}.kanban-links{inset:0;pointer-events:none;position:absolute;z-index:20}.kanban-link{align-items:center;color:var(--kanban-link-color);display:flex;justify-content:center}.kanban-link,.kanban-link>svg{position:absolute}.kanban-link-text{border-radius:var(--radius);height:1em;line-height:1;padding-left:.125rem;padding-right:.125rem;pointer-events:auto;position:relative;text-align:center;white-space:nowrap}.kanban-link-start-point{--tw-translate-x:-0.25rem;--tw-translate-y:-0.25rem;height:.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5rem}.kanban-link-start-point,.kanban-link-start-point:before{background-color:currentColor;border-radius:var(--radius-full);position:absolute}.kanban-link-start-point:before{--tw-content:"";content:var(--tw-content);display:block;inset:-.25rem;opacity:.2}.kanban-link path{pointer-events:auto}.kanban-link path+path{opacity:.6}.kanban-link.is-hover path+path{opacity:1}.kanban-link-delete-btn{--tw-scale-x:.75;--tw-scale-y:.75;opacity:0;pointer-events:auto;transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.is-hover .kanban-link-delete-btn,.kanban-link-delete-btn{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.is-hover .kanban-link-delete-btn{--tw-scale-x:1;--tw-scale-y:1;opacity:1}.kanban.is-adding-link{cursor:crosshair}.kanban-link-editor{inset:0;pointer-events:none;position:absolute;z-index:20}.kanban-link-editor-from,.kanban-link-editor-to{--tw-shadow-color:rgb(var(--color-primary-500-rgb));--tw-shadow:var(--tw-shadow-colored);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-500-rgb),var(--tw-ring-opacity));border-radius:var(--radius)}.kanban-link-editor-from,.kanban-link-editor-point,.kanban-link-editor-to{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);position:absolute}.kanban-link-editor-point{--tw-translate-x:-0.25rem;--tw-translate-y:-0.25rem;--tw-bg-opacity:1;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-primary-500-rgb),0.1);background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);cursor:move;height:.5rem;opacity:.5;pointer-events:auto;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);width:.5rem}.kanban-link-editor-point.is-left{left:0;top:50%}.kanban-link-editor-point.is-right{--tw-translate-x:0.25rem;right:0;top:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-link-editor-point.is-top{left:50%;top:0}.kanban-link-editor-point.is-bottom{--tw-translate-y:0.25rem;bottom:0;left:50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.kanban-link-editor-point:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-primary-500-rgb),0.5);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:1}.tab-pane{display:none}.tab-pane.active{display:block}:root{--dtable-header-bg:var(--color-surface-light);--dtable-footer-bg:var(--color-surface-light);--dtable-border-color:var(--color-border-light);--dtable-checked-border:var(--color-border);--dtable-link-color:var(--color-link);--dtable-link-hover-color:var(--color-link-hover);--dtable-link-visited-color:var(--color-link-visited)}.dtable-header .dtable-cell{font-weight:400}.dtable-cell-content[style*="--color-link"]{--dtable-link-hover-color:var(--color-link);--dtable-link-visited-color:var(--color-link)}.dtable-body .dtable-cell a:not(.btn){color:var(--dtable-link-color)}.dtable-body .dtable-cell a:not(.btn):visited{color:var(--dtable-link-visited-color)}.dtable-body .dtable-cell a:not(.btn):hover{color:var(--dtable-link-hover-color)}.dtable .btn-avatar{--tw-bg-opacity:1;--tw-ring-color:transparent;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity));border-radius:var(--radius-full);gap:.25rem;height:1.25rem;padding-left:0;padding-right:.5rem}.dtable .btn-avatar:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.dtable .toggle-icon{border-radius:var(--radius-full)}.dtable .toggle-icon:after,.dtable .toggle-icon:before{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity))}.dtable-footer>.toolbar{margin-right:.5rem}.dtable-header .dtable-cell[data-sort]>.dtable-cell-content>a:not(:hover){color:inherit}.dtable-assign-btn{align-items:center;border-radius:var(--radius-full);display:flex;flex-direction:row;height:1.25rem;padding-left:.375rem;padding-right:.375rem}.dtable-assign-btn:not(:hover){color:inherit}.dtable-assign-btn.is-me{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.dtable-assign-btn:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.dtable-assign-btn>span{border-radius:var(--radius-full);line-height:20px;padding-left:.375rem;padding-right:.375rem}.dtable-assign-btn.is-unassigned>span{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity));color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}.dtable-assign-btn.is-unassigned:hover>span{background-color:inherit}.dtable-assign-btn>.icon{opacity:0;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dtable-assign-btn:not(.disabled):hover>.icon{opacity:1}.dtable-header .dtable-cell[data-type=assign]{padding-left:1.5rem}.dtable-cell-icon{order:-5}.dtable-custom-cell[data-type=control]{align-items:center;display:flex;justify-content:center;padding-left:.125rem;padding-right:.125rem;z-index:1}.dtable-empty-tip{min-height:212px}.menu.menu-dtable-actions{--menu-icon-opacity:1;display:flex;gap:.25rem;min-width:auto}.menu.menu-dtable-actions>.menu-item>a{padding-left:.25rem;padding-right:.25rem}.menu.menu-dtable-actions>.menu-item>a>.item-content{display:none}:root{--zt-page-bg:var(--color-gray-100);--zt-header-bg:var(--color-canvas);--zt-header-color:var(--color-fore);--zt-sidebar-width:160px;--zt-navbar-active-color:var(--color-primary-500)}body{background-color:var(--zt-page-bg)}.page-app{overflow:overlay}.container{min-width:1200px}#header{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);background:var(--zt-header-bg);border-bottom:1px solid var(--zt-header-border,rgba(var(--color-inverse-rgb),.05));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--zt-header-color);height:3rem}#header>.container{height:100%;position:relative}#heading{align-items:center;bottom:0;display:flex;gap:.25rem;left:1rem;position:absolute;top:0}#heading>.toolbar{margin-left:-.75rem}#heading .dropmenu-btn>.text{max-width:142px}#heading>[data-zui-dropmenu]+div .dropmenu-btn>.text,#heading>[data-zui-dropmenu]+div+div .dropmenu-btn>.text{max-width:78px}#navbar{align-items:center;display:flex;font-size:.875rem;height:100%;justify-content:center;line-height:1.3rem}#navbar>.nav{--nav-active-color:var(--zt-navbar-active-color,var(--color-current));--nav-item-padding:12px;--nav-divider-margin:8px;margin-left:var(--nav-offset-left)}#navbar>.nav>.nav-item>a{height:3rem;padding-left:var(--nav-item-padding);padding-right:var(--nav-item-padding)}#navbar>.nav>.nav-item>a:after{--tw-scale-x:.5;background-color:currentColor;bottom:.5rem;content:"";height:.125rem;left:.75rem;opacity:0;position:absolute;right:.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.15s;transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}#navbar>.nav>.nav-item>a:hover:after{opacity:.5}#navbar>.nav>.nav-item>a.active:after,#navbar>.nav>.nav-item>a:hover:after{--tw-scale-x:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}#navbar>.nav>.nav-item>a.active:after{opacity:.9}#navbar>.nav>.divider{align-self:center;height:1.25rem;margin-left:var(--nav-divider-margin);margin-right:var(--nav-divider-margin)}#navbar>.nav.compact{font-size:.8125rem;line-height:1.25rem}#navbar>.nav.compact-extra{font-size:.75rem;line-height:1rem}#toolbar{align-items:center;bottom:0;display:flex;gap:.25rem;position:absolute;right:1rem;top:0}#main{min-height:100vh}#header+#main{min-height:calc(100vh - 3rem)}#main>.container{padding-left:1rem;padding-right:1rem;position:relative}@media (min-width:1400px){#header>.container,#main>.container,#mainNavbar>.container{padding-left:2.5rem;padding-right:2.5rem}#heading{left:2.5rem}#toolbar{right:2.5rem}}#mainNavbar{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));height:2.75rem}#mainNavbar>.container{position:relative}#mainNavbar .nav{height:2.75rem;inset:0;justify-content:center;position:absolute}#mainNavbar .nav-item{font-size:.875rem;line-height:1.3rem}#mainNavbar .nav-item>a{border-radius:var(--radius)}#mainMenu{gap:1rem;justify-content:space-between;padding-bottom:.75rem;padding-top:.75rem}#featureBar,#mainMenu{align-items:center;display:flex}#featureBar{flex:1 1 auto;gap:.5rem}#featureBar .nav .btn>.icon{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}#actionBar{gap:.5rem}#actionBar>.nav-divider{margin-left:-.25rem;margin-right:-.25rem}#mainContent{padding-top:.75rem}#mainMenu+#mainContent{padding-top:0}#mainContent.row{align-items:stretch;display:flex;gap:1rem;justify-content:space-between}#mainContent.row>*{flex:1 1 auto;min-width:0}#mainContainer.has-sidebar-left{--gutter-left-size:16px}#mainContainer.is-sidebar-left-collapsed{--gutter-left-size:0}.has-sidebar-animation.has-sidebar-left #mainMenu{transition-duration:.15s;transition-property:padding-left;transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--modal-radius:var(--radius);--avatar-bg:var(--color-gray-200)}.modal-alert .modal-footer{justify-content:center}.modal-dialog{--tw-bg-opacity:1}.modal-body,.modal-footer,.modal-header{padding:1.5rem 2rem}.modal-header{padding-right:3rem}.modal-actions{top:1rem}.modal-body+.modal-footer,.modal-header+.modal-actions+.modal-body,.modal-header+.modal-body{padding-top:0}.modal-condensed .modal-body,.modal-condensed .modal-header{padding:1rem 1.25rem}.modal-condensed .modal-actions{top:.75rem}:root{--label-bg:var(--color-gray-100);--label-color:var(--color-gray-800)}.label[class$=-pale],.label[class*="-pale "]{--tw-bg-opacity:0.4;--tw-ring-opacity:0.4}.tree{--tree-indent:14px}.body-modal .panel-form,.modal .panel-form{margin:0;padding:0}.modal .panel-body{padding:1px}.modal-body>.form{padding-top:1px}.modal .history,.modal .panel-body>.form{padding:0}.arrow,.arrow:before{background:inherit;height:calc(var(--arrow-size)*1.4142);position:absolute;width:calc(var(--arrow-size)*1.4142)}.arrow{--arrow-size:5px;visibility:hidden}.arrow:before{--tw-rotate:45deg;border:inherit;content:"";transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));visibility:visible}.arrow-top,.arrow-up{border-bottom:inherit;border-right:inherit;border-width:1px 0 0 1px;top:calc(1px - var(--arrow-size))}.white>.arrow-top,.white>.arrow-up{top:calc(0px - var(--arrow-size))}.arrow-bottom,.arrow-down{border-left:inherit;border-top:inherit;border-width:0 1px 1px 0;bottom:calc(1px - var(--arrow-size))}.white>.arrow-bottom,.white>.arrow-down{bottom:calc(0px - var(--arrow-size))}.arrow-left{border-right:inherit;border-top:inherit;border-width:0 0 1px 1px;left:calc(1px - var(--arrow-size))}.white>.arrow-left{left:calc(0px - var(--arrow-size))}.arrow-right{border-bottom:inherit;border-left:inherit;border-width:1px 1px 0 0;right:calc(1px - var(--arrow-size))}.white>.arrow-right{right:calc(0px - var(--arrow-size))}.caret,.caret-down,.caret-left,.caret-right,.caret-up{border:var(--caret-size,4px) solid transparent;display:inline-block;height:0;opacity:var(--caret-opacity,.5);width:0}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.caret,.caret-down{border-bottom-width:0;border-top-color:currentColor}.caret-up{border-bottom-color:currentColor;border-top-width:0}.caret-right{border-left-color:currentColor;border-right-width:0}.caret-left{border-left-width:0;border-right-color:currentColor}:root{--toggle-icon-size:calc(var(--font-size-root)*3/4 + 1px)}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-color:currentColor;border-width:1px;display:block;opacity:.5;position:relative}.toggle-icon-collapse:hover,.toggle-icon-expand:hover,.toggle-icon:hover{opacity:.9}.toggle-icon,.toggle-icon-collapse,.toggle-icon-expand{border-radius:inherit;height:var(--toggle-icon-size);width:var(--toggle-icon-size)}.is-collapsed .toggle-icon:after,.is-collapsed .toggle-icon:before,.is-expanded .toggle-icon:before,.toggle-icon-collapse:after,.toggle-icon-collapse:before,.toggle-icon-expand:before{background-color:currentColor;content:" ";display:block;height:1px;left:2px;position:absolute;right:2px;top:calc((var(--toggle-icon-size) - 3px)/2)}.is-collapsed .toggle-icon:after,.toggle-icon-collapse:after{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close{aspect-ratio:1/1;display:block;position:relative;width:1em}.close:after,.close:before{--tw-rotate:45deg;background-color:currentColor;border-radius:var(--radius-full);content:"";display:block;height:1px;left:0;position:absolute;top:calc(50% - .5px);width:100%}.close:after,.close:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.close:after{--tw-rotate:-45deg}.spinner,.spinner:after,.spinner:before{display:block;height:1em;position:relative;width:1em}.spinner:after,.spinner:before{border-radius:var(--radius-full);content:" ";position:absolute}.spinner:before{animation:-spin 1s cubic-bezier(.6,0,.4,1) infinite;border:.16667em solid transparent;border-top-color:currentcolor}.spinner:after{border:.16667em solid;opacity:.2}.magnifier{display:inline-block;height:1em;position:relative;width:1em}.magnifier:after,.magnifier:before{border-radius:var(--radius-full);content:"";display:block;position:absolute}.magnifier:before{border:1px solid;height:.75em;width:.75em}.magnifier:after{--tw-rotate:45deg;background-color:currentColor;height:1px;left:.55em;top:.7em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:.5em}.more,.more-vert{margin:.5rem;position:relative}.more,.more-vert,.more-vert:after,.more-vert:before,.more:after,.more:before{background-color:currentColor;border-radius:var(--radius-full);height:.125rem;width:.125rem}.more-vert:after,.more-vert:before,.more:after,.more:before{--tw-content:"";content:var(--tw-content);display:block;left:-5px;position:absolute;top:0}.more-vert:after,.more:after{left:5px}.more-vert{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-down,.chevron-left,.chevron-right,.chevron-up{align-items:center;display:inline-flex;height:1em;justify-content:center;position:relative;width:1em}.chevron-down:before,.chevron-left:before,.chevron-right:before,.chevron-up:before{--tw-translate-y:-0.125rem;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.6923077em;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform-origin:center;width:.6923077em}.chevron-left:before{--tw-translate-y:0px;--tw-translate-x:0.125rem;--tw-rotate:135deg}.chevron-left:before,.chevron-right:before{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.chevron-right:before{--tw-translate-y:0px;--tw-translate-x:-0.125rem;--tw-rotate:-45deg}.chevron-up:before{--tw-translate-y:0.125rem;--tw-rotate:225deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.i-time{border-color:currentColor;border-radius:50%;border-width:.08em;display:inline-block;height:1em;position:relative;width:1em}.i-time:after{--tw-content:"";border-color:currentColor;border-width:0 0 .08em .08em;content:var(--tw-content);height:.385em;left:.3846em;position:absolute;top:.08em;width:.385em}.i-calendar{border-color:currentColor;border-radius:2px;border-width:.08em;display:inline-block;height:.79em;margin-top:.16em;position:relative;width:1em}.i-calendar:after,.i-calendar:before{--tw-content:"";border-color:currentColor;border-width:.08em;content:var(--tw-content);position:absolute}.i-calendar:before{border-bottom-width:0;left:.15em;top:.307em;width:.6em}.i-calendar:after{border-bottom-width:0;border-top-width:0;height:.3077em;left:.17em;top:-.154em;width:.538em}:root{--state-color:rgba(0,0,0,.05);--state-scale:.9;--opacity-disabled:.65;--opacity-muted:.5}.btn,.item>a,.state{cursor:pointer;position:relative}.btn:before,.item>a:before,.state:before{background:var(--state-color);border-radius:inherit;content:" ";display:block;inset:0;opacity:0;pointer-events:none;position:absolute;transform:scale(var(--state-scale));transition-duration:.2s;transition-property:opacity,transform,box-shadow,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.btn.active:not(:hover,:focus-visible,:focus-within,:active):before,.item>a.active:not(:hover,:focus-visible,:focus-within,:active):before,.state.active:not(:hover,:focus-visible,:focus-within,:active):before{--tw-scale-x:1;--tw-scale-y:1;--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);background:var(--state-active-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);opacity:var(--state-active-opacity,0);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-duration:.7s}.btn.selected:not(:hover,:focus-visible,:focus-within,:active):before,.item>a.selected:not(:hover,:focus-visible,:focus-within,:active):before,.state.selected:not(:hover,:focus-visible,:focus-within,:active):before{--tw-scale-x:1;--tw-scale-y:1;background:var(--state-selected-color,var(--state-scale));opacity:var(--state-selected-opacity,.1);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn:focus-visible,.item>a:focus-visible,.state:focus-visible{outline:2px solid transparent;outline-offset:2px}.btn:active:before,.btn:focus-visible:before,.btn:hover:before,.item>a:active:before,.item>a:focus-visible:before,.item>a:hover:before,.state:active:before,.state:focus-visible:before,.state:hover:before{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.btn:hover:before,.item>a:hover:before,.state:hover:before{opacity:var(--state-hover-opacity,1)}.btn:active:before,.item>a:active:before,.state:active:before{--tw-ring-color:var(--state-ring-color,currentColor);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);background:var(--state-pressed-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:var(--state-pressed-opacity,.6);transition-duration:.7s}.btn:focus-visible:before,.item>a:focus-visible:before,.state:focus-visible:before{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-focus-rgb),var(--tw-ring-opacity));background:var(--state-focus-color,var(--state-color));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);opacity:var(--state-focus-opacity,1)}.btn.disabled:before,.btn[disabled]:before,.item>a.disabled:before,.item>a[disabled]:before,.state.disabled:before,.state[disabled]:before{display:none}.disabled,.disabled *,[disabled],[disabled] *{--tw-grayscale:grayscale(100%);cursor:not-allowed!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);opacity:var(--opacity-disabled)}.load-indicator:after,.load-indicator:before{display:block;opacity:0;position:absolute;transition-delay:0s;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden}.load-indicator:before{--tw-content:attr(data-loading);align-items:center;background-color:rgba(var(--color-canvas-rgb),.7);border-radius:inherit;content:var(--tw-content);display:flex;font-size:.75rem;inset:0;justify-content:center;line-height:1rem;z-index:99}.load-indicator[data-loading]:before{padding-top:3.5rem}.load-indicator:after{--tw-content:"";border-color:transparent currentcolor currentcolor;border-radius:var(--radius-full);border-style:dotted;border-width:4px 3px 4px 4px;content:var(--tw-content);height:2rem;left:50%;margin-left:-1rem;margin-top:-1rem;top:50%;width:2rem;z-index:100}.load-indicator.loading:after,.load-indicator.loading:before{opacity:1;transition-delay:.5s;visibility:visible}@keyframes -spin{to{transform:rotate(1turn)}}.load-indicator.loading:after{animation:-spin 1s linear infinite;opacity:.5}.events-none,.pointer-events-none{pointer-events:none}.events-auto,.pointer-events-auto{pointer-events:auto}.scroll-auto{scroll-behavior:auto}.scroll-smooth{scroll-behavior:smooth}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.active\:opacity-100.active,.active\:opacity-100:active,.group.active .group-active\:opacity-100,.group:active .group-active\:opacity-100,.group:hover .group-hover\:opacity-100,.hover\:opacity-100:hover{opacity:1}.active\:text-primary.active,.active\:text-primary:active,.group.active .group-active\:text-primary,.group:active .group-active\:text-primary,.group:hover .group-hover\:text-primary,.hover\:text-primary:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.active\:border-primary.active,.active\:border-primary:active,.group.active .group-active\:border-primary,.group:active .group-active\:border-primary,.group:hover .group-hover\:border-primary,.hover\:border-primary:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity))}.active\:primary-pale.active,.active\:primary-pale:active,.group.active .group-active\:primary-pale,.group:active .group-active\:primary-pale,.group:hover .group-hover\:primary-pale,.hover\:primary-pale:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.active\:primary.active,.active\:primary:active,.group.active .group-active\:primary,.group:active .group-active\:primary,.group:hover .group-hover\:primary,.hover\:primary:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.active\:canvas.active,.active\:canvas:active,.group.active .group-active\:canvas,.group:active .group-active\:canvas,.group:hover .group-hover\:canvas,.hover\:canvas:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.active\:font-bold.active,.active\:font-bold:active,.group.active .group-active\:font-bold,.group:active .group-active\:font-bold,.group:hover .group-hover\:font-bold,.hover\:font-bold:hover{font-weight:700}.active\:shadow.active,.active\:shadow:active,.group.active .group-active\:shadow,.group:active .group-active\:shadow,.group:hover .group-hover\:shadow,.hover\:shadow:hover{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.aspect-auto{aspect-ratio:auto}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.container{width:100%}@media (min-width:1720px){.container{max-width:1720px}}.container{margin-left:auto;margin-right:auto}.popup{--tw-bg-opacity:0.85;--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05;--tw-backdrop-blur:blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.hidden{display:none!important}.pull-right{float:right}.pull-left{float:left}.clearfix:after{clear:both;content:"";display:block}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-bottom{-o-object-position:bottom;object-position:bottom}.object-center{-o-object-position:center;object-position:center}.object-left{-o-object-position:left;object-position:left}.object-left-bottom{-o-object-position:left bottom;object-position:left bottom}.object-left-top{-o-object-position:left top;object-position:left top}.object-right{-o-object-position:right;object-position:right}.object-right-bottom{-o-object-position:right bottom;object-position:right bottom}.object-right-top{-o-object-position:right top;object-position:right top}.object-top{-o-object-position:top;object-position:top}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-clip{overflow-y:clip}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.overflow-overlay{overflow:overlay}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-auto{inset:auto}.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-full{top:100%}.right-full{right:100%}.bottom-full{bottom:100%}.left-full{left:100%}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.top-px{top:1px}.right-px{right:1px}.bottom-px{bottom:1px}.left-px{left:1px}.top-0\.5{top:.125rem}.right-0\.5{right:.125rem}.bottom-0\.5{bottom:.125rem}.left-0\.5{left:.125rem}.top-1{top:.25rem}.right-1{right:.25rem}.bottom-1{bottom:.25rem}.left-1{left:.25rem}.top-1\.5{top:.375rem}.right-1\.5{right:.375rem}.bottom-1\.5{bottom:.375rem}.left-1\.5{left:.375rem}.top-2{top:.5rem}.right-2{right:.5rem}.bottom-2{bottom:.5rem}.left-2{left:.5rem}.top-2\.5{top:.625rem}.right-2\.5{right:.625rem}.bottom-2\.5{bottom:.625rem}.left-2\.5{left:.625rem}.top-3{top:.75rem}.right-3{right:.75rem}.bottom-3{bottom:.75rem}.left-3{left:.75rem}.top-3\.5{top:.875rem}.right-3\.5{right:.875rem}.bottom-3\.5{bottom:.875rem}.left-3\.5{left:.875rem}.top-4{top:1rem}.right-4{right:1rem}.bottom-4{bottom:1rem}.left-4{left:1rem}.top-5{top:1.25rem}.right-5{right:1.25rem}.bottom-5{bottom:1.25rem}.left-5{left:1.25rem}.top-6{top:1.5rem}.right-6{right:1.5rem}.bottom-6{bottom:1.5rem}.left-6{left:1.5rem}.top-7{top:1.75rem}.right-7{right:1.75rem}.bottom-7{bottom:1.75rem}.left-7{left:1.75rem}.top-8{top:2rem}.right-8{right:2rem}.bottom-8{bottom:2rem}.left-8{left:2rem}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.m-0{margin:0}.mx-0{margin-left:0;margin-right:0}.my-0{margin-bottom:0}.mt-0,.my-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-auto{margin-bottom:auto}.mt-auto,.my-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.m-px{margin:1px}.mx-px{margin-left:1px;margin-right:1px}.my-px{margin-bottom:1px}.mt-px,.my-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.m-0\.5{margin:.125rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.my-0\.5{margin-bottom:.125rem}.mt-0\.5,.my-0\.5{margin-top:.125rem}.mr-0\.5{margin-right:.125rem}.mb-0\.5{margin-bottom:.125rem}.ml-0\.5{margin-left:.125rem}.m-1{margin:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-1{margin-bottom:.25rem}.mt-1,.my-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.m-1\.5{margin:.375rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.my-1\.5{margin-bottom:.375rem}.mt-1\.5,.my-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mb-1\.5{margin-bottom:.375rem}.ml-1\.5{margin-left:.375rem}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-2{margin-bottom:.5rem}.mt-2,.my-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.m-2\.5{margin:.625rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.my-2\.5{margin-bottom:.625rem}.mt-2\.5,.my-2\.5{margin-top:.625rem}.mr-2\.5{margin-right:.625rem}.mb-2\.5{margin-bottom:.625rem}.ml-2\.5{margin-left:.625rem}.m-3{margin:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-3{margin-bottom:.75rem}.mt-3,.my-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.m-3\.5{margin:.875rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.my-3\.5{margin-bottom:.875rem}.mt-3\.5,.my-3\.5{margin-top:.875rem}.mr-3\.5{margin-right:.875rem}.mb-3\.5{margin-bottom:.875rem}.ml-3\.5{margin-left:.875rem}.m-4{margin:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-4{margin-bottom:1rem}.mt-4,.my-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.m-5{margin:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-5{margin-bottom:1.25rem}.mt-5,.my-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.m-6{margin:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-6{margin-bottom:1.5rem}.mt-6,.my-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.m-7{margin:1.75rem}.mx-7{margin-left:1.75rem;margin-right:1.75rem}.my-7{margin-bottom:1.75rem}.mt-7,.my-7{margin-top:1.75rem}.mr-7{margin-right:1.75rem}.mb-7{margin-bottom:1.75rem}.ml-7{margin-left:1.75rem}.m-8{margin:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-8{margin-bottom:2rem}.mt-8,.my-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.m-9{margin:2.25rem}.mx-9{margin-left:2.25rem;margin-right:2.25rem}.my-9{margin-bottom:2.25rem}.mt-9,.my-9{margin-top:2.25rem}.mr-9{margin-right:2.25rem}.mb-9{margin-bottom:2.25rem}.ml-9{margin-left:2.25rem}.m-10{margin:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-10{margin-bottom:2.5rem}.mt-10,.my-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.p-0{padding:0}.p-px{padding:1px}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.p-9{padding:2.25rem}.p-10{padding:2.5rem}.px-0{padding-left:0;padding-right:0}.py-0{padding-bottom:0}.pt-0,.py-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.px-px{padding-left:1px;padding-right:1px}.py-px{padding-bottom:1px}.pt-px,.py-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.py-0\.5{padding-bottom:.125rem}.pt-0\.5,.py-0\.5{padding-top:.125rem}.pr-0\.5{padding-right:.125rem}.pb-0\.5{padding-bottom:.125rem}.pl-0\.5{padding-left:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-1{padding-bottom:.25rem}.pt-1,.py-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.py-1\.5{padding-bottom:.375rem}.pt-1\.5,.py-1\.5{padding-top:.375rem}.pr-1\.5{padding-right:.375rem}.pb-1\.5{padding-bottom:.375rem}.pl-1\.5{padding-left:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-bottom:.5rem}.pt-2,.py-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-2\.5{padding-bottom:.625rem}.pt-2\.5,.py-2\.5{padding-top:.625rem}.pr-2\.5{padding-right:.625rem}.pb-2\.5{padding-bottom:.625rem}.pl-2\.5{padding-left:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem}.pt-3,.py-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.py-3\.5{padding-bottom:.875rem}.pt-3\.5,.py-3\.5{padding-top:.875rem}.pr-3\.5{padding-right:.875rem}.pb-3\.5{padding-bottom:.875rem}.pl-3\.5{padding-left:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-bottom:1rem}.pt-4,.py-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-5{padding-bottom:1.25rem}.pt-5,.py-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-6{padding-bottom:1.5rem}.pt-6,.py-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-7{padding-bottom:1.75rem}.pt-7,.py-7{padding-top:1.75rem}.pr-7{padding-right:1.75rem}.pb-7{padding-bottom:1.75rem}.pl-7{padding-left:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-8{padding-bottom:2rem}.pt-8,.py-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-9{padding-bottom:2.25rem}.pt-9,.py-9{padding-top:2.25rem}.pr-9{padding-right:2.25rem}.pb-9{padding-bottom:2.25rem}.pl-9{padding-left:2.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-10{padding-bottom:2.5rem}.pt-10,.py-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.375rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.375rem*var(--tw-space-x-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-2\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.625rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.625rem*var(--tw-space-x-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-x-3\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.875rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.875rem*var(--tw-space-x-reverse))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.25rem*var(--tw-space-x-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-7>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.75rem*var(--tw-space-x-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.75rem*var(--tw-space-y-reverse));margin-top:calc(1.75rem*(1 - var(--tw-space-y-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.space-x-9>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2.25rem*var(--tw-space-x-reverse))}.space-y-9>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.25rem*var(--tw-space-y-reverse));margin-top:calc(2.25rem*(1 - var(--tw-space-y-reverse)))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2.5rem*var(--tw-space-x-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.5rem*var(--tw-space-y-reverse));margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)))}.space-x-px>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1px*(1 - var(--tw-space-x-reverse)));margin-right:calc(1px*var(--tw-space-x-reverse))}.space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1px*var(--tw-space-y-reverse));margin-top:calc(1px*(1 - var(--tw-space-y-reverse)))}.w-0{width:0}.w-px{width:1px}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-32{width:8rem}.w-36{width:9rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-52{width:13rem}.w-56{width:14rem}.w-60{width:15rem}.w-64{width:16rem}.w-72{width:18rem}.w-80{width:20rem}.w-96{width:24rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.666667%}.w-2\/6{width:33.333333%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.w-min{width:-moz-min-content;width:min-content}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.min-w-0{min-width:0}.min-w-full{min-width:100%}.min-w-min{min-width:-moz-min-content;min-width:min-content}.min-w-max{min-width:-moz-max-content;min-width:max-content}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.max-w-0{max-width:0}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.max-w-min{max-width:-moz-min-content;max-width:min-content}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.h-0{height:0}.h-px{height:1px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-32{height:8rem}.h-36{height:9rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-52{height:13rem}.h-56{height:14rem}.h-60{height:15rem}.h-64{height:16rem}.h-72{height:18rem}.h-80{height:20rem}.h-96{height:24rem}.h-1\/2{height:50%}.h-1\/3{height:33.333333%}.h-2\/3{height:66.666667%}.h-1\/4{height:25%}.h-2\/4{height:50%}.h-3\/4{height:75%}.h-1\/5{height:20%}.h-2\/5{height:40%}.h-3\/5{height:60%}.h-4\/5{height:80%}.h-1\/6{height:16.666667%}.h-2\/6{height:33.333333%}.h-3\/6{height:50%}.h-4\/6{height:66.666667%}.h-5\/6{height:83.333333%}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.h-min{height:-moz-min-content;height:min-content}.h-max{height:-moz-max-content;height:max-content}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-min{min-height:-moz-min-content;min-height:min-content}.min-h-max{min-height:-moz-max-content;min-height:max-content}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.max-h-0{max-height:0}.max-h-px{max-height:1px}.max-h-none{max-height:none}.max-h-full{max-height:100%}.max-h-min{max-height:-moz-min-content;max-height:min-content}.max-h-max{max-height:-moz-max-content;max-height:max-content}.max-h-fit{max-height:-moz-fit-content;max-height:fit-content}.canvas,.surface,.surface-light,.surface-strong{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}.canvas{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.surface-light{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-light-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity))}.surface{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.surface-strong{--tw-bg-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-strong-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-surface-strong-rgb),var(--tw-bg-opacity))}.inverse{background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity));color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.inverse,.white{--tw-bg-opacity:1;--tw-text-opacity:1}.white{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-white-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-white-rgb),var(--tw-bg-opacity));color:rgba(var(--color-fore-in-light-rgb),var(--tw-text-opacity))}.black{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-black-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-black-rgb),var(--tw-bg-opacity));color:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity))}.transparent{--tw-ring-color:transparent;background-color:transparent}.skin{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.skin:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger,.darken,.darker,.darkest,.gray,.gray-100,.gray-200,.gray-300,.gray-400,.gray-50,.gray-500,.gray-600,.gray-700,.gray-800,.gray-900,.gray-950,.important,.lighten,.lighter,.lightest,.primary,.secondary,.special,.success,.warning{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger:hover,.darken:hover,.darker:hover,.darkest:hover,.gray-100:hover,.gray-200:hover,.gray-300:hover,.gray-400:hover,.gray-500:hover,.gray-50:hover,.gray-600:hover,.gray-700:hover,.gray-800:hover,.gray-900:hover,.gray-950:hover,.gray:hover,.important:hover,.lighten:hover,.lighter:hover,.lightest:hover,.primary:hover,.secondary:hover,.special:hover,.success:hover,.warning:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger,.darken,.darker,.darkest,.gray,.gray-100,.gray-200,.gray-300,.gray-400,.gray-50,.gray-500,.gray-600,.gray-700,.gray-800,.gray-900,.gray-950,.important,.lighten,.lighter,.lightest,.primary,.secondary,.special,.success,.warning{--skin-text:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity));--skin-color:rgba(var(--skin-solid-rgb),1);--state-ring-color:var(--skin-color);--state-active-color:rgba(0,0,0,.1);--state-pressed-color:rgba(0,0,0,.1);--state-color:hsla(0,0%,100%,.1);--state-focus-color:rgba(0,0,0,.1)}.primary{--skin-solid-rgb:var(--color-primary-500-rgb)}.secondary{--skin-solid-rgb:var(--color-secondary-500-rgb)}.success{--skin-solid-rgb:var(--color-success-500-rgb)}.warning{--skin-solid-rgb:var(--color-warning-500-rgb)}.danger{--skin-solid-rgb:var(--color-danger-500-rgb)}.important{--skin-solid-rgb:var(--color-important-500-rgb)}.special{--skin-solid-rgb:var(--color-special-500-rgb)}.gray-50{--skin-bg:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity));--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-100{--skin-solid-rgb:var(--color-gray-100-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-200,.lightest{--skin-solid-rgb:var(--color-gray-200-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-300,.lighter{--skin-solid-rgb:var(--color-gray-300-rgb);--skin-text:rgba(var(--color-fore),var(--tw-text-opacity))}.gray-400,.lighten{--skin-solid-rgb:var(--color-gray-400-rgb)}.gray,.gray-500{--skin-solid-rgb:var(--color-gray-500-rgb)}.darken,.gray-600{--skin-solid-rgb:var(--color-gray-600-rgb)}.darker,.gray-700{--skin-solid-rgb:var(--color-gray-700-rgb)}.darkest,.gray-800{--skin-solid-rgb:var(--color-gray-800-rgb)}.gray-900{--skin-solid-rgb:var(--color-gray-900-rgb)}.gray-950{--skin-solid-rgb:var(--color-gray-950-rgb)}.danger-pale,.gray-100-pale,.gray-200-pale,.gray-300-pale,.gray-400-pale,.gray-50-pale,.gray-500-pale,.gray-600-pale,.gray-700-pale,.gray-800-pale,.gray-900-pale,.gray-950-pale,.gray-pale,.important-pale,.pale,.primary-pale,.secondary-pale,.special-pale,.success-pale,.warning-pale{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-pale:hover,.gray-100-pale:hover,.gray-200-pale:hover,.gray-300-pale:hover,.gray-400-pale:hover,.gray-50-pale:hover,.gray-500-pale:hover,.gray-600-pale:hover,.gray-700-pale:hover,.gray-800-pale:hover,.gray-900-pale:hover,.gray-950-pale:hover,.gray-pale:hover,.important-pale:hover,.pale:hover,.primary-pale:hover,.secondary-pale:hover,.special-pale:hover,.success-pale:hover,.warning-pale:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-pale,.gray-100-pale,.gray-200-pale,.gray-300-pale,.gray-400-pale,.gray-50-pale,.gray-500-pale,.gray-600-pale,.gray-700-pale,.gray-800-pale,.gray-900-pale,.gray-950-pale,.gray-pale,.important-pale,.pale,.primary-pale,.secondary-pale,.special-pale,.success-pale,.warning-pale{--skin-color:rgba(var(--skin-pale-rgb),.1);--skin-text:rgba(var(--skin-pale-rgb),1);--state-color:rgba(var(--skin-pale-rgb),.1)}.pale{--skin-pale-rgb:var(--color-gray-500-rgb)}.primary-pale{--skin-pale-rgb:var(--color-primary-500-rgb)}.secondary-pale{--skin-pale-rgb:var(--color-secondary-500-rgb)}.success-pale{--skin-pale-rgb:var(--color-success-500-rgb)}.warning-pale{--skin-pale-rgb:var(--color-warning-500-rgb)}.danger-pale{--skin-pale-rgb:var(--color-danger-500-rgb)}.important-pale{--skin-pale-rgb:var(--color-important-500-rgb)}.special-pale{--skin-pale-rgb:var(--color-special-500-rgb)}.gray-50-pale{--skin-pale-rgb:var(--color-gray-50-rgb);--skin-text:var(--color-gray-400)}.gray-100-pale{--skin-pale-rgb:var(--color-gray-100-rgb);--skin-text:var(--color-gray-400)}.gray-200-pale{--skin-pale-rgb:var(--color-gray-200-rgb);--skin-text:var(--color-gray-400)}.gray-300-pale{--skin-pale-rgb:var(--color-gray-300-rgb);--skin-text:var(--color-gray-500)}.gray-400-pale{--skin-pale-rgb:var(--color-gray-400-rgb);--skin-text:var(--color-gray-500)}.gray-500-pale,.gray-pale{--skin-pale-rgb:var(--color-gray-500-rgb)}.gray-600-pale{--skin-pale-rgb:var(--color-gray-600-rgb)}.gray-700-pale{--skin-pale-rgb:var(--color-gray-700-rgb)}.gray-800-pale{--skin-pale-rgb:var(--color-gray-800-rgb)}.gray-900-pale{--skin-pale-rgb:var(--color-gray-900-rgb)}.gray-950-pale{--skin-pale-rgb:var(--color-gray-950-rgb)}.danger-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.outline,.primary-outline,.secondary-outline,.special-outline,.success-outline,.warning-outline{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-outline:hover,.gray-300-outline:hover,.gray-400-outline:hover,.gray-600-outline:hover,.gray-outline:hover,.important-outline:hover,.outline:hover,.primary-outline:hover,.secondary-outline:hover,.special-outline:hover,.success-outline:hover,.warning-outline:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.outline,.primary-outline,.secondary-outline,.special-outline,.success-outline,.warning-outline{--skin-text:var(--skin-color,inherit);--skin-bg:transparent;--skin-color:rgba(var(--skin-outline-rgb),1);--state-color:rgba(var(--skin-outline-rgb),.1)}.outline{--skin-outline-rgb:var(--color-fore-rgb)}.primary-outline{--skin-outline-rgb:var(--color-primary-500-rgb)}.secondary-outline{--skin-outline-rgb:var(--color-secondary-500-rgb)}.success-outline{--skin-outline-rgb:var(--color-success-500-rgb)}.warning-outline{--skin-outline-rgb:var(--color-warning-500-rgb)}.danger-outline{--skin-outline-rgb:var(--color-danger-500-rgb)}.important-outline{--skin-outline-rgb:var(--color-important-500-rgb)}.special-outline{--skin-outline-rgb:var(--color-special-500-rgb)}.gray-300-outline{--skin-text:var(--color-gray-500);--skin-outline-rgb:var(--color-gray-300-rgb)}.gray-400-outline{--skin-text:var(--color-gray-500);--skin-outline-rgb:var(--color-gray-400-rgb)}.gray-outline{--skin-outline-rgb:var(--color-gray-500-rgb)}.gray-600-outline{--skin-outline-rgb:var(--color-gray-600-rgb)}.danger-ghost,.ghost,.important-ghost,.primary-ghost,.secondary-ghost,.special-ghost,.success-ghost,.warning-ghost{--skin-bg:var(--skin-color);--skin-ring:var(--skin-color);--skin-border:var(--skin-color);--skin-hover-text:var(--skin-text);--skin-hover-bg:var(--skin-bg);--tw-ring-color:var(--skin-ring);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--color-link-hover:var(--skin-text);background-color:var(--skin-bg);border-color:var(--skin-border);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:var(--skin-text)}.danger-ghost:hover,.ghost:hover,.important-ghost:hover,.primary-ghost:hover,.secondary-ghost:hover,.special-ghost:hover,.success-ghost:hover,.warning-ghost:hover{background-color:var(--skin-hover-bg);color:var(--skin-hover-text)}.danger-ghost,.ghost,.important-ghost,.primary-ghost,.secondary-ghost,.special-ghost,.success-ghost,.warning-ghost{--tw-ring-opacity:0;--tw-bg-opacity:0;--skin-text:var(--skin-color,inherit);--skin-bg:transparent;--skin-ring:transparent;--skin-color:rgba(var(--skin-ghost-rgb),1);--state-color:rgba(var(--skin-ghost-rgb),.1)}.ghost{--skin-ghost-rgb:var(--color-fore-rgb);--skin-text:inherit}.primary-ghost{--skin-ghost-rgb:var(--color-primary-500-rgb)}.secondary-ghost{--skin-ghost-rgb:var(--color-secondary-500-rgb)}.success-ghost{--skin-ghost-rgb:var(--color-success-500-rgb)}.warning-ghost{--skin-ghost-rgb:var(--color-warning-500-rgb)}.danger-ghost{--skin-ghost-rgb:var(--color-danger-500-rgb)}.important-ghost{--skin-ghost-rgb:var(--color-important-500-rgb)}.special-ghost{--skin-ghost-rgb:var(--color-special-500-rgb)}.font-sans{font-family:-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif}.font-serif{font-family:Nimbus Roman No9 L,Songti SC,Noto Serif CJK SC,Source Han Serif SC,Source Han Serif CN,STSong,AR PL New Sung,AR PL SungtiL GB,NSimSun,SimSun,TW-Sung,WenQuanYi Bitmap Song,AR PL UMing CN,AR PL UMing HK,AR PL UMing TW,AR PL UMing TW MBE,PMingLiU,MingLiU,serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-root{font-size:16px}.text-sm{font-size:.75rem;line-height:1rem}.text-base{font-size:.8125rem;line-height:1.25rem}.text-md{font-size:.875rem;line-height:1.3rem}.text-lg{font-size:1rem;line-height:1.5rem}.text-xl{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-thin{font-weight:100}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-black{font-weight:900}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-10{line-height:2.5rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.line-1{-webkit-line-clamp:1}.line-1,.line-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-2{-webkit-line-clamp:2}.line-3{-webkit-line-clamp:3}.line-3,.line-4{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-4{-webkit-line-clamp:4}.line-5{-webkit-line-clamp:5}.line-5,.line-6{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-6{-webkit-line-clamp:6}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.align-bottom{vertical-align:bottom}.align-sub{vertical-align:sub}.align-super{vertical-align:super}.text-primary{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.text-secondary{--tw-text-opacity:1;color:rgba(var(--color-secondary-500-rgb),var(--tw-text-opacity))}.text-success{--tw-text-opacity:1;color:rgba(var(--color-success-500-rgb),var(--tw-text-opacity))}.text-warning{--tw-text-opacity:1;color:rgba(var(--color-warning-500-rgb),var(--tw-text-opacity))}.text-danger{--tw-text-opacity:1;color:rgba(var(--color-danger-500-rgb),var(--tw-text-opacity))}.text-important{--tw-text-opacity:1;color:rgba(var(--color-important-500-rgb),var(--tw-text-opacity))}.text-special{--tw-text-opacity:1;color:rgba(var(--color-special-500-rgb),var(--tw-text-opacity))}.text-primary-50{--tw-text-opacity:1;color:rgba(var(--color-primary-50-rgb),var(--tw-text-opacity))}.text-primary-100{--tw-text-opacity:1;color:rgba(var(--color-primary-100-rgb),var(--tw-text-opacity))}.text-primary-200{--tw-text-opacity:1;color:rgba(var(--color-primary-200-rgb),var(--tw-text-opacity))}.text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300-rgb),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400-rgb),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500-rgb),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600-rgb),var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700-rgb),var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgba(var(--color-primary-800-rgb),var(--tw-text-opacity))}.text-primary-900{--tw-text-opacity:1;color:rgba(var(--color-primary-900-rgb),var(--tw-text-opacity))}.text-primary-950{--tw-text-opacity:1;color:rgba(var(--color-primary-950-rgb),var(--tw-text-opacity))}.text-secondary-50{--tw-text-opacity:1;color:rgba(var(--color-secondary-50-rgb),var(--tw-text-opacity))}.text-secondary-100{--tw-text-opacity:1;color:rgba(var(--color-secondary-100-rgb),var(--tw-text-opacity))}.text-secondary-200{--tw-text-opacity:1;color:rgba(var(--color-secondary-200-rgb),var(--tw-text-opacity))}.text-secondary-300{--tw-text-opacity:1;color:rgba(var(--color-secondary-300-rgb),var(--tw-text-opacity))}.text-secondary-400{--tw-text-opacity:1;color:rgba(var(--color-secondary-400-rgb),var(--tw-text-opacity))}.text-secondary-500{--tw-text-opacity:1;color:rgba(var(--color-secondary-500-rgb),var(--tw-text-opacity))}.text-secondary-600{--tw-text-opacity:1;color:rgba(var(--color-secondary-600-rgb),var(--tw-text-opacity))}.text-secondary-700{--tw-text-opacity:1;color:rgba(var(--color-secondary-700-rgb),var(--tw-text-opacity))}.text-secondary-800{--tw-text-opacity:1;color:rgba(var(--color-secondary-800-rgb),var(--tw-text-opacity))}.text-secondary-900{--tw-text-opacity:1;color:rgba(var(--color-secondary-900-rgb),var(--tw-text-opacity))}.text-secondary-950{--tw-text-opacity:1;color:rgba(var(--color-secondary-950-rgb),var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgba(var(--color-gray-50-rgb),var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgba(var(--color-gray-100-rgb),var(--tw-text-opacity))}.text-gray-200,.text-lightest{--tw-text-opacity:1;color:rgba(var(--color-gray-200-rgb),var(--tw-text-opacity))}.text-gray-300,.text-lighter{--tw-text-opacity:1;color:rgba(var(--color-gray-300-rgb),var(--tw-text-opacity))}.text-gray-400,.text-lighten{--tw-text-opacity:1;color:rgba(var(--color-gray-400-rgb),var(--tw-text-opacity))}.text-gray,.text-gray-500{--tw-text-opacity:1;color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.text-darken,.text-gray-600{--tw-text-opacity:1;color:rgba(var(--color-gray-600-rgb),var(--tw-text-opacity))}.text-darker,.text-gray-700{--tw-text-opacity:1;color:rgba(var(--color-gray-700-rgb),var(--tw-text-opacity))}.text-darkest,.text-gray-800{--tw-text-opacity:1;color:rgba(var(--color-gray-800-rgb),var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(var(--color-gray-900-rgb),var(--tw-text-opacity))}.text-gray-950{--tw-text-opacity:1;color:rgba(var(--color-gray-950-rgb),var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(var(--color-white-rgb),var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgba(var(--color-black-rgb),var(--tw-text-opacity))}.text-transparent{color:transparent}.text-canvas{--tw-text-opacity:1;color:rgba(var(--color-canvas-rgb),var(--tw-text-opacity))}.text-surface-light{--tw-text-opacity:1;color:rgba(var(--color-surface-light-rgb),var(--tw-text-opacity))}.text-surface{--tw-text-opacity:1;color:rgba(var(--color-surface-rgb),var(--tw-text-opacity))}.text-surface-strong{--tw-text-opacity:1;color:rgba(var(--color-surface-strong-rgb),var(--tw-text-opacity))}.text-inverse{--tw-text-opacity:1;color:rgba(var(--color-inverse-rgb),var(--tw-text-opacity))}.text-fore-in-light{--tw-text-opacity:1;color:rgba(var(--color-fore-in-light-rgb),var(--tw-text-opacity))}.text-fore-in-dark{--tw-text-opacity:1;color:rgba(var(--color-fore-in-dark-rgb),var(--tw-text-opacity))}.text-fore{--tw-text-opacity:1;color:rgba(var(--color-fore-rgb),var(--tw-text-opacity))}.text-focus{--tw-text-opacity:1;color:rgba(var(--color-focus-rgb),var(--tw-text-opacity))}.text-link{--tw-text-opacity:1;color:rgba(var(--color-link-rgb),var(--tw-text-opacity))}.text-link-hover{--tw-text-opacity:1;color:rgba(var(--color-link-hover-rgb),var(--tw-text-opacity))}.text-current{color:currentColor}.text-inherit{color:inherit}.clip,.ellipsis,.text-clip,.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.clip,.text-clip{text-overflow:clip}.nowrap,.whitespace-nowrap{white-space:nowrap}.pre,.whitespace-pre{white-space:pre}.pre-line,.whitespace-pre-line{white-space:pre-line}.pre-wrap,.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-opacity-0{--tw-text-opacity:0}.text-opacity-5{--tw-text-opacity:.05}.text-opacity-10{--tw-text-opacity:.1}.text-opacity-20{--tw-text-opacity:.2}.text-opacity-25{--tw-text-opacity:.25}.text-opacity-30{--tw-text-opacity:.3}.text-opacity-40{--tw-text-opacity:.4}.text-opacity-50{--tw-text-opacity:.5}.text-opacity-60{--tw-text-opacity:.6}.text-opacity-70{--tw-text-opacity:.7}.text-opacity-80{--tw-text-opacity:.8}.text-opacity-90{--tw-text-opacity:.9}.text-opacity-95{--tw-text-opacity:.95}.text-opacity-100{--tw-text-opacity:1}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.list-unstyled{list-style-type:none;padding-left:0}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.bg-primary{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-500-rgb),var(--tw-bg-opacity))}.bg-success{--tw-bg-opacity:1;background-color:rgba(var(--color-success-500-rgb),var(--tw-bg-opacity))}.bg-warning{--tw-bg-opacity:1;background-color:rgba(var(--color-warning-500-rgb),var(--tw-bg-opacity))}.bg-danger{--tw-bg-opacity:1;background-color:rgba(var(--color-danger-500-rgb),var(--tw-bg-opacity))}.bg-important{--tw-bg-opacity:1;background-color:rgba(var(--color-important-500-rgb),var(--tw-bg-opacity))}.bg-special{--tw-bg-opacity:1;background-color:rgba(var(--color-special-500-rgb),var(--tw-bg-opacity))}.bg-primary-50{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-50-rgb),var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100-rgb),var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200-rgb),var(--tw-bg-opacity))}.bg-primary-300{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-300-rgb),var(--tw-bg-opacity))}.bg-primary-400{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400-rgb),var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500-rgb),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600-rgb),var(--tw-bg-opacity))}.bg-primary-700{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-700-rgb),var(--tw-bg-opacity))}.bg-primary-800{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800-rgb),var(--tw-bg-opacity))}.bg-primary-900{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900-rgb),var(--tw-bg-opacity))}.bg-primary-950{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-950-rgb),var(--tw-bg-opacity))}.bg-secondary-50{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-50-rgb),var(--tw-bg-opacity))}.bg-secondary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-100-rgb),var(--tw-bg-opacity))}.bg-secondary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-200-rgb),var(--tw-bg-opacity))}.bg-secondary-300{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-300-rgb),var(--tw-bg-opacity))}.bg-secondary-400{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-400-rgb),var(--tw-bg-opacity))}.bg-secondary-500{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-500-rgb),var(--tw-bg-opacity))}.bg-secondary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-600-rgb),var(--tw-bg-opacity))}.bg-secondary-700{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-700-rgb),var(--tw-bg-opacity))}.bg-secondary-800{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-800-rgb),var(--tw-bg-opacity))}.bg-secondary-900{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-900-rgb),var(--tw-bg-opacity))}.bg-secondary-950{--tw-bg-opacity:1;background-color:rgba(var(--color-secondary-950-rgb),var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-50-rgb),var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-100-rgb),var(--tw-bg-opacity))}.bg-gray-200,.bg-lightest{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-200-rgb),var(--tw-bg-opacity))}.bg-gray-300,.bg-lighter{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-300-rgb),var(--tw-bg-opacity))}.bg-gray-400,.bg-light{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-400-rgb),var(--tw-bg-opacity))}.bg-gray,.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-500-rgb),var(--tw-bg-opacity))}.bg-darken,.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-600-rgb),var(--tw-bg-opacity))}.bg-darker,.bg-gray-700{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-700-rgb),var(--tw-bg-opacity))}.bg-darkest,.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-800-rgb),var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-900-rgb),var(--tw-bg-opacity))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-950-rgb),var(--tw-bg-opacity))}.bg-canvas{--tw-bg-opacity:1;background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity))}.bg-surface-light{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-light-rgb),var(--tw-bg-opacity))}.bg-surface{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-rgb),var(--tw-bg-opacity))}.bg-surface-strong{--tw-bg-opacity:1;background-color:rgba(var(--color-surface-strong-rgb),var(--tw-bg-opacity))}.bg-inverse{--tw-bg-opacity:1;background-color:rgba(var(--color-inverse-rgb),var(--tw-bg-opacity))}.bg-fore-in-light{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-in-light-rgb),var(--tw-bg-opacity))}.bg-fore-in-dark{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-in-dark-rgb),var(--tw-bg-opacity))}.bg-fore{--tw-bg-opacity:1;background-color:rgba(var(--color-fore-rgb),var(--tw-bg-opacity))}.bg-focus{--tw-bg-opacity:1;background-color:rgba(var(--color-focus-rgb),var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(var(--color-white-rgb),var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgba(var(--color-black-rgb),var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-current{background-color:currentColor}.bg-inherit{background-color:inherit}.bg-none{background-image:none}.bg-opacity-0{--tw-bg-opacity:0}.bg-opacity-5{--tw-bg-opacity:.05}.bg-opacity-10{--tw-bg-opacity:.1}.bg-opacity-20{--tw-bg-opacity:.2}.bg-opacity-30{--tw-bg-opacity:.3}.bg-opacity-40{--tw-bg-opacity:.4}.bg-opacity-50{--tw-bg-opacity:.5}.bg-opacity-60{--tw-bg-opacity:.6}.bg-opacity-70{--tw-bg-opacity:.7}.bg-opacity-80{--tw-bg-opacity:.8}.bg-opacity-90{--tw-bg-opacity:.9}.bg-opacity-100{--tw-bg-opacity:1}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-bottom{background-position:bottom}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-left-bottom{background-position:0 100%}.bg-left-top{background-position:0 0}.bg-right{background-position:100%}.bg-right-bottom{background-position:100% 100%}.bg-right-top{background-position:100% 0}.bg-top{background-position:top}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.divider{align-self:stretch;border-color:currentColor;border-left-width:1px;border-top-width:1px;opacity:.1}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-t{border-top-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-l-2{border-left-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-t-4{border-top-width:4px}.border-l-4{border-left-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-light{--tw-border-opacity:1;border-color:rgba(var(--color-border-light-rgb),var(--tw-border-opacity))}.border-strong{--tw-border-opacity:1;border-color:rgba(var(--color-border-strong-rgb),var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgba(var(--color-primary-500-rgb),var(--tw-border-opacity))}.border-secondary{--tw-border-opacity:1;border-color:rgba(var(--color-secondary-500-rgb),var(--tw-border-opacity))}.border-success{--tw-border-opacity:1;border-color:rgba(var(--color-success-500-rgb),var(--tw-border-opacity))}.border-warning{--tw-border-opacity:1;border-color:rgba(var(--color-warning-500-rgb),var(--tw-border-opacity))}.border-danger{--tw-border-opacity:1;border-color:rgba(var(--color-danger-500-rgb),var(--tw-border-opacity))}.border-important{--tw-border-opacity:1;border-color:rgba(var(--color-important-500-rgb),var(--tw-border-opacity))}.border-special{--tw-border-opacity:1;border-color:rgba(var(--color-special-500-rgb),var(--tw-border-opacity))}.border-gray-50{--tw-border-opacity:1;border-color:rgba(var(--color-gray-50-rgb),var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgba(var(--color-gray-100-rgb),var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(var(--color-gray-200-rgb),var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(var(--color-gray-300-rgb),var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity))}.border-gray,.border-gray-500{--tw-border-opacity:1;border-color:rgba(var(--color-gray-500-rgb),var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(var(--color-gray-600-rgb),var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(var(--color-gray-700-rgb),var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgba(var(--color-gray-800-rgb),var(--tw-border-opacity))}.border-gray-900{--tw-border-opacity:1;border-color:rgba(var(--color-gray-900-rgb),var(--tw-border-opacity))}.border-gray-950{--tw-border-opacity:1;border-color:rgba(var(--color-gray-950-rgb),var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgba(var(--color-white-rgb),var(--tw-border-opacity))}.border-black{--tw-border-opacity:1;border-color:rgba(var(--color-black-rgb),var(--tw-border-opacity))}.border-canvas{--tw-border-opacity:1;border-color:rgba(var(--color-canvas-rgb),var(--tw-border-opacity))}.border-surface-light{--tw-border-opacity:1;border-color:rgba(var(--color-surface-light-rgb),var(--tw-border-opacity))}.border-surface{--tw-border-opacity:1;border-color:rgba(var(--color-surface-rgb),var(--tw-border-opacity))}.border-surface-strong{--tw-border-opacity:1;border-color:rgba(var(--color-surface-strong-rgb),var(--tw-border-opacity))}.border-inverse{--tw-border-opacity:1;border-color:rgba(var(--color-inverse-rgb),var(--tw-border-opacity))}.border-fore-in-light{--tw-border-opacity:1;border-color:rgba(var(--color-fore-in-light-rgb),var(--tw-border-opacity))}.border-fore-in-dark{--tw-border-opacity:1;border-color:rgba(var(--color-fore-in-dark-rgb),var(--tw-border-opacity))}.border-fore{--tw-border-opacity:1;border-color:rgba(var(--color-fore-rgb),var(--tw-border-opacity))}.border-focus{--tw-border-opacity:1;border-color:rgba(var(--color-focus-rgb),var(--tw-border-opacity))}.border-link{--tw-border-opacity:1;border-color:rgba(var(--color-link-rgb),var(--tw-border-opacity))}.border-link-hover{--tw-border-opacity:1;border-color:rgba(var(--color-link-hover-rgb),var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-current{border-color:currentColor}.border-inherit{border-color:inherit}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-hidden{border-style:hidden}.border-none{border-style:none}.border-opacity-0{--tw-border-opacity:0}.border-opacity-5{--tw-border-opacity:.05}.border-opacity-10{--tw-border-opacity:.1}.border-opacity-20{--tw-border-opacity:.2}.border-opacity-25{--tw-border-opacity:.25}.border-opacity-30{--tw-border-opacity:.3}.border-opacity-40{--tw-border-opacity:.4}.border-opacity-50{--tw-border-opacity:.5}.border-opacity-60{--tw-border-opacity:.6}.border-opacity-70{--tw-border-opacity:.7}.border-opacity-80{--tw-border-opacity:.8}.border-opacity-90{--tw-border-opacity:.9}.border-opacity-95{--tw-border-opacity:.95}.border-opacity-100{--tw-border-opacity:1}.rounded-none{border-radius:var(--radius-none)}.rounded-sm{border-radius:var(--radius-sm)}.rounded{border-radius:var(--radius)}.rounded-md{border-radius:var(--radius-md)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.circle,.rounded-full{border-radius:var(--radius-full)}.rounded-l-none{border-bottom-left-radius:var(--radius-none);border-top-left-radius:var(--radius-none)}.rounded-t-none{border-top-left-radius:var(--radius-none)}.rounded-r-none,.rounded-t-none{border-top-right-radius:var(--radius-none)}.rounded-b-none,.rounded-r-none{border-bottom-right-radius:var(--radius-none)}.rounded-b-none{border-bottom-left-radius:var(--radius-none)}.rounded-br-none{border-bottom-right-radius:var(--radius-none)}.rounded-bl-none{border-bottom-left-radius:var(--radius-none)}.rounded-tr-none{border-top-right-radius:var(--radius-none)}.rounded-tl-none{border-top-left-radius:var(--radius-none)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-border-light{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-light-rgb),var(--tw-ring-opacity))}.ring-border{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-rgb),var(--tw-ring-opacity))}.ring-border-strong{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity))}.ring-light{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.05}.ring-gray{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.1}.ring-dark{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.2}.ring-darker{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.3}.ring-darkest{--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity));--tw-ring-opacity:0.5}.ring-primary{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-primary-500-rgb),var(--tw-ring-opacity))}.ring-secondary{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-secondary-500-rgb),var(--tw-ring-opacity))}.ring-warning{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-warning-500-rgb),var(--tw-ring-opacity))}.ring-success{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-success-500-rgb),var(--tw-ring-opacity))}.ring-danger{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-danger-500-rgb),var(--tw-ring-opacity))}.ring-important{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-important-500-rgb),var(--tw-ring-opacity))}.ring-special{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-special-500-rgb),var(--tw-ring-opacity))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-50-rgb),var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-100-rgb),var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-200-rgb),var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-300-rgb),var(--tw-ring-opacity))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-400-rgb),var(--tw-ring-opacity))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-500-rgb),var(--tw-ring-opacity))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-600-rgb),var(--tw-ring-opacity))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-700-rgb),var(--tw-ring-opacity))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-800-rgb),var(--tw-ring-opacity))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-900-rgb),var(--tw-ring-opacity))}.ring-gray-950{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-gray-950-rgb),var(--tw-ring-opacity))}.ring-inverse{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-inverse-rgb),var(--tw-ring-opacity))}.ring-canvas{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-canvas-rgb),var(--tw-ring-opacity))}.ring-surface{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-surface-rgb),var(--tw-ring-opacity))}.ring-fore{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-fore-rgb),var(--tw-ring-opacity))}.ring-transparent{--tw-ring-color:transparent}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-black-rgb),var(--tw-ring-opacity))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-white-rgb),var(--tw-ring-opacity))}.ring-inherit{--tw-ring-color:inherit}.ring-current{--tw-ring-color:currentColor}.ring-opacity-0{--tw-ring-opacity:0}.ring-opacity-5{--tw-ring-opacity:.05}.ring-opacity-10{--tw-ring-opacity:.1}.ring-opacity-20{--tw-ring-opacity:.2}.ring-opacity-30{--tw-ring-opacity:.3}.ring-opacity-40{--tw-ring-opacity:.4}.ring-opacity-50{--tw-ring-opacity:.5}.ring-opacity-60{--tw-ring-opacity:.6}.ring-opacity-70{--tw-ring-opacity:.7}.ring-opacity-80{--tw-ring-opacity:.8}.ring-opacity-90{--tw-ring-opacity:.9}.ring-opacity-100{--tw-ring-opacity:1}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-3{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-3,.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-8{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-offset-0{--tw-ring-offset-width:0px}.ring-offset-1{--tw-ring-offset-width:1px}.ring-offset-2{--tw-ring-offset-width:2px}.ring-offset-4{--tw-ring-offset-width:4px}.ring-offset-8{--tw-ring-offset-width:8px}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.04),0 0 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color),0 0 2px -1px var(--tw-shadow-color)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 3px 8px 0 rgba(0,0,0,.04),0 1px 2px -1px rgba(0,0,0,.01);--tw-shadow-colored:0 3px 8px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 2px 6px -1px rgba(0,0,0,.2),0 1px 4px -2px rgba(0,0,0,.15);--tw-shadow-colored:0 2px 6px -1px var(--tw-shadow-color),0 1px 4px -2px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 5px 15px -3px rgba(0,0,0,.2),0 2px 6px -4px rgba(0,0,0,.15);--tw-shadow-colored:0 5px 15px -3px var(--tw-shadow-color),0 2px 6px -4px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 10px 25px -5px rgba(0,0,0,.2),0 4px 10px -6px rgba(0,0,0,.15);--tw-shadow-colored:0 10px 25px -5px var(--tw-shadow-color),0 4px 10px -6px var(--tw-shadow-color)}.shadow-2xl,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 10px 50px -10px rgba(0,0,0,.4),0 8px 20px -10px rgba(0,0,0,.3);--tw-shadow-colored:0 10px 50px -10px var(--tw-shadow-color),0 8px 20px -10px var(--tw-shadow-color)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-inner,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.muted{opacity:var(--opacity-muted)}.opacity-0{opacity:0}.opacity-5{opacity:.05}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.blur-none{--tw-blur:blur(0)}.blur-none,.blur-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-sm{--tw-blur:blur(4px)}.blur{--tw-blur:blur(8px)}.blur,.blur-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-md{--tw-blur:blur(12px)}.blur-lg{--tw-blur:blur(16px)}.blur-lg,.blur-xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-xl{--tw-blur:blur(24px)}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.filter-none{filter:none!important}.drop-shadow-none{--tw-drop-shadow:drop-shadow(0 0 #0000)}.drop-shadow-none,.drop-shadow-sm{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.drop-shadow,.drop-shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06))}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}.drop-shadow-lg,.drop-shadow-xl{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-xl{--tw-drop-shadow:drop-shadow(0 20px 13px rgba(0,0,0,.03)) drop-shadow(0 8px 5px rgba(0,0,0,.08))}.drop-shadow-2xl{--tw-drop-shadow:drop-shadow(0 25px 25px rgba(0,0,0,.15));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-none{--tw-backdrop-blur:blur(0)}.backdrop-blur-none,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-md{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-lg,.backdrop-blur-xl{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.backdrop-blur-2xl{--tw-backdrop-blur:blur(40px)}.backdrop-blur-2xl,.backdrop-blur-3xl{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-3xl{--tw-backdrop-blur:blur(64px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fade,.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{opacity:0;transition-duration:.15s;transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{--tw-scale-x:.9;--tw-scale-y:.9}.fade-from-bottom,.fade-from-center,.fade-from-left,.fade-from-right,.fade-from-top{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-bottom{--tw-translate-y:25%}.fade-from-top{--tw-translate-y:-25%}.fade-from-left,.fade-from-top{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-left{--tw-translate-x:-25%}.fade-from-right{--tw-translate-x:25%}.fade-from-bottom.in,.fade-from-center.in,.fade-from-left.in,.fade-from-right,.fade-from-right.in,.fade-from-top.in,.fade.in{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.fade-from-bottom.in,.fade-from-center.in,.fade-from-left.in,.fade-from-right.in,.fade-from-top.in,.fade.in{--tw-translate-x:0px;--tw-translate-y:0px;--tw-scale-x:1;--tw-scale-y:1;opacity:1}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-1000{transition-duration:1s}@keyframes -spin{to{transform:rotate(1turn)}}.animate-spin,.spin{animation:-spin 1s linear infinite}@keyframes -ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping,.ping{animation:-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes -pulse{50%{opacity:.5}}.animate-pulse,.pulse{animation:-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes -bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-bounce,.bounce{animation:-bounce 1s infinite}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-0,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75}.scale-75,.scale-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}.scale-125,.scale-150{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-150{--tw-scale-x:1.5;--tw-scale-y:1.5}.flip-x{--tw-scale-x:-1}.flip-x,.flip-y{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flip-y{--tw-scale-y:-1}.rotate-0{--tw-rotate:0deg}.rotate-0,.rotate-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-1{--tw-rotate:1deg}.rotate-2{--tw-rotate:2deg}.rotate-2,.rotate-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-3{--tw-rotate:3deg}.rotate-6{--tw-rotate:6deg}.rotate-12,.rotate-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-45{--tw-rotate:45deg}.rotate-45,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.rotate-135{--tw-rotate:135deg}.rotate-135,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-270{--tw-rotate:270deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.basis-0{flex-basis:0px}.basis-1{flex-basis:0.25rem}.basis-2{flex-basis:0.5rem}.basis-3{flex-basis:0.75rem}.basis-4{flex-basis:1rem}.basis-5{flex-basis:1.25rem}.basis-6{flex-basis:1.5rem}.basis-7{flex-basis:1.75rem}.basis-8{flex-basis:2rem}.basis-9{flex-basis:2.25rem}.basis-10{flex-basis:2.5rem}.basis-11{flex-basis:2.75rem}.basis-12{flex-basis:3rem}.basis-14{flex-basis:3.5rem}.basis-16{flex-basis:4rem}.basis-20{flex-basis:5rem}.basis-24{flex-basis:6rem}.basis-28{flex-basis:7rem}.basis-32{flex-basis:8rem}.basis-36{flex-basis:9rem}.basis-40{flex-basis:10rem}.basis-44{flex-basis:11rem}.basis-48{flex-basis:12rem}.basis-52{flex-basis:13rem}.basis-56{flex-basis:14rem}.basis-60{flex-basis:15rem}.basis-64{flex-basis:16rem}.basis-72{flex-basis:18rem}.basis-80{flex-basis:20rem}.basis-96{flex-basis:24rem}.basis-auto{flex-basis:auto}.basis-px{flex-basis:1px}.basis-0\.5{flex-basis:0.125rem}.basis-1\.5{flex-basis:0.375rem}.basis-2\.5{flex-basis:0.625rem}.basis-3\.5{flex-basis:0.875rem}.basis-1\/2{flex-basis:50%}.basis-1\/3{flex-basis:33.333333%}.basis-2\/3{flex-basis:66.666667%}.basis-1\/4{flex-basis:25%}.basis-2\/4{flex-basis:50%}.basis-3\/4{flex-basis:75%}.basis-1\/5{flex-basis:20%}.basis-2\/5{flex-basis:40%}.basis-3\/5{flex-basis:60%}.basis-4\/5{flex-basis:80%}.basis-1\/6{flex-basis:16.666667%}.basis-2\/6{flex-basis:33.333333%}.basis-3\/6{flex-basis:50%}.basis-4\/6{flex-basis:66.666667%}.basis-5\/6{flex-basis:83.333333%}.basis-1\/12{flex-basis:8.333333%}.basis-2\/12{flex-basis:16.666667%}.basis-3\/12{flex-basis:25%}.basis-4\/12{flex-basis:33.333333%}.basis-5\/12{flex-basis:41.666667%}.basis-6\/12{flex-basis:50%}.basis-7\/12{flex-basis:58.333333%}.basis-8\/12{flex-basis:66.666667%}.basis-9\/12{flex-basis:75%}.basis-10\/12{flex-basis:83.333333%}.basis-11\/12{flex-basis:91.666667%}.basis-full{flex-basis:100%}.row{display:flex;flex-direction:row}.center,.col{display:flex;flex-direction:column}.center,.center-row{align-items:center;justify-content:center}.center-row{display:flex;flex-direction:row}.center-x,.center-y{align-items:center;display:flex}.center-y{flex-direction:column}.row-reverse{display:flex;flex-direction:row-reverse}.col-reverse{display:flex;flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.grow{flex-grow:1!important}.grow-0{flex-grow:0!important}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.gap-0{gap:0}.gap-x-0{-moz-column-gap:0;column-gap:0}.gap-y-0{row-gap:0}.gap-px{gap:1px}.gap-x-px{-moz-column-gap:1px;column-gap:1px}.gap-y-px{row-gap:1px}.gap-0\.5{gap:.125rem}.gap-x-0\.5{-moz-column-gap:.125rem;column-gap:.125rem}.gap-y-0\.5{row-gap:.125rem}.gap-3px{gap:3px}.gap-1{gap:.25rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-y-1{row-gap:.25rem}.gap-1\.5{gap:.375rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-y-1\.5{row-gap:.375rem}.gap-2{gap:.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-2{row-gap:.5rem}.gap-2\.5{gap:.625rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-y-2\.5{row-gap:.625rem}.gap-3{gap:.75rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-3{row-gap:.75rem}.gap-3\.5{gap:.875rem}.gap-x-3\.5{-moz-column-gap:.875rem;column-gap:.875rem}.gap-y-3\.5{row-gap:.875rem}.gap-4{gap:1rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-4{row-gap:1rem}.gap-5{gap:1.25rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-5{row-gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-6{row-gap:1.5rem}.gap-7{gap:1.75rem}.gap-x-7{-moz-column-gap:1.75rem;column-gap:1.75rem}.gap-y-7{row-gap:1.75rem}.gap-8{gap:2rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-8{row-gap:2rem}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}@font-face{font-display:fallback;font-family:D-DIN-PRO;font-weight:400;src:url(./fonts/D-DIN-PRO-400-Regular.otf)}@font-face{font-display:fallback;font-family:D-DIN-PRO;font-weight:500;src:url(./fonts/D-DIN-PRO-700-Bold.otf)}.num{font-family:D-DIN-PRO;font-weight:400}@font-face{font-display:fallback;font-family:Nunito;font-weight:400;src:url(./fonts/Nunito-Regular.ttf)}@font-face{font-display:fallback;font-family:Nunito;font-weight:700;src:url(./fonts/Nunito-bold.ttf)}@font-face{font-display:fallback;font-family:Nunito;font-weight:300;src:url(./fonts/Nunito-Light.ttf)}.font-brand{font-family:Nunito;font-weight:400}
\ No newline at end of file
diff --git a/www/js/zui3/zui.zentao.js b/www/js/zui3/zui.zentao.js
index 2f6ddc3fac..ad9a076519 100644
--- a/www/js/zui3/zui.zentao.js
+++ b/www/js/zui3/zui.zentao.js
@@ -1,2 +1,3 @@
-var Io=(w,tt,vt)=>{if(!tt.has(w))throw TypeError("Cannot "+vt)};var bt=(w,tt,vt)=>(Io(w,tt,"read from private field"),vt?vt.call(w):tt.get(w)),$t=(w,tt,vt)=>{if(tt.has(w))throw TypeError("Cannot add the same private member more than once");tt instanceof WeakSet?tt.add(w):tt.set(w,vt)},It=(w,tt,vt,pi)=>(Io(w,tt,"write to private field"),pi?pi.call(w,vt):tt.set(w,vt),vt);var Po=(w,tt,vt)=>(Io(w,tt,"access private method"),vt);(function(w,tt){typeof exports=="object"&&typeof module<"u"?tt(exports):typeof define=="function"&&define.amd?define(["exports"],tt):(w=typeof globalThis<"u"?globalThis:w||self,tt(w.zui={}))})(this,function(w){var hi,di,Ls,Rs,Fs,zs,Os,Ws,ui,Bc,fi,jc,ye,_e;"use strict";const tt="",vt="",pi="",Rf="",Ff="",zf="",Of="",Wf="",Hf="",Bf="",jf="",Uf="",jt=document,Hs=window,Ao=jt.documentElement,be=jt.createElement.bind(jt),Do=be("div"),mi=be("table"),Uc=be("tbody"),Lo=be("tr"),{isArray:Bs,prototype:Ro}=Array,{concat:Vc,filter:gi,indexOf:Fo,map:zo,push:Kc,slice:Oo,some:yi,splice:Gc}=Ro,qc=/^#(?:[\w-]|\\.|[^\x00-\xa0])*$/,Yc=/^\.(?:[\w-]|\\.|[^\x00-\xa0])*$/,Qc=/<.+>/,Zc=/^\w+$/;function _i(n,t){const e=Xc(t);return!n||!e&&!ve(t)&&!st(t)?[]:!e&&Yc.test(n)?t.getElementsByClassName(n.slice(1).replace(/\\/g,"")):!e&&Zc.test(n)?t.getElementsByTagName(n):t.querySelectorAll(n)}class js{constructor(t,e){if(!t)return;if(bi(t))return t;let s=t;if(dt(t)){const i=e||jt;if(s=qc.test(t)&&ve(i)?i.getElementById(t.slice(1).replace(/\\/g,"")):Qc.test(t)?Vo(t):bi(i)?i.find(t):dt(i)?u(i).find(t):_i(t,i),!s)return}else if(we(t))return this.ready(t);(s.nodeType||s===Hs)&&(s=[s]),this.length=s.length;for(let i=0,r=this.length;i{for(;t.firstChild;)t.removeChild(t.firstChild)})};function Us(...n){const t=th(n[0])?n.shift():!1,e=n.shift(),s=n.length;if(!e)return{};if(!s)return Us(t,u,e);for(let i=0;i{st(r)&<(e,(o,a)=>{s?t?r.classList.add(a):r.classList.remove(a):r.classList.toggle(a)})})},N.addClass=function(n){return this.toggleClass(n,!0)},N.removeAttr=function(n){const t=Vs(n);return this.each((e,s)=>{st(s)&<(t,(i,r)=>{s.removeAttribute(r)})})};function sh(n,t){if(n){if(dt(n)){if(arguments.length<2){if(!this[0]||!st(this[0]))return;const e=this[0].getAttribute(n);return os(e)?void 0:e}return wt(t)?this:os(t)?this.removeAttr(n):this.each((e,s)=>{st(s)&&s.setAttribute(n,t)})}for(const e in n)this.attr(e,n[e]);return this}}N.attr=sh,N.removeClass=function(n){return arguments.length?this.toggleClass(n,!1):this.attr("class","")},N.hasClass=function(n){return!!n&&yi.call(this,t=>st(t)&&t.classList.contains(n))},N.get=function(n){return wt(n)?Oo.call(this):(n=Number(n),this[n<0?n+this.length:n])},N.eq=function(n){return u(this.get(n))},N.first=function(){return this.eq(0)},N.last=function(){return this.eq(-1)};function nh(n){return wt(n)?this.get().map(t=>st(t)||Jc(t)?t.textContent:"").join(""):this.each((t,e)=>{st(e)&&(e.textContent=n)})}N.text=nh;function Ut(n,t,e){if(!st(n))return;const s=Hs.getComputedStyle(n,null);return e?s.getPropertyValue(t)||void 0:s[t]||n.style[t]}function zt(n,t){return parseInt(Ut(n,t),10)||0}function Ho(n,t){return zt(n,`border${t?"Left":"Top"}Width`)+zt(n,`padding${t?"Left":"Top"}`)+zt(n,`padding${t?"Right":"Bottom"}`)+zt(n,`border${t?"Right":"Bottom"}Width`)}const wi={};function ih(n){if(wi[n])return wi[n];const t=be(n);jt.body.insertBefore(t,null);const e=Ut(t,"display");return jt.body.removeChild(t),wi[n]=e!=="none"?e:"block"}function Bo(n){return Ut(n,"display")==="none"}function jo(n,t){const e=n&&(n.matches||n.webkitMatchesSelector||n.msMatchesSelector);return!!e&&!!t&&e.call(n,t)}function Ks(n){return dt(n)?(t,e)=>jo(e,n):we(n)?n:bi(n)?(t,e)=>n.is(e):n?(t,e)=>e===n:()=>!1}N.filter=function(n){const t=Ks(n);return u(gi.call(this,(e,s)=>t.call(e,s,e)))};function ee(n,t){return t?n.filter(t):n}N.detach=function(n){return ee(this,n).each((t,e)=>{e.parentNode&&e.parentNode.removeChild(e)}),this};const rh=/^\s*<(\w+)[^>]*>/,oh=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,Uo={"*":Do,tr:Uc,td:Lo,th:Lo,thead:mi,tbody:mi,tfoot:mi};function Vo(n){if(!dt(n))return[];if(oh.test(n))return[be(RegExp.$1)];const t=rh.test(n)&&RegExp.$1,e=Uo[t]||Uo["*"];return e.innerHTML=n,u(e.childNodes).detach().get()}u.parseHTML=Vo,N.has=function(n){const t=dt(n)?(e,s)=>_i(n,s).length:(e,s)=>s.contains(n);return this.filter(t)},N.not=function(n){const t=Ks(n);return this.filter((e,s)=>(!dt(n)||st(s))&&!t.call(s,e,s))};function Vt(n,t,e,s){const i=[],r=we(t),o=s&&Ks(s);for(let a=0,l=n.length;at.selected&&!t.disabled&&!t.parentNode.disabled),"value"):n.value||""}function ah(n){return arguments.length?this.each((t,e)=>{const s=e.multiple&&e.options;if(s||na.test(e.type)){const i=Bs(n)?zo.call(n,String):os(n)?[]:[String(n)];s?lt(e.options,(r,o)=>{o.selected=i.indexOf(o.value)>=0},!0):e.checked=i.indexOf(e.value)>=0}else e.value=wt(n)||os(n)?"":n}):this[0]&&Ko(this[0])}N.val=ah,N.is=function(n){const t=Ks(n);return yi.call(this,(e,s)=>t.call(e,s,e))},u.guid=1;function Ot(n){return n.length>1?gi.call(n,(t,e,s)=>Fo.call(s,t)===e):n}u.unique=Ot,N.add=function(n,t){return u(Ot(this.get().concat(u(n,t).get())))},N.children=function(n){return ee(u(Ot(Vt(this,t=>t.children))),n)},N.parent=function(n){return ee(u(Ot(Vt(this,"parentNode"))),n)},N.index=function(n){const t=n?u(n)[0]:this[0],e=n?this:u(t).parent().children();return Fo.call(e,t)},N.closest=function(n){const t=this.filter(n);if(t.length)return t;const e=this.parent();return e.length?e.closest(n):t},N.siblings=function(n){return ee(u(Ot(Vt(this,t=>u(t).parent().children().not(t)))),n)},N.find=function(n){return u(Ot(Vt(this,t=>_i(n,t))))};const lh=/^\s*\s*$/g,ch=/^$|^module$|\/(java|ecma)script/i,hh=["type","src","nonce","noModule"];function dh(n,t){const e=u(n);e.filter("script").add(e.find("script")).each((s,i)=>{if(ch.test(i.type)&&Ao.contains(i)){const r=be("script");r.text=i.textContent.replace(lh,""),lt(hh,(o,a)=>{i[a]&&(r[a]=i[a])}),t.head.insertBefore(r,null),t.head.removeChild(r)}})}function uh(n,t,e,s,i){s?n.insertBefore(t,e?n.firstChild:null):n.nodeName==="HTML"?n.parentNode.replaceChild(t,n):n.parentNode.insertBefore(t,e?n:n.nextSibling),i&&dh(t,n.ownerDocument)}function se(n,t,e,s,i,r,o,a){return lt(n,(l,c)=>{lt(u(c),(h,d)=>{lt(u(t),(p,f)=>{const m=e?d:f,y=e?f:d,b=e?h:p;uh(m,b?y.cloneNode(!0):y,s,i,!b)},a)},o)},r),t}N.after=function(){return se(arguments,this,!1,!1,!1,!0,!0)},N.append=function(){return se(arguments,this,!1,!1,!0)};function fh(n){if(!arguments.length)return this[0]&&this[0].innerHTML;if(wt(n))return this;const t=/
From 35ea27ee9db862dafd00f52f56871fa45f4ba0ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?=
Date: Tue, 5 Mar 2024 09:31:53 +0800
Subject: [PATCH 151/276] * Fix bug #46474.
---
module/release/model.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/release/model.php b/module/release/model.php
index cd5cdb9a03..47be404477 100644
--- a/module/release/model.php
+++ b/module/release/model.php
@@ -421,6 +421,7 @@ class releaseModel extends model
}
elseif(($notify == 'ET' || $notify == 'PT') && !empty($release->build))
{
+ $type = $notify == 'ET' ? 'execution' : 'project';
$table = $notify == 'ET' ? TABLE_BUILD : TABLE_RELEASE;
$members = $this->dao->select('t2.account')->from($table)->alias('t1')
->leftJoin(TABLE_TEAM)->alias('t2')->on("t1.$type=t2.root")
From a2318df172b9139cef03e7eea54f06a31bd626fd Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Tue, 5 Mar 2024 09:42:13 +0800
Subject: [PATCH 152/276] * Fix project kanban bug. bug #46521.
---
extension/lite/project/ext/css/kanban/lite.ui.css | 2 --
module/project/zen.php | 6 +++---
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/extension/lite/project/ext/css/kanban/lite.ui.css b/extension/lite/project/ext/css/kanban/lite.ui.css
index f20750ed0e..e69de29bb2 100644
--- a/extension/lite/project/ext/css/kanban/lite.ui.css
+++ b/extension/lite/project/ext/css/kanban/lite.ui.css
@@ -1,2 +0,0 @@
-.kanban-lane-name {background-color: transparent !important;}
-.kanban-lane-name span.text{display:none;}
diff --git a/module/project/zen.php b/module/project/zen.php
index 3d2cc6ce63..15e14550c6 100755
--- a/module/project/zen.php
+++ b/module/project/zen.php
@@ -1659,7 +1659,7 @@ class projectZen extends project
$columnCards = array();
foreach($region as $laneKey => $laneData)
{
- $lanes[] = array('name' => $laneKey, 'title' => zget($programPairs, $laneKey));
+ $lanes[] = array('name' => "lane$laneKey", 'title' => zget($programPairs, $laneKey));
$columns = array();
foreach(array('wait', 'doing', 'closed') as $columnKey)
{
@@ -1674,7 +1674,7 @@ class projectZen extends project
foreach($cardList as $card)
{
$columnKey = $columnKey == 'doing' ? 'doingProjects' : $columnKey;
- $items[$laneKey][$columnKey][] = array('id' => $card->id, 'name' => $card->id, 'title' => $card->name, 'status' => $card->status, 'type' => 'project', 'delay' => !empty($card->delay) ? $card->delay : 0, 'progress' => $card->progress);
+ $items["lane$laneKey"][$columnKey][] = array('id' => $card->id, 'name' => $card->id, 'title' => $card->name, 'status' => $card->status, 'type' => 'project', 'delay' => !empty($card->delay) ? $card->delay : 0, 'progress' => $card->progress);
if(!isset($columnCards[$columnKey])) $columnCards[$columnKey] = 0;
$columnCards[$columnKey] ++;
@@ -1685,7 +1685,7 @@ class projectZen extends project
{
$columnKey = 'doingExecutions';
$execution = $latestExecutions[$card->id];
- $items[$laneKey][$columnKey][] = array('id' => $execution->id, 'name' => $execution->id, 'title' => $execution->name, 'status' => $execution->status, 'type' => 'execution', 'delay' => !empty($execution->delay) ? $execution->delay : 0, 'progress' => $execution->progress);
+ $items["lane$laneKey"][$columnKey][] = array('id' => $execution->id, 'name' => $execution->id, 'title' => $execution->name, 'status' => $execution->status, 'type' => 'execution', 'delay' => !empty($execution->delay) ? $execution->delay : 0, 'progress' => $execution->progress);
if(!isset($columnCards[$columnKey])) $columnCards[$columnKey] = 0;
$columnCards[$columnKey] ++;
From eaecafe51dbcf53e27d9176753a7676053705f60 Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 09:56:29 +0800
Subject: [PATCH 153/276] * Fix bug#46547.
---
module/story/ui/edit.html.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/story/ui/edit.html.php b/module/story/ui/edit.html.php
index 94bb738c34..bcf654df29 100644
--- a/module/story/ui/edit.html.php
+++ b/module/story/ui/edit.html.php
@@ -238,9 +238,9 @@ detailBody
set::manageLink(createLink('tree', 'browse', "rootID={$story->product}&view=story¤tModuleID=0&branch={$story->branch}"))
)
),
- $story->parent >= 0 && $story->type == 'story' && $app->tab == 'product' ? item
+ $story->parent >= 0 && $story->type == 'story' ? item
(
- set::trClass(zget($fields['parent'], 'className', '')),
+ set::trClass($app->tab == 'product' ? zget($fields['parent'], 'className', '') : 'hidden'),
set::name($lang->story->parent),
picker(setID('parent'), set::name('parent'), set::items($fields['parent']['options']), set::value($fields['parent']['default']))
) : null,
From cd424b94c212aac459ec385ec036d9ad08467cbd Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 10:04:13 +0800
Subject: [PATCH 154/276] * Fix bug #46381, don't reload if it'll create a bug.
---
module/testtask/js/common.ui.js | 1 +
module/testtask/js/runcase.ui.js | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/module/testtask/js/common.ui.js b/module/testtask/js/common.ui.js
index eb12c70add..90335f8df6 100644
--- a/module/testtask/js/common.ui.js
+++ b/module/testtask/js/common.ui.js
@@ -126,6 +126,7 @@ function createBug(event)
var link = $.createLink('bug', 'create', $form.data('params') + ',stepIdList=' + stepIdList);
loadPage(link);
+ $('#runCaseModal').closest('.modal').addClass('not-refresh');
}
/**
diff --git a/module/testtask/js/runcase.ui.js b/module/testtask/js/runcase.ui.js
index 7795959078..95833b2abb 100644
--- a/module/testtask/js/runcase.ui.js
+++ b/module/testtask/js/runcase.ui.js
@@ -6,7 +6,7 @@ $(function()
$('#runCaseModal').closest('.modal').on('hide.zui.modal', function()
{
- loadCurrentPage();
+ if(!$(this).hasClass('not-refresh')) loadCurrentPage();
});
/**
From ce7612acb1bf3111a49c6c737d035278cc10dd81 Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 10:08:23 +0800
Subject: [PATCH 155/276] * Fix bug#46491.
---
extension/lite/story/ext/ui/create.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extension/lite/story/ext/ui/create.html.php b/extension/lite/story/ext/ui/create.html.php
index ed3c3784f2..6939d320bd 100644
--- a/extension/lite/story/ext/ui/create.html.php
+++ b/extension/lite/story/ext/ui/create.html.php
@@ -86,7 +86,7 @@ formPanel
(
set::width('1/2'),
set::label($lang->story->reviewedBy),
- set::required($forceReview),
+ set::required(true),
inputGroup
(
picker
From 5f9b3b91835f026e41afed050c361bb595ba3ea6 Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 10:12:27 +0800
Subject: [PATCH 156/276] * fix llm actions fail to execute.
---
module/ai/config/actions.php | 2 --
1 file changed, 2 deletions(-)
diff --git a/module/ai/config/actions.php b/module/ai/config/actions.php
index 367cfcd327..d1c38342ef 100644
--- a/module/ai/config/actions.php
+++ b/module/ai/config/actions.php
@@ -15,12 +15,10 @@ $config->ai->actionList['modeldisable']['icon'] = 'ban-circle';
$config->ai->actionList['modeldisable']['text'] = $lang->ai->models->disable;
$config->ai->actionList['modeldisable']['hint'] = $lang->ai->models->disable;
$config->ai->actionList['modeldisable']['url'] = 'javascript:confirmDisable("{id}")';
-$config->ai->actionList['modeldisable']['data-app'] = $app->tab;
$config->ai->actionList['modeltestconnection']['icon'] = 'controls';
$config->ai->actionList['modeltestconnection']['text'] = $lang->ai->models->testConnection;
$config->ai->actionList['modeltestconnection']['hint'] = $lang->ai->models->testConnection;
$config->ai->actionList['modeltestconnection']['url'] = 'javascript:testConnection("{id}")';
-$config->ai->actionList['modeltestconnection']['data-app'] = $app->tab;
$config->ai->actionList['modeledit']['icon'] = 'edit';
$config->ai->actionList['modeledit']['text'] = $lang->ai->models->edit;
$config->ai->actionList['modeledit']['hint'] = $lang->ai->models->edit;
From a11dfeb30f7ccc62c3f6055e617679fac0cfcb86 Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 10:19:48 +0800
Subject: [PATCH 157/276] * Fix bug#46556.
---
module/story/ui/submitreview.html.php | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/module/story/ui/submitreview.html.php b/module/story/ui/submitreview.html.php
index 8c7099ce67..da756c8244 100644
--- a/module/story/ui/submitreview.html.php
+++ b/module/story/ui/submitreview.html.php
@@ -26,7 +26,8 @@ if(!$this->story->checkForceReview())
setID('needNotReview'),
set::name('needNotReview'),
set::text($lang->story->needNotReview),
- set::value(1)
+ set::value(1),
+ set::checked($needReview)
)
);
}
@@ -50,7 +51,8 @@ formPanel
set::name('reviewer[]'),
set::value($story->reviewer),
set::multiple(true),
- set::items($reviewers)
+ set::items($reviewers),
+ set::disabled($needReview)
),
$needNotReviewBox
)
From 0d839fd7e5c59876c3318578b63b9ab1f8768840 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 10:24:43 +0800
Subject: [PATCH 158/276] * Fix bug #46549.
---
framework/base/control.class.php | 4 ++--
module/index/config.php | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/framework/base/control.class.php b/framework/base/control.class.php
index 7454749d2c..405f3940ff 100644
--- a/framework/base/control.class.php
+++ b/framework/base/control.class.php
@@ -685,8 +685,8 @@ class baseControl
unset($this->view->pager->lang);
$output['status'] = is_object($this->view) ? 'success' : 'fail';
- $output['data'] = json_encode($this->view);
- $output['md5'] = md5(json_encode($this->view));
+ $output['data'] = json_encode($this->view) ? json_encode($this->view) : '';
+ $output['md5'] = md5($output['data']);
$this->output = json_encode($output);
}
diff --git a/module/index/config.php b/module/index/config.php
index b3544e4c32..42511455ee 100644
--- a/module/index/config.php
+++ b/module/index/config.php
@@ -32,3 +32,4 @@ $config->index->oldPages[] = 'ai-editminiprogramcategory';
$config->index->oldPages[] = 'ai-miniprograms';
$config->index->oldPages[] = 'ai-prompts';
$config->index->oldPages[] = 'ai-promptview';
+$config->index->oldPages[] = 'api-debug';
From 3000ba7be991722c12b42969d4f272ac50176ecf Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 09:56:54 +0800
Subject: [PATCH 159/276] * add zentao client download menu.
---
lib/zin/wg/header/v1.php | 13 ++++++++++---
module/common/lang/zh-cn.php | 8 ++++----
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/lib/zin/wg/header/v1.php b/lib/zin/wg/header/v1.php
index 006317571d..5891dfc465 100644
--- a/lib/zin/wg/header/v1.php
+++ b/lib/zin/wg/header/v1.php
@@ -184,20 +184,27 @@ class header extends wg
);
$langItems = array();
- foreach ($app->config->langs as $key => $value)
+ foreach($app->config->langs as $key => $value)
{
$langItems[] = array('text' => $value, 'data-value' => $key, 'url' => "javascript:selectLang(\"$key\")", 'active' => $app->cookie->lang == $key);
}
$items[] = array('text' => $lang->lang, 'icon' => 'lang', 'items' => $langItems);
+ /* Zentao desktop client menu. */
+ if(isset($config->xxserver->installed) && $config->xuanxuan->turnon)
+ {
+ $clientSubMenu = array();
+ $clientSubMenu[] = array('text' => $lang->downloadClient, 'url' => createLink('misc', 'downloadClient'), 'data-toggle' => 'modal', 'innerClass' => $modalClass);
+ $clientSubMenu[] = array('text' => $lang->clientHelp, 'url' => $lang->clientHelpLink, 'attrs' => array('data-app' => 'help'));
+ $items[] = array('text' => $lang->clientName, 'icon' => 'desktop', 'items' => $clientSubMenu);
+ }
+
$helpItems = array();
$manualUrl = ((!empty($config->isINT)) ? $config->manualUrl['int'] : $config->manualUrl['home']) . '&theme=' . $_COOKIE['theme'];
$helpItems[] = array('text' => $lang->manual, 'url' => $manualUrl, 'attrs' => array('data-app' => 'help'));
$helpItems[] = array('text' => $lang->changeLog, 'url' => createLink('misc', 'changeLog'), 'data-toggle' => 'modal', 'innerClass' => $modalClass);
$items[] = array('text' => $lang->help, 'icon' => 'help', 'items' => $helpItems);
- /* printClientLink */
-
$items[] = array('text' => $lang->aboutZenTao, 'icon' => 'about', 'url' => createLink('misc', 'about'), 'data-toggle' => 'modal', 'innerClass' => $modalClass);
$items[] = array('type' => 'html', 'className' => 'menu-item', 'html' => $lang->designedByAIUX);
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 4f99160060..286b7f8d75 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -566,11 +566,11 @@ $lang->colorPicker = new stdclass();
$lang->colorPicker->errorTip = '不是有效的颜色值';
$lang->downNotify = "下载桌面提醒";
-$lang->clientName = "客户端";
-$lang->downloadClient = "下载客户端";
+$lang->clientName = "大桌面";
+$lang->downloadClient = "下载大桌面";
$lang->downloadMobile = "下载移动端";
-$lang->clientHelp = "客户端使用说明";
-$lang->clientHelpLink = "http://www.zentao.net/book/zentaopmshelp/302.html#2";
+$lang->clientHelp = "大桌面使用说明";
+$lang->clientHelpLink = "https://www.zentao.net/book/zentaopmshelp/302.html#4";
$lang->website = "https://www.zentao.net";
$lang->suhosinInfo = "警告:数据太多,请在php.ini中修改sohusin.post.max_vars 和sohusin.request.max_vars (大于%s的数)。 保存并重新启动apache或php-fpm,否则会造成部分数据无法保存。";
From 79e80d9284c68d0cfc67c3f06fafd83a6956b3c7 Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 10:30:37 +0800
Subject: [PATCH 160/276] * mark client download page as old.
---
module/index/config.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/index/config.php b/module/index/config.php
index 42511455ee..36cbbb1ade 100644
--- a/module/index/config.php
+++ b/module/index/config.php
@@ -33,3 +33,4 @@ $config->index->oldPages[] = 'ai-miniprograms';
$config->index->oldPages[] = 'ai-prompts';
$config->index->oldPages[] = 'ai-promptview';
$config->index->oldPages[] = 'api-debug';
+$config->index->oldPages[] = 'misc-downloadclient';
From ace87ca4694e569416e2a5e78a570119e6a799a6 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 10:33:29 +0800
Subject: [PATCH 161/276] * Fix bug #46528.
---
module/todo/control.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/todo/control.php b/module/todo/control.php
index 217c6ff27d..f8ac06d10b 100755
--- a/module/todo/control.php
+++ b/module/todo/control.php
@@ -60,7 +60,7 @@ class todo extends control
$todo->id = $todoID;
$this->todoZen->afterCreate($todo, $form);
- if(!empty($todoData->objectID)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true));
+ if(!empty($todoData->objectID)) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'load' => true));
if($from == 'block')
{
From c1138471d0f8eca7ef64475d6b12dfdf5cde7c4d Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 10:34:50 +0800
Subject: [PATCH 162/276] * Fix bug #46552.
---
module/custom/css/required.ui.css | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/custom/css/required.ui.css b/module/custom/css/required.ui.css
index dcb28cfdac..1031aac645 100644
--- a/module/custom/css/required.ui.css
+++ b/module/custom/css/required.ui.css
@@ -1,2 +1,2 @@
-#requiredForm .form-row .form-group {padding-left: 8rem;}
-#requiredForm .form-row .form-label {width: 8rem;}
+#requiredForm .form-group {padding-left: 8rem;}
+#requiredForm .form-group .form-label {width: 8rem;}
From 08fde224e46a847af126e64631270fb11218642e Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 10:37:04 +0800
Subject: [PATCH 163/276] * Fix bug#46550.
---
module/execution/js/story.ui.js | 8 +++-----
module/product/js/browse.ui.js | 7 ++-----
module/story/model.php | 24 ++++++++++++++++++++++++
3 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/module/execution/js/story.ui.js b/module/execution/js/story.ui.js
index dfc0c34f96..aae8e9ba63 100644
--- a/module/execution/js/story.ui.js
+++ b/module/execution/js/story.ui.js
@@ -77,12 +77,10 @@ window.renderStoryCell = function(result, info)
if(info.col.name == 'title' && result)
{
let html = '';
+
+ if(story.parent > 0 && $.cookie.get('tab') == 'execution') html += story.parentName + ' / ';
if(typeof modulePairs[story.moduleID] != 'undefined') html += "" + modulePairs[story.moduleID] + " ";
- if(story.parent > 0)
- {
- if($.cookie.get('tab') == 'execution') html += story.parentName + ' / ';
- html += "" + childrenAB + " ";
- }
+ if(story.parent > 0) html += "" + childrenAB + " ";
if(html) result.unshift({html});
}
return result;
diff --git a/module/product/js/browse.ui.js b/module/product/js/browse.ui.js
index caa68836a5..c54c9ab14c 100644
--- a/module/product/js/browse.ui.js
+++ b/module/product/js/browse.ui.js
@@ -62,12 +62,9 @@ window.renderCell = function(result, info)
{
const story = info.row.data;
let html = '';
+ if(story.parent > 0 && $.cookie.get('tab') == 'project') html += story.parentName + ' / ';
if(typeof modulePairs[story.rawModule] != 'undefined') html += "" + modulePairs[story.rawModule] + " ";
- if(story.parent > 0)
- {
- if($.cookie.get('tab') == 'project') html += story.parentName + ' / ';
- html += "" + (storyType == 'requirement' ? 'SR' : childrenAB) + " ";
- }
+ if(story.parent > 0) html += "" + (storyType == 'requirement' ? 'SR' : childrenAB) + " ";
if(story.color) result[0].props.style = 'color: ' + story.color;
if(html) result.unshift({html});
}
diff --git a/module/story/model.php b/module/story/model.php
index 407a4f12fb..f1bba0a4ca 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -1470,6 +1470,14 @@ class storyModel extends model
*/
public function batchChangeModule(array $storyIdList, int $moduleID): array
{
+ $storyIdList = array_filter($storyIdList);
+ foreach($storyIdList as $index => $storyID)
+ {
+ /* 处理选中的子需求的ID,截取-后的子需求ID。*/
+ /* Process selected child story ID. */
+ if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
+ }
+
$now = helper::now();
$allChanges = array();
$oldStories = $this->getByList($storyIdList);
@@ -1501,6 +1509,14 @@ class storyModel extends model
*/
public function batchChangePlan(array $storyIdList, int $planID, int $oldPlanID = 0): array
{
+ $storyIdList = array_filter($storyIdList);
+ foreach($storyIdList as $index => $storyID)
+ {
+ /* 处理选中的子需求的ID,截取-后的子需求ID。*/
+ /* Process selected child story ID. */
+ if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
+ }
+
/* Prepare data. */
$now = helper::now();
$oldStories = $this->getByList($storyIdList);
@@ -1663,6 +1679,14 @@ class storyModel extends model
*/
public function batchChangeStage(array $storyIdList, string $stage): string|null
{
+ $storyIdList = array_filter($storyIdList);
+ foreach($storyIdList as $index => $storyID)
+ {
+ /* 处理选中的子需求的ID,截取-后的子需求ID。*/
+ /* Process selected child story ID. */
+ if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
+ }
+
$now = helper::now();
$account = $this->app->user->account;
$oldStories = $this->getByList($storyIdList);
From 092e8043c98a3e6a6eb315368367f109693c3f1f Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 10:43:34 +0800
Subject: [PATCH 164/276] * Fix bug #46520.
---
lib/zin/wg/docmenu/css/v1.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/zin/wg/docmenu/css/v1.css b/lib/zin/wg/docmenu/css/v1.css
index c6b45914b1..197a039177 100644
--- a/lib/zin/wg/docmenu/css/v1.css
+++ b/lib/zin/wg/docmenu/css/v1.css
@@ -34,4 +34,4 @@
.has-module-menu-header #mainMenu {padding-left: 215px;}
.has-module-menu-header.is-sidebar-left-collapsed #mainMenu {padding-left: 0;}
-#mainContent .sidebar {min-width: 200px !important;}
+#mainContent > .sidebar:not(.is-collapsed) {min-width: 200px !important;}
From 7cc6df4c4bf25056fa81f8597064e743f2278d19 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 10:52:30 +0800
Subject: [PATCH 165/276] * Fix bug #46564.
---
module/custom/model.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/module/custom/model.php b/module/custom/model.php
index 3393899144..c357dbf068 100644
--- a/module/custom/model.php
+++ b/module/custom/model.php
@@ -193,7 +193,11 @@ class customModel extends model
ksort($menu, SORT_NUMERIC);
/* Set divider in main && module menu. */
- if(!isset($lang->{$tab}->menuOrder)) $lang->{$tab}->menuOrder = array();
+ if(!isset($lang->{$tab}->menuOrder))
+ {
+ if(!isset($lang->{$tab})) $lang->{$tab} = new stdclass();
+ $lang->{$tab}->menuOrder = array();
+ }
ksort($lang->{$tab}->menuOrder, SORT_NUMERIC);
$group = 0;
From c062171177cfcf7715bd8bfd29b9b64aa5799454 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 11:02:12 +0800
Subject: [PATCH 166/276] * Fix bug #46570.
---
module/execution/ui/grouptask.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/execution/ui/grouptask.html.php b/module/execution/ui/grouptask.html.php
index e8d387a364..4b1d1a1dba 100644
--- a/module/execution/ui/grouptask.html.php
+++ b/module/execution/ui/grouptask.html.php
@@ -120,7 +120,7 @@ toolbar
set::items($importItems),
set::placement('bottom-end')
) : null,
- $canCreate ? item(set($createItem + array('class' => 'btn primary', 'icon' => 'plus'))) : null
+ $canCreate && isset($createItem) ? item(set($createItem + array('class' => 'btn primary', 'icon' => 'plus'))) : null
);
$groupList = array();
From da49ef5ee24741c46cdb5d821511bf56cd65b087 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 11:02:20 +0800
Subject: [PATCH 167/276] * Can't create a task if the execution can't be
modified.
---
module/execution/ui/tree.html.php | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/module/execution/ui/tree.html.php b/module/execution/ui/tree.html.php
index 824aaab0ab..b9488a903c 100644
--- a/module/execution/ui/tree.html.php
+++ b/module/execution/ui/tree.html.php
@@ -29,6 +29,7 @@ featureBar
if(!isset($browseType)) $browseType = 'all';
if(!isset($orderBy)) $orderBy = '';
+$canCreateTask = false;
$canImportTask = hasPriv('task', 'importTask');
$canImportBug = hasPriv('task', 'importBug');
if(common::canModify('execution', $execution))
@@ -38,6 +39,7 @@ if(common::canModify('execution', $execution))
{
$importBugItem = array('text' => $lang->execution->importBug, 'url' => $this->createLink('execution', 'importBug', "execution={$execution->id}"), 'className' => 'importBug');
}
+ $canCreateTask = hasPriv('task', 'create');
}
$importItems = !empty($importTaskItem) && empty($importBugItem) ? array($importTaskItem) : array();
$importItems = empty($importTaskItem) && !empty($importBugItem) ? array($importBugItem) : $importItems;
@@ -69,7 +71,7 @@ toolbar
'url' => createLink('task', 'export', "execution={$executionID}&orderBy={$orderBy}&type=tree"),
'data-toggle' => 'modal'
))) : null,
- hasPriv('task', 'create') ? item(set(array
+ $canCreateTask ? item(set(array
(
'icon' => 'plus',
'text' => $lang->task->create,
@@ -90,7 +92,7 @@ if(empty($tree))
setClass('text-gray'),
$lang->task->noTask
),
- common::hasPriv('task', 'create', $checkObject) ? btn
+ $canCreateTask ? btn
(
set::text($lang->task->create),
set::icon('plus'),
From 200809ec7dde049f2726c89215637264d457b184 Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 11:05:18 +0800
Subject: [PATCH 168/276] * Optimized code.
---
module/story/control.php | 33 ++++++++-------------------------
module/story/model.php | 40 ----------------------------------------
module/story/zen.php | 20 ++++++++++++++++++++
3 files changed, 28 insertions(+), 65 deletions(-)
diff --git a/module/story/control.php b/module/story/control.php
index c867a1c21d..cff7383f93 100755
--- a/module/story/control.php
+++ b/module/story/control.php
@@ -641,8 +641,7 @@ class story extends control
{
if(!$this->post->storyIdList) return $this->send(array('result' => 'success', 'load' => $this->session->storyList));
- $storyIdList = $this->post->storyIdList;
- $storyIdList = array_unique($storyIdList);
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$message = $this->story->batchReview($storyIdList, $result, $reason);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('score')->create('ajax', 'batchOther');
@@ -861,8 +860,7 @@ class story extends control
public function batchClose(int $productID = 0, int $executionID = 0, string $storyType = 'story', string $from = '')
{
if(!$this->post->storyIdList) return $this->send(array('result' => 'success', 'load' => $this->session->storyList));
- $storyIdList = $this->post->storyIdList;
- $storyIdList = array_unique($storyIdList);
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$this->story->replaceURLang($storyType);
@@ -936,7 +934,7 @@ class story extends control
{
if(empty($_POST['storyIdList'])) return $this->send(array('result' => 'success', 'load' => true));
- $storyIdList = array_unique($this->post->storyIdList);
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$allChanges = $this->story->batchChangeModule($storyIdList, $moduleID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
@@ -1018,7 +1016,7 @@ class story extends control
{
if(empty($_POST['storyIdList'])) return $this->send(array('result' => 'success', 'load' => true));
- $storyIdList = array_unique($this->post->storyIdList);
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$allChanges = $this->story->batchChangePlan($storyIdList, $planID, $oldPlanID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
@@ -1047,14 +1045,7 @@ class story extends control
if(!empty($_POST['storyIdList'])) $storyIdList = $this->post->storyIdList;
if(is_string($storyIdList)) $storyIdList = array_filter(explode(',', $storyIdList));
- $storyIdList = array_unique($storyIdList);
-
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
+ $storyIdList = $this->storyZen->convertChildID($storyIdList);
$plans = $this->loadModel('productplan')->getPlansByStories($storyIdList);
if(empty($confirm))
@@ -1115,7 +1106,7 @@ class story extends control
{
if(empty($_POST['storyIdList'])) return $this->send(array('result' => 'success', 'load' => true));
- $storyIdList = array_unique($this->post->storyIdList);
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$message = $this->story->batchChangeStage($storyIdList, $stage);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('score')->create('ajax', 'batchOther');
@@ -1176,17 +1167,9 @@ class story extends control
if(empty($_POST['storyIdList'])) return $this->send(array('result' => 'success', 'load' => true));
if(empty($assignedTo)) $assignedTo = $this->post->assignedTo;
- $storyIdList = array_unique($this->post->storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
+ $storyIdList = $this->storyZen->convertChildID($this->post->storyIdList);
$oldStories = $this->story->getByList($storyIdList);
-
- $allChanges = $this->story->batchAssignTo($storyIdList, $assignedTo);
+ $allChanges = $this->story->batchAssignTo($storyIdList, $assignedTo);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$ignoreStories = array();
diff --git a/module/story/model.php b/module/story/model.php
index f1bba0a4ca..299b6da318 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -115,14 +115,6 @@ class storyModel extends model
{
if(empty($storyIdList)) return array();
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
return $this->dao->select('t1.*, t2.spec, t2.verify, t3.name as productTitle, t3.deleted as productDeleted')
->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story')
@@ -1113,14 +1105,6 @@ class storyModel extends model
$this->loadModel('action');
$this->app->loadLang('product');
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
$oldStories = $this->getByList($storyIdList);
$hasResult = $this->dao->select('story,version,result')->from(TABLE_STORYREVIEW)->where('story')->in($storyIdList)->andWhere('reviewer')->eq($account)->andWhere('result')->ne('')->orderBy('version')->fetchAll('story');
$reviewerList = $this->dao->select('story,reviewer,result,version')->from(TABLE_STORYREVIEW)->where('story')->in($storyIdList)->orderBy('version')->fetchGroup('story', 'reviewer');
@@ -1470,14 +1454,6 @@ class storyModel extends model
*/
public function batchChangeModule(array $storyIdList, int $moduleID): array
{
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
$now = helper::now();
$allChanges = array();
$oldStories = $this->getByList($storyIdList);
@@ -1509,14 +1485,6 @@ class storyModel extends model
*/
public function batchChangePlan(array $storyIdList, int $planID, int $oldPlanID = 0): array
{
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
/* Prepare data. */
$now = helper::now();
$oldStories = $this->getByList($storyIdList);
@@ -1679,14 +1647,6 @@ class storyModel extends model
*/
public function batchChangeStage(array $storyIdList, string $stage): string|null
{
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
$now = helper::now();
$account = $this->app->user->account;
$oldStories = $this->getByList($storyIdList);
diff --git a/module/story/zen.php b/module/story/zen.php
index 68c16ec36d..65731cd7dc 100644
--- a/module/story/zen.php
+++ b/module/story/zen.php
@@ -1938,4 +1938,24 @@ class storyZen extends story
}
if(!$projectInfo->multiple) $this->view->hiddenPlan = true;
}
+
+ /**
+ * Convert child ID.
+ *
+ * @param array $storyIdList
+ * @access protected
+ * @return array
+ */
+ protected function convertChildID(array $storyIdList)
+ {
+ $storyIdList = array_unique($storyIdList);
+ $storyIdList = array_filter($storyIdList);
+ foreach($storyIdList as $index => $storyID)
+ {
+ /* 处理选中的子需求的ID,截取-后的子需求ID。*/
+ /* Process selected child story ID. */
+ if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
+ }
+ return $storyIdList;
+ }
}
From 8e8e47c1b76cf96270c159ac6ecf6d4bf794ab96 Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 11:07:43 +0800
Subject: [PATCH 169/276] * fix client download.
---
module/index/config.php | 1 -
module/misc/js/downloadclient.ui.js | 39 ++++----
module/misc/ui/downloadclient.html.php | 2 +-
module/misc/view/downloadclient.html.php | 117 -----------------------
4 files changed, 21 insertions(+), 138 deletions(-)
delete mode 100644 module/misc/view/downloadclient.html.php
diff --git a/module/index/config.php b/module/index/config.php
index 36cbbb1ade..42511455ee 100644
--- a/module/index/config.php
+++ b/module/index/config.php
@@ -33,4 +33,3 @@ $config->index->oldPages[] = 'ai-miniprograms';
$config->index->oldPages[] = 'ai-prompts';
$config->index->oldPages[] = 'ai-promptview';
$config->index->oldPages[] = 'api-debug';
-$config->index->oldPages[] = 'misc-downloadclient';
diff --git a/module/misc/js/downloadclient.ui.js b/module/misc/js/downloadclient.ui.js
index 970113c3de..b0fa688fd4 100644
--- a/module/misc/js/downloadclient.ui.js
+++ b/module/misc/js/downloadclient.ui.js
@@ -1,32 +1,33 @@
-window.clickSubmit = function()
+window.clickSubmit = () =>
{
const os = $('#os').zui('picker').$.state.value;
loadPage({url : $.createLink('misc', 'downloadClient', "action=getPackage&os=" + os), selector : '#downloadClient', success: getClient});
-}
+};
function getClient()
{
const os = $('#os').val();
- var link = $.createLink('misc', 'ajaxGetClientPackage', 'os=' + os);
+ const link = $.createLink('misc', 'ajaxGetClientPackage', 'os=' + os);
progress = setInterval("showPackageSize()", 1000);
- $.getJSON(link, function(response)
+ $.getJSON(link, res =>
{
- if(response.result == 'success')
+ if(res.result == 'success')
{
clearInterval(progress);
$('#downloading').addClass('hidden');
$('#downloaded').removeClass('hidden');
$('#setting').removeClass('hidden');
- var link = $.createLink('misc', 'ajaxSetClientConfig', 'os=' + os);
- $.getJSON(link, function(response)
+ const link = $.createLink('misc', 'ajaxSetClientConfig', 'os=' + os);
+ $.getJSON(link, function(res)
{
- if(response.result == 'success')
+ console.log(res);
+ if(res.result == 'success')
{
$('#setted').removeClass('hidden');
- var link = $.createLink('misc', 'downloadClient', "action=downloadPackage" + '&os=' + os);
- $.closeModal();
- location.href = link;
+ const link = $.createLink('misc', 'downloadClient', "action=downloadPackage" + '&os=' + os);
+ zui.Modal.hide();
+ open(link, '_blank');
}
else
{
@@ -34,7 +35,7 @@ function getClient()
$('#configError').removeClass('hidden');
$('#hasError').removeClass('hidden');
$('#clearTmp').removeClass('hidden');
- $('#hasError').text(response.message);
+ $('#hasError').text(res.message);
}
});
}
@@ -45,24 +46,24 @@ function getClient()
$('#downloadError').removeClass('hidden');
$('#hasError').removeClass('hidden');
$('#clearTmp').removeClass('hidden');
- $('#hasError').text(response.message);
+ $('#hasError').text(res.message);
}
});
}
-window.showPackageSize = function()
+window.showPackageSize = () =>
{
const os = $('#os').val();
- var link = $.createLink('misc', 'ajaxGetPackageSize', 'os=' + os);
- $.getJSON(link, function(response)
+ const link = $.createLink('misc', 'ajaxGetPackageSize', 'os=' + os);
+ $.getJSON(link, res =>
{
- if(response.result == 'success')
+ if(res.result == 'success')
{
- $('#downloading span').text(response.size);
+ $('#downloading span').text(res.size);
}
else
{
$('#downloading span').text(0);
}
});
-}
+};
diff --git a/module/misc/ui/downloadclient.html.php b/module/misc/ui/downloadclient.html.php
index 3239bf565d..9b86e6ba07 100644
--- a/module/misc/ui/downloadclient.html.php
+++ b/module/misc/ui/downloadclient.html.php
@@ -29,7 +29,7 @@ formPanel
set::id('os'),
set::name('os'),
set::items($lang->misc->client->osList),
- set::value($config->xuanxuan->version)
+ set::value($os)
)
) : null,
$action == 'selectPackage' ? div(set::className('center'), btn(set::className('primary btn-wide'), set('data-on', 'click'), set('data-call', 'clickSubmit'), $lang->save)) : null,
diff --git a/module/misc/view/downloadclient.html.php b/module/misc/view/downloadclient.html.php
deleted file mode 100644
index 25c47eda86..0000000000
--- a/module/misc/view/downloadclient.html.php
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
createLink('misc', 'downloadClient', "action=check"), $lang->refresh, '', "class='btn btn-primary btn-wide'");?>
-
-
-
-
-
-
-
-
-
-
- misc->client->downloading;?>0 M
- misc->client->downloaded;?>
- misc->client->setting;?>
- misc->client->setted;?>
- misc->client->errorInfo->configError;?>
- misc->client->errorInfo->downloadError;?>
-
-
-
createLink('misc', 'downloadClient', "action=clearTmpPackage"), $lang->confirm, '', "class='btn btn-primary btn-wide' data-dismiss='modal'");?>
-
-
-
-
-
From 121edfbbd4c407c72409ef3cb29e7dae39429024 Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 11:10:08 +0800
Subject: [PATCH 170/276] * use latest version of xuan.
---
ci.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ci.json b/ci.json
index 6a735b212e..0fe70e4b0c 100644
--- a/ci.json
+++ b/ci.json
@@ -2,7 +2,7 @@
"pkg": {
"xuanxuan": {
"gitVersion": "f501e962d26241befbe0b18cf770e41e0f49d7e4",
- "version": "8.0"
+ "version": "8.0.2"
},
"zentaoext": {
"gitVersion": "master",
From 38cf038ed3a891f2caf4a4aabbca9415406779a7 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 11:16:07 +0800
Subject: [PATCH 171/276] * Fix bug #46574.
---
module/story/model.php | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/module/story/model.php b/module/story/model.php
index 299b6da318..636567b175 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -115,6 +115,15 @@ class storyModel extends model
{
if(empty($storyIdList)) return array();
+ if(is_string($storyIdList)) $storyIdList = explode(',', $storyIdList);
+ $storyIdList = array_filter($storyIdList);
+ foreach($storyIdList as $index => $storyID)
+ {
+ /* 处理选中的子需求的ID,截取-后的子需求ID。*/
+ /* Process selected child story ID. */
+ if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
+ }
+
return $this->dao->select('t1.*, t2.spec, t2.verify, t3.name as productTitle, t3.deleted as productDeleted')
->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story')
From 795d63e5e864d6a034adf880cd0ad0c992f5601d Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 11:21:23 +0800
Subject: [PATCH 172/276] * Fix bug #46574.
---
module/story/model.php | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/module/story/model.php b/module/story/model.php
index 636567b175..299b6da318 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -115,15 +115,6 @@ class storyModel extends model
{
if(empty($storyIdList)) return array();
- if(is_string($storyIdList)) $storyIdList = explode(',', $storyIdList);
- $storyIdList = array_filter($storyIdList);
- foreach($storyIdList as $index => $storyID)
- {
- /* 处理选中的子需求的ID,截取-后的子需求ID。*/
- /* Process selected child story ID. */
- if(strpos((string)$storyID, '-') !== false) $storyIdList[$index] = substr($storyID, strpos($storyID, '-') + 1);
- }
-
return $this->dao->select('t1.*, t2.spec, t2.verify, t3.name as productTitle, t3.deleted as productDeleted')
->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story')
From de16b1cc68bdbd0860a382f081bdda07d442eca3 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 11:26:16 +0800
Subject: [PATCH 173/276] * Fix bug #46492.
---
module/testcase/model.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/testcase/model.php b/module/testcase/model.php
index d9fa0678b8..702f2e2794 100755
--- a/module/testcase/model.php
+++ b/module/testcase/model.php
@@ -1852,6 +1852,7 @@ class testcaseModel extends model
foreach($scenes as $id => $scene)
{
$scene = $this->buildSceneBaseOnCase($scene, $fieldTypes, zget($cases, $id, array()));
+ $scene->scene = $scene->parent;
if(isset($scenes[$scene->parent]))
{
From d141ae81d687fb517b94131c52c79480b410df4e Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 11:28:26 +0800
Subject: [PATCH 174/276] * Fix bug #46576.
---
framework/base/helper.class.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/framework/base/helper.class.php b/framework/base/helper.class.php
index 31fd2a6eaf..4b13541229 100644
--- a/framework/base/helper.class.php
+++ b/framework/base/helper.class.php
@@ -170,7 +170,7 @@ class baseHelper
$sign = !str_contains($link, '?') ? "?" : "&";
$appendString = '';
- if($onlyBody or self::inOnlyBodyMode()) $appendString = $sign . "onlybody=yes";
+ if($onlyBody) $appendString = $sign . "onlybody=yes";
if(self::isWithTID() and !str_contains($link, 'tid=')) $appendString .= empty($appendString) ? "{$sign}tid={$_GET['tid']}" : "&tid={$_GET['tid']}";
return $link . $appendString;
}
From a938a8dc55244101ade0a89dd16c17eee2e98ffc Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 13:13:45 +0800
Subject: [PATCH 175/276] * Fix bug #46492.
---
module/testcase/js/browse.ui.js | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/module/testcase/js/browse.ui.js b/module/testcase/js/browse.ui.js
index b36a17e19d..851831e072 100644
--- a/module/testcase/js/browse.ui.js
+++ b/module/testcase/js/browse.ui.js
@@ -81,6 +81,10 @@ window.onRenderCell = function(result, {row, col})
if(module) result.unshift({html: '' + module + ' '}); // 添加模块标签
}
}
+ if(col.name == 'pri' && row.data.isScene)
+ {
+ result.shift(); // 移除场景优先级
+ }
}
if(row.data.lastEditedDate == '0000-00-00 00:00:00') row.data.lastEditedDate = '';
From 1b57c81b4e57cc5b4d74d9dfb2302a0cd14e3b1b Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Tue, 5 Mar 2024 13:24:39 +0800
Subject: [PATCH 176/276] * Fix execution kanban bug of lite mode. bug #46518.
---
.../lite/execution/ext/control/kanban.php | 62 -------------------
module/execution/control.php | 1 +
module/execution/ui/kanban.html.php | 28 ++++++---
3 files changed, 19 insertions(+), 72 deletions(-)
diff --git a/extension/lite/execution/ext/control/kanban.php b/extension/lite/execution/ext/control/kanban.php
index 3ebbfaf27a..ce27e4c169 100644
--- a/extension/lite/execution/ext/control/kanban.php
+++ b/extension/lite/execution/ext/control/kanban.php
@@ -10,68 +10,6 @@ class myExecution extends execution
$currentMethod = $this->app->methodName;
$execution = $this->execution->getById($executionID);
$this->loadModel('project')->setMenu($execution->project);
- $this->lang->kanbanProject->menu->execution['subMenu'] = new stdClass();
-
- $this->session->set('kanbanview', $currentMethod);
- setcookie('kanbanview', $currentMethod, $this->config->cookieLife, $this->config->webRoot, '', false, true);
-
- /* change subMenu to sub select menu */
- $TRActions = $this->execution->getTRActions($currentMethod);
-
- $TRActions .= "";
- $TRActions .= html::a('javascript:;', $this->lang->execution->kanbanGroup[$groupBy] . " ", '', "data-toggle='dropdown' data- class='btn btn-link'");
- $TRActions .= "
";
- $TRActions .= html::a('javascript:fullScreen()', " " . $this->lang->kanban->fullScreen, '', "class='btn btn-link'");
-
- $printSettingBtn = (common::hasPriv('kanban', 'createRegion') or (common::hasPriv('kanban', 'setLaneHeight')) or common::hasPriv('execution', 'edit') or common::hasPriv('execution', 'close') or common::hasPriv('execution', 'delete') or !empty($executionActions));
- $executionActions = array();
- foreach($this->config->execution->statusActions as $action)
- {
- if($this->execution->isClickable($execution, $action)) $executionActions[] = $action;
- }
- if($this->execution->isClickable($execution, 'delete')) $executionActions[] = 'delete';
-
- if($printSettingBtn)
- {
- $TRActions .= "";
- $TRActions .= html::a('javascript:;', " " . $this->lang->kanban->setting, '', "data-toggle='dropdown' data- class='btn btn-link'");
- $TRActions .= "
";
- }
-
- $canCreateTask = common::hasPriv('task', 'create');
- $canBatchCreateTask = common::hasPriv('task', 'batchCreate');
- if($canCreateTask or $canBatchCreateTask)
- {
- $TRActions .= "";
- $TRActions .= " {$this->lang->create} ";
- $TRActions .= "
";
- }
- $this->lang->TRActions = $TRActions;
$browseType = 'task';
parent::kanban($executionID, $browseType, $orderBy, $groupBy);
diff --git a/module/execution/control.php b/module/execution/control.php
index 8076c61b25..4b78fb32bf 100644
--- a/module/execution/control.php
+++ b/module/execution/control.php
@@ -1671,6 +1671,7 @@ class execution extends control
$this->view->title = $this->lang->kanban->view;
$this->view->execution = $execution;
+ $this->view->executionList = $this->loadModel('project')->getExecutionList(array($execution->project));
$this->view->executionID = $executionID;
$this->view->kanbanList = $this->loadModel('kanban')->getRDKanban($executionID, $browseType, $orderBy, 0, $groupBy);
$this->view->browseType = $browseType;
diff --git a/module/execution/ui/kanban.html.php b/module/execution/ui/kanban.html.php
index 81fc79cc0f..4dc46b9d5e 100644
--- a/module/execution/ui/kanban.html.php
+++ b/module/execution/ui/kanban.html.php
@@ -54,17 +54,17 @@ if($this->execution->isClickable($execution, 'delete')) $operationMenu[] = arr
$canCreateTask = common::hasPriv('task', 'create') && common::canModify('execution', $execution);
$canBatchCreateTask = common::hasPriv('task', 'batchCreate') && common::canModify('execution', $execution);
-$canImportTask = common::hasPriv('execution', 'importTask') && $execution->multiple && common::canModify('execution', $execution);
+$canImportTask = common::hasPriv('execution', 'importTask') && $execution->multiple && common::canModify('execution', $execution) && $this->config->vision != 'lite';
-$canCreateBug = $features['qa'] && common::hasPriv('bug', 'create') && common::canModify('execution', $execution) && $productID;
-$canBatchCreateBug = $features['qa'] && common::hasPriv('bug', 'batchCreate') && $execution->multiple && common::canModify('execution', $execution) && $productID;
-$canImportBug = $features['qa'] && common::hasPriv('execution', 'importBug') && $execution->multiple && common::canModify('execution', $execution) && $productID;
+$canCreateBug = $features['qa'] && common::hasPriv('bug', 'create') && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
+$canBatchCreateBug = $features['qa'] && common::hasPriv('bug', 'batchCreate') && $execution->multiple && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
+$canImportBug = $features['qa'] && common::hasPriv('execution', 'importBug') && $execution->multiple && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
$hasBugButton = $features['qa'] && ($canCreateBug || $canBatchCreateBug);
-$canCreateStory = $features['story'] && common::hasPriv('story', 'create') && common::canModify('execution', $execution) && $productID;
-$canBatchCreateStory = $features['story'] && common::hasPriv('story', 'batchCreate') && common::canModify('execution', $execution) && $productID;
-$canLinkStory = $features['story'] && common::hasPriv('execution', 'linkStory') && !empty($execution->hasProduct) && common::canModify('execution', $execution) && $productID;
-$canLinkStoryByPlan = $features['story'] && common::hasPriv('execution', 'importplanstories') && !empty($project->hasProduct) && common::canModify('execution', $execution) && $productID;
+$canCreateStory = $features['story'] && common::hasPriv('story', 'create') && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
+$canBatchCreateStory = $features['story'] && common::hasPriv('story', 'batchCreate') && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
+$canLinkStory = $features['story'] && common::hasPriv('execution', 'linkStory') && !empty($execution->hasProduct) && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
+$canLinkStoryByPlan = $features['story'] && common::hasPriv('execution', 'importplanstories') && !empty($project->hasProduct) && common::canModify('execution', $execution) && $productID && $this->config->vision != 'lite';
$hasStoryButton = $features['story'] && ($canCreateStory || $canBatchCreateStory || $canLinkStory || $canLinkStoryByPlan);
$hasTaskButton = $canCreateTask || $canBatchCreateTask || $canImportBug;
@@ -156,9 +156,17 @@ jsVar('priv',
if(!$features['story']) unset($lang->kanban->type['story']);
if(!$features['qa']) unset($lang->kanban->type['bug']);
+
+$executionItems = array();
+foreach($executionList as $childExecution) $executionItems[] = array('text' => $childExecution->name, 'url' => createLink('execution', 'kanban', "kanbanID={$childExecution->id}"));
featureBar
(
- ($features['story'] or $features['qa']) ? inputControl
+ $this->config->vision == 'lite' ? dropdown
+ (
+ btn(setClass('dropdown-btn'), $execution->name),
+ set::items($executionItems),
+ ) : null,
+ (($features['story'] or $features['qa']) && $this->config->vision != 'lite') ? inputControl
(
setClass('c-type'),
picker
@@ -171,7 +179,7 @@ featureBar
set::onchange('changeBrowseType()'),
)
) : null,
- $browseType != 'all' ? inputControl
+ $browseType != 'all' && $this->config->vision != 'lite' ? inputControl
(
setClass('c-group ml-5'),
picker
From bf3db6586d410803c753b6b0dbb7d0103ae61666 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 13:26:08 +0800
Subject: [PATCH 177/276] * Adjust testcase status for story changed.
---
module/testcase/ui/browse.html.php | 2 ++
module/testcase/ui/view.html.php | 16 +++++++++++-----
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/module/testcase/ui/browse.html.php b/module/testcase/ui/browse.html.php
index 58511a9c9c..e6dd301b6e 100644
--- a/module/testcase/ui/browse.html.php
+++ b/module/testcase/ui/browse.html.php
@@ -109,6 +109,7 @@ if(isset($cols['title'])) $cols['title']['nestedToggle'] = $topSceneCount > 0;
if(isset($cols['branch'])) $cols['branch']['map'] = $branchTagOption;
if(isset($cols['story'])) $cols['story']['map'] = $stories;
if(isset($cols['scene'])) $cols['scene']['map'] = $iscenes;
+$cols['status']['statusMap']['changed'] = $lang->story->changed;
foreach($cases as $case)
{
@@ -118,6 +119,7 @@ foreach($cases as $case)
$cols['actions']['menu'] = $config->$actionType->menu;
if($actionType == 'testcase' && !$this->config->testcase->needReview) unset($cols['actions']['menu'][1][0]);
if($actionType == 'scene') $case->bugs = $case->results = $case->stepNumber = $case->version = '';
+ if($case->needconfirm) $case->status = 'changed';
$case->browseType = $browseType;
initTableData(array($case), $cols, $this->testcase);
diff --git a/module/testcase/ui/view.html.php b/module/testcase/ui/view.html.php
index 71b3a5444a..f95b407997 100644
--- a/module/testcase/ui/view.html.php
+++ b/module/testcase/ui/view.html.php
@@ -192,11 +192,17 @@ else
if($case->story && $case->storyStatus == 'active' && $case->latestStoryVersion > $case->storyVersion)
{
$confirmStatusChange = span
- (
- setClass('warning'),
- $lang->story->changed,
- common::hasPriv('testcase', 'confirmStoryChange', $case) ? a(set::href($this->createLink('testcase', 'confirmStoryChange', "caseID={$case->id}")), setData('app', $app->tab), $lang->confirm) : ''
- );
+ (
+ '(',
+ $lang->story->changed,
+ common::hasPriv('testcase', 'confirmStoryChange', $case) ? a(
+ set::href($this->createLink('testcase', 'confirmStoryChange', "caseID={$case->id}")),
+ setData('app', $app->tab),
+ setClass('mx-1'),
+ $lang->confirm
+ ) : '',
+ ')'
+ );
}
$storyItem = item
(
From cf5410a615dc265905c8224d5bcf6667625a0717 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 13:28:01 +0800
Subject: [PATCH 178/276] * Adjust testcase status for story changed.
---
module/testcase/ui/view.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/testcase/ui/view.html.php b/module/testcase/ui/view.html.php
index f95b407997..c0f6a1eee8 100644
--- a/module/testcase/ui/view.html.php
+++ b/module/testcase/ui/view.html.php
@@ -198,7 +198,7 @@ else
common::hasPriv('testcase', 'confirmStoryChange', $case) ? a(
set::href($this->createLink('testcase', 'confirmStoryChange', "caseID={$case->id}")),
setData('app', $app->tab),
- setClass('mx-1'),
+ setClass('mx-1 px-1 primary-pale'),
$lang->confirm
) : '',
')'
From 43da27e24e26d5abeb1605caca18bdb988d26814 Mon Sep 17 00:00:00 2001
From: xieqiyu
Date: Tue, 5 Mar 2024 13:27:45 +0800
Subject: [PATCH 179/276] * Fix bug#46506.
---
extension/lite/story/ext/ui/create.html.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/extension/lite/story/ext/ui/create.html.php b/extension/lite/story/ext/ui/create.html.php
index 6939d320bd..9a28448a98 100644
--- a/extension/lite/story/ext/ui/create.html.php
+++ b/extension/lite/story/ext/ui/create.html.php
@@ -45,6 +45,7 @@ formPanel
(
set::width('1/2'),
set::label($lang->story->module),
+ set::required(strpos($config->story->create->requiredFields, 'module') !== false),
modulePicker
(
set::required(true),
From 67632230186798798112b7c513b6b9af795cea00 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 13:34:15 +0800
Subject: [PATCH 180/276] * Fix bug #46568.
---
module/task/config/dtable.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/task/config/dtable.php b/module/task/config/dtable.php
index ca7bc57a22..79a3b23cf7 100644
--- a/module/task/config/dtable.php
+++ b/module/task/config/dtable.php
@@ -299,7 +299,7 @@ $config->task->dtable->importTask->fieldList['deadline']['type'] = 'date';
$config->task->dtable->importTask->fieldList['deadline']['sortType'] = true;
$config->task->dtable->importTask->fieldList['deadline']['group'] = 2;
-$config->task->dtable->importTask->fieldList['execution']['title'] = $lang->task->stage;
+$config->task->dtable->importTask->fieldList['execution']['title'] = $lang->task->execution;
$config->task->dtable->importTask->fieldList['execution']['name'] = 'execution';
$config->task->dtable->importTask->fieldList['execution']['type'] = 'desc';
$config->task->dtable->importTask->fieldList['execution']['sortType'] = false;
From 4e7a458269851f9d4e228acf5747ac0796aef607 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 13:40:12 +0800
Subject: [PATCH 181/276] * Don't set status map if there is no status column,
and use empty to check the needconfirm of case.
---
module/testcase/ui/browse.html.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/testcase/ui/browse.html.php b/module/testcase/ui/browse.html.php
index e6dd301b6e..4f1ba56a77 100644
--- a/module/testcase/ui/browse.html.php
+++ b/module/testcase/ui/browse.html.php
@@ -109,7 +109,7 @@ if(isset($cols['title'])) $cols['title']['nestedToggle'] = $topSceneCount > 0;
if(isset($cols['branch'])) $cols['branch']['map'] = $branchTagOption;
if(isset($cols['story'])) $cols['story']['map'] = $stories;
if(isset($cols['scene'])) $cols['scene']['map'] = $iscenes;
-$cols['status']['statusMap']['changed'] = $lang->story->changed;
+if(isset($cols['status'])) $cols['status']['statusMap']['changed'] = $lang->story->changed;
foreach($cases as $case)
{
@@ -119,7 +119,7 @@ foreach($cases as $case)
$cols['actions']['menu'] = $config->$actionType->menu;
if($actionType == 'testcase' && !$this->config->testcase->needReview) unset($cols['actions']['menu'][1][0]);
if($actionType == 'scene') $case->bugs = $case->results = $case->stepNumber = $case->version = '';
- if($case->needconfirm) $case->status = 'changed';
+ if(!empty($case->needconfirm)) $case->status = 'changed';
$case->browseType = $browseType;
initTableData(array($case), $cols, $this->testcase);
From 4768a8ef7c0f9f958901d110bd0db810aad40ed2 Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Tue, 5 Mar 2024 13:43:06 +0800
Subject: [PATCH 182/276] * Fix print kanban css. bug #46516.
---
module/execution/ui/preview.html.php | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/module/execution/ui/preview.html.php b/module/execution/ui/preview.html.php
index 80212980d2..0df0f91aad 100644
--- a/module/execution/ui/preview.html.php
+++ b/module/execution/ui/preview.html.php
@@ -48,6 +48,7 @@ body {margin: 0pt}
.board-footer.story {bottom: 0;}
.board-footer.task {bottom: 0;}
.board-footer p{height: 14px; padding:0px 3px; margin-bottom:2px;}
+.checkbox-primary>label, .radio-primary>label {height:18px;}
+ bug->statusList['']);?>
bug->assignTo . ':'; echo empty($content->assignedTo) ? '' : $realnames[$content->assignedTo]->realname;?>
printKanban->taskStatus . ':' . html::checkbox("bug$content->id", $lang->bug->statusList, $content->status);?>
+ task->statusList['']);?>
task->assign . ':'; echo empty($content->assignedTo) ? '' : $realnames[$content->assignedTo]->realname;?>
- printKanban->taskStatus . ':' . html::checkbox("task$content->id", $lang->task->statusList,$content->status);?>
+ printKanban->taskStatus . ':' . html::checkbox("task$content->id", $lang->task->statusList, $content->status);?>
task->date?>
From 28ee0fc338d1560525ca486d2b158d1bd3d1a0c8 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 13:46:34 +0800
Subject: [PATCH 183/276] * Fix bug #46579.
---
module/my/ui/profile.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/my/ui/profile.html.php b/module/my/ui/profile.html.php
index 05711ef6d1..6dc3e86e15 100644
--- a/module/my/ui/profile.html.php
+++ b/module/my/ui/profile.html.php
@@ -80,7 +80,7 @@ div
(
set::className('py-2'),
$getItems(array($lang->user->realname => $user->realname, $lang->user->gender => zget($lang->user->genderList, $user->gender))),
- $getItems(array($lang->user->account => $user->account, $lang->user->email => $user->email ? a(set::href("mailto:{$user->email}"), $user->email) : '')),
+ $getItems(array($lang->user->account => $user->account, $lang->user->email => $user->email ? a(set::href("mailto:{$user->email}"), $user->email, set::target('_self')) : '')),
$getItems(array($lang->user->dept => html($deptName), $lang->user->role => zget($lang->user->roleList, $user->role, ''))),
$getItems(array($lang->user->abbr->join => formatTime($user->join), $lang->user->priv => trim($groupName)))
),
From 96301bd40d61a39bee063646098db08ccafdf2d6 Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Tue, 5 Mar 2024 13:58:46 +0800
Subject: [PATCH 184/276] * Fix delete project kanban locate bug. bug #46515.
---
module/execution/control.php | 7 ++++++-
module/project/js/common.ui.js | 17 +++++++++++++++++
module/project/js/execution.ui.js | 17 -----------------
module/project/ui/index.html.php | 5 +++--
4 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/module/execution/control.php b/module/execution/control.php
index 4b78fb32bf..e90594db66 100644
--- a/module/execution/control.php
+++ b/module/execution/control.php
@@ -2041,7 +2041,12 @@ class execution extends control
if($message) $this->lang->saveSuccess = $message;
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
- return $this->send(array('result' => 'success', 'load' => $execution->type == 'kanban' ? $this->createLink('execution', 'all') : true));
+ $locate = true;
+ if($execution->type == 'kanban')
+ {
+ $locate = $this->config->vision == 'lite' ? $this->createLink('project', 'execution', "status=all&projectID=$execution->project") : $this->createLink('execution', 'all');
+ }
+ return $this->send(array('result' => 'success', 'load' => $locate));
}
}
diff --git a/module/project/js/common.ui.js b/module/project/js/common.ui.js
index 2c65c82951..f55237ff4d 100644
--- a/module/project/js/common.ui.js
+++ b/module/project/js/common.ui.js
@@ -333,3 +333,20 @@ window.getDateMenu = function()
}
return endMenu;
}
+
+/**
+ * 提示并删除执行。
+ * Delete execution with tips.
+ *
+ * @param int executionID
+ * @param string executionName
+ * @access public
+ * @return void
+ */
+window.confirmDeleteExecution = function(executionID, confirmDeleteTip)
+{
+ zui.Modal.confirm({message: confirmDeleteTip, icon:'icon-exclamation-sign', iconClass: 'warning-pale rounded-full icon-2x'}).then((res) =>
+ {
+ if(res) $.ajaxSubmit({url: $.createLink('execution', 'delete', 'executionID=' + executionID + '&comfirm=yes')});
+ });
+}
diff --git a/module/project/js/execution.ui.js b/module/project/js/execution.ui.js
index 19539861c4..5bde0351d6 100644
--- a/module/project/js/execution.ui.js
+++ b/module/project/js/execution.ui.js
@@ -26,23 +26,6 @@ $(document).off('click','.batch-btn').on('click', '.batch-btn', function()
}
});
-/**
- * 提示并删除执行。
- * Delete execution with tips.
- *
- * @param int executionID
- * @param string executionName
- * @access public
- * @return void
- */
-window.confirmDeleteExecution = function(executionID, confirmDeleteTip)
-{
- zui.Modal.confirm({message: confirmDeleteTip, icon:'icon-exclamation-sign', iconClass: 'warning-pale rounded-full icon-2x'}).then((res) =>
- {
- if(res) $.ajaxSubmit({url: $.createLink('execution', 'delete', 'executionID=' + executionID + '&comfirm=yes')});
- });
-}
-
const today = zui.formatDate(new Date(), 'yyyy-MM-dd');
window.onRenderCell = function(result, {col, row})
{
diff --git a/module/project/ui/index.html.php b/module/project/ui/index.html.php
index 192e7c7341..266d561b7a 100644
--- a/module/project/ui/index.html.php
+++ b/module/project/ui/index.html.php
@@ -84,8 +84,9 @@ if(!empty($kanbanList))
}
elseif($action == 'delete')
{
- $actionItem['text'] = $lang->delete;
- $actionItem['hint'] = $lang->delete;
+ $actionItem['text'] = $lang->delete;
+ $actionItem['hint'] = $lang->delete;
+ $actionItem['innerClass'] = $actionItem['className'];
}
$actionItems[] = $actionItem;
From cf342d28fc06e7f53a01114d2ebad74a777fd586 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 14:10:17 +0800
Subject: [PATCH 185/276] * Fix bug #46578, use `config->user->list->custom` to
set custom columns in the batch ui.
---
module/user/config.php | 4 ++++
module/user/zen.php | 26 +++++++++++++-------------
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/module/user/config.php b/module/user/config.php
index 6e505d70e1..40b3e8a95c 100644
--- a/module/user/config.php
+++ b/module/user/config.php
@@ -9,6 +9,10 @@ $config->user->edit->requiredFields = 'account,realname,visions';
$config->user->availableBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,dingding,weixin,mobile,slack,whatsapp,phone,address,zipcode';
$config->user->availableBatchEditFields = 'dept,email,commiter,skype,qq,dingding,weixin,mobile,slack,whatsapp,phone,address,zipcode';
+$config->user->list = new stdclass();
+$config->user->list->customBatchCreateFields = 'dept,email,gender,commiter,join,skype,qq,dingding,weixin,mobile,slack,whatsapp,phone,address,zipcode';
+$config->user->list->customBatchEditFields = 'dept,email,commiter,skype,qq,dingding,weixin,mobile,slack,whatsapp,phone,address,zipcode';
+
$config->user->custom = new stdclass();
$config->user->custom->batchCreateFields = 'dept,join,email,gender';
$config->user->custom->batchEditFields = 'dept,join,email,commiter';
diff --git a/module/user/zen.php b/module/user/zen.php
index 5af5619b45..81bf5d92fb 100644
--- a/module/user/zen.php
+++ b/module/user/zen.php
@@ -258,29 +258,29 @@ class userZen extends user
*/
public function prepareCustomFields(string $method, string $requiredMethod): void
{
- $availableField = 'available' . ucfirst($method) . 'Fields';
+ $customFields = 'custom' . ucfirst($method) . 'Fields';
$showField = $method . 'Fields';
/* 获取所有的联系方式字段。*/
/* Get all contact fields. */
$allContactFields = array_keys($this->lang->user->contactFieldList);
- /* 获取可用的联系方式字段,转为数组并去空、去重。*/
- /* Get available contact fields, convert to array and remove empty and duplicate. */
- $availableContactFields = array_unique(array_filter(explode(',', trim($this->config->user->contactField, ','))));
+ /* 获取自定义的联系方式字段,转为数组并去空、去重。*/
+ /* Get custom contact fields, convert to array and remove empty and duplicate. */
+ $customContactFields = array_unique(array_filter(explode(',', trim($this->config->user->contactField, ','))));
/* 获取不可用的联系方式字段。*/
/* Get unavailable contact fields. */
- $unAvailableContactFields = array_diff($allContactFields, $availableContactFields);
- /* 从配置文件获取所有可用字段,转为数组并去空、去重。*/
- /* Get all available fields from config file, convert to array and remove empty and duplicate. */
- $availableFields = array_unique(array_filter(explode(',', trim($this->config->user->$availableField, ','))));
- /* 从可用字段中去除不可用的联系方式字段。*/
- /* Remove unavailable contact fields from available fields. */
- $availableFields = array_diff($availableFields, $unAvailableContactFields);
+ $unAvailableContactFields = array_diff($allContactFields, $customContactFields);
+ /* 从配置文件获取所有自定义字段,转为数组并去空、去重。*/
+ /* Get all custom fields from config file, convert to array and remove empty and duplicate. */
+ $customFields = array_unique(array_filter(explode(',', trim($this->config->user->list->$customFields, ','))));
+ /* 从自定义字段中去除不可用的联系方式字段。*/
+ /* Remove unavailable contact fields from custom fields. */
+ $customFields = array_diff($customFields, $unAvailableContactFields);
/* 获取可以显示的字段。*/
/* Get fields that can be displayed. */
$listFields = array();
- foreach($availableFields as $field) $listFields[$field] = $this->lang->user->$field;
+ foreach($customFields as $field) $listFields[$field] = $this->lang->user->$field;
/* 从配置文件获取必填项字段,转为数组并去空、去重。*/
/* Get required fields from config file, convert to array and remove empty and duplicate. */
@@ -299,7 +299,7 @@ class userZen extends user
$showFields = array_merge($showFields, $requiredFields);
/* 把应该显示的字段和可用字段取交集。*/
/* Get the intersection of fields that should be displayed and available fields. */
- $showFields = array_intersect($showFields, $availableFields);
+ $showFields = array_intersect($showFields, $customFields);
$this->view->listFields = $listFields;
$this->view->showFields = $showFields;
From dd7b240965c8a6639f832d7710a078fccbd0784b Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 14:17:39 +0800
Subject: [PATCH 186/276] * Fix bug #46524, adjust xml xmind import.
---
module/testcase/control.php | 9 ++++-----
module/testcase/zen.php | 6 +++---
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/module/testcase/control.php b/module/testcase/control.php
index 850daa5ce9..a423931c62 100644
--- a/module/testcase/control.php
+++ b/module/testcase/control.php
@@ -1646,7 +1646,7 @@ class testcase extends control
$configList = $this->testcaseZen->buildXmindConfig();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $configResult = $this->testcase->saveXmindConfig($configList);
+ $this->testcase->saveXmindConfig($configList);
$imoduleID = $this->post->imodule ? $this->post->imodule : 0;
$context = $this->testcaseZen->getXmindExport($productID, (int)$imoduleID, $branch);
@@ -1673,7 +1673,7 @@ class testcase extends control
$this->view->settings = $this->testcase->getXmindConfig();
$this->view->productName = $product->name;
$this->view->moduleID = $moduleID;
- $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, ($branch === 'all' || !isset($branches[$branch])) ? '0' : $branch);
+ $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, 'case', 0, ($branch === 'all' || !isset($branches[$branch])) ? '0' : $branch);
$this->display();
}
@@ -1735,7 +1735,7 @@ class testcase extends control
/* Sav xmind config. */
$configList = $this->testcaseZen->buildXmindConfig();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $configResult = $this->testcase->saveXmindConfig($configList);
+ $this->testcase->saveXmindConfig($configList);
/* 检查扩展名。*/
/* Check extension name of file. */
@@ -1795,7 +1795,6 @@ class testcase extends control
$product = $this->product->getByID($productID);
$branches = (isset($product->type) && $product->type != 'normal') ? $this->loadModel('branch')->getPairs($productID, 'active') : array();
- $folder = $this->session->xmindImport;
if($this->session->xmindImportType == 'xml')
{
$xmlPath = $this->session->xmindImport . '/content.xml';
@@ -1817,7 +1816,7 @@ class testcase extends control
$this->view->productID = $productID;
$this->view->branch = $branch;
$this->view->scenes = $scenes;
- $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, ($branch === 'all' or !isset($branches[$branch])) ? '0' : $branch);
+ $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, 'case', 0, ($branch === 'all' or !isset($branches[$branch])) ? '0' : $branch);
$this->display();
}
diff --git a/module/testcase/zen.php b/module/testcase/zen.php
index c2b58da26d..14ffe352cb 100755
--- a/module/testcase/zen.php
+++ b/module/testcase/zen.php
@@ -3117,6 +3117,7 @@ class testcaseZen extends testcase
$this->classFile->removeFile($tmpFile);
+ $this->classXmind = $this->app->loadClass('xmind');
if(file_exists($filePath . '/content.json'))
{
$fetchResult = $this->fetchByJSON($filePath, $productID, $branch);
@@ -3146,7 +3147,7 @@ class testcaseZen extends testcase
{
$file = $filePath . '/content.xml';
$xmlNode = simplexml_load_file($file);
- $title = $xmlNode->sheet->topic->title;
+ $title = (string)$xmlNode->sheet->topic->title;
if(!is_string($title) || strlen($title) == 0) return array('result' => 'fail', 'message' => $this->lang->testcase->errorXmindUpload);
$pID = $productID;
@@ -3155,7 +3156,7 @@ class testcaseZen extends testcase
$tmpID = $this->classXmind->getBetween($title, '[', ']');
if(!empty($tmpID))
{
- $product = $this->loadModel('product')->getByID($tmpID);
+ $product = $this->loadModel('product')->getByID((int)$tmpID);
if(!$product || $product->deleted) return array('result' => 'fail', 'message' => $this->lang->testcase->errorImportBadProduct);
$pID = $tmpID;
@@ -3184,7 +3185,6 @@ class testcaseZen extends testcase
if(strlen($title) == 0) return array('result' => 'fail', 'message' => $this->lang->testcase->errorXmindUpload);
$pID = $productID;
- $this->classXmind = $this->app->loadClass('xmind');
if($this->classXmind->endsWith($title, ']'))
{
$tmpID = $this->classXmind->getBetween($title, '[', ']');
From f4ba43a45c010fb19597c2a081ba385f23d2fcb1 Mon Sep 17 00:00:00 2001
From: wangyuting
Date: Tue, 5 Mar 2024 14:20:37 +0800
Subject: [PATCH 187/276] * Fix pager bug. bug #46455.
---
module/aiapp/ui/square.html.php | 2 +-
module/kanban/ui/space.html.php | 2 +-
module/project/ui/browsebycard.html.php | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/module/aiapp/ui/square.html.php b/module/aiapp/ui/square.html.php
index 370320e90d..f9016525ed 100644
--- a/module/aiapp/ui/square.html.php
+++ b/module/aiapp/ui/square.html.php
@@ -133,7 +133,7 @@ div(
div(
setClass('pager-container'),
- pager()
+ pager(set(usePager()))
);
render();
diff --git a/module/kanban/ui/space.html.php b/module/kanban/ui/space.html.php
index 31e73044d1..bb1ec65313 100644
--- a/module/kanban/ui/space.html.php
+++ b/module/kanban/ui/space.html.php
@@ -136,6 +136,6 @@ foreach($spaceList as $space)
}
!empty($spaceList) ? $blocks : div(set::className('dtable'), div(set::className('dtable-empty-tip'), span(set::className('text-gray'), $lang->kanbanspace->empty)));
-if(!empty($spaceList)) div(set::className('table-footer'), pager(set::className('pull-right')));
+if(!empty($spaceList)) div(set::className('table-footer'), pager(set(usePager()), set::className('pull-right')));
render();
diff --git a/module/project/ui/browsebycard.html.php b/module/project/ui/browsebycard.html.php
index a02adc5b75..27290aeeb2 100644
--- a/module/project/ui/browsebycard.html.php
+++ b/module/project/ui/browsebycard.html.php
@@ -336,7 +336,7 @@ div
!empty($projectStats) ? div
(
setID('cardsFooter'),
- pager()
+ pager(set(usePager()))
) : null
);
From 52f85638001eb6eb9359c3c41301ab438c73b634 Mon Sep 17 00:00:00 2001
From: liyang
Date: Tue, 5 Mar 2024 14:40:56 +0800
Subject: [PATCH 188/276] * Fix bug #46585.
---
module/datatable/control.php | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/module/datatable/control.php b/module/datatable/control.php
index 4c3c5cd6ca..71b855b01f 100644
--- a/module/datatable/control.php
+++ b/module/datatable/control.php
@@ -124,7 +124,17 @@ class datatable extends control
$cols = $this->datatable->getSetting($module, $method, true, $extra);
if(!$method) $method = $this->app->getMethodName();
- if($module == 'testcase') unset($cols['assignedTo']);
+ if($module == 'testcase')
+ {
+ unset($cols['assignedTo']);
+ unset($cols['product']);
+ unset($cols['module']);
+ }
+ if($module == 'bug')
+ {
+ unset($cols['product']);
+ unset($cols['module']);
+ }
if(zget($this->config->datatable->moduleAlias, "$module-$method", $module) == 'story')
{
unset($cols['product'], $cols['module']);
From 2f1a39977b72263d35659987fd45d0fbd190bb93 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 14:46:22 +0800
Subject: [PATCH 189/276] + Set branch picker required in tree::browse.
---
module/tree/ui/browse.html.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/module/tree/ui/browse.html.php b/module/tree/ui/browse.html.php
index effc690e5c..e2a124cfba 100644
--- a/module/tree/ui/browse.html.php
+++ b/module/tree/ui/browse.html.php
@@ -55,6 +55,7 @@ foreach($sons as $son)
set::items($branches),
set::value($son->branch),
set::disabled(true),
+ set::required(true)
),
input
(
@@ -109,6 +110,7 @@ for($i = 0; $i < \tree::NEW_CHILD_COUNT; $i ++)
set::name("branch[$i]"),
set::items($branches),
set::value($initBranch),
+ set::required(true)
),
input
(
From 907f77d06d833b7e37e7ab977f1c22d27d34eba3 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 14:48:22 +0800
Subject: [PATCH 190/276] * Fix bug #46567, adjust module changed refresh.
---
module/testcase/js/createscene.ui.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/module/testcase/js/createscene.ui.js b/module/testcase/js/createscene.ui.js
index b1dde23802..3fb1415d72 100644
--- a/module/testcase/js/createscene.ui.js
+++ b/module/testcase/js/createscene.ui.js
@@ -23,3 +23,8 @@ function refreshModules()
const productID = $('[name=product]').val();
loadProductModules(productID);
}
+
+window.renderModulePicker = function()
+{
+ refreshModules();
+}
From 6b935eb416a1f264541284f82f622bae65efc7f3 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 14:48:34 +0800
Subject: [PATCH 191/276] + Fix bug #46588.
---
module/testtask/ui/groupcase.html.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/testtask/ui/groupcase.html.php b/module/testtask/ui/groupcase.html.php
index add69bff99..0efd3654f9 100644
--- a/module/testtask/ui/groupcase.html.php
+++ b/module/testtask/ui/groupcase.html.php
@@ -48,6 +48,7 @@ toolbar
(
set::className('ghost'),
set::icon('export'),
+ setData('toggle', 'modal'),
set::url($this->createLink('testcase', 'export', "productID=$productID&orderBy=case_desc&taskID=$task->id")),
$lang->export
) : null,
From 06a50ac6312f275bce91794859c24514cb808f9d Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 15:00:08 +0800
Subject: [PATCH 192/276] * Fix bug #46510, adjust language for dtable custom
setting.
---
module/datatable/lang/zh-cn.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/datatable/lang/zh-cn.php b/module/datatable/lang/zh-cn.php
index edcd6a8aec..b48bdaf677 100644
--- a/module/datatable/lang/zh-cn.php
+++ b/module/datatable/lang/zh-cn.php
@@ -14,8 +14,8 @@ $lang->datatable->required = '必选';
$lang->datatable->confirmReset = '恢复默认后,列表的相关设置将被清空,您确定要恢复默认吗?';
$lang->datatable->setGlobal = '应用到全局';
$lang->datatable->resetGlobal = '全局恢复默认';
-$lang->datatable->confirmSetGlobal = '应用到全局后,系统内所有人的列表将默认按该规则进行显示,您确定要应用到全局吗?';
-$lang->datatable->confirmGlobalReset = '全局恢复默认后,系统内所有人的列表设置将被清空,您确定要恢复默认吗?';
+$lang->datatable->confirmSetGlobal = '应用到全局后,系统内非自定义的列表设置将默认按照改列表规则显示,您确定要应用到全局吗?';
+$lang->datatable->confirmGlobalReset = '全局恢复默认后,系统内非自定义的列表设置将被清空,您确定要恢复默认吗?';
$lang->datatable->branch = '分支';
$lang->datatable->platform = '平台';
From 8a7d25c9b448bba7881a1c825a5f258390259fe3 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 15:06:55 +0800
Subject: [PATCH 193/276] * Fix bug #46452.
---
module/testtask/js/linkcase.ui.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/module/testtask/js/linkcase.ui.js b/module/testtask/js/linkcase.ui.js
index c2bc2d566d..356df9e5c8 100644
--- a/module/testtask/js/linkcase.ui.js
+++ b/module/testtask/js/linkcase.ui.js
@@ -56,5 +56,6 @@ window.renderCell = function(result, info)
html += "";
result[0] = {html};
}
+ if(info.col.name == 'lastRunDate' && result[0] && result[0].substring(0, 4) == '0000') result.shift();
return result;
}
From 235bf67c306a72f3c629c99eb08a8987affc38ff Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 15:11:28 +0800
Subject: [PATCH 194/276] * revive prompt menus.
---
module/ai/ui/promptmenu.html.php | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/module/ai/ui/promptmenu.html.php b/module/ai/ui/promptmenu.html.php
index a99ea126a6..29b84d6f5f 100644
--- a/module/ai/ui/promptmenu.html.php
+++ b/module/ai/ui/promptmenu.html.php
@@ -48,6 +48,7 @@ $promptMenuInject = function()
/* Assemble injector script. */
$script = <<< JAVASCRIPT
+ (() => {
if(window.location.search.includes('onlybody')) return;
const container = window.frameElement?.closest('.load-indicator');
if(container && container.dataset.loading)
@@ -87,10 +88,11 @@ $promptMenuInject = function()
}
}, 200);
});
+ })();
JAVASCRIPT;
/* Perform injection. */
if(isset($menuOptions->stylesheet)) css($menuOptions->stylesheet);
- js($script);
+ h::globalJS($script);
};
$promptMenuInject();
From 6cfea37040ab68a551337ae895e2c5731cf1c94a Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 15:15:59 +0800
Subject: [PATCH 195/276] * Fix bug #46592.
---
module/block/ui/bugblock.html.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/block/ui/bugblock.html.php b/module/block/ui/bugblock.html.php
index aaedc243ea..e6d2d5eabc 100644
--- a/module/block/ui/bugblock.html.php
+++ b/module/block/ui/bugblock.html.php
@@ -26,7 +26,7 @@ blockPanel
set::height(318),
set::bordered(false),
set::horzScrollbarPos('inside'),
- set::fixedLeftWidth('50%'),
+ set::fixedLeftWidth('45%'),
set::cols(array_values($config->block->bug->dtable->fieldList)),
set::data(array_values($bugs))
)
From 1911578b7eb18b6ed6704278f9cdc1956f4eb9ec Mon Sep 17 00:00:00 2001
From: liwenrui
Date: Tue, 5 Mar 2024 15:21:15 +0800
Subject: [PATCH 196/276] * fix ai stuff relied on js().
---
module/ai/ui/inputinject.html.php | 4 +++-
module/ai/ui/promptexecute.html.php | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/module/ai/ui/inputinject.html.php b/module/ai/ui/inputinject.html.php
index 3899d7aad6..d8204e2a9b 100644
--- a/module/ai/ui/inputinject.html.php
+++ b/module/ai/ui/inputinject.html.php
@@ -30,7 +30,8 @@ $inputInject = function()
$this->app->loadLang('ai');
- js(<<< JAVASCRIPT
+ h::globalJS(<<< JAVASCRIPT
+ (() => {
window.injectToInputElement = (inputName, data, index, tries = 0) =>
{
let name = inputName;
@@ -178,6 +179,7 @@ $inputInject = function()
}
}
});
+ })();
JAVASCRIPT);
/* TODO: handle prompt audit, see original ../view/inputinject.html.php. */
diff --git a/module/ai/ui/promptexecute.html.php b/module/ai/ui/promptexecute.html.php
index 829ca2929a..4ad3b3ab43 100644
--- a/module/ai/ui/promptexecute.html.php
+++ b/module/ai/ui/promptexecute.html.php
@@ -3,4 +3,4 @@ declare(strict_types=1);
namespace zin;
-js("requestAnimationFrame(() => setTimeout(() => openUrl(`{$formLocation}`), 1000));");
+h::globalJS("requestAnimationFrame(() => setTimeout(() => openUrl(`{$formLocation}`), 1000));");
From d4e129dc4fab06568c0cf0e9ff42f171a0cce694 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 15:21:58 +0800
Subject: [PATCH 197/276] * Fix bug #46592.
---
module/block/config/bugblock.php | 6 +++---
module/block/ui/bugblock.html.php | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/module/block/config/bugblock.php b/module/block/config/bugblock.php
index a032ae2438..ae8bdbac7e 100644
--- a/module/block/config/bugblock.php
+++ b/module/block/config/bugblock.php
@@ -23,20 +23,20 @@ $config->block->bug->dtable->fieldList['title']['fixed'] = 'left';
$config->block->bug->dtable->fieldList['severity']['name'] = 'severity';
$config->block->bug->dtable->fieldList['severity']['title'] = $lang->bug->abbr->severity;
$config->block->bug->dtable->fieldList['severity']['type'] = 'severity';
-$config->block->bug->dtable->fieldList['severity']['width'] = 60;
+$config->block->bug->dtable->fieldList['severity']['width'] = 55;
$config->block->bug->dtable->fieldList['severity']['sort'] = true;
$config->block->bug->dtable->fieldList['pri']['name'] = 'pri';
$config->block->bug->dtable->fieldList['pri']['title'] = $lang->priAB;
$config->block->bug->dtable->fieldList['pri']['type'] = 'pri';
-$config->block->bug->dtable->fieldList['pri']['width'] = 60;
+$config->block->bug->dtable->fieldList['pri']['width'] = 55;
$config->block->bug->dtable->fieldList['pri']['sort'] = true;
$config->block->bug->dtable->fieldList['status']['name'] = 'status';
$config->block->bug->dtable->fieldList['status']['title'] = $lang->bug->abbr->status;
$config->block->bug->dtable->fieldList['status']['type'] = 'status';
$config->block->bug->dtable->fieldList['status']['statusMap'] = $lang->bug->statusList;
-$config->block->bug->dtable->fieldList['status']['sort'] = true;
+$config->block->bug->dtable->fieldList['status']['sort'] = true;
$config->block->bug->dtable->fieldList['confirmed']['name'] = 'confirmed';
$config->block->bug->dtable->fieldList['confirmed']['title'] = $lang->bug->abbr->confirmed;
diff --git a/module/block/ui/bugblock.html.php b/module/block/ui/bugblock.html.php
index e6d2d5eabc..aaedc243ea 100644
--- a/module/block/ui/bugblock.html.php
+++ b/module/block/ui/bugblock.html.php
@@ -26,7 +26,7 @@ blockPanel
set::height(318),
set::bordered(false),
set::horzScrollbarPos('inside'),
- set::fixedLeftWidth('45%'),
+ set::fixedLeftWidth('50%'),
set::cols(array_values($config->block->bug->dtable->fieldList)),
set::data(array_values($bugs))
)
From ab2d38c7dada59e7f99a3dcb18e835279b485ca6 Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 15:32:51 +0800
Subject: [PATCH 198/276] * Modify style of bug title in browse.
---
module/bug/js/browse.ui.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/bug/js/browse.ui.js b/module/bug/js/browse.ui.js
index 4ef62bdd95..35a2309986 100644
--- a/module/bug/js/browse.ui.js
+++ b/module/bug/js/browse.ui.js
@@ -31,7 +31,7 @@ window.onRenderCell = function(result, {row, col})
{
if(result && col.name == 'title')
{
- result[0].props.className = 'w-0 flex-1 overflow-hidden';
+ result[0].props.className = 'overflow-hidden';
if(row.data.color) result[0].props.style = 'color: ' + row.data.color;
const module = this.options.modules[row.data.module];
if(module) result.unshift({html: '' + module + ' '}); // 添加模块标签
From 9798daafa7f2f20717f17ad8d560caff2f352107 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E6=80=A1=E6=A0=8B?=
Date: Tue, 5 Mar 2024 15:35:24 +0800
Subject: [PATCH 199/276] * Fix bug #46390.
---
module/stage/model.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/stage/model.php b/module/stage/model.php
index 48784ea1c8..420cd8e500 100644
--- a/module/stage/model.php
+++ b/module/stage/model.php
@@ -41,11 +41,11 @@ class stageModel extends model
}
}
+ if(!empty($stage->percent)) $stage->percent = (float)$stage->percent;
$this->dao->insert(TABLE_STAGE)
->data($stage)
->autoCheck()
->batchCheck($this->config->stage->create->requiredFields, 'notempty')
- ->checkIF($stage->percent != '', 'percent', 'float')
->exec();
if(dao::isError()) return false;
@@ -85,9 +85,9 @@ class stageModel extends model
foreach($stages as $rowID => $stage)
{
$stage->projectType = $type;
+ if(!empty($stage->percent)) $stage->percent = (float)$stage->percent;
$this->dao->insert(TABLE_STAGE)->data($stage)->autoCheck()
->batchCheck($this->config->stage->create->requiredFields, 'notempty')
- ->checkIF($stage->percent != '', 'percent', 'float')
->exec();
if(dao::isError())
From 2d15c51ad02cb37e076620f93f97fd9ff3055ba3 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 15:44:52 +0800
Subject: [PATCH 200/276] * Fix bug #46580.
---
module/project/js/batchedit.ui.js | 7 -------
module/project/ui/batchedit.html.php | 15 +++++++--------
2 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/module/project/js/batchedit.ui.js b/module/project/js/batchedit.ui.js
index 1a11b29834..9587f061a0 100644
--- a/module/project/js/batchedit.ui.js
+++ b/module/project/js/batchedit.ui.js
@@ -79,13 +79,6 @@ batchIgnoreTip = function(index)
window.renderRowData = function($row, index, row)
{
- /* 如果某个项目是长期项目,更新计划完成日期和可用工作日的样式。*/
- /* If a project is a long-term project, update the style of the planned completion date and available working days. */
- if(row.end == LONG_TIME)
- {
- $row.find('[data-name="end"] [id^=end]').attr('data-longTime', 1).addClass('hidden').next().removeClass('hidden');
- $row.find('[name^=days]').val(0).attr('readonly', true);
- }
const aclList = !disabledprograms && row.parent ? programAclList : projectAclList;
$row.find('[data-name="acl"]').find('.picker-box').on('inited', function(e, info)
diff --git a/module/project/ui/batchedit.html.php b/module/project/ui/batchedit.html.php
index 2ad50428c4..84c5263859 100644
--- a/module/project/ui/batchedit.html.php
+++ b/module/project/ui/batchedit.html.php
@@ -87,18 +87,17 @@ formBatchPanel
(
set::name('end'),
set::label($lang->project->end),
- set::control('date'),
set::width('120px'),
- inputControl
+ set::control(array
(
- setClass('has-suffix-icon hidden'),
- to::suffix(icon('calendar')),
- input
+ 'control' => 'date',
+ 'format' => jsRaw("(value) => (value === '" . LONG_TIME . "' ? '" . $lang->project->longTime . "' : zui.formatDate(value, 'yyyy-MM-dd'))"),
+ 'actions' => array
(
- set::value($lang->project->longTime),
- set::disabled(true)
+ array('text' => $lang->datepicker->dpText->TEXT_TODAY, 'data-set-date' => helper::today()),
+ array('text' => $lang->project->longTime, 'data-set-date' => LONG_TIME)
)
- )
+ )),
),
formBatchItem
(
From cfe7491d839d9a0124414c17005b3fd140487585 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 15:48:28 +0800
Subject: [PATCH 201/276] * Fix bug #46597.
---
module/user/js/task.ui.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/user/js/task.ui.js b/module/user/js/task.ui.js
index c766f2930f..9011e10796 100644
--- a/module/user/js/task.ui.js
+++ b/module/user/js/task.ui.js
@@ -5,7 +5,7 @@ window.renderCell = function(result, info)
{
let html = '';
if(task.team) html += "" + multipleAB + " ";
- if(task.parent) html += "" + childrenAB + " ";
+ if(task.parent > 0) html += "" + childrenAB + " ";
if(html) result.unshift({html});
}
if(info.col.name == 'deadline' && result[0])
From 78a334cc161dc63e2821a3bc2e3ef4cb4f011e4b Mon Sep 17 00:00:00 2001
From: sunhao
Date: Tue, 5 Mar 2024 15:59:49 +0800
Subject: [PATCH 202/276] * zin: fix error in findInNode.
---
lib/zin/core/node.class.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/zin/core/node.class.php b/lib/zin/core/node.class.php
index 32b156c8c1..728cd184b0 100644
--- a/lib/zin/core/node.class.php
+++ b/lib/zin/core/node.class.php
@@ -763,10 +763,10 @@ function findInNode(array $selectors, node|array $list, bool $first = false, boo
if($list instanceof node)
{
$data = $list->buildData;
- if(!$data || !isset($data->content) || empty($data->content)) return array();
+ if(!$data) return array();
- $list = $data->content;
- if(!$onlyContent) $list = array_merge($data->before, $list, $data->after);
+ $list = $data->content ? $data->content : array();
+ if(!$onlyContent) $list = array_merge($data->before ? $data->before : array(), $list, $data->after ? $data->after : array());
}
if($reverse) $list = array_reverse($list);
$result = array();
From 5501c13dba8642df29d0e2d8fa193fb6fbff1ac5 Mon Sep 17 00:00:00 2001
From: tianshujie
Date: Tue, 5 Mar 2024 16:11:08 +0800
Subject: [PATCH 203/276] * Fix bug #46595.
---
module/block/ui/doccollectlistblock.html.php | 1 -
module/block/zen.php | 8 +++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/module/block/ui/doccollectlistblock.html.php b/module/block/ui/doccollectlistblock.html.php
index 53c4c4dbc7..1fb2ef724d 100644
--- a/module/block/ui/doccollectlistblock.html.php
+++ b/module/block/ui/doccollectlistblock.html.php
@@ -18,7 +18,6 @@ namespace zin;
- collects) continue;?>
app->loadClass('pager', true);
$pager = new pager(0, 6, 1);
- $this->view->docList = $this->loadModel('doc')->getDocsByBrowseType('all', 0, 0, 'collects_desc', $pager);
+ $docList = $this->loadModel('doc')->getDocsByBrowseType('all', 0, 0, 'collects_desc', $pager);
+ foreach($docList as $docID => $doc)
+ {
+ if(empty($doc->collects)) unset($docList[$docID]);
+ }
+
+ $this->view->docList = $docList;
}
/**
From e7958ba9704243dee8125ee8eb57f98ae00ecebe Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 16:24:49 +0800
Subject: [PATCH 204/276] * Adjust execution export name.
---
module/execution/control.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/module/execution/control.php b/module/execution/control.php
index e90594db66..25ea00ef89 100644
--- a/module/execution/control.php
+++ b/module/execution/control.php
@@ -2913,7 +2913,7 @@ class execution extends control
$project = $this->project->getByID($this->session->project);
if(!empty($project->model) and $project->model == 'waterfall') $this->lang->executionCommon = $this->lang->project->stage;
- $this->view->fileName = (in_array($status, array('all', 'undone')) ? $this->lang->execution->$status : $this->lang->execution->statusList[$status]) . $this->lang->execution->common;
+ $this->view->fileName = (in_array($status, array('all', 'undone')) ? $this->lang->execution->$status : $this->lang->execution->statusList[$status]) . $this->lang->executionCommon;
$this->display();
}
From 28f1983647c13826dd61e862b47082e4ff532ae2 Mon Sep 17 00:00:00 2001
From: caoyanyi
Date: Tue, 5 Mar 2024 16:25:26 +0800
Subject: [PATCH 205/276] * Adjust load table selectors.
---
www/js/zui3/zin.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/www/js/zui3/zin.js b/www/js/zui3/zin.js
index 457914ac3b..c567b31d2e 100644
--- a/www/js/zui3/zin.js
+++ b/www/js/zui3/zin.js
@@ -737,7 +737,7 @@
if(options.selector && options.selector !== 'dtable') selector = options.selector;
if(!$(target).closest('.modal').length && !options.selector)
{
- selector += ',#featureBar>*,pageJS/.zin-page-js,hookCode()';
+ selector += ',#mainMenu>*,pageJS/.zin-page-js,hookCode()';
if($('#moduleMenu').length) selector += ',#moduleMenu,.module-menu-header';
if($('#docDropmenu').length) selector += ',#docDropmenu,.module-menu';
}
From a790386012e9cfb22b8be26c586aa35a29fb106c Mon Sep 17 00:00:00 2001
From: liumengyi
Date: Tue, 5 Mar 2024 16:34:21 +0800
Subject: [PATCH 206/276] * Fix bug #46600, set objectType empty to get all
builds, and if the branch is empty string, it isn't in the branch and fix
undefined error.
---
module/bug/zen.php | 2 +-
module/build/model.php | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/module/bug/zen.php b/module/bug/zen.php
index b8558f56d2..f980f5e15f 100644
--- a/module/bug/zen.php
+++ b/module/bug/zen.php
@@ -1103,7 +1103,7 @@ class bugZen extends bug
if(!empty($bug->allBuilds))
{
- $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noterminate,nodone,withbranch,noreleased');
+ $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noterminate,nodone,withbranch,noreleased', 0, '');
return $this->updateBug($bug, array('builds' => $builds));
}
diff --git a/module/build/model.php b/module/build/model.php
index 0414a1ca0a..226d936f95 100644
--- a/module/build/model.php
+++ b/module/build/model.php
@@ -316,10 +316,10 @@ class buildModel extends model
foreach($allBuilds as $id => $build)
{
if($build->branch === '') $build->branch = 0;
- $isDone = empty($build->releaseID) && strpos($params, 'nodone') !== false && $build->objectStatus === 'done';
+ $isDone = empty($build->releaseID) && strpos($params, 'nodone') !== false && !empty($build->objectStatus) && $build->objectStatus === 'done';
$isTerminate = strpos($params, 'noterminate') !== false && $build->releaseStatus === 'terminate';
$isDeleted = strpos($params, 'withexecution') !== false && $build->execution && isset($deletedExecutions[$build->execution]);
- $isNotInBranch = $branch !== 'all' && strpos(",{$build->branch},", ",{$branch},") === false;
+ $isNotInBranch = $branch !== '' && $branch !== 'all' && strpos(",{$build->branch},", ",{$branch},") === false;
if(in_array(true, array($isDone, $isTerminate, $isDeleted, $isNotInBranch)))
{
$excludedReleaseIdList[] = $build->releaseID;
From f75d77147753f262f77626fe294e991717839cdc Mon Sep 17 00:00:00 2001
From: sunhao
Date: Tue, 5 Mar 2024 16:37:44 +0800
Subject: [PATCH 207/276] * index: bug #46367, improve the speed of opening
external app.
---
module/index/js/index.ui.js | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/module/index/js/index.ui.js b/module/index/js/index.ui.js
index 1accb54ff2..b593e328e9 100644
--- a/module/index/js/index.ui.js
+++ b/module/index/js/index.ui.js
@@ -109,6 +109,7 @@ function openApp(url, code, options)
forceReload = false;
apps.openedMap[code] = openedApp;
+ const iframeUrl = app.external ? url : $.createLink('index', 'app');
const $iframe =
$([
'